Skip to content

Commit 112a5bf

Browse files
committed
Address several review comments
1 parent a9714b1 commit 112a5bf

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,29 +1000,31 @@ UUID ProcessElfCore::FindBuidIdInCoreMemory(lldb::addr_t address) {
10001000
const size_t elf_header_size = addr_size == 4 ? sizeof(llvm::ELF::Elf32_Ehdr)
10011001
: sizeof(llvm::ELF::Elf64_Ehdr);
10021002

1003-
// 80 bytes buffer is larger enough for the ELF header or program headers
1004-
unsigned char buf[80];
1003+
std::vector<uint8_t> elf_header_bytes;
1004+
elf_header_bytes.resize(elf_header_size);
10051005
Status error;
1006-
size_t byte_read = ReadMemory(address, buf, elf_header_size, error);
1007-
if (byte_read != elf_header_size || !elf::ELFHeader::MagicBytesMatch(buf))
1006+
size_t byte_read =
1007+
ReadMemory(address, elf_header_bytes.data(), elf_header_size, error);
1008+
if (byte_read != elf_header_size ||
1009+
!elf::ELFHeader::MagicBytesMatch(elf_header_bytes.data()))
10081010
return invalid_uuid;
1009-
assert(sizeof(buf) >= elf_header_size);
1010-
DataExtractor elf_header_data(buf, elf_header_size, GetByteOrder(),
1011-
addr_size);
1011+
DataExtractor elf_header_data(elf_header_bytes.data(), elf_header_size,
1012+
GetByteOrder(), addr_size);
10121013
lldb::offset_t offset = 0;
10131014

10141015
elf::ELFHeader elf_header;
10151016
elf_header.Parse(elf_header_data, &offset);
10161017

10171018
const lldb::addr_t ph_addr = address + elf_header.e_phoff;
10181019

1020+
std::vector<uint8_t> ph_bytes;
1021+
ph_bytes.resize(elf_header.e_phentsize);
10191022
for (unsigned int i = 0; i < elf_header.e_phnum; ++i) {
1020-
byte_read = ReadMemory(ph_addr + i * elf_header.e_phentsize, buf,
1021-
elf_header.e_phentsize, error);
1023+
byte_read = ReadMemory(ph_addr + i * elf_header.e_phentsize,
1024+
ph_bytes.data(), elf_header.e_phentsize, error);
10221025
if (byte_read != elf_header.e_phentsize)
10231026
break;
1024-
assert(sizeof(buf) >= elf_header.e_phentsize);
1025-
DataExtractor program_header_data(buf, elf_header.e_phentsize,
1027+
DataExtractor program_header_data(ph_bytes.data(), elf_header.e_phentsize,
10261028
GetByteOrder(), addr_size);
10271029
offset = 0;
10281030
elf::ELFProgramHeader program_header;
@@ -1037,19 +1039,17 @@ UUID ProcessElfCore::FindBuidIdInCoreMemory(lldb::addr_t address) {
10371039
program_header.p_memsz, error);
10381040
if (byte_read != program_header.p_memsz)
10391041
continue;
1040-
assert(sizeof(buf) >= program_header.p_memsz);
10411042
DataExtractor segment_data(note_bytes.data(), note_bytes.size(),
10421043
GetByteOrder(), addr_size);
10431044
auto notes_or_error = parseSegment(segment_data);
10441045
if (!notes_or_error)
10451046
return invalid_uuid;
10461047
for (const CoreNote &note : *notes_or_error) {
10471048
if (note.info.n_namesz == 4 &&
1048-
note.info.n_type == llvm::ELF::NT_GNU_BUILD_ID) {
1049-
if ("GNU" == note.info.n_name)
1050-
return UUID(llvm::ArrayRef<uint8_t>(
1051-
note.data.GetDataStart(), note.info.n_descsz /*byte size*/));
1052-
}
1049+
note.info.n_type == llvm::ELF::NT_GNU_BUILD_ID &&
1050+
"GNU" == note.info.n_name &&
1051+
note.data.ValidOffsetForDataOfSize(0, note.info.n_descsz))
1052+
return UUID(note.data.GetData().take_front(note.info.n_descsz));
10531053
}
10541054
}
10551055
return invalid_uuid;

0 commit comments

Comments
 (0)