Summary: | stap misses functions with the same name in one CU | ||
---|---|---|---|
Product: | systemtap | Reporter: | Josh Stone <jistone> |
Component: | tapsets | Assignee: | Josh Stone <jistone> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | P2 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Bug Depends on: | |||
Bug Blocks: | 10461 |
Description
Josh Stone
2009-08-28 23:48:55 UTC
I found cases of this in the kernel as well, so this isn't just a C++ issue. It usually occurs where a function is both inlined and has concrete instances. For example, on 2.6.29.6-217.2.16.fc11.x86_64, these are the DIEs related to "acpi_battery_units": (at the top level of the CU) [2359b7f] subprogram external name "acpi_battery_units" decl_file 1 decl_line 260 prototyped type [234db21] inline declared_inlined (3) sibling [2359b9f] (...) [2359d83] subprogram abstract_origin [2359b7f] low_pc 0xffffffff8120f207 <acpi_battery_units> high_pc 0xffffffff8120f22b <sysfs_remove_battery> frame_base location list [49f943] sibling [2359da8] (... later, nested in other subprograms ...) [235a69b] inlined_subroutine abstract_origin [2359b7f] entry_pc 0xffffffff8120fb72 <acpi_battery_print_alarm+0x5c> ranges range list [ ab210] call_file 1 call_line 646 (...) [235a717] inlined_subroutine abstract_origin [2359b7f] entry_pc 0xffffffff8120fcaa <acpi_battery_print_state+0xf6> ranges range list [ ab240] call_file 1 call_line 611 sibling [235a735] (etc.) Currently, through dwarf_getfuncs our code will first encounter [2359b7f] and write it into the cache. Later we will see [2359d83], which will overwrite the first one in the cache. Thus, we never even look for the inline instances associated with [2359b7f]. commit b7478964 |