From 02fe846e43cb0190251a6fefbd322201b4bbe02d Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 28 Feb 2014 15:09:32 +1030 Subject: [PATCH] Incorrect .debug_line prologue header length for 64-bit DWARF Don't be clever, calculate the length directly as the difference of two symbols. * dwarf2dbg.c (out_debug_line): Correct .debug_line header_length field for 64-bit dwarf. --- gas/ChangeLog | 5 +++++ gas/dwarf2dbg.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 34698210a7b..09dd7574966 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2014-02-28 Alan Modra + + * dwarf2dbg.c (out_debug_line): Correct .debug_line header_length + field for 64-bit dwarf. + 2014-02-21 Ilya Tocar * config/tc-i386.c (cpu_arch): Add .prefetchwt1. diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 6d6ee2dd198..ac6148fe7ec 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -1515,7 +1515,7 @@ static void out_debug_line (segT line_seg) { expressionS exp; - symbolS *prologue_end; + symbolS *prologue_start, *prologue_end; symbolS *line_end; struct line_seg *s; int sizeof_offset; @@ -1527,10 +1527,14 @@ out_debug_line (segT line_seg) out_two (DWARF2_LINE_VERSION); /* Length of the prologue following this length. */ + prologue_start = symbol_temp_make (); prologue_end = symbol_temp_make (); + exp.X_op = O_subtract; exp.X_add_symbol = prologue_end; - exp.X_add_number = - (4 + 2 + 4); + exp.X_op_symbol = prologue_start; + exp.X_add_number = 0; emit_expr (&exp, sizeof_offset); + symbol_set_value_now (prologue_start); /* Parameters of the state machine. */ out_byte (DWARF2_LINE_MIN_INSN_LENGTH); -- 2.30.2