From: Kris Van Hees Date: Wed, 14 Aug 2013 12:44:01 +0000 (-0400) Subject: Bug fix for logic to determine the (inode, offset) pair for uprobes. X-Git-Tag: v4.1.12-111.0.20170907_2225~3^2~3^2~133 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=165c4942ba239dd4c5fc6c170c407220d7febdce;p=users%2Fjedix%2Flinux-maple.git Bug fix for logic to determine the (inode, offset) pair for uprobes. The logic used to determine the (inode, offset) pair needed by uprobes, and caculated based on an address in a process memory space. was flawed. This caused USDT probes in shared libraries to not work correctly. Signed-off-by: Kris Van Hees --- diff --git a/dtrace/dtrace_dof.c b/dtrace/dtrace_dof.c index f9723aeda486f..ee70ded7358df 100644 --- a/dtrace/dtrace_dof.c +++ b/dtrace/dtrace_dof.c @@ -838,6 +838,10 @@ static int dtrace_dof_relocate(dof_hdr_t *dof, dof_sec_t *sec, uint64_t ubase) return -1; } + dt_dbg_dof(" Relocate 0x%llx + 0x%llx = 0x%llx\n", + *(uint64_t *)taddr, ubase, + *(uint64_t *)taddr + ubase); + *(uint64_t *)taddr += ubase; break; default: @@ -1722,12 +1726,12 @@ static void dtrace_helper_provide_one(dof_helper_t *dhp, dof_sec_t *sec, */ dtrace_dofprov2hprov(&dhpv, prov, strtab); + dt_dbg_dof(" Creating provider %s for PID %d\n", + strtab + prov->dofpv_name, pid); + if ((parg = mops->dtms_provide_pid(meta->dtm_arg, &dhpv, pid)) == NULL) return; - dt_dbg_dof(" Created provider %s for PID %d\n", - strtab + prov->dofpv_name, pid); - meta->dtm_count++; /* @@ -1759,11 +1763,11 @@ static void dtrace_helper_provide_one(dof_helper_t *dhp, dof_sec_t *sec, dhpb.dthpb_ntypes = strtab + probe->dofpr_nargv; dhpb.dthpb_xtypes = strtab + probe->dofpr_xargv; - mops->dtms_create_probe(meta->dtm_arg, parg, &dhpb); - - dt_dbg_dof(" Created probe %s:%s:%s:%s\n", + dt_dbg_dof(" Creating probe %s:%s:%s:%s\n", strtab + prov->dofpv_name, "", dhpb.dthpb_func, dhpb.dthpb_name); + + mops->dtms_create_probe(meta->dtm_arg, parg, &dhpb); } } diff --git a/dtrace/fasttrap_dev.c b/dtrace/fasttrap_dev.c index a1030e79c9865..5355d811c77ac 100644 --- a/dtrace/fasttrap_dev.c +++ b/dtrace/fasttrap_dev.c @@ -118,10 +118,8 @@ static int fasttrap_pid_probe(fasttrap_machtp_t *mtp, struct pt_regs *regs) { fasttrap_id_t *id; int is_enabled = 0; - if (atomic64_read(&tp->ftt_proc->ftpc_acount) == 0) { - pr_info(" Ignored (no longer active)\n"); + if (atomic64_read(&tp->ftt_proc->ftpc_acount) == 0) return 0; - } for (id = tp->ftt_ids; id != NULL; id = id->fti_next) { fasttrap_probe_t *ftp = id->fti_probe; @@ -859,6 +857,9 @@ void fasttrap_meta_create_probe(void *arg, void *parg, tp->ftt_pc = dhpb->dthpb_base + dhpb->dthpb_offs[i]; tp->ftt_pid = provider->ftp_pid; + dt_dbg_dof(" Tracepoint at 0x%lx (0x%llx + 0x%x)\n", + tp->ftt_pc, dhpb->dthpb_base, dhpb->dthpb_offs[i]); + pp->ftp_tps[i].fit_tp = tp; pp->ftp_tps[i].fit_id.fti_probe = pp; #ifdef __sparc