[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