diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-11-04 22:44:48 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-11-28 00:03:05 +0000 |
commit | 22eb4a06176dfef554008a62844e0ce30df2260f (patch) | |
tree | b1a99bdf6d2cf9c5201a8b124d05f3353d781ff5 /gas/dw2gencfi.c | |
parent | 4762fe621e84347b6e1ad1f2d16d2bc6cd28495e (diff) | |
download | gdb-22eb4a06176dfef554008a62844e0ce30df2260f.zip gdb-22eb4a06176dfef554008a62844e0ce30df2260f.tar.gz gdb-22eb4a06176dfef554008a62844e0ce30df2260f.tar.bz2 |
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
Diffstat (limited to 'gas/dw2gencfi.c')
-rw-r--r-- | gas/dw2gencfi.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c index e27253d..c1b5bec 100644 --- a/gas/dw2gencfi.c +++ b/gas/dw2gencfi.c @@ -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_sleb128 (DWARF2_CIE_DATA_ALIGNMENT); /* Data alignment. */ 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 out_uleb128 (cie->return_column); if (eh_frame) |