@@ -1031,6 +1031,8 @@ UUID ProcessElfCore::FindBuidIdInCoreMemory(lldb::addr_t address) {
1031
1031
1032
1032
std::vector<uint8_t > ph_bytes;
1033
1033
ph_bytes.resize (elf_header.e_phentsize );
1034
+ lldb::addr_t base_addr = 0 ;
1035
+ bool found_first_load_segment = false ;
1034
1036
for (unsigned int i = 0 ; i < elf_header.e_phnum ; ++i) {
1035
1037
byte_read = ReadMemory (ph_addr + i * elf_header.e_phentsize ,
1036
1038
ph_bytes.data (), elf_header.e_phentsize , error);
@@ -1041,6 +1043,11 @@ UUID ProcessElfCore::FindBuidIdInCoreMemory(lldb::addr_t address) {
1041
1043
offset = 0 ;
1042
1044
elf::ELFProgramHeader program_header;
1043
1045
program_header.Parse (program_header_data, &offset);
1046
+ if (program_header.p_type == llvm::ELF::PT_LOAD &&
1047
+ !found_first_load_segment) {
1048
+ base_addr = program_header.p_vaddr ;
1049
+ found_first_load_segment = true ;
1050
+ }
1044
1051
if (program_header.p_type != llvm::ELF::PT_NOTE)
1045
1052
continue ;
1046
1053
@@ -1049,7 +1056,7 @@ UUID ProcessElfCore::FindBuidIdInCoreMemory(lldb::addr_t address) {
1049
1056
1050
1057
// We need to slide the address of the p_vaddr as these values don't get
1051
1058
// relocated in memory.
1052
- const lldb::addr_t vaddr = program_header.p_vaddr + address;
1059
+ const lldb::addr_t vaddr = program_header.p_vaddr + address - base_addr ;
1053
1060
byte_read =
1054
1061
ReadMemory (vaddr, note_bytes.data (), program_header.p_memsz , error);
1055
1062
if (byte_read != program_header.p_memsz )
0 commit comments