]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gprofng: fix 32886 wrong mapping from instruction to line number
authorVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Fri, 18 Apr 2025 21:00:59 +0000 (14:00 -0700)
committerVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Tue, 22 Apr 2025 05:09:10 +0000 (22:09 -0700)
On Intel, gprofng should adjusts return addresses, including user leaf functions.

gprofng/ChangeLog
2025-04-18  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

* src/CallStack.cc (add_stack): Adjust return addresses on Intel.

gprofng/src/CallStack.cc

index 6df4112f943d46e10969cbb40e9ba0d6feda814e..9a3a15d64d49cc4bef0bdab984fe801ad2b15ddd 100644 (file)
@@ -527,14 +527,10 @@ CallStackP::add_stack (DataDescriptor *dDscr, long idx, FramePacket *frp,
 
       Vaddr va = frp->getFromStack (index);
       DbeInstr *cur_instr = experiment->map_Vaddr_to_PC (va, tstamp);
-#if ARCH(Intel)// TBR? FIXUP_XXX_SPARC_LINUX: switch should be on experiment ARCH, not dbe ARCH
       // We need to adjust return addresses on intel
-      // in order to attribute inclusive metrics to
-      // proper call instructions.
-      if (experiment->exp_maj_version <= 9)
-       if (!leaf && cur_instr->addr != 0)
-         cur_instr = cur_instr->func->find_dbeinstr (0, cur_instr->addr - 1);
-#endif
+      // in order to attribute inclusive metrics to proper instructions.
+      if (experiment->platform == Intel && cur_instr->addr != 0)
+       cur_instr = cur_instr->func->find_dbeinstr (0, cur_instr->addr - 1);
 
       // Skip PC's from PLT, update leaf and state accordingly
       if ((cur_instr->func->flags & FUNC_FLAG_PLT)