diff --git a/Userland/Libraries/LibCoredump/Reader.cpp b/Userland/Libraries/LibCoredump/Reader.cpp index 94f9f75bd6..5acb3c20d5 100644 --- a/Userland/Libraries/LibCoredump/Reader.cpp +++ b/Userland/Libraries/LibCoredump/Reader.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -139,8 +140,10 @@ Optional Reader::peek_memory(FlatPtr address) const return {}; FlatPtr offset_in_region = address - region->region_start; - const char* region_data = image().program_header(region->program_header_index).raw_data(); - return *(const FlatPtr*)(®ion_data[offset_in_region]); + auto* region_data = bit_cast(image().program_header(region->program_header_index).raw_data()); + FlatPtr value { 0 }; + ByteReader::load(region_data + offset_in_region, value); + return value; } const JsonObject Reader::process_info() const diff --git a/Userland/Libraries/LibDebug/Dwarf/CompilationUnit.cpp b/Userland/Libraries/LibDebug/Dwarf/CompilationUnit.cpp index d8b0343d76..9bef566e5a 100644 --- a/Userland/Libraries/LibDebug/Dwarf/CompilationUnit.cpp +++ b/Userland/Libraries/LibDebug/Dwarf/CompilationUnit.cpp @@ -6,6 +6,7 @@ #include "CompilationUnit.h" #include "DIE.h" +#include namespace Debug::Dwarf { @@ -94,9 +95,11 @@ FlatPtr CompilationUnit::get_address(size_t index) const auto base = address_table_base(); auto debug_addr_data = dwarf_info().debug_addr_data(); VERIFY(base < debug_addr_data.size()); - auto addresses = reinterpret_cast(debug_addr_data.offset(base)); - VERIFY(base + index * sizeof(FlatPtr) < debug_addr_data.size()); - return addresses[index]; + auto addresses = debug_addr_data.slice(base); + VERIFY(index * sizeof(FlatPtr) < addresses.size()); + FlatPtr value { 0 }; + ByteReader::load(addresses.offset_pointer(index * sizeof(FlatPtr)), value); + return value; } char const* CompilationUnit::get_string(size_t index) const @@ -105,9 +108,9 @@ char const* CompilationUnit::get_string(size_t index) const auto debug_str_offsets_data = dwarf_info().debug_str_offsets_data(); VERIFY(base < debug_str_offsets_data.size()); // FIXME: This assumes DWARF32 - auto offsets = reinterpret_cast(debug_str_offsets_data.offset(base)); - VERIFY(base + index * sizeof(u32) < debug_str_offsets_data.size()); - auto offset = offsets[index]; - return reinterpret_cast(dwarf_info().debug_strings_data().offset(offset)); + auto offsets = debug_str_offsets_data.slice(base); + VERIFY(index * sizeof(u32) < offsets.size()); + auto offset = ByteReader::load32(offsets.offset_pointer(index * sizeof(u32))); + return bit_cast(dwarf_info().debug_strings_data().offset(offset)); } } diff --git a/Userland/Libraries/LibDebug/Dwarf/DwarfInfo.cpp b/Userland/Libraries/LibDebug/Dwarf/DwarfInfo.cpp index da94efe54b..14cec259bd 100644 --- a/Userland/Libraries/LibDebug/Dwarf/DwarfInfo.cpp +++ b/Userland/Libraries/LibDebug/Dwarf/DwarfInfo.cpp @@ -9,6 +9,7 @@ #include "AttributeValue.h" #include "CompilationUnit.h" +#include #include #include @@ -344,8 +345,8 @@ void DwarfInfo::build_cached_dies() const auto index = ranges->as_unsigned(); auto base = die.compilation_unit().range_lists_base(); // FIXME: This assumes that the format is DWARf32 - auto offsets = reinterpret_cast(debug_range_lists_data().offset(base)); - offset = offsets[index] + base; + auto offsets = debug_range_lists_data().slice(base); + offset = ByteReader::load32(offsets.offset_pointer(index * sizeof(u32))) + base; } Vector entries;