Logan Chien | 4ea23b5 | 2013-05-10 16:17:24 +0000 | [diff] [blame] | 1 | @ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ |
| 2 | @ RUN: | llvm-readobj -s -sd -sr -r -t | FileCheck %s |
| 3 | |
| 4 | @ Check whether the section is switched back or not. |
| 5 | |
| 6 | @ The assembler should emit the machine code of "func2" in .text section. |
| 7 | @ It is incorrect if the machine code is emitted in .ARM.exidx or .ARM.extab. |
| 8 | @ Besides, there should be two entries in .ARM.exidx section. |
| 9 | |
| 10 | .syntax unified |
| 11 | |
| 12 | .text |
| 13 | .globl func1 |
| 14 | .align 2 |
| 15 | .type func1,%function |
| 16 | .fnstart |
| 17 | func1: |
| 18 | bx lr |
| 19 | .fnend |
| 20 | |
| 21 | .globl func2 |
| 22 | .align 2 |
| 23 | .type func2,%function |
| 24 | .fnstart |
| 25 | func2: |
| 26 | bx lr |
| 27 | .fnend |
| 28 | |
| 29 | |
| 30 | @------------------------------------------------------------------------------- |
| 31 | @ Check the .text section. There should be two "bx lr" instructions. |
| 32 | @------------------------------------------------------------------------------- |
| 33 | @ CHECK: Sections [ |
| 34 | @ CHECK: Section { |
| 35 | @ CHECK: Name: .text |
| 36 | @ CHECK: SectionData ( |
| 37 | @ CHECK: 0000: 1EFF2FE1 1EFF2FE1 |../.../.| |
| 38 | @ CHECK: ) |
| 39 | @ CHECK: } |
| 40 | |
| 41 | |
| 42 | @------------------------------------------------------------------------------- |
| 43 | @ Check the .ARM.exidx section. |
| 44 | @ There should be two entries (two words per entry.) |
| 45 | @------------------------------------------------------------------------------- |
| 46 | @ CHECK: Section { |
| 47 | @ CHECK: Name: .ARM.exidx |
Logan Chien | 4ea23b5 | 2013-05-10 16:17:24 +0000 | [diff] [blame] | 48 | @ CHECK: SectionData ( |
| 49 | @------------------------------------------------------------------------------- |
| 50 | @ The first word should be the offset to .text. The second word should be |
| 51 | @ 0xB0B0B080, which means compact model 0 is used (0x80) and the rest of the |
| 52 | @ word is filled with FINISH opcode (0xB0). |
| 53 | @------------------------------------------------------------------------------- |
| 54 | @ CHECK: 0000: 00000000 B0B0B080 04000000 B0B0B080 |................| |
| 55 | @ CHECK: ) |
| 56 | @ CHECK: } |
| 57 | @ CHECK: ] |
| 58 | |
Rafael Espindola | 4f60a38 | 2013-05-30 03:05:14 +0000 | [diff] [blame] | 59 | @------------------------------------------------------------------------------- |
| 60 | @ The first word of each entry should be relocated to .text section. |
| 61 | @------------------------------------------------------------------------------- |
| 62 | @ CHECK: Relocations [ |
| 63 | @ CHECK: 0x0 R_ARM_PREL31 .text 0x0 |
| 64 | @ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0 |
| 65 | @ CHECK: 0x8 R_ARM_PREL31 .text 0x0 |
| 66 | @ CHECK: ] |
Logan Chien | 4ea23b5 | 2013-05-10 16:17:24 +0000 | [diff] [blame] | 67 | |
| 68 | |
| 69 | @------------------------------------------------------------------------------- |
| 70 | @ Check the symbols "func1" and "func2". They should belong to .text section. |
| 71 | @------------------------------------------------------------------------------- |
| 72 | @ CHECK: Symbols [ |
| 73 | @ CHECK: Symbol { |
| 74 | @ CHECK: Name: func1 |
| 75 | @ CHECK: Section: .text (0x1) |
| 76 | @ CHECK: } |
| 77 | @ CHECK: Symbol { |
| 78 | @ CHECK: Name: func2 |
| 79 | @ CHECK: Section: .text (0x1) |
| 80 | @ CHECK: } |
| 81 | @ CHECK: ] |