mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-23 20:57:21 +00:00
0eba49c22e
This extends the work done in r233995 so that now getFragment (in addition to getSection) also works for variable symbols. With that the existing logic to decide if a-b can be computed works even if a or b are variables. Given that, the expression evaluation can avoid expanding variables as aggressively and that in turn lets the relocation code see the original variable. In order for this to work with the asm streamer, there is now a dummy fragment per section. It is used to assign a section to a symbol when no other fragment exists. This patch is a joint work by Maxim Ostapenko andy myself. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249303 91177308-0d34-0410-b5e6-96231b3b80d8
107 lines
3.6 KiB
ArmAsm
107 lines
3.6 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - \
|
|
// RUN: | llvm-readobj -t -r | FileCheck %s
|
|
|
|
local1:
|
|
external_aliased_to_local = local1
|
|
|
|
.globl global_aliased_to_external
|
|
global_aliased_to_external = external1
|
|
|
|
.globl global_aliased_to_local
|
|
local2:
|
|
global_aliased_to_local = local2
|
|
|
|
.weak weak_aliased_to_external
|
|
weak_aliased_to_external = external2
|
|
|
|
// Generate relocs against the above aliases.
|
|
.long external_aliased_to_local
|
|
.long global_aliased_to_external
|
|
.long global_aliased_to_local
|
|
.long weak_aliased_to_external
|
|
|
|
// CHECK: Relocations [
|
|
// CHECK: 0x0 IMAGE_REL_I386_DIR32 external_aliased_to_local
|
|
// CHECK: 0x4 IMAGE_REL_I386_DIR32 external1
|
|
// CHECK: 0x8 IMAGE_REL_I386_DIR32 global_aliased_to_local
|
|
// CHECK: 0xC IMAGE_REL_I386_DIR32 external2
|
|
// CHECK: ]
|
|
// CHECK: Symbols [
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: .text
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: .text (1)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: Static (0x3)
|
|
// CHECK-NEXT: AuxSymbolCount: 1
|
|
// CHECK: }
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: local1
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: .text (1)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: Static (0x3)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK: Name: global_aliased_to_external
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: External (0x2)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: external1
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: External (0x2)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: global_aliased_to_local
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: .text (1)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: External (0x2)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: local2
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: .text (1)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: Static (0x3)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: weak_aliased_to_external
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
|
|
// CHECK-NEXT: AuxSymbolCount: 1
|
|
// CHECK-NEXT: AuxWeakExternal {
|
|
// CHECK-NEXT: Linked: external2
|
|
// CHECK-NEXT: Search: Library (0x2)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: external2
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: External (0x2)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|