## Check how obj2yaml dumps the SHT_ARM_EXIDX section.
## For a valid section, obj2yaml emits the "Entries" key.
## This checks that we respect data endianness and recognize the
## EXIDX_CANTUNWIND (0x1) special value properly.
# RUN: yaml2obj --docnum=1 -DENCODE=LSB %s -o %t.le.so
# RUN: obj2yaml %t.le.so | FileCheck %s --check-prefix=LE
# RUN: yaml2obj --docnum=1 -DENCODE=MSB %s -o %t.be.so
# RUN: obj2yaml %t.be.so | FileCheck %s --check-prefix=BE
# LE: - Name: .ARM.exidx
# LE-NEXT: Type: SHT_ARM_EXIDX
# LE-NEXT: Entries:
# LE-NEXT: - Offset: 0xDDCCBBAA
# LE-NEXT: Value: 0x1000000
# LE-NEXT: - Offset: 0x9988FFEE
# LE-NEXT: Value: EXIDX_CANTUNWIND
# LE-NEXT: ...
# BE: - Name: .ARM.exidx
# BE-NEXT: Type: SHT_ARM_EXIDX
# BE-NEXT: Entries:
# BE-NEXT: - Offset: 0xAABBCCDD
# BE-NEXT: Value: EXIDX_CANTUNWIND
# BE-NEXT: - Offset: 0xEEFF8899
# BE-NEXT: Value: 0x1000000
# BE-NEXT: ...
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2[[ENCODE=LSB]]
Type: ET_DYN
Machine: EM_ARM
Sections:
- Name: .ARM.exidx
Type: SHT_ARM_EXIDX
## 4 words: <arbitrary>, EXIDX_CANTUNWIND in big-endian,
## <arbitrary> and EXIDX_CANTUNWIND in little-endian.
Content: "AABBCCDD00000001EEFF889901000000"
Size: [[SIZE=<none>]]
## Check that we dump the content of a truncated SHT_ARM_EXIDX section
## using the "Content" key.
# RUN: yaml2obj --docnum=1 -DSIZE=17 %s -o %t.invalid-size.so
# RUN: obj2yaml %t.invalid-size.so | FileCheck %s --check-prefix=INVALID-SIZE
# INVALID-SIZE: - Name: .ARM.exidx
# INVALID-SIZE-NEXT: Type: SHT_ARM_EXIDX
# INVALID-SIZE-NEXT: Content: AABBCCDD00000001EEFF88990100000000
# INVALID-SIZE-NEXT: ...
## Check how we dump an empty SHT_ARM_EXIDX section.
# RUN: yaml2obj --docnum=2 %s -o %t.empty.so
# RUN: obj2yaml %t.empty.so | FileCheck %s --check-prefix=EMPTY
# EMPTY: - Name: .ARM.exidx
# EMPTY-NEXT: Type: SHT_ARM_EXIDX
# EMPTY-NEXT: Entries: []
# EMPTY-NEXT: ...
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_ARM
Sections:
- Name: .ARM.exidx
Type: SHT_ARM_EXIDX
## Check how we dump the SHT_ARM_EXIDX (0x70000001) section when
## the machine type is not EM_ARM. It is dumped as a regular
## section of an unknown type.
# RUN: yaml2obj --docnum=3 %s -o %t.not-arm.so
# RUN: obj2yaml %t.not-arm.so | FileCheck %s --check-prefix=NOT-ARM
# RUN: yaml2obj --docnum=3 -DMACHINE=EM_ARM %s -o %t.arm.so
# RUN: obj2yaml %t.arm.so | FileCheck %s --check-prefix=ARM
# NOT-ARM: Sections:
# NOT-ARM-NEXT: - Name: .ARM.exidx
# NOT-ARM-NEXT: Type: 0x70000001
# NOT-ARM-NEXT: Content: AABBCCDD11223344
# NOT-ARM-NEXT: ...
# ARM: - Name: .ARM.exidx
# ARM-NEXT: Type: SHT_ARM_EXIDX
# ARM-NEXT: Entries:
# ARM-NEXT: - Offset: 0xDDCCBBAA
# ARM-NEXT: Value: 0x44332211
# ARM-NEXT: ...
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: [[MACHINE=<none>]]
Sections:
- Name: .ARM.exidx
Type: SHT_PROGBITS
ShType: 0x70000001 ## SHT_ARM_EXIDX
## An arbitrary valid content.
Content: "AABBCCDD11223344"