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
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
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()
//-------------------------------------------------------------------
int main(void)
{
test__foreach_map();
+ test__find_auxv();
test__do_exec();
return 0;