More data/parsing support for tls directives. Add a few more testcases

and cleanup comments as well.

llvm-svn: 103985
This commit is contained in:
Eric Christopher 2010-05-17 22:53:55 +00:00
parent 378d6c5d76
commit 6ea9cf8425
8 changed files with 54 additions and 5 deletions

View File

@ -84,19 +84,23 @@ public:
class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile {
/// TLSDataSection - Section directive for Thread Local data.
/// TLSDataSection - Section for thread local data.
///
const MCSection *TLSDataSection; // Defaults to ".tdata".
/// TLSBSSSection - Section directive for Thread Local uninitialized data.
/// TLSBSSSection - Section for thread local uninitialized data.
///
const MCSection *TLSBSSSection; // Defaults to ".tbss".
/// TLSTLVSection - Section directive for Thread Local structure infomation.
/// TLSTLVSection - Section for thread local structure infomation.
/// Contains the source code name of the variable, visibility and a pointer
/// to the initial value (.tdata or .tbss).
const MCSection *TLSTLVSection; // Defaults to ".tlv".
/// TLSThreadInitSection - Section for thread local data initialization
/// functions.
const MCSection *TLSThreadInitSection; // Defaults to ".thread_init_func".
const MCSection *CStringSection;
const MCSection *UStringSection;
const MCSection *TextCoalSection;

View File

@ -98,7 +98,7 @@ public:
S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14U,
/// S_THREAD_LOCAL_INIT_FUNCTION_POINTERS - Section with thread local
/// variable initialization pointers to functions.
S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15,
S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15U,
LAST_KNOWN_SECTION_TYPE = S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,

View File

@ -475,6 +475,12 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
= getContext().getMachOSection("__DATA", "__thread_vars",
MCSectionMachO::S_THREAD_LOCAL_VARIABLES,
SectionKind::getDataRel());
TLSThreadInitSection
= getContext().getMachOSection("__DATA", "__thread_init",
MCSectionMachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
SectionKind::getDataRel());
CStringSection // .cstring
= getContext().getMachOSection("__TEXT", "__cstring",
MCSectionMachO::S_CSTRING_LITERALS,

View File

@ -623,6 +623,16 @@ bool AsmParser::ParseStatement() {
return ParseDirectiveSectionSwitch("__OBJC", "__selector_strs",
MCSectionMachO::S_CSTRING_LITERALS);
if (IDVal == ".tdata")
return ParseDirectiveSectionSwitch("__DATA", "__thread_data",
MCSectionMachO::S_THREAD_LOCAL_REGULAR);
if (IDVal == ".tlv")
return ParseDirectiveSectionSwitch("__DATA", "__thread_vars",
MCSectionMachO::S_THREAD_LOCAL_VARIABLES);
if (IDVal == ".thread_init_func")
return ParseDirectiveSectionSwitch("__DATA", "__thread_init",
MCSectionMachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS);
// Assembler features
if (IDVal == ".set")
return ParseDirectiveSet();

View File

@ -1,4 +1,4 @@
# RUN: llvm-mc -triple i386-unknown-darwin %s | FileCheck %s
# RUN: llvm-mc -triple x86_64-unknown-darwin %s | FileCheck %s
# CHECK: .tbss _a$tlv$init, 4
# CHECK: .tbss _b$tlv$init, 4, 3

View File

@ -0,0 +1,9 @@
# RUN: llvm-mc -triple x86_64-unknown-darwin %s | FileCheck %s
# CHECK: __DATA,__thread_data,thread_local_regular
# CHECK: _a$tlv$init:
# CHECK: .quad 4
.tdata
_a$tlv$init:
.quad 4

View File

@ -0,0 +1,7 @@
# RUN: llvm-mc -triple x86_64-unknown-darwin %s | FileCheck %s
# CHECK: __DATA,__thread_init,thread_local_init_function_pointers
# CHECK: .quad 0
.thread_init_func
.quad 0

View File

@ -0,0 +1,13 @@
# RUN: llvm-mc -triple x86_64-unknown-darwin %s | FileCheck %s
# CHECK: __DATA,__thread_vars,thread_local_variables
# CHECK: .globl _a
# CHECK: _a:
# CHECK: .quad 0
.tlv
.globl _a
_a:
.quad 0
.quad 0
.quad 0