1c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ 2c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s 3c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 4c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the .fnstart directive and the .fnend directive. 5c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 6c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The .fnstart directive and .fnend directive should create an entry in 7c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ exception handling table. For example, if the function is defined in .text 8c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ section, then there should be an entry in .ARM.exidx section. 9c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 10c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .syntax unified 11c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 12c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .text 13c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1 14c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 15c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1,%function 16c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 17c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1: 18c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 19c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 20c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 21c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 22c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 23c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 24c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the .text section. 25c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 26c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Sections [ 27c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 28c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 29c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 30c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the index of .text section. This will be used in .ARM.exidx. 31c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 32c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Index: 1 33c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .text 34c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Type: SHT_PROGBITS (0x1) 35c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Flags [ (0x6) 36c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SHF_ALLOC (0x2) 37c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SHF_EXECINSTR (0x4) 38c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ] 39c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 40c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 1EFF2FE1 |../.| 41c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 42c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 43c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 44c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 45c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 46c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the name of the EXIDX section. For the function in the .text section, 47c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ this should be .ARM.exidx. It is incorrect to see .ARM.exidx.text here. 48c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 49c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 50c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.exidx 51c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Type: SHT_ARM_EXIDX (0x70000001) 52c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Flags [ (0x82) 53c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SHF_ALLOC (0x2) 54c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SHF_LINK_ORDER (0x80) 55c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ] 56c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 57c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 58c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the linked section of the EXIDX section. This should be the index 59c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ of the .text section. 60c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 61c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Link: 1 62c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 63c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 64c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The first word should be the offset to .text. The second word should be 65c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0xB0B0B080, which means compact model 0 is used (0x80) and the rest of the 66c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ word is filled with FINISH opcode (0xB0). 67c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 68c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 69c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0B0B080 |........| 70c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 71c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 72c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ] 737486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola 747486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@------------------------------------------------------------------------------- 757486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ The first word should be relocated to the code address in .text section. 767486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ Besides, since this function is using compact model 0, thus we have to 777486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ add an relocation to __aeabi_unwind_cpp_pr0. 787486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@------------------------------------------------------------------------------- 797486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ CHECK: Relocations [ 807486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ CHECK: 0x0 R_ARM_PREL31 .text 0x0 817486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0 827486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola@ CHECK: ] 83