mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
0146a46121
link.exe: Fuzz testing has shown that COMMON symbols with size > 32 will always have an alignment of at least 32 and all symbols with size < 32 will have an alignment of at least the largest power of 2 less than the size of the symbol. binutils: The BFD linker essentially work like the link.exe behavior but with alignment 4 instead of 32. The BFD linker also supports an extension to COFF which adds an -aligncomm argument to the .drectve section which permits specifying a precise alignment for a variable but MC currently doesn't support editing .drectve in this way. With all of this in mind, we decide to play a little trick: we can ensure that the alignment will be respected by bumping the size of the global to it's alignment. llvm-svn: 218201
38 lines
1.1 KiB
ArmAsm
38 lines
1.1 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -t | FileCheck %s
|
|
|
|
.lcomm _a,4,4
|
|
.comm _b, 4, 2
|
|
// _c has size 1 but align 32, the value field is the max of size and align.
|
|
.comm _c, 1, 5
|
|
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: _a
|
|
// CHECK-NEXT: Value:
|
|
// CHECK-NEXT: Section: .bss
|
|
// CHECK-NEXT: BaseType: Null
|
|
// CHECK-NEXT: ComplexType: Null
|
|
// CHECK-NEXT: StorageClass: Static
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: _b
|
|
// CHECK-NEXT: Value: 4
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null
|
|
// CHECK-NEXT: ComplexType: Null
|
|
// CHECK-NEXT: StorageClass: External
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: _c
|
|
// CHECK-NEXT: Value: 32
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null
|
|
// CHECK-NEXT: ComplexType: Null
|
|
// CHECK-NEXT: StorageClass: External
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|