mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
Object, LTO: Add target triple to irsymtab and LTO API.
Start using it in LLD to avoid needing to read bitcode again just to get the target triple, and in llvm-lto2 to avoid printing symbol table information that is inappropriate for the target. Differential Revision: https://reviews.llvm.org/D32038 llvm-svn: 300300
This commit is contained in:
parent
584e0fc63c
commit
5d0d01d99f
@ -97,7 +97,7 @@ private:
|
||||
// [begin, end) for each module
|
||||
std::vector<std::pair<size_t, size_t>> ModuleSymIndices;
|
||||
|
||||
StringRef SourceFileName, COFFLinkerOpts;
|
||||
StringRef TargetTriple, SourceFileName, COFFLinkerOpts;
|
||||
std::vector<StringRef> ComdatTable;
|
||||
|
||||
public:
|
||||
@ -138,6 +138,9 @@ public:
|
||||
/// Returns the path to the InputFile.
|
||||
StringRef getName() const;
|
||||
|
||||
/// Returns the input file's target triple.
|
||||
StringRef getTargetTriple() const { return TargetTriple; }
|
||||
|
||||
/// Returns the source file path specified at compile time.
|
||||
StringRef getSourceFileName() const { return SourceFileName; }
|
||||
|
||||
|
@ -116,7 +116,7 @@ struct Header {
|
||||
Range<Symbol> Symbols;
|
||||
Range<Uncommon> Uncommons;
|
||||
|
||||
Str SourceFileName;
|
||||
Str TargetTriple, SourceFileName;
|
||||
|
||||
/// COFF-specific: linker directives.
|
||||
Str COFFLinkerOpts;
|
||||
@ -227,6 +227,8 @@ public:
|
||||
/// copied into an irsymtab::Symbol object.
|
||||
symbol_range module_symbols(unsigned I) const;
|
||||
|
||||
StringRef getTargetTriple() const { return str(header().TargetTriple); }
|
||||
|
||||
/// Returns the source file path specified at compile time.
|
||||
StringRef getSourceFileName() const { return str(header().SourceFileName); }
|
||||
|
||||
|
@ -351,6 +351,7 @@ Expected<std::unique_ptr<InputFile>> InputFile::create(MemoryBufferRef Object) {
|
||||
|
||||
irsymtab::Reader R({Symtab.data(), Symtab.size()},
|
||||
{File->Strtab.data(), File->Strtab.size()});
|
||||
File->TargetTriple = R.getTargetTriple();
|
||||
File->SourceFileName = R.getSourceFileName();
|
||||
File->COFFLinkerOpts = R.getCOFFLinkerOpts();
|
||||
File->ComdatTable = R.getComdatTable();
|
||||
|
@ -190,6 +190,7 @@ Error Builder::build(ArrayRef<Module *> IRMods) {
|
||||
storage::Header Hdr;
|
||||
|
||||
assert(!IRMods.empty());
|
||||
setStr(Hdr.TargetTriple, IRMods[0]->getTargetTriple());
|
||||
setStr(Hdr.SourceFileName, IRMods[0]->getSourceFileName());
|
||||
TT = Triple(IRMods[0]->getTargetTriple());
|
||||
|
||||
|
15
test/LTO/Resolution/X86/symtab-elf.ll
Normal file
15
test/LTO/Resolution/X86/symtab-elf.ll
Normal file
@ -0,0 +1,15 @@
|
||||
; RUN: llvm-as -o %t %s
|
||||
; RUN: llvm-lto2 dump-symtab %t | FileCheck %s
|
||||
|
||||
; CHECK: target triple: x86_64-unknown-linux-gnu
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
; CHECK-NOT: linker opts:
|
||||
!0 = !{i32 6, !"Linker Options", !{!{!"/include:foo"}}}
|
||||
!llvm.module.flags = !{ !0 }
|
||||
|
||||
@g1 = global i32 0
|
||||
|
||||
; CHECK-NOT: fallback g1
|
||||
@g2 = weak alias i32, i32* @g1
|
@ -1,13 +1,14 @@
|
||||
; RUN: llvm-as -o %t %s
|
||||
; RUN: llvm-lto2 dump-symtab %t | FileCheck %s
|
||||
|
||||
; CHECK: target triple: i686-pc-windows-msvc18.0.0
|
||||
target triple = "i686-pc-windows-msvc18.0.0"
|
||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||
|
||||
; CHECK: source filename: src.c
|
||||
source_filename = "src.c"
|
||||
|
||||
; CHECK: linker opts (COFF only): /include:foo
|
||||
; CHECK: linker opts: /include:foo
|
||||
!0 = !{i32 6, !"Linker Options", !{!{!"/include:foo"}}}
|
||||
!llvm.module.flags = !{ !0 }
|
||||
|
||||
|
@ -293,8 +293,13 @@ static int dumpSymtab(int argc, char **argv) {
|
||||
std::unique_ptr<InputFile> Input =
|
||||
check(InputFile::create(MB->getMemBufferRef()), F);
|
||||
|
||||
outs() << "target triple: " << Input->getTargetTriple() << '\n';
|
||||
Triple TT(Input->getTargetTriple());
|
||||
|
||||
outs() << "source filename: " << Input->getSourceFileName() << '\n';
|
||||
outs() << "linker opts (COFF only): " << Input->getCOFFLinkerOpts() << '\n';
|
||||
|
||||
if (TT.isOSBinFormatCOFF())
|
||||
outs() << "linker opts: " << Input->getCOFFLinkerOpts() << '\n';
|
||||
|
||||
std::vector<StringRef> ComdatTable = Input->getComdatTable();
|
||||
for (const InputFile::Symbol &Sym : Input->symbols()) {
|
||||
@ -328,7 +333,7 @@ static int dumpSymtab(int argc, char **argv) {
|
||||
if (Comdat != -1)
|
||||
outs() << " comdat " << ComdatTable[Comdat] << '\n';
|
||||
|
||||
if (Sym.isWeak() && Sym.isIndirect())
|
||||
if (TT.isOSBinFormatCOFF() && Sym.isWeak() && Sym.isIndirect())
|
||||
outs() << " fallback " << Sym.getCOFFWeakExternalFallback() << '\n';
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user