[PATCH] D18135: ELF: Move initSymbols to Symbols.cpp.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 13 13:56:39 PDT 2016
ruiu created this revision.
ruiu added a reviewer: grimar.
ruiu added a subscriber: llvm-commits.
This effectively rolls back r263133. I think moving this code to
Driver was a violation of modularization, and it felt odd to me that
driver was manipulating the details of the internal symbols.
http://reviews.llvm.org/D18135
Files:
ELF/Driver.cpp
ELF/Symbols.cpp
ELF/Symbols.h
Index: ELF/Symbols.h
===================================================================
--- ELF/Symbols.h
+++ ELF/Symbols.h
@@ -32,6 +32,10 @@
template <class ELFT> class OutputSectionBase;
template <class ELFT> class SharedFile;
+// Initializes global objects defined in this file.
+// Called at the beginning of main().
+void initSymbols();
+
// Returns a demangled C++ symbol name. If Name is not a mangled
// name or the system does not provide __cxa_demangle function,
// it returns the unmodified string.
Index: ELF/Symbols.cpp
===================================================================
--- ELF/Symbols.cpp
+++ ELF/Symbols.cpp
@@ -257,6 +257,21 @@
return createObjectFile(MBRef, File->getName());
}
+template <class ELFT> static void doInitSymbols() {
+ ElfSym<ELFT>::Etext.setBinding(STB_GLOBAL);
+ ElfSym<ELFT>::Edata.setBinding(STB_GLOBAL);
+ ElfSym<ELFT>::End.setBinding(STB_GLOBAL);
+ ElfSym<ELFT>::Ignored.setBinding(STB_WEAK);
+ ElfSym<ELFT>::Ignored.setVisibility(STV_HIDDEN);
+}
+
+void elf::initSymbols() {
+ doInitSymbols<ELF32LE>();
+ doInitSymbols<ELF32BE>();
+ doInitSymbols<ELF64LE>();
+ doInitSymbols<ELF64BE>();
+}
+
// Returns the demangled C++ symbol name for Name.
std::string elf::demangle(StringRef Name) {
#if !defined(HAVE_CXXABI_H)
Index: ELF/Driver.cpp
===================================================================
--- ELF/Driver.cpp
+++ ELF/Driver.cpp
@@ -33,6 +33,8 @@
LinkerDriver *elf::Driver;
bool elf::link(ArrayRef<const char *> Args, raw_ostream &Error) {
+ initSymbols();
+
HasError = false;
ErrorOS = &Error;
Configuration C;
@@ -318,23 +320,13 @@
error("no input files.");
}
-template <class ELFT> static void initSymbols() {
- ElfSym<ELFT>::Etext.setBinding(STB_GLOBAL);
- ElfSym<ELFT>::Edata.setBinding(STB_GLOBAL);
- ElfSym<ELFT>::End.setBinding(STB_GLOBAL);
- ElfSym<ELFT>::Ignored.setBinding(STB_WEAK);
- ElfSym<ELFT>::Ignored.setVisibility(STV_HIDDEN);
-}
-
template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
// For LTO
InitializeAllTargets();
InitializeAllTargetMCs();
InitializeAllAsmPrinters();
InitializeAllAsmParsers();
- initSymbols<ELFT>();
-
SymbolTable<ELFT> Symtab;
std::unique_ptr<TargetInfo> TI(createTarget());
Target = TI.get();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18135.50557.patch
Type: text/x-patch
Size: 2310 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160313/166593fa/attachment.bin>
More information about the llvm-commits
mailing list