mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 14:10:41 +00:00
1b68a68c04
We currently force symbols to be globals in .thumb_set. The intent seems to be that given .thumb_set foo, bar we emit an undefined symbol to bar if it is never defined. The side effect is that we mark bar as global, even if it is defined, which gas does not. Producing an undefined reference to bar is a general difference from MC and gas. For example, given a = b gas will produce an undefined reference to b, MC will not. I would be surprised if any code depends on this, but it it does, we should fix the general difference, not special case .thumb_set. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207757 91177308-0d34-0410-b5e6-96231b3b80d8
155 lines
2.7 KiB
ArmAsm
155 lines
2.7 KiB
ArmAsm
@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s | llvm-readobj -t \
|
|
@ RUN: | FileCheck %s
|
|
|
|
@ RUN: llvm-mc -triple armv7-eabi -filetype asm -o - %s \
|
|
@ RUN: | FileCheck --check-prefix=ASM %s
|
|
|
|
.syntax unified
|
|
|
|
.arm
|
|
|
|
.type arm_func,%function
|
|
arm_func:
|
|
nop
|
|
|
|
.thumb_set alias_arm_func, arm_func
|
|
|
|
alias_arm_func2 = alias_arm_func
|
|
alias_arm_func3 = alias_arm_func2
|
|
|
|
@ ASM: .thumb_set alias_arm_func, arm_func
|
|
|
|
.thumb
|
|
|
|
.type thumb_func,%function
|
|
.thumb_func
|
|
thumb_func:
|
|
nop
|
|
|
|
.thumb_set alias_thumb_func, thumb_func
|
|
|
|
.thumb_set seedless, 0x5eed1e55
|
|
.thumb_set eggsalad, seedless + 0x87788358
|
|
.thumb_set faceless, ~eggsalad + 0xe133c002
|
|
|
|
.thumb_set alias_undefined_data, badblood
|
|
|
|
.data
|
|
|
|
.type badblood,%object
|
|
badblood:
|
|
.long 0xbadb100d
|
|
|
|
.type bedazzle,%object
|
|
bedazzle:
|
|
.long 0xbeda221e
|
|
|
|
.text
|
|
.thumb
|
|
|
|
.thumb_set alias_defined_data, bedazzle
|
|
|
|
.type alpha,%function
|
|
alpha:
|
|
nop
|
|
|
|
.type beta,%function
|
|
beta:
|
|
bkpt
|
|
|
|
.thumb_set beta, alpha
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_arm_func
|
|
@ CHECK: Value: 0x1
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_arm_func2
|
|
@ CHECK: Value: 0x1
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_arm_func3
|
|
@ CHECK: Value: 0x1
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_defined_data
|
|
@ CHECK: Value: 0x5
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_thumb_func
|
|
@ CHECK: Value: 0x5
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alias_undefined_data
|
|
@ CHECK: Value: 0x0
|
|
@ CHECK: Type: Object
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: alpha
|
|
@ CHECK: Value: 0x7
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: arm_func
|
|
@ CHECK: Value: 0x0
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: badblood
|
|
@ CHECK-NEXT: Value: 0x0
|
|
@ CHECK-NEXT: Size: 0
|
|
@ CHECK-NEXT: Binding: Local
|
|
@ CHECK-NEXT: Type: Object
|
|
@ CHECK-NEXT: Other: 0
|
|
@ CHECK-NEXT: Section: .data
|
|
@ CHECK-NEXT: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: bedazzle
|
|
@ CHECK: Value: 0x4
|
|
@ CHECK: Type: Object
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: beta
|
|
@ CHECK: Value: 0x7
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: eggsalad
|
|
@ CHECK: Value: 0xE665A1AD
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: faceless
|
|
@ CHECK: Value: 0xFACE1E55
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: seedless
|
|
@ CHECK: Value: 0x5EED1E55
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: thumb_func
|
|
@ CHECK: Value: 0x5
|
|
@ CHECK: Type: Function
|
|
@ CHECK: }
|