I resend this as Chris and I got no answer so far. The issue is a pid provider probe gets rejected by Apple dtrace. Suspicion it is rejected due to
libdtrace DEBUG: found a suspected jump table at below is a snippet of the assembly code of that function, that looks like a jump table plus the C preprocessor output of the same function. Anyone having an idea what could cause this jump table? Regards, Andreas ---------- Forwarded message ---------- Date: Wed, 14 Nov 2007 19:52:51 +0100 (MET) From: [EMAIL PROTECTED] To: [email protected] Cc: Chris Dagdigian <[EMAIL PROTECTED]>, James McIlree <[EMAIL PROTECTED]> Subject: Re: [dtrace-discuss] [GE users] Apple Leopard has dtrace -- anyone used the SGE probes/scripts yet? Hm ... the assebly of the function contains code like this movl L279-"L00000000011$pb"(%ebx,%eax,4), %eax addl %ebx, %eax jmp *%eax .align 2,0x90 L279: .long L187-"L00000000011$pb" .long L188-"L00000000011$pb" .long L189-"L00000000011$pb" : (much more of this kind) : if that is meant by libdtrace DEBUG: found a suspected jump table at sge_mirror_process_events:323 that could be the cause, but I got no idea where it comes from. Preprocessor output of the code is this sge_mirror_error __attribute__((noinline)) sge_mirror_process_events(sge_evc_class_t *evc) { lList *event_list = ((void *)0); sge_mirror_error ret = SGE_EM_OK; static int test_debug = 0; static const char SGE_FUNC[] = "sge_mirror_process_events"; static const int xaybzc = 0; if (rmon_condition(xaybzc, 1)) rmon_menter (SGE_FUNC); if(prof_is_active(SGE_PROF_MIRROR)) { prof_start_measurement(SGE_PROF_MIRROR,((void *)0)); }; mir_set_num_events(0); if (evc && evc->ec_get(evc, &event_list, false)) { if (event_list != ((void *)0)) { ret = sge_mirror_process_event_list(evc, event_list); lFreeList(&event_list); } } else { ( sprintf (log_get_log_buffer(), (("qmaster alive timeout expired"))), sge_log(4,log_get_log_buffer(),"../libs/mir/sge_mirror.c",SGE_FUNC,1141) ,1) ? 1 : 0; evc->ec_mark4registration(evc); ret = SGE_EM_TIMEOUT; } if (mir_get_produce_qmaster_alive_timeout()) { test_debug++; if (test_debug > 3) { test_debug = 0; ( sprintf (log_get_log_buffer(), (("qmaster alive timeout expired"))), sge_log(4,log_get_log_buffer(),"../libs/mir/sge_mirror.c",SGE_FUNC,1150) ,1) ? 1 : 0; evc->ec_mark4registration(evc); ret = SGE_EM_TIMEOUT; } } if (prof_is_active(SGE_PROF_MIRROR)) { prof_stop_measurement(SGE_PROF_MIRROR, ((void *)0)); (sprintf (log_get_log_buffer(), "PROF: sge_mirror processed %d events in %.3f s", mir_get_num_events(), prof_get_measurement_wallclock(SGE_PROF_MIRROR, false, ((void *)0))), sge_log(0, log_get_log_buffer(),"../li bs/mir/sge_mirror.c",SGE_FUNC,1160) ,1) ? 1 : 0; } if (rmon_condition(xaybzc, 1)) rmon_mexit(SGE_FUNC, "../libs/mir/sge_mirror.c", 1163); return ret; } Could it be the jump table is generated due to the function calls via function pointer are done by sge_mirror_process_events()? Regards, Andreas On Wed, 14 Nov 2007, Chris Dagdigian wrote: > James M seems to have found the issue: > >> sh-3.2# ps ax | grep sge_schedd >> 53778 ?? S 0:02.41 /opt/sge/bin/darwin-x86/sge_schedd >> 55698 s000 R+ 0:00.00 grep sge_schedd >> sh-3.2# >> sh-3.2# dtrace -xdebug -l -n 'pid53778::sge_mirror_process_events:return' >> libdtrace DEBUG: typedef taskid_t added as id 32797 >> libdtrace DEBUG: typedef projid_t added as id 32798 >> libdtrace DEBUG: typedef poolid_t added as id 32799 >> libdtrace DEBUG: typedef zoneid_t added as id 32800 >> libdtrace DEBUG: typedef timestruc_t added as id 32804 >> libdtrace DEBUG: typedef psinfo_t added as id 32823 >> libdtrace DEBUG: typedef psetid_t added as id 33206 >> libdtrace DEBUG: typedef lwpsinfo_t added as id 33210 >> libdtrace DEBUG: typedef bufinfo_t added as id 33215 >> libdtrace DEBUG: typedef devinfo_t added as id 33218 >> libdtrace DEBUG: typedef offset_t added as id 33223 >> libdtrace DEBUG: typedef fileinfo_t added as id 33225 >> libdtrace DEBUG: type struct _processor_info added as id 33227 >> libdtrace DEBUG: typedef _processor_info_t added as id 33230 >> libdtrace DEBUG: typedef chipid_t added as id 33231 >> libdtrace DEBUG: typedef lgrp_id_t added as id 33232 >> libdtrace DEBUG: type struct cpuinfo added as id 33233 >> libdtrace DEBUG: typedef cpuinfo_t added as id 33234 >> libdtrace DEBUG: grabbed pid 53778 >> libdtrace DEBUG: creating probe >> pid53778:sge_schedd:sge_mirror_process_events:return >> libdtrace DEBUG: found a suspected jump table at >> sge_mirror_process_events:323 >> libdtrace DEBUG: set context to pid53778::sge_mirror_process_events:return >> [0] prp=0x0 attr=[u/u/c] argc=0 >> libdtrace DEBUG: set label to <action list> >> libdtrace DEBUG: set label to <NULL> >> ID PROVIDER MODULE FUNCTION NAME >> dtrace: failed to match pid53778::sge_mirror_process_events:return: No probe >> matches description >> libdtrace DEBUG: releasing pid 53778 >> libdtrace DEBUG: dt_buf_destroy(section headers): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(string table): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(loadable data): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(unloadable data): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(probe data): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(probe args): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(probe offs): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(probe is-enabled offs): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(probe rels): size=512 resizes=0 >> libdtrace DEBUG: dt_buf_destroy(xlate members): size=512 resizes=0 >> sh-3.2# > > > > Regards, > Chris Dagdigiain > > > > > On Nov 14, 2007, at 1:16 PM, James McIlree wrote: > >> Andreas, >> >> You may be hitting a case where dtrace thinks it cannot >> safely instrument the return points in that function. Try running >> this (where XYZ is the pid of your target process) >> >> dtrace -xdebug -l -n 'pidXYZ::sge_mirror_process_events:return' >> >> If dtrace prints a warning about finding a jump table, that >> means it isn't certain it can safely place probes. >> >> James M >> >> On Nov 14, 2007, at 8:40 AM, [EMAIL PROTECTED] wrote: >> >>> Hi, >>> >>> Chris (cc) and I try to get the SGE master monitor work with Apple Leopard >>> dtrace. Unfortunately we are stuck with the error msg below. >>> >>> Anyone having an idea what could be the cause? What I can rule out as >>> cause is function inlining for the reasons explained below. >>> >>> Background information on SGE master monitor implementation is under >>> >>> http://wiki.gridengine.info/wiki/index.php/Dtrace >>> >>> Regards, >>> Andreas >>> >>> On Wed, 14 Nov 2007, Chris Dagdigian wrote: >>> >>>> Hi Andreas, >>>> >>>> Looks like we have to appeal to others - I'm getting the same error about >>>> sge_mirror_process_events ... >>>> >>>>> sh-3.2# ./monitor.sh >>>>> dtrace: failed to compile script ./monitor.d: line 179: probe description >>>>> pid53778::sge_mirror_process_events:return does not match any probes >>>>> sh-3.2# >>>>> >>>> On Nov 14, 2007, at 6:06 AM, [EMAIL PROTECTED] wrote: >>>> >>>>> Hi Chris, >>>>> >>>>> this time function inlining can not be the cause since >>>>> sge_mirror_process_events() gets called exclusively from other source >>>>> modules. I added nevertheless the no_inline >>>>> compiler directive to source code for sge_mirror_process_events() and >>>>> recompiled the entire stuff anew. Please give it another try. >>>>> >>>>> If it doesn't work then we must ask for counsel from Apple and Sun >>>>> engineers in [email protected] mailing list. >>>>> >>>>> Best regards, >>>>> Andreas >>> _______________________________________________ >>> dtrace-discuss mailing list >>> [email protected] > http://gridengine.info/ Sitz der Gesellschaft: Sun Microsystems GmbH, Sonnenallee 1, D-85551 Kirchheim-Heimstetten Amtsgericht Muenchen: HRB 161028 Geschaeftsfuehrer: Thomas Schroeder, Wolfgang Engels, Dr. Roland Boemer Vorsitzender des Aufsichtsrates: Martin Haering _______________________________________________ dtrace-discuss mailing list [email protected]
