msp430: Set DWARF2_ADDR_SIZE to 4.
authorKevin Buettner <kevinb@redhat.com>
Wed, 27 Jan 2016 19:44:38 +0000 (12:44 -0700)
committerKevin Buettner <kevinb@redhat.com>
Wed, 3 Feb 2016 16:21:51 +0000 (09:21 -0700)
This change makes gas's notion of the msp430 dwarf2 address size match
that of gcc and gdb.  This is needed so that the format of addresses
generated for DW_LNE_set_address in .debug_line will match the address
size for the compilation unit.

In gcc/config/msp430/msp430.h, it's set to 4:

  #define DWARF2_ADDR_SIZE 4

Likewise in gdb/msp430-tdep.c:

  set_gdbarch_dwarf2_addr_size (gdbarch, 4);

(As far as I can tell, however, GDB doesn't use this value when decoding
.debug_line.  Instead, GDB uses the Pointer Size from the compilation
unit.)

readelf is able to seamlessly handle mismatches between these various
sizes by using the size of the DW_LNE_set_address instruction to
determine the address size.  Another way to fix this problem is to
make GDB behave in a similar manner.  In my opinion, GDB should detect
and inform the user about these mismatches; it's not clear to me if
it's correct for GDB to go ahead and read the address anyway when a
size mismatch is detected.

Without this change, addresses in .debug_line are encoded in two bytes
for some multilibs.  When GDB reads the address for
DW_LNE_set_address, it uses the pointer size provided by the CU.  When
these values don't match, GDB reads the wrong number of bytes.  In the
cases that I've looked at, GDB is reading 4 bytes from a 2 byte
container, which results in a garbage address.  GDB discards lines
which have a bogus address; the end result is that GDB records no line
number information for CUs which have a mismatch between the address
size (from the CU) and the format of the address used by
DW_LNE_set_address.

gas/ChangeLog:

* config/tc-msp430.h (DWARF2_ADDR_SIZE): Set to 4.

gas/ChangeLog
gas/config/tc-msp430.h

index 10a72d2d7078298f19234e3b54c688fa528b907b..56146c7f804c398a377c02982b0c2950f1feb913 100644 (file)
@@ -1,3 +1,7 @@
+2016-02-03  Kevin Buettner  <kevinb@redhat.com>
+
+       * config/tc-msp430.h (DWARF2_ADDR_SIZE): Set to 4.
+
 2016-02-03  H.J. Lu  <hongjiu.lu@intel.com>
 
        * NEWS: Mention new command line option -mfence-as-lock-add=yes
index 4a02452628d138fba9b93300210a2202e35b432f..86c9117d83497a93b62c86b06c83be104f4d69c0 100644 (file)
@@ -171,3 +171,5 @@ extern bfd_boolean msp430_allow_local_subtract (expressionS *, expressionS *, se
 #define DWARF2_USE_FIXED_ADVANCE_PC 1
 
 #define TC_LINKRELAX_FIXUP(seg) ((seg->flags & SEC_CODE) || (seg->flags & SEC_DEBUGGING))
+
+#define DWARF2_ADDR_SIZE(bfd) 4