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 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index 9ec6929..1880925 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -152,7 +152,6 @@
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 @@
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 3b8b2e3..458f6f0 100644
--- a/memcheck/tests/vgtest_ume.c
+++ b/memcheck/tests/vgtest_ume.c
@@ -39,6 +39,36 @@
}
//-------------------------------------------------------------------
+// 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 @@
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 d92d00a..777f9d1 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!