304 lines · plain
1# RUN: yaml2obj --docnum=1 %s -o %t.12# RUN: llvm-readobj --sframe=.sframe_eof_address --sframe=.sframe_eof_offset --sframe \3# RUN: %t.1 2>&1 | \4# RUN: FileCheck %s --strict-whitespace --match-full-lines \5# RUN: -DFILE=%t.1 --check-prefix=CASE16 7# RUN: yaml2obj --docnum=2 %s -o %t.28# RUN: llvm-readobj --sframe %t.2 2>&1 | \9# RUN: FileCheck %s --strict-whitespace --match-full-lines \10# RUN: -DFILE=%t.2 --check-prefix=CASE211 12--- !ELF13FileHeader:14 Class: ELFCLASS6415 Data: ELFDATA2LSB16 Type: ET_EXEC17Sections:18 - Name: .sframe_eof_address19 Type: SHT_GNU_SFRAME20 Flags: [ SHF_ALLOC ]21 ContentArray: [22 0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)23 # Header:24 0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length25 0x01, 0x00, 0x00, 0x00, # Number of FDEs26 0x01, 0x00, 0x00, 0x00, # Number of FREs27 0x00, 0x10, 0x00, 0x00, # FRE length28 0x00, 0x00, 0x00, 0x00, # FDE offset29 0x00, 0x00, 0x00, 0x00, # FRE offset30 31 # FDE[0]:32 0x00, 0xde, 0xad, 0x00, # Start Address33 0xbe, 0x01, 0x00, 0x00, # Size34 0x00, 0x00, 0x00, 0x00, # Start FRE Offset35 0x01, 0x00, 0x00, 0x00, # Number of FREs36 0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding237 38 # FRE[0]:39 0x00 # Start Address, (missing) Info40 ]41# CASE1-LABEL:SFrame section '.sframe_eof_address' {42# CASE1: FuncDescEntry [0] {43# CASE1: Info {44# CASE1-NEXT: FRE Type: Addr1 (0x0)45# CASE1-NEXT: FDE Type: PCInc (0x0)46# CASE1: FREs [47# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x31 while reading [0x30, 0x32)48# CASE1-NEXT: ]49 50 - Name: .sframe_eof_offset51 Type: SHT_GNU_SFRAME52 Flags: [ SHF_ALLOC ]53 ContentArray: [54 0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)55 # Header:56 0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length57 0x01, 0x00, 0x00, 0x00, # Number of FDEs58 0x01, 0x00, 0x00, 0x00, # Number of FREs59 0x00, 0x10, 0x00, 0x00, # FRE length60 0x00, 0x00, 0x00, 0x00, # FDE offset61 0x00, 0x00, 0x00, 0x00, # FRE offset62 63 # FDE[0]:64 0x00, 0xde, 0xad, 0x00, # Start Address65 0xbe, 0x01, 0x00, 0x00, # Size66 0x00, 0x00, 0x00, 0x00, # Start FRE Offset67 0x01, 0x00, 0x00, 0x00, # Number of FREs68 0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding269 70 # FRE[0]:71 0x00, 0x02 # Start Address, Info, (missing) Offsets72 ]73# CASE1-LABEL:SFrame section '.sframe_eof_offset' {74# CASE1: FuncDescEntry [0] {75# CASE1: Info {76# CASE1-NEXT: FRE Type: Addr1 (0x0)77# CASE1-NEXT: FDE Type: PCInc (0x0)78# CASE1: FREs [79# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x32 while reading [0x32, 0x33)80# CASE1-NEXT: ]81 82 - Name: .sframe83 Type: SHT_GNU_SFRAME84 Flags: [ SHF_ALLOC ]85 ContentArray: [86 0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags)87 # Header:88 0x03, 0x42, 0x40, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length89 0x03, 0x00, 0x00, 0x00, # Number of FDEs90 0x01, 0x00, 0x00, 0x00, # Number of FREs91 0x00, 0x10, 0x00, 0x00, # FRE length92 0x00, 0x00, 0x00, 0x00, # FDE offset93 0x00, 0x00, 0x00, 0x00, # FRE offset94 95 # FDE[0]:96 0x00, 0x00, 0xde, 0x00, # Start Address97 0xbe, 0x01, 0x00, 0x00, # Size98 0x00, 0x00, 0x00, 0x00, # Start FRE Offset99 0x02, 0x00, 0x00, 0x00, # Number of FREs100 0x00, 0xde, 0xad, 0x00, # Info, RepSize, Padding2101 102 # FDE[1]:103 0x00, 0x00, 0xad, 0x00, # Start Address104 0xbe, 0x01, 0x00, 0x00, # Size105 0x08, 0x00, 0x00, 0x00, # Start FRE Offset106 0x03, 0x00, 0x00, 0x00, # Number of FREs107 0x11, 0xde, 0xad, 0x00, # Info, RepSize, Padding2108 109 # FDE[2]:110 0x00, 0x00, 0xbe, 0x00, # Start Address111 0xbe, 0x01, 0x00, 0x00, # Size112 0x08, 0x00, 0x00, 0x00, # Start FRE Offset113 0x01, 0x00, 0x00, 0x00, # Number of FREs114 0x03, 0xde, 0xad, 0x00, # Info, RepSize, Padding2115 116 # FRE[0,0]: Zero offsets117 0x00, 0x00, # Start Address, Info118 119 # FRE[0,1]: One four-byte offset, SP-based120 0x01, 0x43, # Start Address, Info121 0x74, 0x00, 0x00, 0x00, # Offset[0]122 123 # FRE[1,0]: Two two-byte offsets, FP-based124 0x00, 0x00, 0x24, # Start Address, Info125 0x10, 0x00, 0x20, 0x00, # Offset[0], Offset[1]126 127 # FRE[1,1]: Four one-byte offsets, FP-based128 0x00, 0x01, 0x08, # Start Address, Info129 0x10, 0x20, 0x30, 0x40, # Offset[0-3]130 ]131## Testing:132## - little-endian support133## - AMD64 ABI134## - one and two byte address sizes135## - PCInc and PCMask FDE types136## - all offset sizes137## - various offset counts138## - hitting EOF after printing some number of FREs139## - invalid FRE type140# CASE1-LABEL:SFrame section '.sframe' {141# CASE1: ABI: AMD64EndianLittle (0x3)142# CASE1: CFA fixed RA offset: 64143# CASE1: FuncDescEntry [0] {144# CASE1-NEXT: PC: 0xDE007F145# CASE1: Info {146# CASE1-NEXT: FRE Type: Addr1 (0x0)147# CASE1-NEXT: FDE Type: PCInc (0x0)148# CASE1: FREs [149# CASE1-NEXT: Frame Row Entry {150# CASE1-NEXT: Start Address: 0xDE007F151# CASE1-NEXT: Return Address Signed: No152# CASE1-NEXT: Offset Size: B1 (0x0)153# CASE1-NEXT: Base Register: FP (0x0)154# CASE1-NEXT: RA Offset: 64155# CASE1-NEXT: }156# CASE1-NEXT: Frame Row Entry {157# CASE1-NEXT: Start Address: 0xDE0080158# CASE1-NEXT: Return Address Signed: No159# CASE1-NEXT: Offset Size: B4 (0x2)160# CASE1-NEXT: Base Register: SP (0x1)161# CASE1-NEXT: CFA Offset: 116162# CASE1-NEXT: RA Offset: 64163# CASE1-NEXT: }164# CASE1-NEXT: ]165# CASE1: FuncDescEntry [1] {166# CASE1-NEXT: PC: 0xAD0093167# CASE1: Info {168# CASE1-NEXT: FRE Type: Addr2 (0x1)169# CASE1-NEXT: FDE Type: PCMask (0x1)170# CASE1: FREs [171# CASE1-NEXT: Frame Row Entry {172# CASE1-NEXT: Start Address: 0x0173# CASE1-NEXT: Return Address Signed: No174# CASE1-NEXT: Offset Size: B2 (0x1)175# CASE1-NEXT: Base Register: FP (0x0)176# CASE1-NEXT: CFA Offset: 16177# CASE1-NEXT: RA Offset: 64178# CASE1-NEXT: FP Offset: 32179# CASE1-NEXT: }180# CASE1-NEXT: Frame Row Entry {181# CASE1-NEXT: Start Address: 0x100182# CASE1-NEXT: Return Address Signed: No183# CASE1-NEXT: Offset Size: B1 (0x0)184# CASE1-NEXT: Base Register: FP (0x0)185# CASE1-NEXT: CFA Offset: 16186# CASE1-NEXT: RA Offset: 64187# CASE1-NEXT: FP Offset: 32188# CASE1-NEXT: Extra Offsets: [48, 64]189# CASE1-NEXT: }190# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x6e while reading [0x6e, 0x71)191# CASE1: FuncDescEntry [2] {192# CASE1: Info {193# CASE1-NEXT: FRE Type: 0x3194# CASE1: FREs [195# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unsupported FRE type 3 at offset 0x60196 197--- !ELF198FileHeader:199 Class: ELFCLASS64200 Data: ELFDATA2MSB201 Type: ET_EXEC202Sections:203 - Name: .sframe204 Type: SHT_GNU_SFRAME205 Flags: [ SHF_ALLOC ]206 ContentArray: [207 0xde, 0xe2, 0x02, 0x05, # Preamble (magic, version, flags)208 # Header:209 0x01, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length210 0x00, 0x00, 0x00, 0x01, # Number of FDEs211 0x00, 0x00, 0x00, 0x10, # Number of FREs212 0x00, 0x00, 0x10, 0x00, # FRE length213 0x00, 0x00, 0x00, 0x00, # FDE offset214 0x00, 0x00, 0x01, 0x00, # FRE offset215 216 # FDE:217 0x00, 0xde, 0x00, 0x00, # Start Address218 0x00, 0x00, 0x01, 0xbe, # Size219 0x00, 0x00, 0x00, 0x00, # Start FRE Offset220 0x00, 0x00, 0x00, 0x06, # Number of FREs221 0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2222 223 # FRE[0]: Zero offsets224 0x00, 0x00, 0x00, 0x00, # Start Address225 0x00, # Info226 227 # FRE[1]: One offset228 0x00, 0x00, 0x00, 0x01, # Start Address229 0x82, 0x10, # Info, Offset[0]230 231 # FRE[2]: Two offsets232 0x00, 0x00, 0x00, 0x02, # Start Address233 0x04, 0x10, 0x20, # Info, Offset[0-1]234 235 # FRE[3]: Three offsets236 0x00, 0x00, 0x00, 0x03, # Start Address237 0x86, 0x10, 0x20, 0x30, # Info, Offset[0-2]238 239 # FRE[4]: Four offsets240 0x00, 0x00, 0x00, 0x04, # Start Address241 0x08, # Info242 0x10, 0x20, 0x30, 0x40, # Offset[0-3]243 244 # FRE[4]: Invalid offset size245 0x00, 0x00, 0x00, 0x05, # Start Address246 0x60, # Info247 ]248## Testing:249## - big-endian support250## - ARM64 ABI251## - four-byte address sizes252## - return address signing253## - various offset counts254## - invalid offset size255# CASE2-LABEL:SFrame section '.sframe' {256# CASE2: ABI: AArch64EndianBig (0x1)257# CASE2: FuncDescEntry [0] {258# CASE2-NEXT: PC: 0xDE001C259# CASE2: Info {260# CASE2-NEXT: FRE Type: Addr4 (0x2)261# CASE2-NEXT: FDE Type: PCInc (0x0)262# CASE2: FREs [263# CASE2-NEXT: Frame Row Entry {264# CASE2-NEXT: Start Address: 0xDE001C265# CASE2-NEXT: Return Address Signed: No266# CASE2-NEXT: Offset Size: B1 (0x0)267# CASE2-NEXT: Base Register: FP (0x0)268# CASE2-NEXT: }269# CASE2-NEXT: Frame Row Entry {270# CASE2-NEXT: Start Address: 0xDE001D271# CASE2-NEXT: Return Address Signed: Yes272# CASE2-NEXT: Offset Size: B1 (0x0)273# CASE2-NEXT: Base Register: FP (0x0)274# CASE2-NEXT: CFA Offset: 16275# CASE2-NEXT: }276# CASE2-NEXT: Frame Row Entry {277# CASE2-NEXT: Start Address: 0xDE001E278# CASE2-NEXT: Return Address Signed: No279# CASE2-NEXT: Offset Size: B1 (0x0)280# CASE2-NEXT: Base Register: FP (0x0)281# CASE2-NEXT: CFA Offset: 16282# CASE2-NEXT: RA Offset: 32283# CASE2-NEXT: }284# CASE2-NEXT: Frame Row Entry {285# CASE2-NEXT: Start Address: 0xDE001F286# CASE2-NEXT: Return Address Signed: Yes287# CASE2-NEXT: Offset Size: B1 (0x0)288# CASE2-NEXT: Base Register: FP (0x0)289# CASE2-NEXT: CFA Offset: 16290# CASE2-NEXT: RA Offset: 32291# CASE2-NEXT: FP Offset: 48292# CASE2-NEXT: }293# CASE2-NEXT: Frame Row Entry {294# CASE2-NEXT: Start Address: 0xDE0020295# CASE2-NEXT: Return Address Signed: No296# CASE2-NEXT: Offset Size: B1 (0x0)297# CASE2-NEXT: Base Register: FP (0x0)298# CASE2-NEXT: CFA Offset: 16299# CASE2-NEXT: RA Offset: 32300# CASE2-NEXT: FP Offset: 48301# CASE2-NEXT: Extra Offsets: [64]302# CASE2-NEXT: }303# CASE2-NEXT:{{.*}}: warning: '[[FILE]]': unsupported FRE offset size 3 at offset 0x58304