aboutsummaryrefslogtreecommitdiff
path: root/gas/dwarf2dbg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/dwarf2dbg.c')
-rw-r--r--gas/dwarf2dbg.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index e67c992..ecaccc9 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -1458,7 +1458,8 @@ out_file_list (void)
/* Switch to SEC and output a header length field. Return the size of
offsets used in SEC. The caller must set EXPR->X_add_symbol value
- to the end of the section. */
+ to the end of the section. EXPR->X_add_number will be set to the
+ negative size of the header. */
static int
out_header (asection *sec, expressionS *exp)
@@ -1638,6 +1639,7 @@ static void
out_debug_aranges (segT aranges_seg, segT info_seg)
{
unsigned int addr_size = sizeof_address;
+ offsetT size;
struct line_seg *s;
expressionS exp;
symbolS *aranges_end;
@@ -1646,21 +1648,27 @@ out_debug_aranges (segT aranges_seg, segT info_seg)
sizeof_offset = out_header (aranges_seg, &exp);
aranges_end = exp.X_add_symbol;
+ size = -exp.X_add_number;
/* Version. */
out_two (DWARF2_ARANGES_VERSION);
+ size += 2;
/* Offset to .debug_info. */
TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
+ size += sizeof_offset;
/* Size of an address (offset portion). */
out_byte (addr_size);
+ size++;
/* Size of a segment descriptor. */
out_byte (0);
+ size++;
/* Align the header. */
- frag_align (ffs (2 * addr_size) - 1, 0, 0);
+ while ((size++ % (2 * addr_size)) > 0)
+ out_byte (0);
for (s = all_segs; s; s = s->next)
{