[lld] r241011 - COFF: Split ObjectFile::createSymbolBody into small functions. NFC.
Rui Ueyama
ruiu at google.com
Mon Jun 29 15:16:21 PDT 2015
Author: ruiu
Date: Mon Jun 29 17:16:21 2015
New Revision: 241011
URL: http://llvm.org/viewvc/llvm-project?rev=241011&view=rev
Log:
COFF: Split ObjectFile::createSymbolBody into small functions. NFC.
Modified:
lld/trunk/COFF/InputFiles.cpp
lld/trunk/COFF/InputFiles.h
Modified: lld/trunk/COFF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.cpp?rev=241011&r1=241010&r2=241011&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.cpp (original)
+++ lld/trunk/COFF/InputFiles.cpp Mon Jun 29 17:16:21 2015
@@ -168,7 +168,14 @@ std::error_code ObjectFile::initializeSy
AuxP = COFFObj->getSymbol(I + 1)->getRawPtr();
bool IsFirst = (LastSectionNumber != Sym.getSectionNumber());
- SymbolBody *Body = createSymbolBody(Sym, AuxP, IsFirst);
+ SymbolBody *Body = nullptr;
+ if (Sym.isUndefined()) {
+ Body = createUndefined(Sym);
+ } else if (Sym.isWeakExternal()) {
+ Body = createWeakExternal(Sym, AuxP);
+ } else {
+ Body = createDefined(Sym, AuxP, IsFirst);
+ }
if (Body) {
SymbolBodies.push_back(Body);
SparseSymbolBodies[I] = Body;
@@ -179,13 +186,22 @@ std::error_code ObjectFile::initializeSy
return std::error_code();
}
-SymbolBody *ObjectFile::createSymbolBody(COFFSymbolRef Sym, const void *AuxP,
- bool IsFirst) {
+Undefined *ObjectFile::createUndefined(COFFSymbolRef Sym) {
+ StringRef Name;
+ COFFObj->getSymbolName(Sym, Name);
+ return new (Alloc) Undefined(Name);
+}
+
+Undefined *ObjectFile::createWeakExternal(COFFSymbolRef Sym, const void *AuxP) {
+ StringRef Name;
+ COFFObj->getSymbolName(Sym, Name);
+ auto *Aux = (const coff_aux_weak_external *)AuxP;
+ return new (Alloc) Undefined(Name, &SparseSymbolBodies[Aux->TagIndex]);
+}
+
+Defined *ObjectFile::createDefined(COFFSymbolRef Sym, const void *AuxP,
+ bool IsFirst) {
StringRef Name;
- if (Sym.isUndefined()) {
- COFFObj->getSymbolName(Sym, Name);
- return new (Alloc) Undefined(Name);
- }
if (Sym.isCommon()) {
auto *C = new (Alloc) CommonChunk(Sym);
Chunks.push_back(C);
@@ -200,12 +216,6 @@ SymbolBody *ObjectFile::createSymbolBody
}
if (Sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_DEBUG)
return nullptr;
- // TODO: Handle IMAGE_WEAK_EXTERN_SEARCH_ALIAS
- if (Sym.isWeakExternal()) {
- COFFObj->getSymbolName(Sym, Name);
- auto *Aux = (const coff_aux_weak_external *)AuxP;
- return new (Alloc) Undefined(Name, &SparseSymbolBodies[Aux->TagIndex]);
- }
// Nothing else to do without a section chunk.
auto *SC = cast_or_null<SectionChunk>(SparseChunks[Sym.getSectionNumber()]);
Modified: lld/trunk/COFF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.h?rev=241011&r1=241010&r2=241011&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.h (original)
+++ lld/trunk/COFF/InputFiles.h Mon Jun 29 17:16:21 2015
@@ -29,7 +29,9 @@ using llvm::object::COFFObjectFile;
using llvm::object::COFFSymbolRef;
class Chunk;
+class Defined;
class SymbolBody;
+class Undefined;
// The root class of input files.
class InputFile {
@@ -114,8 +116,9 @@ private:
std::error_code initializeChunks();
std::error_code initializeSymbols();
- SymbolBody *createSymbolBody(COFFSymbolRef Sym, const void *Aux,
- bool IsFirst);
+ Defined *createDefined(COFFSymbolRef Sym, const void *Aux, bool IsFirst);
+ Undefined *createUndefined(COFFSymbolRef Sym);
+ Undefined *createWeakExternal(COFFSymbolRef Sym, const void *Aux);
std::unique_ptr<COFFObjectFile> COFFObj;
llvm::BumpPtrAllocator Alloc;
More information about the llvm-commits
mailing list