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]

Reply via email to