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