1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[DebugInfo/DWARF] - Report .eh_frame sections of version != 1.

Specification (https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html#AEN1349)
says that the value of Version field for .eh_frame should be 1.

Though we accept other values and might perform an attempt to read
it as a .debug_frame because of that, what is wrong.

This patch adds a version check.

Differential revision: https://reviews.llvm.org/D81469
This commit is contained in:
Georgii Rymar 2020-06-09 16:58:21 +03:00
parent 8609c64f9f
commit 764aa568b0
3 changed files with 31 additions and 0 deletions

View File

@ -415,6 +415,11 @@ Error DWARFDebugFrame::parse(DWARFDataExtractor Data) {
uint8_t Version = Data.getU8(&Offset);
const char *Augmentation = Data.getCStr(&Offset);
StringRef AugmentationString(Augmentation ? Augmentation : "");
// TODO: we should provide a way to report a warning and continue dumping.
if (IsEH && Version != 1)
return createStringError(errc::not_supported,
"unsupported CIE version: %" PRIu8, Version);
uint8_t AddressSize = Version < 4 ? Data.getAddressSize() :
Data.getU8(&Offset);
Data.setAddressSize(AddressSize);

View File

@ -0,0 +1,13 @@
## Check we do not support .eh_frame sections of version 0.
# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t
# RUN: not llvm-dwarfdump -debug-frame %t 2>&1 | FileCheck %s
# CHECK: unsupported CIE version: 0
.section .eh_frame,"a",@unwind
.long .Lend - .LCIEptr ## Length
.LCIEptr:
.long 0x00000000 ## CIE ID
.byte 0 ## Version
.Lend:

View File

@ -0,0 +1,13 @@
## Check we do not support .eh_frame sections of versions greater than 1.
# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t
# RUN: not llvm-dwarfdump -debug-frame %t 2>&1 | FileCheck %s
# CHECK: unsupported CIE version: 2
.section .eh_frame,"a",@unwind
.long .Lend - .LCIEptr ## Length
.LCIEptr:
.long 0x00000000 ## CIE ID
.byte 2 ## Version
.Lend: