This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/3] gas: Make dwarf2dbg.c versions specific and add DW_AT_high_pc case for DWARF 4+.


On Apr 27, 2012, at 2:15 PM, Mark Wielaard wrote:

>       * dwarf2dbg.c (DWARF2_ARANGES_VERSION): New define to 2.
>       (DWARF2_LINE_VERSION): Likewise.
>       (out_debug_line): Use DWARF2_LINE_VERSION not DWARF2_VERSION.
>       (out_debug_aranges): Use DWARF2_ARANGES_VERSION not DWARF2_VERSION.
>       (out_debug_abbrev): Use DW_FORM_data for DW_AT_high_pc when
>       DWARF2_VERSION >= 4.
>       (out_debug_info): Use difference between start and end as data
>       value for DW_AT_high_pc when DWARF2_VERSION >= 4.
> ---
> gas/ChangeLog   |   11 +++++++++++
> gas/dwarf2dbg.c |   24 ++++++++++++++++++++----
> 2 files changed, 31 insertions(+), 4 deletions(-)
> 
> diff --git a/gas/ChangeLog b/gas/ChangeLog
> index cfc3f8d..df3de43 100644
> --- a/gas/ChangeLog
> +++ b/gas/ChangeLog
> @@ -1,3 +1,14 @@
> +2012-04-26  Mark Wielaard  <mjw@redhat.com>
> +
> +	* dwarf2dbg.c (DWARF2_ARANGES_VERSION): New define to 2.
> +	(DWARF2_LINE_VERSION): Likewise.
> +	(out_debug_line): Use DWARF2_LINE_VERSION not DWARF2_VERSION.
> +	(out_debug_aranges): Use DWARF2_ARANGES_VERSION not DWARF2_VERSION.
> +	(out_debug_abbrev): Use DW_FORM_data for DW_AT_high_pc when
> +	DWARF2_VERSION >= 4.
> +	(out_debug_info): Use difference between start and end as data
> +	value for DW_AT_high_pc when DWARF2_VERSION >= 4.
> +
> 2012-04-20  Tristan Gingold  <gingold@adacore.com>

[ Usually the ChangeLog chunk is omitted ]

> 	* config/tc-ia64.c (obj_elf_vms_common): New function.
> diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
> index 76f5e84..3e6c41e 100644
> --- a/gas/dwarf2dbg.c
> +++ b/gas/dwarf2dbg.c
> @@ -93,6 +93,12 @@
> #define DWARF2_VERSION 2
> #endif
> 
> +/* The .debug_aranges version has been 2 in DWARF version 2, 3 and 4. */
> +#define DWARF2_ARANGES_VERSION 2
> +
> +/* This implementation output version 2 .debug_line information. */
> +#define DWARF2_LINE_VERSION 2

Please, wrap DWARF2_LINE_VERSION within #ifndef/#endif, so that a target can override it.  In particular on ia64/VMS, the backtrace symbolizer requires version 3.

> +
> #include "subsegs.h"
> 
> #include "dwarf2.h"
> @@ -1457,7 +1463,7 @@ out_debug_line (segT line_seg)
>   line_end = exp.X_add_symbol;
> 
>   /* Version.  */
> -  out_two (DWARF2_VERSION);
> +  out_two (DWARF2_LINE_VERSION);
> 
>   /* Length of the prologue following this length.  */
>   prologue_end = symbol_temp_make ();
> @@ -1565,7 +1571,7 @@ out_debug_aranges (segT aranges_seg, segT info_seg)
>   aranges_end = exp.X_add_symbol;
> 
>   /* Version.  */
> -  out_two (DWARF2_VERSION);
> +  out_two (DWARF2_ARANGES_VERSION);
> 
>   /* Offset to .debug_info.  */
>   TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
> @@ -1631,7 +1637,11 @@ out_debug_abbrev (segT abbrev_seg,
>   if (all_segs->next == NULL)
>     {
>       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
> -      out_abbrev (DW_AT_high_pc, DW_FORM_addr);
> +      if (DWARF2_VERSION < 4)
> +	out_abbrev (DW_AT_high_pc, DW_FORM_addr);
> +      else
> +	out_abbrev (DW_AT_high_pc, (sizeof_address == 4
> +				    ? DW_FORM_data4 : DW_FORM_data8));
>     }
>   else
>     {
> @@ -1694,7 +1704,13 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
>       emit_expr (&exp, sizeof_address);
> 
>       /* DW_AT_high_pc */
> -      exp.X_op = O_symbol;
> +      if (DWARF2_VERSION < 4)
> +	exp.X_op = O_symbol;
> +      else
> +	{
> +	  exp.X_op = O_subtract;
> +	  exp.X_op_symbol = all_segs->text_start;
> +	}
>       exp.X_add_symbol = all_segs->text_end;
>       exp.X_add_number = 0;
>       emit_expr (&exp, sizeof_address);

Otherwise, looks good to me (but I cannot approve it).

Tristan.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]