mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
Re: Optimise away eh_frame advance_loc 0
If we happen to get the fixed and variable parts of the advance_loc in different frags, bad things happen when subtracting one from a fr_fix of zero. PR 25125 * dw2gencfi.c (output_cfi_insn): Don't allow DW_CFA_advance_loc4 to be placed in a different frag to the rs_cfa.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2019-10-29 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 25125
|
||||||
|
* dw2gencfi.c (output_cfi_insn): Don't allow DW_CFA_advance_loc4
|
||||||
|
to be placed in a different frag to the rs_cfa.
|
||||||
|
|
||||||
2019-10-26 John David Anglin <danglin@gcc.gnu.org>
|
2019-10-26 John David Anglin <danglin@gcc.gnu.org>
|
||||||
|
|
||||||
PR gas/25121
|
PR gas/25121
|
||||||
|
@ -1630,7 +1630,12 @@ output_cfi_insn (struct cfi_insn_data *insn)
|
|||||||
/* The code in ehopt.c expects that one byte of the encoding
|
/* The code in ehopt.c expects that one byte of the encoding
|
||||||
is already allocated to the frag. This comes from the way
|
is already allocated to the frag. This comes from the way
|
||||||
that it scans the .eh_frame section looking first for the
|
that it scans the .eh_frame section looking first for the
|
||||||
.byte DW_CFA_advance_loc4. */
|
.byte DW_CFA_advance_loc4. Call frag_grow with the sum of
|
||||||
|
room needed by frag_more and frag_var to preallocate space
|
||||||
|
ensuring that the DW_CFA_advance_loc4 is in the fixed part
|
||||||
|
of the rs_cfa frag, so that the relax machinery can remove
|
||||||
|
the advance_loc should it advance by zero. */
|
||||||
|
frag_grow (5);
|
||||||
*frag_more (1) = DW_CFA_advance_loc4;
|
*frag_more (1) = DW_CFA_advance_loc4;
|
||||||
|
|
||||||
frag_var (rs_cfa, 4, 0, DWARF2_LINE_MIN_INSN_LENGTH << 3,
|
frag_var (rs_cfa, 4, 0, DWARF2_LINE_MIN_INSN_LENGTH << 3,
|
||||||
|
Reference in New Issue
Block a user