RFR: 8248876: LoadObject with bad base address created for exec file on linux
Kevin Walls
kevinw at openjdk.java.net
Sat Feb 6 16:47:40 UTC 2021
On Wed, 3 Feb 2021 22:17:16 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:
>> We could see NPE on `LinuxCDebugger::loadObjectContainingPC` which is used mainly by the clhsdb `findpc` command. (See [JDK-8248876](https://bugs.openjdk.java.net/browse/JDK-8248876) for more details)
>>
>> It is caused by PIE executable handling.
>>
>> Currently we use virtual address of top of PT_LOAD in executable as base address - it is valid for ET_EXEC binary.
>> However, in case of ET_DYN binary (PIE binary), we should handle it like a shared library.
>> In GDB, base address of executable would be calculated by dynamic section. SA should also do so.
>
> Marked as reviewed by cjplummer (Reviewer).
Hi!
I found the "svr4_exec_displacement() in GDB" more confusing than informative, maybe this is the same technique GDB uses... But I followed our dynamic_addr setting and agree with the new changes.
An alternative comment could be this, which would also removes the "substract" typo (which was not yours!):
ps_core.c 509
} else { // ET_DYN
// dynamic_addr was initially set to entry point (AT_ENTRY).
// Now subtract the entry point offset to get load address:
result = ph->core->dynamic_addr - exec_ehdr->e_entry;
// Find actual dynamic_addr:
ph->core->dynamic_addr += exec_php->p_vaddr - exec_ehdr->e_entry;
}
-------------
PR: https://git.openjdk.java.net/jdk/pull/2366
More information about the serviceability-dev
mailing list