112891Sbrandon.potter@amd.com/* 212891Sbrandon.potter@amd.com * Copyright (c) 2017 Advanced Micro Devices, Inc. 312891Sbrandon.potter@amd.com * All rights reserved. 412891Sbrandon.potter@amd.com * 512891Sbrandon.potter@amd.com * For use for simulation and test purposes only 612891Sbrandon.potter@amd.com * 712891Sbrandon.potter@amd.com * Redistribution and use in source and binary forms, with or without 812891Sbrandon.potter@amd.com * modification, are permitted provided that the following conditions are met: 912891Sbrandon.potter@amd.com * 1012891Sbrandon.potter@amd.com * 1. Redistributions of source code must retain the above copyright notice, 1112891Sbrandon.potter@amd.com * this list of conditions and the following disclaimer. 1212891Sbrandon.potter@amd.com * 1312891Sbrandon.potter@amd.com * 2. Redistributions in binary form must reproduce the above copyright notice, 1412891Sbrandon.potter@amd.com * this list of conditions and the following disclaimer in the documentation 1512891Sbrandon.potter@amd.com * and/or other materials provided with the distribution. 1612891Sbrandon.potter@amd.com * 1712891Sbrandon.potter@amd.com * 3. Neither the name of the copyright holder nor the names of its 1812891Sbrandon.potter@amd.com * contributors may be used to endorse or promote products derived from this 1912891Sbrandon.potter@amd.com * software without specific prior written permission. 2012891Sbrandon.potter@amd.com * 2112891Sbrandon.potter@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2212891Sbrandon.potter@amd.com * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2312891Sbrandon.potter@amd.com * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2412891Sbrandon.potter@amd.com * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2512891Sbrandon.potter@amd.com * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2612891Sbrandon.potter@amd.com * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2712891Sbrandon.potter@amd.com * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2812891Sbrandon.potter@amd.com * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2912891Sbrandon.potter@amd.com * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3012891Sbrandon.potter@amd.com * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3112891Sbrandon.potter@amd.com * POSSIBILITY OF SUCH DAMAGE. 3212891Sbrandon.potter@amd.com * 3312891Sbrandon.potter@amd.com * Author: Brandon Potter 3412891Sbrandon.potter@amd.com */ 3512891Sbrandon.potter@amd.com 3612891Sbrandon.potter@amd.com#include <elf.h> 3712891Sbrandon.potter@amd.com#include <stdio.h> 3812891Sbrandon.potter@amd.com 3912891Sbrandon.potter@amd.comint main(int argc, char **argv, char **envp) 4012891Sbrandon.potter@amd.com{ 4112891Sbrandon.potter@amd.com int i; 4212891Sbrandon.potter@amd.com 4312891Sbrandon.potter@amd.com printf("%p: argc: [%d]\n", &argc, argc); 4412891Sbrandon.potter@amd.com printf("\n"); 4512891Sbrandon.potter@amd.com 4612891Sbrandon.potter@amd.com for (i = 0; i < argc; i++) 4712891Sbrandon.potter@amd.com printf("%p: argv[%d]: [%s]\n", &argv[i], i, argv[i]); 4812891Sbrandon.potter@amd.com printf("\n"); 4912891Sbrandon.potter@amd.com 5012891Sbrandon.potter@amd.com i = 0; 5112891Sbrandon.potter@amd.com while (envp[i] != NULL) { 5212891Sbrandon.potter@amd.com printf("%p: envp[%d]: [%s]\n", &envp[i], i, envp[i]); 5312891Sbrandon.potter@amd.com i++; 5412891Sbrandon.potter@amd.com } 5512891Sbrandon.potter@amd.com printf("\n"); 5612891Sbrandon.potter@amd.com 5712891Sbrandon.potter@amd.com Elf64_auxv_t *auxv = (Elf64_auxv_t*)&envp[--i]; 5812891Sbrandon.potter@amd.com while (auxv++) { 5912891Sbrandon.potter@amd.com char *type; 6012891Sbrandon.potter@amd.com switch(auxv->a_type) { 6112891Sbrandon.potter@amd.com case AT_IGNORE: 6212891Sbrandon.potter@amd.com type = "AT_IGNORE"; 6312891Sbrandon.potter@amd.com break; 6412891Sbrandon.potter@amd.com case AT_EXECFD: 6512891Sbrandon.potter@amd.com type = "AT_EXECFD"; 6612891Sbrandon.potter@amd.com break; 6712891Sbrandon.potter@amd.com case AT_PHDR: 6812891Sbrandon.potter@amd.com type = "AT_PHDR"; 6912891Sbrandon.potter@amd.com break; 7012891Sbrandon.potter@amd.com case AT_PHENT: 7112891Sbrandon.potter@amd.com type = "AT_PHENT"; 7212891Sbrandon.potter@amd.com break; 7312891Sbrandon.potter@amd.com case AT_PHNUM: 7412891Sbrandon.potter@amd.com type = "AT_PHNUM"; 7512891Sbrandon.potter@amd.com break; 7612891Sbrandon.potter@amd.com case AT_PAGESZ: 7712891Sbrandon.potter@amd.com type = "AT_PAGESZ"; 7812891Sbrandon.potter@amd.com break; 7912891Sbrandon.potter@amd.com case AT_BASE: 8012891Sbrandon.potter@amd.com type = "AT_BASE"; 8112891Sbrandon.potter@amd.com break; 8212891Sbrandon.potter@amd.com case AT_FLAGS: 8312891Sbrandon.potter@amd.com type = "AT_FLAGS"; 8412891Sbrandon.potter@amd.com break; 8512891Sbrandon.potter@amd.com case AT_ENTRY: 8612891Sbrandon.potter@amd.com type = "AT_ENTRY"; 8712891Sbrandon.potter@amd.com break; 8812891Sbrandon.potter@amd.com case AT_NOTELF: 8912891Sbrandon.potter@amd.com type = "AT_NOTELF"; 9012891Sbrandon.potter@amd.com break; 9112891Sbrandon.potter@amd.com case AT_UID: 9212891Sbrandon.potter@amd.com type = "AT_UID"; 9312891Sbrandon.potter@amd.com break; 9412891Sbrandon.potter@amd.com case AT_EUID: 9512891Sbrandon.potter@amd.com type = "AT_EUID"; 9612891Sbrandon.potter@amd.com break; 9712891Sbrandon.potter@amd.com case AT_GID: 9812891Sbrandon.potter@amd.com type = "AT_GID"; 9912891Sbrandon.potter@amd.com break; 10012891Sbrandon.potter@amd.com case AT_EGID: 10112891Sbrandon.potter@amd.com type = "AT_EGID"; 10212891Sbrandon.potter@amd.com break; 10312891Sbrandon.potter@amd.com case AT_CLKTCK: 10412891Sbrandon.potter@amd.com type = "AT_CLKTCK"; 10512891Sbrandon.potter@amd.com break; 10612891Sbrandon.potter@amd.com case AT_PLATFORM: 10712891Sbrandon.potter@amd.com type = "AT_PLATFORM"; 10812891Sbrandon.potter@amd.com break; 10912891Sbrandon.potter@amd.com case AT_HWCAP: 11012891Sbrandon.potter@amd.com type = "AT_HWCAP"; 11112891Sbrandon.potter@amd.com break; 11212891Sbrandon.potter@amd.com case AT_FPUCW: 11312891Sbrandon.potter@amd.com type = "AT_FPUCW"; 11412891Sbrandon.potter@amd.com break; 11512891Sbrandon.potter@amd.com case AT_DCACHEBSIZE: 11612891Sbrandon.potter@amd.com type = "AT_DCACHEBSIZE"; 11712891Sbrandon.potter@amd.com break; 11812891Sbrandon.potter@amd.com case AT_ICACHEBSIZE: 11912891Sbrandon.potter@amd.com type = "AT_ICACHEBSIZE"; 12012891Sbrandon.potter@amd.com break; 12112891Sbrandon.potter@amd.com case AT_UCACHEBSIZE: 12212891Sbrandon.potter@amd.com type = "AT_UCACHEBSIZE"; 12312891Sbrandon.potter@amd.com break; 12412891Sbrandon.potter@amd.com case AT_IGNOREPPC: 12512891Sbrandon.potter@amd.com type = "AT_IGNOREPPC"; 12612891Sbrandon.potter@amd.com break; 12712891Sbrandon.potter@amd.com case AT_SECURE: 12812891Sbrandon.potter@amd.com type = "AT_SECURE"; 12912891Sbrandon.potter@amd.com break; 13012891Sbrandon.potter@amd.com case AT_BASE_PLATFORM: 13112891Sbrandon.potter@amd.com type = "AT_BASE_PLATFORM"; 13212891Sbrandon.potter@amd.com break; 13312891Sbrandon.potter@amd.com case AT_RANDOM: 13412891Sbrandon.potter@amd.com type = "AT_RANDOM"; 13512891Sbrandon.potter@amd.com break; 13612891Sbrandon.potter@amd.com case AT_EXECFN: 13712891Sbrandon.potter@amd.com type = "AT_EXECFN"; 13812891Sbrandon.potter@amd.com break; 13912891Sbrandon.potter@amd.com case AT_SYSINFO: 14012891Sbrandon.potter@amd.com type = "AT_SYSINFO"; 14112891Sbrandon.potter@amd.com break; 14212891Sbrandon.potter@amd.com case AT_SYSINFO_EHDR: 14312891Sbrandon.potter@amd.com type = "AT_SYSINFO_EHDR"; 14412891Sbrandon.potter@amd.com break; 14512891Sbrandon.potter@amd.com case AT_L1I_CACHESHAPE: 14612891Sbrandon.potter@amd.com type = "AT_L1I_CACHESHAPE"; 14712891Sbrandon.potter@amd.com break; 14812891Sbrandon.potter@amd.com case AT_L1D_CACHESHAPE: 14912891Sbrandon.potter@amd.com type = "AT_L1D_CACHESHAPE"; 15012891Sbrandon.potter@amd.com break; 15112891Sbrandon.potter@amd.com case AT_L2_CACHESHAPE: 15212891Sbrandon.potter@amd.com type = "AT_L2_CACHESHAPE"; 15312891Sbrandon.potter@amd.com break; 15412891Sbrandon.potter@amd.com case AT_L3_CACHESHAPE: 15512891Sbrandon.potter@amd.com type = "AT_L3_CACHESHAPE"; 15612891Sbrandon.potter@amd.com break; 15712891Sbrandon.potter@amd.com case AT_NULL: 15812891Sbrandon.potter@amd.com default: 15912891Sbrandon.potter@amd.com printf("\n"); 16012891Sbrandon.potter@amd.com return 0; 16112891Sbrandon.potter@amd.com } 16212891Sbrandon.potter@amd.com printf("%p: %s: [%lx]\n", auxv, type, auxv->a_un.a_val); 16312891Sbrandon.potter@amd.com } 16412891Sbrandon.potter@amd.com} 16512891Sbrandon.potter@amd.com 166