-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.
Description
This is a tracking issue for this debugging story which concludes with:
$ cat foo.ll
@foo = external hidden thread_local global i32
define i32 @bar() {
%a = load i32, i32* @foo
ret i32 %a
}
$ llc foo.ll -filetype=obj -o foo.o -mtriple=mipsel-unknown-linux-gnu
$ readelf -Ws foo.o
Symbol table '.symtab' contains 5 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS foo.ll
2: 00000000 0 SECTION LOCAL DEFAULT 2
3: 00000000 24 FUNC GLOBAL DEFAULT 2 bar
4: 00000000 0 TLS GLOBAL HIDDEN UND foo
$ llc foo.ll -filetype=obj -o foo.o -mtriple=mipsel-unknown-linux-gnu -relocation-model=pic
$ readelf -Ws foo.o
Symbol table '.symtab' contains 7 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS foo.ll
2: 00000000 0 SECTION LOCAL DEFAULT 2
3: 00000000 0 NOTYPE GLOBAL DEFAULT UND __tls_get_addr
4: 00000000 0 NOTYPE GLOBAL DEFAULT UND _gp_disp
5: 00000000 56 FUNC GLOBAL DEFAULT 2 bar
6: 00000000 0 NOTYPE GLOBAL HIDDEN UND foo
Notably the import of foo
on MIPS is not flagged as "TLS" under the "Type" column when the import is both hidden
visibility and compiled with -relocation-model=pic
. This is most likely an LLVM bug but we're starting to implement workarounds for this, and those workarounds will reference this issue.
Metadata
Metadata
Assignees
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.