Skip to content

Commit a5d2920

Browse files
yabincstephenhines
authored andcommitted
Update simpleperf for LLVM rebase to r256229.
Bug: 26987366 (cherry picked from commit 07cdff0) Change-Id: I15f2c3ad2f3cbc6239f3ffe42dbc09da2b703d3a
1 parent a5aa8f9 commit a5d2920

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

simpleperf/read_elf.cpp

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ bool GetBuildIdFromNoteFile(const std::string& filename, BuildId* build_id) {
102102

103103
template <class ELFT>
104104
bool GetBuildIdFromELFFile(const llvm::object::ELFFile<ELFT>* elf, BuildId* build_id) {
105-
for (auto section_iterator = elf->begin_sections(); section_iterator != elf->end_sections();
105+
for (auto section_iterator = elf->section_begin(); section_iterator != elf->section_end();
106106
++section_iterator) {
107107
if (section_iterator->sh_type == llvm::ELF::SHT_NOTE) {
108108
auto contents = elf->getSectionContents(&*section_iterator);
@@ -206,48 +206,44 @@ bool IsArmMappingSymbol(const char* name) {
206206
}
207207

208208
template <class ELFT>
209-
void ParseSymbolsFromELFFile(const llvm::object::ELFFile<ELFT>* elf,
209+
void ParseSymbolsFromELFFile(const llvm::object::ELFObjectFile<ELFT>* elf_obj,
210210
std::function<void(const ElfFileSymbol&)> callback) {
211+
auto elf = elf_obj->getELFFile();
211212
bool is_arm = (elf->getHeader()->e_machine == llvm::ELF::EM_ARM ||
212213
elf->getHeader()->e_machine == llvm::ELF::EM_AARCH64);
213-
auto begin = elf->begin_symbols();
214-
auto end = elf->end_symbols();
214+
auto begin = elf_obj->symbol_begin();
215+
auto end = elf_obj->symbol_end();
215216
if (begin == end) {
216-
begin = elf->begin_dynamic_symbols();
217-
end = elf->end_dynamic_symbols();
217+
begin = elf_obj->dynamic_symbol_begin();
218+
end = elf_obj->dynamic_symbol_end();
218219
}
219220
for (; begin != end; ++begin) {
220-
auto& elf_symbol = *begin;
221-
222221
ElfFileSymbol symbol;
223-
224-
auto shdr = elf->getSection(&elf_symbol);
225-
if (shdr == nullptr) {
222+
auto elf_symbol = static_cast<const llvm::object::ELFSymbolRef*>(&*begin);
223+
auto section_it = elf_symbol->getSection();
224+
if (!section_it) {
226225
continue;
227226
}
228-
auto section_name = elf->getSectionName(shdr);
229-
if (section_name.getError() || section_name.get().empty()) {
227+
llvm::StringRef section_name;
228+
if (section_it.get()->getName(section_name) || section_name.empty()) {
230229
continue;
231230
}
232-
if (section_name.get() == ".text") {
231+
if (section_name.str() == ".text") {
233232
symbol.is_in_text_section = true;
234233
}
235234

236-
auto symbol_name = elf->getSymbolName(begin);
237-
if (symbol_name.getError()) {
235+
auto symbol_name = elf_symbol->getName();
236+
if (!symbol_name || symbol_name.get().empty()) {
238237
continue;
239238
}
240239
symbol.name = symbol_name.get();
241-
if (symbol.name.empty()) {
242-
continue;
243-
}
244-
symbol.vaddr = elf_symbol.st_value;
240+
symbol.vaddr = elf_symbol->getValue();
245241
if ((symbol.vaddr & 1) != 0 && is_arm) {
246242
// Arm sets bit 0 to mark it as thumb code, remove the flag.
247243
symbol.vaddr &= ~1;
248244
}
249-
symbol.len = elf_symbol.st_size;
250-
int type = elf_symbol.getType();
245+
symbol.len = elf_symbol->getSize();
246+
int type = elf_symbol->getELFType();
251247
if (type == llvm::ELF::STT_FUNC) {
252248
symbol.is_func = true;
253249
} else if (type == llvm::ELF::STT_NOTYPE) {
@@ -303,9 +299,9 @@ bool ParseSymbolsFromEmbeddedElfFile(const std::string& filename, uint64_t file_
303299
return false;
304300
}
305301
if (auto elf = llvm::dyn_cast<llvm::object::ELF32LEObjectFile>(ret.obj)) {
306-
ParseSymbolsFromELFFile(elf->getELFFile(), callback);
302+
ParseSymbolsFromELFFile(elf, callback);
307303
} else if (auto elf = llvm::dyn_cast<llvm::object::ELF64LEObjectFile>(ret.obj)) {
308-
ParseSymbolsFromELFFile(elf->getELFFile(), callback);
304+
ParseSymbolsFromELFFile(elf, callback);
309305
} else {
310306
LOG(ERROR) << "unknown elf format in file " << filename;
311307
return false;
@@ -317,7 +313,7 @@ template <class ELFT>
317313
bool ReadMinExecutableVirtualAddress(const llvm::object::ELFFile<ELFT>* elf, uint64_t* p_vaddr) {
318314
bool has_vaddr = false;
319315
uint64_t min_addr = std::numeric_limits<uint64_t>::max();
320-
for (auto it = elf->begin_program_headers(); it != elf->end_program_headers(); ++it) {
316+
for (auto it = elf->program_header_begin(); it != elf->program_header_end(); ++it) {
321317
if ((it->p_type == llvm::ELF::PT_LOAD) && (it->p_flags & llvm::ELF::PF_X)) {
322318
if (it->p_vaddr < min_addr) {
323319
min_addr = it->p_vaddr;
@@ -361,7 +357,7 @@ bool ReadMinExecutableVirtualAddressFromElfFile(const std::string& filename,
361357
template <class ELFT>
362358
bool ReadSectionFromELFFile(const llvm::object::ELFFile<ELFT>* elf, const std::string& section_name,
363359
std::string* content) {
364-
for (auto it = elf->begin_sections(); it != elf->end_sections(); ++it) {
360+
for (auto it = elf->section_begin(); it != elf->section_end(); ++it) {
365361
auto name_or_err = elf->getSectionName(&*it);
366362
if (name_or_err && *name_or_err == section_name) {
367363
auto data_or_err = elf->getSectionContents(&*it);

0 commit comments

Comments
 (0)