[llvm] r293950 - [lto] add getLinkerOpts()
Kostya Serebryany via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 3 14:50:44 PST 2017
+pcc
he bot is still red.
Bob or Peter, please fix or revert ASAP.
On Thu, Feb 2, 2017 at 5:56 PM, Kostya Serebryany <kcc at google.com> wrote:
> This makes the ubsan bot sad:
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-
> linux-fast/builds/2511/steps/check-llvm%20ubsan/logs/stdio
>
> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Target/TargetLoweringObjectFile.h:63:40: runtime error: reference binding to null pointer of type 'llvm::Mangler'
> #0 0xffac44 in llvm::TargetLoweringObjectFile::getMangler() const /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Target/TargetLoweringObjectFile.h:63:33
> #1 0x232ae80 in llvm::TargetLoweringObjectFileCOFF::emitLinkerFlagsForGlobal(llvm::raw_ostream&, llvm::GlobalValue const*) const /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp:1156:59
> #2 0x18a63a5 in llvm::LTOModule::parseMetadata() /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/LTO/LTOModule.cpp:654:36
>
> please fix or revert ASAP.
>
> --kcc
>
>
>
>
> On Thu, Feb 2, 2017 at 3:00 PM, Bob Haarman via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: inglorion
>> Date: Thu Feb 2 17:00:49 2017
>> New Revision: 293950
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=293950&view=rev
>> Log:
>> [lto] add getLinkerOpts()
>>
>> Summary: Some compilers, including MSVC and Clang, allow linker options
>> to be specified in source files. In the legacy LTO API, there is a
>> getLinkerOpts() method that returns linker options for the bitcode module
>> being processed. This change adds that method to the new API, so that the
>> COFF linker can get the right linker options when using the new LTO API.
>>
>> Reviewers: pcc, ruiu, mehdi_amini, tejohnson
>>
>> Reviewed By: pcc
>>
>> Differential Revision: https://reviews.llvm.org/D29207
>>
>>
>> Modified:
>> llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
>> llvm/trunk/include/llvm/LTO/LTO.h
>> llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>> llvm/trunk/lib/LTO/LTO.cpp
>>
>> Modified: llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> CodeGen/TargetLoweringObjectFileImpl.h?rev=293950&r1=293949&
>> r2=293950&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
>> (original)
>> +++ llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h Thu
>> Feb 2 17:00:49 2017
>> @@ -171,6 +171,9 @@ public:
>> const GlobalValue *GV) const override;
>> };
>>
>> +void emitLinkerFlagsForGlobalCOFF(raw_ostream &OS, const GlobalValue
>> *GV,
>> + const Triple &TT, Mangler &Mangler);
>> +
>> } // end namespace llvm
>>
>> #endif
>>
>> Modified: llvm/trunk/include/llvm/LTO/LTO.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> LTO/LTO.h?rev=293950&r1=293949&r2=293950&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/LTO/LTO.h (original)
>> +++ llvm/trunk/include/llvm/LTO/LTO.h Thu Feb 2 17:00:49 2017
>> @@ -25,6 +25,7 @@
>> #include "llvm/LTO/Config.h"
>> #include "llvm/Linker/IRMover.h"
>> #include "llvm/Object/IRObjectFile.h"
>> +#include "llvm/Support/Error.h"
>> #include "llvm/Support/thread.h"
>> #include "llvm/Target/TargetOptions.h"
>> #include "llvm/Transforms/IPO/FunctionImport.h"
>> @@ -226,6 +227,9 @@ public:
>> symbol_iterator(SymTab.symbols().end(), SymTab, this));
>> }
>>
>> + /// Returns linker options specified in the input file.
>> + Expected<std::string> getLinkerOpts();
>> +
>> /// Returns the path to the InputFile.
>> StringRef getName() const;
>>
>>
>> Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/T
>> argetLoweringObjectFileImpl.cpp?rev=293950&r1=293949&r2=293950&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Thu Feb 2
>> 17:00:49 2017
>> @@ -919,6 +919,37 @@ static int getSelectionForCOFF(const Glo
>> return 0;
>> }
>>
>> +void llvm::emitLinkerFlagsForGlobalCOFF(raw_ostream &OS, const
>> GlobalValue *GV,
>> + const Triple &TT, Mangler
>> &Mangler) {
>> + if (!GV->hasDLLExportStorageClass() || GV->isDeclaration())
>> + return;
>> +
>> + if (TT.isKnownWindowsMSVCEnvironment())
>> + OS << " /EXPORT:";
>> + else
>> + OS << " -export:";
>> +
>> + if (TT.isWindowsGNUEnvironment() || TT.isWindowsCygwinEnvironment()) {
>> + std::string Flag;
>> + raw_string_ostream FlagOS(Flag);
>> + Mangler.getNameWithPrefix(FlagOS, GV, false);
>> + FlagOS.flush();
>> + if (Flag[0] == GV->getParent()->getDataLayout().getGlobalPrefix())
>> + OS << Flag.substr(1);
>> + else
>> + OS << Flag;
>> + } else {
>> + Mangler.getNameWithPrefix(OS, GV, false);
>> + }
>> +
>> + if (!GV->getValueType()->isFunctionTy()) {
>> + if (TT.isKnownWindowsMSVCEnvironment())
>> + OS << ",DATA";
>> + else
>> + OS << ",data";
>> + }
>> +}
>> +
>> MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
>> const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM)
>> const {
>> int Selection = 0;
>> @@ -1122,33 +1153,5 @@ MCSection *TargetLoweringObjectFileCOFF:
>>
>> void TargetLoweringObjectFileCOFF::emitLinkerFlagsForGlobal(
>> raw_ostream &OS, const GlobalValue *GV) const {
>> - if (!GV->hasDLLExportStorageClass() || GV->isDeclaration())
>> - return;
>> -
>> - const Triple &TT = getTargetTriple();
>> -
>> - if (TT.isKnownWindowsMSVCEnvironment())
>> - OS << " /EXPORT:";
>> - else
>> - OS << " -export:";
>> -
>> - if (TT.isWindowsGNUEnvironment() || TT.isWindowsCygwinEnvironment()) {
>> - std::string Flag;
>> - raw_string_ostream FlagOS(Flag);
>> - getMangler().getNameWithPrefix(FlagOS, GV, false);
>> - FlagOS.flush();
>> - if (Flag[0] == GV->getParent()->getDataLayout().getGlobalPrefix())
>> - OS << Flag.substr(1);
>> - else
>> - OS << Flag;
>> - } else {
>> - getMangler().getNameWithPrefix(OS, GV, false);
>> - }
>> -
>> - if (!GV->getValueType()->isFunctionTy()) {
>> - if (TT.isKnownWindowsMSVCEnvironment())
>> - OS << ",DATA";
>> - else
>> - OS << ",data";
>> - }
>> + emitLinkerFlagsForGlobalCOFF(OS, GV, getTargetTriple(), getMangler());
>> }
>>
>> Modified: llvm/trunk/lib/LTO/LTO.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTO.
>> cpp?rev=293950&r1=293949&r2=293950&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/LTO/LTO.cpp (original)
>> +++ llvm/trunk/lib/LTO/LTO.cpp Thu Feb 2 17:00:49 2017
>> @@ -17,12 +17,16 @@
>> #include "llvm/Bitcode/BitcodeReader.h"
>> #include "llvm/Bitcode/BitcodeWriter.h"
>> #include "llvm/CodeGen/Analysis.h"
>> +#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
>> #include "llvm/IR/AutoUpgrade.h"
>> #include "llvm/IR/DiagnosticPrinter.h"
>> #include "llvm/IR/LegacyPassManager.h"
>> +#include "llvm/IR/Mangler.h"
>> +#include "llvm/IR/Metadata.h"
>> #include "llvm/LTO/LTOBackend.h"
>> #include "llvm/Linker/IRMover.h"
>> #include "llvm/Object/ModuleSummaryIndexObjectFile.h"
>> +#include "llvm/Support/Error.h"
>> #include "llvm/Support/ManagedStatic.h"
>> #include "llvm/Support/MemoryBuffer.h"
>> #include "llvm/Support/Path.h"
>> @@ -291,6 +295,32 @@ Expected<int> InputFile::Symbol::getComd
>> return -1;
>> }
>>
>> +Expected<std::string> InputFile::getLinkerOpts() {
>> + std::string LinkerOpts;
>> + raw_string_ostream LOS(LinkerOpts);
>> + // Extract linker options from module metadata.
>> + for (InputModule &Mod : Mods) {
>> + std::unique_ptr<Module> &M = Mod.Mod;
>> + if (auto E = M->materializeMetadata())
>> + return std::move(E);
>> + if (Metadata *Val = M->getModuleFlag("Linker Options")) {
>> + MDNode *LinkerOptions = cast<MDNode>(Val);
>> + for (const MDOperand &MDOptions : LinkerOptions->operands())
>> + for (const MDOperand &MDOption : cast<MDNode>(MDOptions)->opera
>> nds())
>> + LOS << " " << cast<MDString>(MDOption)->getString();
>> + }
>> + }
>> +
>> + // Synthesize export flags for symbols with dllexport storage.
>> + const Triple TT(Mods[0].Mod->getTargetTriple());
>> + Mangler M;
>> + for (const ModuleSymbolTable::Symbol &Sym : SymTab.symbols())
>> + if (auto *GV = Sym.dyn_cast<GlobalValue*>())
>> + emitLinkerFlagsForGlobalCOFF(LOS, GV, TT, M);
>> + LOS.flush();
>> + return LinkerOpts;
>> +}
>> +
>> StringRef InputFile::getName() const {
>> return Mods[0].BM.getModuleIdentifier();
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170203/24090b13/attachment.html>
More information about the llvm-commits
mailing list