--- /dev/null
+/*
+ * Copyright (c) 2017 Advanced Micro Devices, Inc.
+ * All rights reserved.
+ *
+ * For use for simulation and test purposes only
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Brandon Potter
+ */
+
+#include <elf.h>
+#include <stdio.h>
+
+int main(int argc, char **argv, char **envp)
+{
+ int i;
+
+ printf("%p: argc: [%d]\n", &argc, argc);
+ printf("\n");
+
+ for (i = 0; i < argc; i++)
+ printf("%p: argv[%d]: [%s]\n", &argv[i], i, argv[i]);
+ printf("\n");
+
+ i = 0;
+ while (envp[i] != NULL) {
+ printf("%p: envp[%d]: [%s]\n", &envp[i], i, envp[i]);
+ i++;
+ }
+ printf("\n");
+
+ Elf64_auxv_t *auxv = (Elf64_auxv_t*)&envp[--i];
+ while (auxv++) {
+ char *type;
+ switch(auxv->a_type) {
+ case AT_IGNORE:
+ type = "AT_IGNORE";
+ break;
+ case AT_EXECFD:
+ type = "AT_EXECFD";
+ break;
+ case AT_PHDR:
+ type = "AT_PHDR";
+ break;
+ case AT_PHENT:
+ type = "AT_PHENT";
+ break;
+ case AT_PHNUM:
+ type = "AT_PHNUM";
+ break;
+ case AT_PAGESZ:
+ type = "AT_PAGESZ";
+ break;
+ case AT_BASE:
+ type = "AT_BASE";
+ break;
+ case AT_FLAGS:
+ type = "AT_FLAGS";
+ break;
+ case AT_ENTRY:
+ type = "AT_ENTRY";
+ break;
+ case AT_NOTELF:
+ type = "AT_NOTELF";
+ break;
+ case AT_UID:
+ type = "AT_UID";
+ break;
+ case AT_EUID:
+ type = "AT_EUID";
+ break;
+ case AT_GID:
+ type = "AT_GID";
+ break;
+ case AT_EGID:
+ type = "AT_EGID";
+ break;
+ case AT_CLKTCK:
+ type = "AT_CLKTCK";
+ break;
+ case AT_PLATFORM:
+ type = "AT_PLATFORM";
+ break;
+ case AT_HWCAP:
+ type = "AT_HWCAP";
+ break;
+ case AT_FPUCW:
+ type = "AT_FPUCW";
+ break;
+ case AT_DCACHEBSIZE:
+ type = "AT_DCACHEBSIZE";
+ break;
+ case AT_ICACHEBSIZE:
+ type = "AT_ICACHEBSIZE";
+ break;
+ case AT_UCACHEBSIZE:
+ type = "AT_UCACHEBSIZE";
+ break;
+ case AT_IGNOREPPC:
+ type = "AT_IGNOREPPC";
+ break;
+ case AT_SECURE:
+ type = "AT_SECURE";
+ break;
+ case AT_BASE_PLATFORM:
+ type = "AT_BASE_PLATFORM";
+ break;
+ case AT_RANDOM:
+ type = "AT_RANDOM";
+ break;
+ case AT_EXECFN:
+ type = "AT_EXECFN";
+ break;
+ case AT_SYSINFO:
+ type = "AT_SYSINFO";
+ break;
+ case AT_SYSINFO_EHDR:
+ type = "AT_SYSINFO_EHDR";
+ break;
+ case AT_L1I_CACHESHAPE:
+ type = "AT_L1I_CACHESHAPE";
+ break;
+ case AT_L1D_CACHESHAPE:
+ type = "AT_L1D_CACHESHAPE";
+ break;
+ case AT_L2_CACHESHAPE:
+ type = "AT_L2_CACHESHAPE";
+ break;
+ case AT_L3_CACHESHAPE:
+ type = "AT_L3_CACHESHAPE";
+ break;
+ case AT_NULL:
+ default:
+ printf("\n");
+ return 0;
+ }
+ printf("%p: %s: [%lx]\n", auxv, type, auxv->a_un.a_val);
+ }
+}
+