From: Nicholas Nethercote Date: Thu, 14 Oct 2004 09:28:11 +0000 (+0000) Subject: Further strengthened the unit self-test, by also testing find_auxv(). Now all X-Git-Tag: svn/VALGRIND_3_0_0~1531 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e7ca2d460248723a17d8c0da0bbe11253eaca6cb;p=thirdparty%2Fvalgrind.git Further strengthened the unit self-test, by also testing find_auxv(). Now all functions exported by ume.c are tested. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2762 --- diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am index 9ec6929d7e..18809253c6 100644 --- a/memcheck/tests/Makefile.am +++ b/memcheck/tests/Makefile.am @@ -152,7 +152,6 @@ weirdioctl_SOURCES = weirdioctl.c metadata_SOURCES = metadata.c threadederrno_SOURCES = threadederrno.c threadederrno_LDADD = -lpthread -vgtest_ume_SOURCES = vgtest_ume.c writev_SOURCES = writev.c zeropage_SOURCES = zeropage.c @@ -165,6 +164,8 @@ new_override_SOURCES = new_override.cpp hello_SOURCES = hello.c hello_LDFLAGS = -Wl,-defsym,kickstart_base=0x50000000 \ -Wl,-T,../../coregrind/${VG_ARCH}/stage2.lds +vgtest_ume_SOURCES = vgtest_ume.c +vgtest_ume_LDFLAGS = -Wl,-e,_ume_entry vgtest_ume_LDADD = ../../coregrind/ume.o \ ../../coregrind/ume_entry.o \ ../../coregrind/jmp_with_stack.o diff --git a/memcheck/tests/vgtest_ume.c b/memcheck/tests/vgtest_ume.c index 3b8b2e352e..458f6f0b9f 100644 --- a/memcheck/tests/vgtest_ume.c +++ b/memcheck/tests/vgtest_ume.c @@ -38,6 +38,36 @@ static void test__foreach_map(void) foreach_map(f, /*dummy*/NULL); } +//------------------------------------------------------------------- +// Test find_auxv() +//------------------------------------------------------------------- + +static void test__find_auxv(void) +{ + struct ume_auxv *auxv; + + assert(ume_exec_esp != NULL); + + fprintf(stderr, "Calling find_auxv()\n"); + auxv = find_auxv((int*)ume_exec_esp); + + // Check the auxv value looks sane + assert((void*)auxv > (void*)ume_exec_esp); + assert((unsigned int)auxv - (unsigned int)ume_exec_esp < 0x10000); + + // Scan the auxv, check it looks sane + for (; auxv->a_type != AT_NULL; auxv++) { + switch(auxv->a_type) { + // Check a_type value looks like a plausible small constant + case 1 ... 64: + break; + + default: + assert(0); + } + } +} + //------------------------------------------------------------------- // Test do_exec() //------------------------------------------------------------------- @@ -109,6 +139,7 @@ static void test__do_exec(void) int main(void) { test__foreach_map(); + test__find_auxv(); test__do_exec(); return 0; diff --git a/memcheck/tests/vgtest_ume.stderr.exp b/memcheck/tests/vgtest_ume.stderr.exp index d92d00ac43..777f9d110e 100644 --- a/memcheck/tests/vgtest_ume.stderr.exp +++ b/memcheck/tests/vgtest_ume.stderr.exp @@ -1,3 +1,4 @@ Calling foreach_map() +Calling find_auxv() Calling do_exec("hello") Hello, world!