Remove elf::byteswap_if_needed's little endian parameter
This commit is contained in:
parent
c5c785db89
commit
dc0c683804
@ -79,9 +79,9 @@ namespace detail {
|
|||||||
return std::move(loaded_ph).unwrap_error();
|
return std::move(loaded_ph).unwrap_error();
|
||||||
}
|
}
|
||||||
const PHeader& program_header = loaded_ph.unwrap_value();
|
const PHeader& program_header = loaded_ph.unwrap_value();
|
||||||
if(byteswap_if_needed(program_header.p_type, is_little_endian) == PT_PHDR) {
|
if(byteswap_if_needed(program_header.p_type) == PT_PHDR) {
|
||||||
return byteswap_if_needed(program_header.p_vaddr, is_little_endian) -
|
return byteswap_if_needed(program_header.p_vaddr) -
|
||||||
byteswap_if_needed(program_header.p_offset, is_little_endian);
|
byteswap_if_needed(program_header.p_offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Apparently some objects like shared objects can end up missing this header. 0 as a base seems correct.
|
// Apparently some objects like shared objects can end up missing this header. 0 as a base seems correct.
|
||||||
@ -118,8 +118,8 @@ namespace detail {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type>
|
template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type>
|
||||||
T elf::byteswap_if_needed(T value, bool elf_is_little) {
|
T elf::byteswap_if_needed(T value) {
|
||||||
if(cpptrace::detail::is_little_endian() == elf_is_little) {
|
if(cpptrace::detail::is_little_endian() == is_little_endian) {
|
||||||
return value;
|
return value;
|
||||||
} else {
|
} else {
|
||||||
return byteswap(value);
|
return byteswap(value);
|
||||||
@ -155,12 +155,12 @@ namespace detail {
|
|||||||
return internal_error("ELF file header size mismatch" + object_path);
|
return internal_error("ELF file header size mismatch" + object_path);
|
||||||
}
|
}
|
||||||
header_info info;
|
header_info info;
|
||||||
info.e_phoff = byteswap_if_needed(file_header.e_phoff, is_little_endian);
|
info.e_phoff = byteswap_if_needed(file_header.e_phoff);
|
||||||
info.e_phnum = byteswap_if_needed(file_header.e_phnum, is_little_endian);
|
info.e_phnum = byteswap_if_needed(file_header.e_phnum);
|
||||||
info.e_phentsize = byteswap_if_needed(file_header.e_phentsize, is_little_endian);
|
info.e_phentsize = byteswap_if_needed(file_header.e_phentsize);
|
||||||
info.e_shoff = byteswap_if_needed(file_header.e_shoff, is_little_endian);
|
info.e_shoff = byteswap_if_needed(file_header.e_shoff);
|
||||||
info.e_shnum = byteswap_if_needed(file_header.e_shnum, is_little_endian);
|
info.e_shnum = byteswap_if_needed(file_header.e_shnum);
|
||||||
info.e_shentsize = byteswap_if_needed(file_header.e_shentsize, is_little_endian);
|
info.e_shentsize = byteswap_if_needed(file_header.e_shentsize);
|
||||||
header = info;
|
header = info;
|
||||||
return header.unwrap();
|
return header.unwrap();
|
||||||
}
|
}
|
||||||
@ -196,12 +196,12 @@ namespace detail {
|
|||||||
}
|
}
|
||||||
const SHeader& section_header = loaded_sh.unwrap_value();
|
const SHeader& section_header = loaded_sh.unwrap_value();
|
||||||
section_info info;
|
section_info info;
|
||||||
info.sh_type = byteswap_if_needed(section_header.sh_type, is_little_endian);
|
info.sh_type = byteswap_if_needed(section_header.sh_type);
|
||||||
info.sh_addr = byteswap_if_needed(section_header.sh_addr, is_little_endian);
|
info.sh_addr = byteswap_if_needed(section_header.sh_addr);
|
||||||
info.sh_offset = byteswap_if_needed(section_header.sh_offset, is_little_endian);
|
info.sh_offset = byteswap_if_needed(section_header.sh_offset);
|
||||||
info.sh_size = byteswap_if_needed(section_header.sh_size, is_little_endian);
|
info.sh_size = byteswap_if_needed(section_header.sh_size);
|
||||||
info.sh_entsize = byteswap_if_needed(section_header.sh_entsize, is_little_endian);
|
info.sh_entsize = byteswap_if_needed(section_header.sh_entsize);
|
||||||
info.sh_link = byteswap_if_needed(section_header.sh_link, is_little_endian);
|
info.sh_link = byteswap_if_needed(section_header.sh_link);
|
||||||
sections.push_back(info);
|
sections.push_back(info);
|
||||||
}
|
}
|
||||||
did_load_sections = true;
|
did_load_sections = true;
|
||||||
@ -291,12 +291,12 @@ namespace detail {
|
|||||||
symtab.entries.reserve(buffer.size());
|
symtab.entries.reserve(buffer.size());
|
||||||
for(const auto& entry : buffer) {
|
for(const auto& entry : buffer) {
|
||||||
symtab_entry normalized;
|
symtab_entry normalized;
|
||||||
normalized.st_name = byteswap_if_needed(entry.st_name, is_little_endian);
|
normalized.st_name = byteswap_if_needed(entry.st_name);
|
||||||
normalized.st_info = byteswap_if_needed(entry.st_info, is_little_endian);
|
normalized.st_info = byteswap_if_needed(entry.st_info);
|
||||||
normalized.st_other = byteswap_if_needed(entry.st_other, is_little_endian);
|
normalized.st_other = byteswap_if_needed(entry.st_other);
|
||||||
normalized.st_shndx = byteswap_if_needed(entry.st_shndx, is_little_endian);
|
normalized.st_shndx = byteswap_if_needed(entry.st_shndx);
|
||||||
normalized.st_value = byteswap_if_needed(entry.st_value, is_little_endian);
|
normalized.st_value = byteswap_if_needed(entry.st_value);
|
||||||
normalized.st_size = byteswap_if_needed(entry.st_size, is_little_endian);
|
normalized.st_size = byteswap_if_needed(entry.st_size);
|
||||||
symtab.entries.push_back(normalized);
|
symtab.entries.push_back(normalized);
|
||||||
}
|
}
|
||||||
std::sort(symtab.entries.begin(), symtab.entries.end(), [] (const symtab_entry& a, const symtab_entry& b) {
|
std::sort(symtab.entries.begin(), symtab.entries.end(), [] (const symtab_entry& a, const symtab_entry& b) {
|
||||||
|
|||||||
@ -80,7 +80,7 @@ namespace detail {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
|
template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
|
||||||
T byteswap_if_needed(T value, bool elf_is_little);
|
T byteswap_if_needed(T value);
|
||||||
|
|
||||||
Result<const header_info&, internal_error> get_header_info();
|
Result<const header_info&, internal_error> get_header_info();
|
||||||
template<std::size_t Bits>
|
template<std::size_t Bits>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user