mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
gas: Check for overflow on return column in version 1 CIE DWARF
In version 1 of DWARF CIE format, the return register column is just a single byte. For targets with large numbers of DWARF registers, any use of a register with a high number for the return column will (currently) silently overflow giving incorrect DWARF. This commit adds an error when the overflow occurs. gas/ChangeLog: * dw2gencfi.c (output_cie): Error on return column overflow. * testsuite/gas/riscv/cie-rtn-col-1.d: New file. * testsuite/gas/riscv/cie-rtn-col-3.d: New file. * testsuite/gas/riscv/cie-rtn-col.s: New file. Change-Id: I1809f739ba7771737ec012807f0260e1a3ed5e64
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2019-11-22 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* dw2gencfi.c (output_cie): Error on return column overflow.
|
||||||
|
* testsuite/gas/riscv/cie-rtn-col-1.d: New file.
|
||||||
|
* testsuite/gas/riscv/cie-rtn-col-3.d: New file.
|
||||||
|
* testsuite/gas/riscv/cie-rtn-col.s: New file.
|
||||||
|
|
||||||
2019-11-22 Andrew Burgess <andrew.burgess@embecosm.com>
|
2019-11-22 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* config/tc-riscv.c (tc_riscv_regname_to_dw2regnum): Lookup CSR
|
* config/tc-riscv.c (tc_riscv_regname_to_dw2regnum): Lookup CSR
|
||||||
|
@ -1887,7 +1887,12 @@ output_cie (struct cie_entry *cie, bfd_boolean eh_frame, int align)
|
|||||||
out_uleb128 (DWARF2_LINE_MIN_INSN_LENGTH); /* Code alignment. */
|
out_uleb128 (DWARF2_LINE_MIN_INSN_LENGTH); /* Code alignment. */
|
||||||
out_sleb128 (DWARF2_CIE_DATA_ALIGNMENT); /* Data alignment. */
|
out_sleb128 (DWARF2_CIE_DATA_ALIGNMENT); /* Data alignment. */
|
||||||
if (flag_dwarf_cie_version == 1) /* Return column. */
|
if (flag_dwarf_cie_version == 1) /* Return column. */
|
||||||
out_one (cie->return_column);
|
{
|
||||||
|
if ((cie->return_column & 0xff) != cie->return_column)
|
||||||
|
as_bad (_("return column number %d overflows in CIE version 1"),
|
||||||
|
cie->return_column);
|
||||||
|
out_one (cie->return_column);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
out_uleb128 (cie->return_column);
|
out_uleb128 (cie->return_column);
|
||||||
if (eh_frame)
|
if (eh_frame)
|
||||||
|
3
gas/testsuite/gas/riscv/cie-rtn-col-1.d
Normal file
3
gas/testsuite/gas/riscv/cie-rtn-col-1.d
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#as: --gdwarf-cie-version=1
|
||||||
|
#source: cie-rtn-col.s
|
||||||
|
#error: return column number 4929 overflows in CIE version 1
|
17
gas/testsuite/gas/riscv/cie-rtn-col-3.d
Normal file
17
gas/testsuite/gas/riscv/cie-rtn-col-3.d
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#objdump: --dwarf=frames
|
||||||
|
#as: --gdwarf-cie-version=3
|
||||||
|
#source: cie-rtn-col.s
|
||||||
|
|
||||||
|
.*: file format elf.*-.*riscv
|
||||||
|
|
||||||
|
Contents of the .* section:
|
||||||
|
|
||||||
|
|
||||||
|
00000000 [a-zA-Z0-9]+ [a-zA-Z0-9]+ CIE
|
||||||
|
Version: 3
|
||||||
|
Augmentation: .*
|
||||||
|
Code alignment factor: .*
|
||||||
|
Data alignment factor: .*
|
||||||
|
Return address column: 4929
|
||||||
|
Augmentation data: .*
|
||||||
|
#...
|
3
gas/testsuite/gas/riscv/cie-rtn-col.s
Normal file
3
gas/testsuite/gas/riscv/cie-rtn-col.s
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.cfi_startproc
|
||||||
|
.cfi_return_column mepc
|
||||||
|
.cfi_endproc
|
Reference in New Issue
Block a user