diff options
author | David Peixotto <dpeixott@codeaurora.org> | 2014-01-15 22:40:02 +0000 |
---|---|---|
committer | David Peixotto <dpeixott@codeaurora.org> | 2014-01-15 22:40:02 +0000 |
commit | a034c96443006487a566d960d5e14f6f1c4cdf7c (patch) | |
tree | 9f6f88330ff7a92ccdaa524bb7c0cf430a70b510 /test | |
parent | 4c831d97bf065ae5d0fcba80b28e8396dfda7f39 (diff) | |
download | llvm-a034c96443006487a566d960d5e14f6f1c4cdf7c.tar.gz llvm-a034c96443006487a566d960d5e14f6f1c4cdf7c.tar.bz2 llvm-a034c96443006487a566d960d5e14f6f1c4cdf7c.tar.xz |
Fix parsing of .symver directive on ARM
ARM assembly syntax uses @ for a comment, execpt for the second
parameter of the .symver directive which requires @ as part of the
symbol name. This commit fixes the parsing of this directive by
adding a special case for ARM for this one argumnet.
To make the change we had to move the AllowAtInIdentifier variable
to the MCAsmLexer interface (from AsmLexer) and expose a setter for
the value. The ELFAsmParser then toggles this value when parsing
the second argument to the .symver directive for a target that
uses @ as a comment symbol
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199339 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/MC/ARM/arm-elf-symver.s | 152 | ||||
-rw-r--r-- | test/MC/ARM/comment.s | 23 |
2 files changed, 175 insertions, 0 deletions
diff --git a/test/MC/ARM/arm-elf-symver.s b/test/MC/ARM/arm-elf-symver.s new file mode 100644 index 0000000000..0d141b7fd8 --- /dev/null +++ b/test/MC/ARM/arm-elf-symver.s @@ -0,0 +1,152 @@ +@ RUN: llvm-mc -filetype=obj -triple arm-none-linux-gnueabi %s -o - | llvm-readobj -r -t | FileCheck %s +@ RUN: llvm-mc -filetype=obj -triple thumb-none-linux-gnueabi %s -o - | llvm-readobj -r -t | FileCheck %s + +defined1: +defined2: +defined3: + .symver defined1, bar1@zed + .symver undefined1, bar2@zed + + .symver defined2, bar3@@zed + + .symver defined3, bar5@@@zed + .symver undefined3, bar6@@@zed + + .long defined1 + .long undefined1 + .long defined2 + .long defined3 + .long undefined3 + + .global global1 + .symver global1, g1@@zed +global1: + +@ CHECK: Relocations [ +@ CHECK-NEXT: Section (2) .rel.text { +@ CHECK-NEXT: 0x0 R_ARM_ABS32 defined1 0x0 +@ CHECK-NEXT: 0x4 R_ARM_ABS32 bar2@zed 0x0 +@ CHECK-NEXT: 0x8 R_ARM_ABS32 defined2 0x0 +@ CHECK-NEXT: 0xC R_ARM_ABS32 defined3 0x0 +@ CHECK-NEXT: 0x10 R_ARM_ABS32 bar6@zed 0x0 +@ CHECK-NEXT: } +@ CHECK-NEXT: ] + +@ CHECK: Symbol { +@ CHECK: Name: bar1@zed (28) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: bar3@@zed (46) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: bar5@@zed (56) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: defined1 (1) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: defined2 (10) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: defined3 (19) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: .text (0) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: Section (0x3) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: .data (0) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: Section (0x3) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .data (0x3) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: .bss (0) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local (0x0) +@ CHECK-NEXT: Type: Section (0x3) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .bss (0x4) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: g1@@zed (88) +@ CHECK-NEXT: Value: 0x14 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Global (0x1) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: global1 (80) +@ CHECK-NEXT: Value: 0x14 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Global (0x1) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .text (0x1) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: bar2@zed (37) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Global (0x1) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: (0x0) +@ CHECK-NEXT: } +@ CHECK-NEXT: Symbol { +@ CHECK-NEXT: Name: bar6@zed (66) +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Global (0x1) +@ CHECK-NEXT: Type: None (0x0) +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: (0x0) +@ CHECK-NEXT: } +@ CHECK-NEXT: ] diff --git a/test/MC/ARM/comment.s b/test/MC/ARM/comment.s index e95f313aca..c24bc1aaa4 100644 --- a/test/MC/ARM/comment.s +++ b/test/MC/ARM/comment.s @@ -9,6 +9,18 @@ foo: .long baz@got add r0, r0@ignore this extra junk +@ the symver directive should allow @ in the second symbol name +defined1: +defined2: +defined3: +bar: + .symver defined1, bar1@zed + .symver defined2, bar3@@zed + .symver defined3, bar5@@@zed + +far: + .long baz@got + @CHECK-LABEL: foo: @CHECK: bl boo @CHECK-NOT: @ @@ -21,4 +33,15 @@ foo: @CHECK: add r0, r0 @CHECK-NOT: @ +@CHECK-LABEL: bar: +@CHECK: bar1@zed = defined1 +@CHECK: bar3@@zed = defined2 +@CHECK: bar5@@@zed = defined3 + +@ Make sure we did not mess up the parser state and it still lexes +@ comments correctly by excluding the @ in normal symbols +@CHECK-LABEL: far: +@CHECK: .long baz +@CHECK-NOT: @ + @ERROR-NOT: error: |