244 lines · plain
1## Check parsing and dumping of SFrame Function Descriptor Entries.2# RUN: yaml2obj --docnum=1 %s -o %t.13# RUN: llvm-readobj --sframe=.sframe_short --sframe=.sframe_section_relative \4# RUN: --sframe=.sframe_fde_relative %t.1 2>&1 | \5# RUN: FileCheck %s --strict-whitespace --match-full-lines \6# RUN: -DFILE=%t.1 --check-prefix=CASE17 8## Check big-endian support.9# RUN: yaml2obj --docnum=2 %s -o %t.210# RUN: llvm-readobj --sframe %t.2 2>&1 | \11# RUN: FileCheck %s --strict-whitespace --match-full-lines \12# RUN: -DFILE=%t.2 --check-prefix=CASE213 14--- !ELF15FileHeader:16 Class: ELFCLASS6417 Data: ELFDATA2LSB18 Type: ET_EXEC19Sections:20 - Name: .sframe_short21 Type: SHT_GNU_SFRAME22 Flags: [ SHF_ALLOC ]23 ContentArray: [24 0xe2, 0xde, 0x02, 0x00, # Preamble (magic, version, flags)25 # Header:26 0x03, 0x42, 0x47, 0x04, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length27 0x01, 0x00, 0x00, 0x00, # Number of FDEs28 0x10, 0x00, 0x00, 0x00, # Number of FREs29 0x00, 0x10, 0x00, 0x00, # FRE length30 0x00, 0x00, 0x00, 0x00, # FDE offset31 0x00, 0x01, 0x00, 0x00, # FRE offset32 0xde, 0xad, 0xbe, 0xef, # AUX header33 0x01, 0x02, 0x03, 0x04, # Short FDE34 ]35# CASE1-LABEL:SFrame section '.sframe_short' {36# CASE1: Header {37# CASE1-NEXT: Magic: 0xDEE238# CASE1-NEXT: Version: V2 (0x2)39# CASE1-NEXT: Flags [ (0x0)40# CASE1-NEXT: ]41# CASE1-NEXT: ABI: AMD64EndianLittle (0x3)42# CASE1-NEXT: CFA fixed FP offset (unused): 6643# CASE1-NEXT: CFA fixed RA offset: 7144# CASE1-NEXT: Auxiliary header length: 445# CASE1-NEXT: Num FDEs: 146# CASE1-NEXT: Num FREs: 1647# CASE1-NEXT: FRE subsection length: 409648# CASE1-NEXT: FDE subsection offset: 049# CASE1-NEXT: FRE subsection offset: 25650# CASE1-NEXT: Auxiliary header: [0xDE, 0xAD, 0xBE, 0xEF]51# CASE1-NEXT: }52# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x24 while reading [0x20, 0x34)53# CASE1-NEXT:}54 55 - Name: .sframe_section_relative56 Type: SHT_GNU_SFRAME57 Flags: [ SHF_ALLOC ]58 ContentArray: [59 0xe2, 0xde, 0x02, 0x00, # Preamble (magic, version, flags)60 # Header:61 0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length62 0x01, 0x00, 0x00, 0x00, # Number of FDEs63 0x10, 0x00, 0x00, 0x00, # Number of FREs64 0x00, 0x10, 0x00, 0x00, # FRE length65 0x04, 0x00, 0x00, 0x00, # FDE offset66 0x00, 0x01, 0x00, 0x00, # FRE offset67 68 0xff, 0xff, 0xff, 0xff, # Unused data skipped due to the FDE offset field69 70 # FDE:71 0x00, 0xde, 0xad, 0x00, # Start Address72 0xbe, 0x01, 0x00, 0x00, # Size73 0x10, 0x00, 0x00, 0x00, # Start FRE Offset74 0x00, 0x00, 0x00, 0x00, # Number of FREs75 0x31, 0xde, 0xad, 0x00, # Info, RepSize, Padding276 ]77## Also testing:78## - dead space between the header and the FDE subsection.79## - PCMask FDE types80## - unused PAuth key handling81# CASE1-LABEL:SFrame section '.sframe_section_relative' {82# CASE1: Header {83# CASE1-NEXT: Magic: 0xDEE284# CASE1-NEXT: Version: V2 (0x2)85# CASE1-NEXT: Flags [ (0x0)86# CASE1-NEXT: ]87# CASE1-NEXT: ABI: AMD64EndianLittle (0x3)88# CASE1-NEXT: CFA fixed FP offset (unused): 6689# CASE1-NEXT: CFA fixed RA offset: 7190# CASE1-NEXT: Auxiliary header length: 091# CASE1-NEXT: Num FDEs: 192# CASE1-NEXT: Num FREs: 1693# CASE1-NEXT: FRE subsection length: 409694# CASE1-NEXT: FDE subsection offset: 495# CASE1-NEXT: FRE subsection offset: 25696# CASE1-NEXT: Auxiliary header: []97# CASE1-NEXT: }98# CASE1-NEXT: Function Index [99# CASE1-NEXT: FuncDescEntry [0] {100# CASE1-NEXT: PC: 0xADDE24101# CASE1-NEXT: Size: 0x1BE102# CASE1-NEXT: Start FRE Offset: 0x10103# CASE1-NEXT: Num FREs: 0104# CASE1-NEXT: Info {105# CASE1-NEXT: FRE Type: Addr2 (0x1)106# CASE1-NEXT: FDE Type: PCMask (0x1)107# CASE1-NEXT: Raw: 0x31108# CASE1-NEXT: }109# CASE1-NEXT: Repetitive block size: 0xDE110# CASE1-NEXT: Padding2: 0xAD111# CASE1-NEXT: FREs [112# CASE1-NEXT: ]113# CASE1-NEXT: }114# CASE1-NEXT: ]115# CASE1-NEXT:}116 117 - Name: .sframe_fde_relative118 Type: SHT_GNU_SFRAME119 Flags: [ SHF_ALLOC ]120 ContentArray: [121 0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)122 # Header:123 0x02, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length124 0x01, 0x00, 0x00, 0x00, # Number of FDEs125 0x10, 0x00, 0x00, 0x00, # Number of FREs126 0x00, 0x10, 0x00, 0x00, # FRE length127 0x04, 0x00, 0x00, 0x00, # FDE offset128 0x00, 0x01, 0x00, 0x00, # FRE offset129 130 0xff, 0xff, 0xff, 0xff, # Unused data skipped due to the FDE offset field131 132 # FDE:133 0x00, 0xde, 0xad, 0x00, # Start Address134 0xbe, 0x01, 0x00, 0x00, # Size135 0x10, 0x00, 0x00, 0x00, # Start FRE Offset136 0x00, 0x00, 0x00, 0x00, # Number of FREs137 0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2138 ]139## Also testing:140## - PCInc FDE type141## - AArch64 PAuth key handling142# CASE1-LABEL:SFrame section '.sframe_fde_relative' {143# CASE1: Header {144# CASE1-NEXT: Magic: 0xDEE2145# CASE1-NEXT: Version: V2 (0x2)146# CASE1-NEXT: Flags [ (0x4)147# CASE1-NEXT: FDEFuncStartPCRel (0x4){{ *}}148# CASE1-NEXT: ]149# CASE1-NEXT: ABI: AArch64EndianLittle (0x2)150# CASE1-NEXT: CFA fixed FP offset (unused): 66151# CASE1-NEXT: CFA fixed RA offset (unused): 71152# CASE1-NEXT: Auxiliary header length: 0153# CASE1-NEXT: Num FDEs: 1154# CASE1-NEXT: Num FREs: 16155# CASE1-NEXT: FRE subsection length: 4096156# CASE1-NEXT: FDE subsection offset: 4157# CASE1-NEXT: FRE subsection offset: 256158# CASE1-NEXT: Auxiliary header: []159# CASE1-NEXT: }160# CASE1-NEXT: Function Index [161# CASE1-NEXT: FuncDescEntry [0] {162# CASE1-NEXT: PC: 0xADDE78163# CASE1-NEXT: Size: 0x1BE164# CASE1-NEXT: Start FRE Offset: 0x10165# CASE1-NEXT: Num FREs: 0166# CASE1-NEXT: Info {167# CASE1-NEXT: FRE Type: Addr4 (0x2)168# CASE1-NEXT: FDE Type: PCInc (0x0)169# CASE1-NEXT: PAuth Key: A (0x0)170# CASE1-NEXT: Raw: 0x2171# CASE1-NEXT: }172# CASE1-NEXT: Repetitive block size (unused): 0xDE173# CASE1-NEXT: Padding2: 0xAD174# CASE1-NEXT: FREs [175# CASE1-NEXT: ]176# CASE1-NEXT: }177# CASE1-NEXT: ]178# CASE1-NEXT:}179 180--- !ELF181FileHeader:182 Class: ELFCLASS64183 Data: ELFDATA2MSB184 Type: ET_EXEC185Sections:186 - Name: .sframe187 Type: SHT_GNU_SFRAME188 Flags: [ SHF_ALLOC ]189 ContentArray: [190 0xde, 0xe2, 0x02, 0x05, # Preamble (magic, version, flags)191 # Header:192 0x01, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length193 0x00, 0x00, 0x00, 0x01, # Number of FDEs194 0x00, 0x00, 0x00, 0x10, # Number of FREs195 0x00, 0x00, 0x10, 0x00, # FRE length196 0x00, 0x00, 0x00, 0x00, # FDE offset197 0x00, 0x00, 0x01, 0x00, # FRE offset198 199 # FDE:200 0x00, 0xde, 0xad, 0x00, # Start Address201 0x00, 0x00, 0x01, 0xbe, # Size202 0x00, 0x00, 0x00, 0x10, # Start FRE Offset203 0x00, 0x00, 0x00, 0x00, # Number of FREs204 0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2205 ]206# CASE2-LABEL:SFrame section '.sframe' {207# CASE2: Header {208# CASE2-NEXT: Magic: 0xDEE2209# CASE2-NEXT: Version: V2 (0x2)210# CASE2-NEXT: Flags [ (0x5)211# CASE2-NEXT: FDEFuncStartPCRel (0x4){{ *}}212# CASE2-NEXT: FDESorted (0x1){{ *}}213# CASE2-NEXT: ]214# CASE2-NEXT: ABI: AArch64EndianBig (0x1)215# CASE2-NEXT: CFA fixed FP offset (unused): 66216# CASE2-NEXT: CFA fixed RA offset (unused): 71217# CASE2-NEXT: Auxiliary header length: 0218# CASE2-NEXT: Num FDEs: 1219# CASE2-NEXT: Num FREs: 16220# CASE2-NEXT: FRE subsection length: 4096221# CASE2-NEXT: FDE subsection offset: 0222# CASE2-NEXT: FRE subsection offset: 256223# CASE2-NEXT: Auxiliary header: []224# CASE2-NEXT: }225# CASE2-NEXT: Function Index [226# CASE2-NEXT: FuncDescEntry [0] {227# CASE2-NEXT: PC: 0xDEAD1C228# CASE2-NEXT: Size: 0x1BE229# CASE2-NEXT: Start FRE Offset: 0x10230# CASE2-NEXT: Num FREs: 0231# CASE2-NEXT: Info {232# CASE2-NEXT: FRE Type: Addr4 (0x2)233# CASE2-NEXT: FDE Type: PCInc (0x0)234# CASE2-NEXT: PAuth Key: A (0x0)235# CASE2-NEXT: Raw: 0x2236# CASE2-NEXT: }237# CASE2-NEXT: Repetitive block size (unused): 0xDE238# CASE2-NEXT: Padding2: 0xAD00239# CASE2-NEXT: FREs [240# CASE2-NEXT: ]241# CASE2-NEXT: }242# CASE2-NEXT: ]243# CASE2-NEXT:}244