Remove elf::byteswap_if_needed's little endian parameter

This commit is contained in:
Jeremy Rifkin 2025-01-27 23:49:27 -06:00
parent c5c785db89
commit dc0c683804
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4
2 changed files with 24 additions and 24 deletions

View File

@ -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) {

View File

@ -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>