mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
gas: Use udata for DW_AT_high_pc when emitting DWARF4
For DWARF4 DW_AT_high_pc can be expressed as constant offset from DW_AT_low_pc which saves a relocation. Use DW_FORM_udate (uleb128) to keep the constant value as small as possible. gas/ChangeLog: * dwarf2dbg.c (out_debug_abbrev): When DWARF2_VERSION >= 4, use DW_FORM_udata for DW_AT_high_pc. (out_debug_info): Use emit_leb128_expr for DW_AT_high_pc, when DWARF2_VERSION >= 4. * read.c (emit_leb128_exp): No longer static. * read.h (emit_leb128_exp): Define.
This commit is contained in:
parent
f63d03dde0
commit
6b9a135d72
@ -1,3 +1,12 @@
|
||||
2020-08-04 Mark Wielaard <mark@klomp.org>
|
||||
|
||||
* dwarf2dbg.c (out_debug_abbrev): When DWARF2_VERSION >= 4, use
|
||||
DW_FORM_udata for DW_AT_high_pc.
|
||||
(out_debug_info): Use emit_leb128_expr for DW_AT_high_pc, when
|
||||
DWARF2_VERSION >= 4.
|
||||
* read.c (emit_leb128_exp): No longer static.
|
||||
* read.h (emit_leb128_exp): Define.
|
||||
|
||||
2020-08-02 Mark Wielaard <mark@klomp.org>
|
||||
|
||||
* gas/dwarf2dbg.c (out_dir_and_file_list): For DWARF5 emit at
|
||||
|
@ -2444,8 +2444,7 @@ out_debug_abbrev (segT abbrev_seg,
|
||||
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));
|
||||
out_abbrev (DW_AT_high_pc, DW_FORM_udata);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2528,7 +2527,10 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg,
|
||||
}
|
||||
exp.X_add_symbol = all_segs->text_end;
|
||||
exp.X_add_number = 0;
|
||||
emit_expr (&exp, sizeof_address);
|
||||
if (DWARF2_VERSION < 4)
|
||||
emit_expr (&exp, sizeof_address);
|
||||
else
|
||||
emit_leb128_expr (&exp, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5138,7 +5138,7 @@ output_big_leb128 (char *p, LITTLENUM_TYPE *bignum, unsigned int size, int sign)
|
||||
/* Generate the appropriate fragments for a given expression to emit a
|
||||
leb128 value. SIGN is 1 for sleb, 0 for uleb. */
|
||||
|
||||
static void
|
||||
void
|
||||
emit_leb128_expr (expressionS *exp, int sign)
|
||||
{
|
||||
operatorT op = exp->X_op;
|
||||
|
@ -132,6 +132,7 @@ extern void emit_expr_with_reloc (expressionS *exp, unsigned int nbytes,
|
||||
TC_PARSE_CONS_RETURN_TYPE);
|
||||
extern void emit_expr_fix (expressionS *, unsigned int, fragS *, char *,
|
||||
TC_PARSE_CONS_RETURN_TYPE);
|
||||
extern void emit_leb128_expr (expressionS *, int);
|
||||
extern void equals (char *, int);
|
||||
extern void float_cons (int);
|
||||
extern void ignore_rest_of_line (void);
|
||||
|
Loading…
Reference in New Issue
Block a user