From: Martin Simmons Date: Thu, 27 Mar 2025 16:03:45 +0000 (+0000) Subject: Fix parsing .debug_aranges section for signed addresses. X-Git-Tag: binutils-2_45~980 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1603a80c5cda1f612cda6a32c095ff40d7fca081;p=thirdparty%2Fbinutils-gdb.git Fix parsing .debug_aranges section for signed addresses. Some architectures, such as MIPS, have signed addresses and this changes read_addrmap_from_aranges to record them as signed when required. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32658 Approved-By: Tom Tromey --- diff --git a/gdb/dwarf2/aranges.c b/gdb/dwarf2/aranges.c index 7016eee557c..ac530abd6b3 100644 --- a/gdb/dwarf2/aranges.c +++ b/gdb/dwarf2/aranges.c @@ -59,6 +59,7 @@ read_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, gdb::unordered_set debug_info_offset_seen; const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch); + const int signed_addr_p = bfd_get_sign_extend_vma (abfd); const gdb_byte *addr = section->buffer; while (addr < section->buffer + section->size) { @@ -167,8 +168,13 @@ read_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, plongest (entry_addr - section->buffer)); return false; } - ULONGEST start = extract_unsigned_integer (addr, address_size, - dwarf5_byte_order); + ULONGEST start; + if (signed_addr_p) + start = extract_signed_integer (addr, address_size, + dwarf5_byte_order); + else + start = extract_unsigned_integer (addr, address_size, + dwarf5_byte_order); addr += address_size; ULONGEST length = extract_unsigned_integer (addr, address_size, dwarf5_byte_order);