[PATCH] [lld][ELF] rename TLV contentTypes for ELF
Shankar Kalpathi Easwaran
shankarke at gmail.com
Thu Aug 22 18:27:03 PDT 2013
Hi kledzik, Bigcheese,
typeTLV content type is used by Darwin to represent thread local
storage. A new contentType has to be made to represent ELF
thread local storage data. These have been set to
- typeThreadZeroFill (represents TBSS storage)
- typeThreadData (represents TDATA storage0
http://llvm-reviews.chandlerc.com/D1482
Files:
include/lld/Core/DefinedAtom.h
lib/Core/DefinedAtom.cpp
lib/ReaderWriter/ELF/Atoms.h
lib/ReaderWriter/ELF/DefaultLayout.h
lib/ReaderWriter/ELF/SectionChunks.h
lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
test/elf/X86_64/largebss.test
Index: include/lld/Core/DefinedAtom.h
===================================================================
--- include/lld/Core/DefinedAtom.h
+++ include/lld/Core/DefinedAtom.h
@@ -145,6 +145,8 @@
typeTLVInitialZeroFill, // TLV initial zero fill data [Darwin]
typeTLVInitializerPtr, // pointer to thread local initializer [Darwin]
typeDataDirectoryEntry, // linker created for data directory header [PECOFF]
+ typeThreadZeroFill, // Uninitialized thread local data(TBSS) [ELF]
+ typeThreadData, // Initialized thread local data(TDATA) [ELF]
};
// Permission bits for atoms and segments. The order of these values are
@@ -311,7 +313,8 @@
ContentType atomContentType = contentType();
return !(atomContentType == DefinedAtom::typeZeroFill ||
atomContentType == DefinedAtom::typeZeroFillFast ||
- atomContentType == DefinedAtom::typeTLVInitialZeroFill);
+ atomContentType == DefinedAtom::typeTLVInitialZeroFill ||
+ atomContentType == DefinedAtom::typeThreadZeroFill);
}
protected:
Index: lib/Core/DefinedAtom.cpp
===================================================================
--- lib/Core/DefinedAtom.cpp
+++ lib/Core/DefinedAtom.cpp
@@ -65,6 +65,8 @@
case typeTLVInitialData:
case typeTLVInitialZeroFill:
case typeTLVInitializerPtr:
+ case typeThreadData:
+ case typeThreadZeroFill:
return permRW_L;
case typeUnknown:
Index: lib/ReaderWriter/ELF/Atoms.h
===================================================================
--- lib/ReaderWriter/ELF/Atoms.h
+++ lib/ReaderWriter/ELF/Atoms.h
@@ -286,8 +286,8 @@
if (_section->sh_flags ==
(llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE | llvm::ELF::SHF_TLS)) {
- return _contentType = _section->sh_type == llvm::ELF::SHT_NOBITS ? typeTLVInitialZeroFill
- : typeTLVInitialData;
+ return _contentType = _section->sh_type == llvm::ELF::SHT_NOBITS ? typeThreadZeroFill
+ : typeThreadData;
}
if (_symbol->getType() == llvm::ELF::STT_GNU_IFUNC)
Index: lib/ReaderWriter/ELF/DefaultLayout.h
===================================================================
--- lib/ReaderWriter/ELF/DefaultLayout.h
+++ lib/ReaderWriter/ELF/DefaultLayout.h
@@ -343,9 +343,9 @@
case DefinedAtom::typeStub:
return ORDER_PLT;
- case DefinedAtom::typeTLVInitialData:
+ case DefinedAtom::typeThreadData:
return ORDER_TDATA;
- case DefinedAtom::typeTLVInitialZeroFill:
+ case DefinedAtom::typeThreadZeroFill:
return ORDER_TBSS;
default:
// If we get passed in a section push it to OTHER
Index: lib/ReaderWriter/ELF/SectionChunks.h
===================================================================
--- lib/ReaderWriter/ELF/SectionChunks.h
+++ lib/ReaderWriter/ELF/SectionChunks.h
@@ -146,11 +146,11 @@
case DefinedAtom::typeGOT:
case DefinedAtom::typeStub:
case DefinedAtom::typeResolver:
- case DefinedAtom::typeTLVInitialData:
+ case DefinedAtom::typeThreadData:
this->_type = SHT_PROGBITS;
break;
- case DefinedAtom::typeTLVInitialZeroFill:
+ case DefinedAtom::typeThreadZeroFill:
case DefinedAtom::typeZeroFillFast:
case DefinedAtom::typeZeroFill:
this->_type = SHT_NOBITS;
@@ -167,8 +167,8 @@
case DefinedAtom::permRW_:
case DefinedAtom::permRW_L:
this->_flags = SHF_ALLOC | SHF_WRITE;
- if (_contentType == DefinedAtom::typeTLVInitialData ||
- _contentType == DefinedAtom::typeTLVInitialZeroFill)
+ if (_contentType == DefinedAtom::typeThreadData ||
+ _contentType == DefinedAtom::typeThreadZeroFill)
this->_flags |= SHF_TLS;
break;
case DefinedAtom::permRWX:
@@ -292,16 +292,16 @@
case DefinedAtom::typeGOT:
case DefinedAtom::typeStub:
case DefinedAtom::typeResolver:
- case DefinedAtom::typeTLVInitialData:
+ case DefinedAtom::typeThreadData:
_atoms.push_back(new (_alloc) lld::AtomLayout(atom, fOffset, 0));
this->_fsize = fOffset + definedAtom->size();
this->_msize = mOffset + definedAtom->size();
DEBUG_WITH_TYPE("Section",
llvm::dbgs() << "[" << this->name() << " " << this << "] "
<< "Adding atom: " << atom->name() << "@"
<< fOffset << "\n");
break;
- case DefinedAtom::typeTLVInitialZeroFill:
+ case DefinedAtom::typeThreadZeroFill:
case DefinedAtom::typeZeroFill:
case DefinedAtom::typeZeroFillFast:
_atoms.push_back(new (_alloc) lld::AtomLayout(atom, mOffset, 0));
@@ -713,8 +713,8 @@
type = llvm::ELF::STT_OBJECT;
sym.st_value = addr;
break;
- case DefinedAtom::typeTLVInitialData:
- case DefinedAtom::typeTLVInitialZeroFill:
+ case DefinedAtom::typeThreadData:
+ case DefinedAtom::typeThreadZeroFill:
type = llvm::ELF::STT_TLS;
sym.st_value = addr;
break;
Index: lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
===================================================================
--- lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -487,6 +487,10 @@
lld::DefinedAtom::typeTLVInitialZeroFill);
io.enumCase(value, "tlv-initializer-ptr",
lld::DefinedAtom::typeTLVInitializerPtr);
+ io.enumCase(value, "thread-data",
+ lld::DefinedAtom::typeThreadData);
+ io.enumCase(value, "thread-zero-fill",
+ lld::DefinedAtom::typeThreadZeroFill);
}
};
Index: test/elf/X86_64/largebss.test
===================================================================
--- test/elf/X86_64/largebss.test
+++ test/elf/X86_64/largebss.test
@@ -19,6 +19,6 @@
CHECK: section-name: .bss
CHECK: - name: largetbss
CHECK: scope: global
-CHECK: type: tlv-zero-fill
+CHECK: type: thread-zero-fill
CHECK: size: 4000
CHECK: section-name: .tbss
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1482.1.patch
Type: text/x-patch
Size: 6127 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130822/a8e1882f/attachment.bin>
More information about the llvm-commits
mailing list