https://sourceware.org/bugzilla/show_bug.cgi?id=22771
Bug ID: 22771 Summary: nm does not display line information for uninlined copies of functions Product: binutils Version: 2.30 Status: UNCONFIRMED Severity: normal Priority: P2 Component: binutils Assignee: unassigned at sourceware dot org Reporter: pcarroll at codesourcery dot com Target Milestone: --- Created attachment 10768 --> https://sourceware.org/bugzilla/attachment.cgi?id=10768&action=edit Possible patch to nm for this issue The nm utility supports -l for using debug information to obtain file and line information for each symbol. When a source is compiled with -O2, functions can be inlined. The compiler also produces an uninlined copy of the function, normally for use by other files. In the case of DWARF2 debug information, the compiler generates debug information to describe the function. It then references that debug information from the inlined and uninlined copies of the routine through the use of the DW_AT_abstract_origin reference. When nm is used on such a file, it is not able to find file and line information because that information is present at the common debug information and not at each actual implementation of the function. What I am proposing is to modify the find_abstract_instance_name() function (which I renamed to find_abstract_instance() ) to return the name of the function as well as file and line information. The routine is already parsing all of the debug information in the abstract instance, so it is easy to pick up the file and line information at that time. For example, if I have a simple test case: int foo(int j) { if (j < 15) j += j << 2; else if (j < 30) j += j << 4; else j += j << 6; return j; } int main (int argc,char **argv) { int i = argc; i += foo(i); return i; } If that test case is compiled and then 'nm -l' reads that executable, it currently produces this symbol output (ignoring a lot of library symbols): 8048400 T foo 080482e0 T main /scratch/pcarroll/its254/test/mytest.c:12 If I modify 'nm' to return file and line information for abstract instances, it produces the following output: 08048400 T foo /scratch/pcarroll/its254/test/mytest.c:1 080482e0 T main /scratch/pcarroll/its254/test/mytest.c:12 I am attaching my proposed patch. -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils