ADD(0, __NR_accept);
# endif
ADD(0, __NR_access);
+ ADD(0, __NR_alarm);
# if defined(__NR_bind)
ADD(0, __NR_bind);
# endif
# endif
ADD(0, __NR_chmod);
ADD(0, __NR_chown);
+# if defined(__NR_chown32)
+ ADD(0, __NR_chown32);
+# endif
ADD(0, __NR_clock_getres);
ADD(0, __NR_clock_gettime);
ADD(0, __NR_clone);
# if defined(__NR_connect)
ADD(0, __NR_connect);
# endif
+ ADD(0, __NR_creat);
ADD(0, __NR_dup);
ADD(0, __NR_dup2);
ADD(0, __NR_execve); /* presumably we see this because the call failed? */
ADD(0, __NR_fcntl64);
# endif
ADD(0, __NR_fdatasync);
+ ADD(0, __NR_flock);
ADD(0, __NR_fstat);
# if defined(__NR_fstat64)
ADD(0, __NR_fstat64);
ADD(0, __NR_getresgid);
ADD(0, __NR_getresuid);
ADD(0, __NR_getrlimit);
+ ADD(0, __NR_getrusage);
# if defined(__NR_getsockname)
ADD(0, __NR_getsockname);
# endif
# if defined(__NR_getsockopt)
ADD(0, __NR_getsockopt);
# endif
+ ADD(0, __NR_gettid);
ADD(0, __NR_gettimeofday);
ADD(0, __NR_getuid);
# if defined(__NR_getuid32)
ADD(0, __NR_inotify_init);
ADD(0, __NR_inotify_rm_watch);
ADD(0, __NR_ioctl); // ioctl -- assuming no pointers returned
+ ADD(0, __NR_ioprio_get);
ADD(0, __NR_kill);
ADD(0, __NR_link);
# if defined(__NR_listen)
# endif
ADD(0, __NR_madvise);
ADD(0, __NR_mkdir);
+ ADD(0, __NR_mlock);
ADD(0, __NR_mprotect);
ADD(0, __NR_munmap); // die_mem_munmap already called, segment remove);
ADD(0, __NR_nanosleep);
ADD(0, __NR_sched_getaffinity);
ADD(0, __NR_sched_getparam);
ADD(0, __NR_sched_getscheduler);
+ ADD(0, __NR_sched_setaffinity);
ADD(0, __NR_sched_setscheduler);
ADD(0, __NR_sched_yield);
ADD(0, __NR_select);
+# if defined(__NR_semctl)
+ ADD(0, __NR_semctl);
+# endif
+# if defined(__NR_semget)
+ ADD(0, __NR_semget);
+# endif
+# if defined(__NR_semop)
+ ADD(0, __NR_semop);
+# endif
# if defined(__NR_sendto)
ADD(0, __NR_sendto);
+# endif
+# if defined(__NR_sendmsg)
+ ADD(0, __NR_sendmsg);
# endif
ADD(0, __NR_set_robust_list);
# if defined(__NR_set_thread_area)
# if defined(__NR_shutdown)
ADD(0, __NR_shutdown);
# endif
+ ADD(0, __NR_sigaltstack);
# if defined(__NR_socket)
ADD(0, __NR_socket);
# endif
return 0;
}
-static void pp_StackBlock ( StackBlock* sb )
-{
- VG_(printf)("StackBlock{ off %ld szB %lu spRel:%c isVec:%c \"%s\" }",
- sb->base, sb->szB, sb->spRel ? 'Y' : 'N',
- sb->isVec ? 'Y' : 'N', &sb->name[0] );
-}
-
static void pp_StackBlocks ( XArray* sbs )
{
Word i, n = VG_(sizeXA)( sbs );
- VG_(printf)("<<< STACKBLOCKS\n" );
+ VG_(message)(Vg_DebugMsg, "<<< STACKBLOCKS" );
for (i = 0; i < n; i++) {
- VG_(printf)(" ");
- pp_StackBlock( (StackBlock*)VG_(indexXA)( sbs, i ) );
- VG_(printf)("\n");
+ StackBlock* sb = (StackBlock*)VG_(indexXA)( sbs, i );
+ VG_(message)(Vg_DebugMsg,
+ " StackBlock{ off %ld szB %lu spRel:%c isVec:%c \"%s\" }",
+ sb->base, sb->szB, sb->spRel ? 'Y' : 'N',
+ sb->isVec ? 'Y' : 'N', &sb->name[0]
+ );
}
- VG_(printf)(">>> STACKBLOCKS\n" );
+ VG_(message)(Vg_DebugMsg, ">>> STACKBLOCKS" );
}
}
}
- /* A rather poor sanity check on the results. */
+ /* If there are any blocks which overlap and have the same
+ fpRel-ness, junk the whole descriptor; it's obviously bogus.
+ Icc11 certainly generates bogus info from time to time.
+
+ This check is pretty weak; really we ought to have a stronger
+ sanity check. */
{ Word i, n = VG_(sizeXA)( orig );
+ static Int moans = 3;
for (i = 0; i < n-1; i++) {
StackBlock* sb1 = (StackBlock*)VG_(indexXA)( orig, i );
StackBlock* sb2 = (StackBlock*)VG_(indexXA)( orig, i+1 );
- if (sb1->base == sb2->base)
- pp_StackBlocks(orig);
- tl_assert(sb1->base != sb2->base);
+ if (sb1->spRel == sb2->spRel
+ && (sb1->base >= sb2->base
+ || sb1->base + sb1->szB > sb2->base)) {
+ if (moans > 0 && !VG_(clo_xml)) {
+ moans--;
+ VG_(message)(Vg_UserMsg, "Warning: bogus DWARF3 info: "
+ "overlapping stack blocks");
+ if (VG_(clo_verbosity) >= 2)
+ pp_StackBlocks(orig);
+ if (moans == 0)
+ VG_(message)(Vg_UserMsg, "Further instances of this "
+ "message will not be shown" );
+ }
+ VG_(dropTailXA)( orig, VG_(sizeXA)( orig ));
+ break;
+ }
}
}
Bool already_present;
GlobalTreeNode *nyu, *nd;
UWord keyW, valW;
+ static Int moans = 3;
tl_assert(descr->szB > 0);
nyu = sg_malloc( "di.sg_main.abtG.1", sizeof(GlobalTreeNode) );
already_present = VG_(addToFM)( gitree, (UWord)nyu, 0 );
/* The interval can't already be there; else we have
overlapping global blocks. */
- if (already_present) {
- GlobalTree__pp( gitree, "add_block_to_GlobalTree: non-exact duplicate" );
- VG_(printf)("Overlapping block: ");
- GlobalTreeNode__pp(nyu);
- VG_(printf)("\n");
+ /* Unfortunately (25 Jan 09) at least icc11 has been seen to
+ generate overlapping block descriptions in the Dwarf3; clearly
+ bogus. */
+ if (already_present && moans > 0 && !VG_(clo_xml)) {
+ moans--;
+ VG_(message)(Vg_UserMsg, "Warning: bogus DWARF3 info: "
+ "overlapping global blocks");
+ if (VG_(clo_verbosity) >= 2) {
+ GlobalTree__pp( gitree,
+ "add_block_to_GlobalTree: non-exact duplicate" );
+ VG_(printf)("Overlapping block: ");
+ GlobalTreeNode__pp(nyu);
+ VG_(printf)("\n");
+ }
+ if (moans == 0)
+ VG_(message)(Vg_UserMsg, "Further instances of this "
+ "message will not be shown" );
}
- tl_assert(!already_present);
+ /* tl_assert(!already_present); */
}
static Bool del_GlobalTree_range ( /*MOD*/WordFM* gitree,