summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Potter <brandon.potter@amd.com>2017-05-19 11:58:32 -0500
committerBrandon Potter <Brandon.Potter@amd.com>2018-08-17 17:20:02 +0000
commit13bc177e2db04e42f2a26ea5bbee2c035cf9279f (patch)
treea2d78151d326f3945a5597c19bdf71fbce517b0b
parent4c35b42d2fb6f7588dbd56f0dde64b32ce1adafb (diff)
downloadgem5-13bc177e2db04e42f2a26ea5bbee2c035cf9279f.tar.xz
tests: add a stack printer test
Add a test to print out stack contents for SE mode programs. The test will print out argc, argv, envp, and some auxiliary vectors. Change-Id: I489d752ee40fde24c531d8918d0c050f4df936c5 Reviewed-on: https://gem5-review.googlesource.com/3440 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
-rwxr-xr-xtests/test-progs/stack-print/bin/x86/linux/stack-printbin0 -> 8664 bytes
-rw-r--r--tests/test-progs/stack-print/src/stack-print.c165
2 files changed, 165 insertions, 0 deletions
diff --git a/tests/test-progs/stack-print/bin/x86/linux/stack-print b/tests/test-progs/stack-print/bin/x86/linux/stack-print
new file mode 100755
index 000000000..e40dc481c
--- /dev/null
+++ b/tests/test-progs/stack-print/bin/x86/linux/stack-print
Binary files differ
diff --git a/tests/test-progs/stack-print/src/stack-print.c b/tests/test-progs/stack-print/src/stack-print.c
new file mode 100644
index 000000000..9fbf962bc
--- /dev/null
+++ b/tests/test-progs/stack-print/src/stack-print.c
@@ -0,0 +1,165 @@
+/*
+ * 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);
+ }
+}
+