From 13bc177e2db04e42f2a26ea5bbee2c035cf9279f Mon Sep 17 00:00:00 2001 From: Brandon Potter Date: Fri, 19 May 2017 11:58:32 -0500 Subject: [PATCH] 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 Maintainer: Jason Lowe-Power --- .../stack-print/bin/x86/linux/stack-print | Bin 0 -> 8664 bytes .../test-progs/stack-print/src/stack-print.c | 165 ++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100755 tests/test-progs/stack-print/bin/x86/linux/stack-print create mode 100644 tests/test-progs/stack-print/src/stack-print.c 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 0000000000000000000000000000000000000000..e40dc481c00117cef309f62660f95d026430e56f GIT binary patch literal 8664 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 literal 0 HcmV?d00001 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 +#include + +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); + } +} + -- 2.30.2