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!