summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2022-10-04 02:53:58 +0300
committerAndreas Kling <kling@serenityos.org>2022-12-28 11:53:41 +0100
commita4c87fac563ba6d3b78c5a1cfc6158ec6672f10d (patch)
treeef7575c74a3493a33470ced7d06068bbf359f961 /Userland
parent2f7443c90005dacaab0a345f874a74e0669f2a89 (diff)
downloadserenity-a4c87fac563ba6d3b78c5a1cfc6158ec6672f10d.zip
LibELF+LibSymbolication: Remove i686 support
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibELF/DynamicLoader.cpp39
-rw-r--r--Userland/Libraries/LibELF/DynamicObject.cpp4
-rw-r--r--Userland/Libraries/LibELF/DynamicObject.h16
-rw-r--r--Userland/Libraries/LibELF/Image.h16
-rw-r--r--Userland/Libraries/LibELF/Relocation.cpp4
-rw-r--r--Userland/Libraries/LibELF/Validation.cpp10
-rw-r--r--Userland/Libraries/LibSymbolication/Symbolication.cpp6
7 files changed, 1 insertions, 94 deletions
diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp
index 5b19b22ec9..ffc6277b97 100644
--- a/Userland/Libraries/LibELF/DynamicLoader.cpp
+++ b/Userland/Libraries/LibELF/DynamicLoader.cpp
@@ -478,19 +478,12 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
};
switch (relocation.type()) {
-#if ARCH(I386)
- case R_386_NONE:
-#else
+
case R_X86_64_NONE:
-#endif
// Apparently most loaders will just skip these?
// Seems if the 'link editor' generates one something is funky with your code
break;
-#if ARCH(I386)
- case R_386_32: {
-#else
case R_X86_64_64: {
-#endif
auto symbol = relocation.symbol();
auto res = lookup_symbol(symbol);
if (!res.has_value()) {
@@ -508,20 +501,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
*patch_ptr = call_ifunc_resolver(VirtualAddress { *patch_ptr }).get();
break;
}
-#if ARCH(I386)
- case R_386_PC32: {
- auto symbol = relocation.symbol();
- auto result = lookup_symbol(symbol);
- if (!result.has_value())
- return RelocationResult::Failed;
- auto relative_offset = result.value().address - m_dynamic_object->base_address().offset(relocation.offset());
- *patch_ptr += relative_offset.get();
- break;
- }
- case R_386_GLOB_DAT: {
-#else
case R_X86_64_GLOB_DAT: {
-#endif
auto symbol = relocation.symbol();
auto res = lookup_symbol(symbol);
VirtualAddress symbol_location;
@@ -549,11 +529,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
*patch_ptr = symbol_location.get();
break;
}
-#if ARCH(I386)
- case R_386_RELATIVE: {
-#else
case R_X86_64_RELATIVE: {
-#endif
if (!image().is_dynamic())
break;
// FIXME: According to the spec, R_386_relative ones must be done first.
@@ -565,12 +541,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
*patch_ptr += m_dynamic_object->base_address().get();
break;
}
-#if ARCH(I386)
- case R_386_TLS_TPOFF32:
- case R_386_TLS_TPOFF: {
-#else
case R_X86_64_TPOFF64: {
-#endif
auto symbol = relocation.symbol();
FlatPtr symbol_value;
DynamicObject const* dynamic_object_of_symbol;
@@ -595,11 +566,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
break;
}
-#if ARCH(I386)
- case R_386_JMP_SLOT: {
-#else
case R_X86_64_JUMP_SLOT: {
-#endif
// FIXME: Or BIND_NOW flag passed in?
if (m_dynamic_object->must_bind_now()) {
// Eagerly BIND_NOW the PLT entries, doing all the symbol looking goodness
@@ -613,11 +580,7 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO
}
break;
}
-#if ARCH(I386)
- case R_386_IRELATIVE: {
-#else
case R_X86_64_IRELATIVE: {
-#endif
VirtualAddress resolver;
if (relocation.addend_used())
resolver = m_dynamic_object->base_address().offset(relocation.addend());
diff --git a/Userland/Libraries/LibELF/DynamicObject.cpp b/Userland/Libraries/LibELF/DynamicObject.cpp
index a0eb6b6d7b..b33f5d0e52 100644
--- a/Userland/Libraries/LibELF/DynamicObject.cpp
+++ b/Userland/Libraries/LibELF/DynamicObject.cpp
@@ -484,11 +484,7 @@ NonnullRefPtr<DynamicObject> DynamicObject::create(DeprecatedString const& filep
VirtualAddress DynamicObject::patch_plt_entry(u32 relocation_offset)
{
auto relocation = plt_relocation_section().relocation_at_offset(relocation_offset);
-#if ARCH(I386)
- VERIFY(relocation.type() == R_386_JMP_SLOT);
-#else
VERIFY(relocation.type() == R_X86_64_JUMP_SLOT);
-#endif
auto symbol = relocation.symbol();
auto relocation_address = (FlatPtr*)relocation.address().as_ptr();
diff --git a/Userland/Libraries/LibELF/DynamicObject.h b/Userland/Libraries/LibELF/DynamicObject.h
index 8be9fdf8ed..fe0d3bfb39 100644
--- a/Userland/Libraries/LibELF/DynamicObject.h
+++ b/Userland/Libraries/LibELF/DynamicObject.h
@@ -65,19 +65,11 @@ public:
FlatPtr value() const { return m_sym.st_value; }
size_t size() const { return m_sym.st_size; }
unsigned index() const { return m_index; }
-#if ARCH(I386)
- unsigned type() const
- {
- return ELF32_ST_TYPE(m_sym.st_info);
- }
- unsigned bind() const { return ELF32_ST_BIND(m_sym.st_info); }
-#else
unsigned type() const
{
return ELF64_ST_TYPE(m_sym.st_info);
}
unsigned bind() const { return ELF64_ST_BIND(m_sym.st_info); }
-#endif
bool is_undefined() const
{
@@ -167,19 +159,11 @@ public:
unsigned offset_in_section() const { return m_offset_in_section; }
unsigned offset() const { return m_rel.r_offset; }
-#if ARCH(I386)
- unsigned type() const
- {
- return ELF32_R_TYPE(m_rel.r_info);
- }
- unsigned symbol_index() const { return ELF32_R_SYM(m_rel.r_info); }
-#else
unsigned type() const
{
return ELF64_R_TYPE(m_rel.r_info);
}
unsigned symbol_index() const { return ELF64_R_SYM(m_rel.r_info); }
-#endif
unsigned addend() const
{
VERIFY(m_addend_used);
diff --git a/Userland/Libraries/LibELF/Image.h b/Userland/Libraries/LibELF/Image.h
index b0bdba0304..ee1afd74b6 100644
--- a/Userland/Libraries/LibELF/Image.h
+++ b/Userland/Libraries/LibELF/Image.h
@@ -58,19 +58,11 @@ public:
FlatPtr value() const { return m_sym.st_value; }
size_t size() const { return m_sym.st_size; }
unsigned index() const { return m_index; }
-#if ARCH(I386)
- unsigned type() const
- {
- return ELF32_ST_TYPE(m_sym.st_info);
- }
- unsigned bind() const { return ELF32_ST_BIND(m_sym.st_info); }
-#else
unsigned type() const
{
return ELF64_ST_TYPE(m_sym.st_info);
}
unsigned bind() const { return ELF64_ST_BIND(m_sym.st_info); }
-#endif
Section section() const
{
return m_image.section(section_index());
@@ -169,19 +161,11 @@ public:
~Relocation() = default;
size_t offset() const { return m_rel.r_offset; }
-#if ARCH(I386)
- unsigned type() const
- {
- return ELF32_R_TYPE(m_rel.r_info);
- }
- unsigned symbol_index() const { return ELF32_R_SYM(m_rel.r_info); }
-#else
unsigned type() const
{
return ELF64_R_TYPE(m_rel.r_info);
}
unsigned symbol_index() const { return ELF64_R_SYM(m_rel.r_info); }
-#endif
Symbol symbol() const
{
return m_image.symbol(symbol_index());
diff --git a/Userland/Libraries/LibELF/Relocation.cpp b/Userland/Libraries/LibELF/Relocation.cpp
index 30bac88c5f..14e3e8db84 100644
--- a/Userland/Libraries/LibELF/Relocation.cpp
+++ b/Userland/Libraries/LibELF/Relocation.cpp
@@ -59,11 +59,7 @@ bool perform_relative_relocations(FlatPtr base_address)
for (unsigned i = 0; i < relocation_count; ++i) {
size_t offset_in_section = i * relocation_entry_size;
auto* relocation = (ElfW(Rela)*)(relocation_section_addr + offset_in_section);
-#if ARCH(I386)
- VERIFY(ELF32_R_TYPE(relocation->r_info) == R_386_RELATIVE);
-#else
VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE);
-#endif
auto* patch_address = (FlatPtr*)(base_address + relocation->r_offset);
FlatPtr relocated_address;
if (use_addend) {
diff --git a/Userland/Libraries/LibELF/Validation.cpp b/Userland/Libraries/LibELF/Validation.cpp
index 83880b0f94..8005b78a3c 100644
--- a/Userland/Libraries/LibELF/Validation.cpp
+++ b/Userland/Libraries/LibELF/Validation.cpp
@@ -23,13 +23,8 @@ bool validate_elf_header(ElfW(Ehdr) const& elf_header, size_t file_size, bool ve
return false;
}
-#if ARCH(I386)
- auto expected_class = ELFCLASS32;
- auto expected_bitness = 32;
-#else
auto expected_class = ELFCLASS64;
auto expected_bitness = 64;
-#endif
if (expected_class != elf_header.e_ident[EI_CLASS]) {
if (verbose)
dbgln("File is not a {}-bit ELF file.", expected_bitness);
@@ -61,13 +56,8 @@ bool validate_elf_header(ElfW(Ehdr) const& elf_header, size_t file_size, bool ve
return false;
}
-#if ARCH(I386)
- auto expected_machine = EM_386;
- auto expected_machine_name = "i386";
-#else
auto expected_machine = EM_X86_64;
auto expected_machine_name = "x86-64";
-#endif
if (expected_machine != elf_header.e_machine) {
if (verbose)
diff --git a/Userland/Libraries/LibSymbolication/Symbolication.cpp b/Userland/Libraries/LibSymbolication/Symbolication.cpp
index 231407116d..2894bde29e 100644
--- a/Userland/Libraries/LibSymbolication/Symbolication.cpp
+++ b/Userland/Libraries/LibSymbolication/Symbolication.cpp
@@ -43,13 +43,7 @@ Optional<FlatPtr> kernel_base()
return {};
}
auto kernel_base_str = DeprecatedString { file.value()->read_all(), NoChomp };
-#if ARCH(I386)
- using AddressType = u32;
-#elif ARCH(X86_64) || ARCH(AARCH64)
using AddressType = u64;
-#else
-# error Unknown architecture
-#endif
auto maybe_kernel_base = kernel_base_str.to_uint<AddressType>();
if (!maybe_kernel_base.has_value()) {
s_kernel_base_state = KernelBaseState::Invalid;