[LLD] Add baseline test for TLS alignment. NFC.
Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D88646
This commit is contained in:
parent
e379a68cd2
commit
6b7738e204
|
|
@ -0,0 +1,31 @@
|
|||
; We manually create these here if we're not linking against
|
||||
; the CRT which would usually provide these.
|
||||
|
||||
target triple = "i686-pc-windows-msvc"
|
||||
|
||||
%IMAGE_TLS_DIRECTORY32 = type {
|
||||
i32, ; StartAddressOfRawData
|
||||
i32, ; EndAddressOfRawData
|
||||
i32, ; AddressOfIndex
|
||||
i32, ; AddressOfCallBacks
|
||||
i32, ; SizeOfZeroFill
|
||||
i32 ; Characteristics
|
||||
}
|
||||
|
||||
@_tls_start = global i8 zeroinitializer, section ".tls"
|
||||
@_tls_end = global i8 zeroinitializer, section ".tls$ZZZ"
|
||||
@_tls_index = global i32 0
|
||||
|
||||
@_tls_used = global %IMAGE_TLS_DIRECTORY32 {
|
||||
i32 ptrtoint (i8* @_tls_start to i32),
|
||||
i32 ptrtoint (i8* @_tls_end to i32),
|
||||
i32 ptrtoint (i32* @_tls_index to i32),
|
||||
i32 0,
|
||||
i32 0,
|
||||
i32 0
|
||||
}, section ".rdata$T"
|
||||
|
||||
; MSVC target uses a direct offset (0x58) for x86-64 but expects
|
||||
; __tls_array to hold the offset (0x2C) on x86.
|
||||
module asm ".global __tls_array"
|
||||
module asm "__tls_array = 44"
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
; We manually create these here if we're not linking against
|
||||
; the CRT which would usually provide these.
|
||||
|
||||
target triple = "x86_64-pc-windows-msvc"
|
||||
|
||||
%IMAGE_TLS_DIRECTORY64 = type {
|
||||
i64, ; StartAddressOfRawData
|
||||
i64, ; EndAddressOfRawData
|
||||
i64, ; AddressOfIndex
|
||||
i64, ; AddressOfCallBacks
|
||||
i32, ; SizeOfZeroFill
|
||||
i32 ; Characteristics
|
||||
}
|
||||
|
||||
@_tls_start = global i8 zeroinitializer, section ".tls"
|
||||
@_tls_end = global i8 zeroinitializer, section ".tls$ZZZ"
|
||||
@_tls_index = global i64 0
|
||||
|
||||
@_tls_used = global %IMAGE_TLS_DIRECTORY64 {
|
||||
i64 ptrtoint (i8* @_tls_start to i64),
|
||||
i64 ptrtoint (i8* @_tls_end to i64),
|
||||
i64 ptrtoint (i64* @_tls_index to i64),
|
||||
i64 0,
|
||||
i32 0,
|
||||
i32 0
|
||||
}, section ".rdata$T"
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
; This test is to make sure that the necessary alignment for thread locals
|
||||
; gets reflected in the TLS Directory of the generated executable on x86.
|
||||
;
|
||||
; aligned_thread_local specifies 'align 32' and so the generated
|
||||
; exe should reflect that with a value of IMAGE_SCN_ALIGN_32BYTES
|
||||
; in the Characteristics field of the IMAGE_TLS_DIRECTORY
|
||||
|
||||
; RUN: llc -filetype=obj %S/Inputs/tlssup-32.ll -o %t.tlssup.obj
|
||||
; RUN: llc -filetype=obj %s -o %t.obj
|
||||
; RUN: lld-link %t.tlssup.obj %t.obj -entry:main -nodefaultlib -out:%t.exe
|
||||
; RUN: llvm-readobj --coff-tls-directory %t.exe | FileCheck %s
|
||||
|
||||
; CHECK: TLSDirectory {
|
||||
; CHECK: Characteristics [ (0x0)
|
||||
|
||||
target triple = "i686-pc-windows-msvc"
|
||||
|
||||
@aligned_thread_local = thread_local global i32 42, align 32
|
||||
|
||||
define i32 @main() {
|
||||
%t = load i32, i32* @aligned_thread_local
|
||||
ret i32 %t
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
; This test is to make sure that the necessary alignment for thread locals
|
||||
; gets reflected in the TLS Directory of the generated executable on x86-64.
|
||||
;
|
||||
; aligned_thread_local specifies 'align 64' and so the generated
|
||||
; exe should reflect that with a value of IMAGE_SCN_ALIGN_64BYTES
|
||||
; in the Characteristics field of the IMAGE_TLS_DIRECTORY
|
||||
|
||||
; RUN: llc -filetype=obj %S/Inputs/tlssup-64.ll -o %t.tlssup.obj
|
||||
; RUN: llc -filetype=obj %s -o %t.obj
|
||||
; RUN: lld-link %t.tlssup.obj %t.obj -entry:main -nodefaultlib -out:%t.exe
|
||||
; RUN: llvm-readobj --coff-tls-directory %t.exe | FileCheck %s
|
||||
|
||||
; CHECK: TLSDirectory {
|
||||
; CHECK: Characteristics [ (0x0)
|
||||
|
||||
target triple = "x86_64-pc-windows-msvc"
|
||||
|
||||
@aligned_thread_local = thread_local global i32 42, align 64
|
||||
|
||||
define i32 @main() {
|
||||
%t = load i32, i32* @aligned_thread_local
|
||||
ret i32 %t
|
||||
}
|
||||
Loading…
Reference in New Issue