[PATCH] D35793: [ELF] - Change way how we handle --noinhibit-exec
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 25 07:51:43 PDT 2017
LGTM
Rui, what do you think?
Cheers,
Rafael
George Rimar via Phabricator <reviews at reviews.llvm.org> writes:
> grimar updated this revision to Diff 108022.
> grimar added a comment.
>
> - Addressed comments.
>
>
> https://reviews.llvm.org/D35793
>
> Files:
> ELF/Config.h
> ELF/Driver.cpp
> ELF/Relocations.cpp
> test/ELF/copy-errors.s
> test/ELF/x86-64-dyn-rel-error.s
>
> Index: test/ELF/x86-64-dyn-rel-error.s
> ===================================================================
> --- test/ELF/x86-64-dyn-rel-error.s
> +++ test/ELF/x86-64-dyn-rel-error.s
> @@ -10,3 +10,5 @@
> .long bar
>
> // CHECK: relocation R_X86_64_32 cannot be used against shared object; recompile with -fPIC
> +
> +// RUN: ld.lld --noinhibit-exec %t.o %t2.so -o %t 2>&1 | FileCheck %s
> Index: test/ELF/copy-errors.s
> ===================================================================
> --- test/ELF/copy-errors.s
> +++ test/ELF/copy-errors.s
> @@ -9,6 +9,9 @@
> // CHECK: >>> referenced by {{.*}}.o:(.text+0x1)
> // CHECK: symbol 'zed' defined in {{.*}}.so has no type
>
> +// RUN: not ld.lld --noinhibit-exec %t.o %t2.so -o %t 2>&1 | FileCheck %s --check-prefix=NOINHIBIT
> +// NOINHIBIT: warning: symbol 'zed' defined in {{.*}}.so has no type
> +
> .global _start
> _start:
> call bar
> Index: ELF/Relocations.cpp
> ===================================================================
> --- ELF/Relocations.cpp
> +++ ELF/Relocations.cpp
> @@ -535,6 +535,13 @@
> In<ELFT>::RelaDyn->addReloc({Target->CopyRel, Sec, Off, false, SS, 0});
> }
>
> +static void errorOrWarn(const Twine &Msg) {
> + if (!Config->NoinhibitExec)
> + error(Msg);
> + else
> + warn(Msg);
> +}
> +
> template <class ELFT>
> static RelExpr adjustExpr(SymbolBody &Body, RelExpr Expr, uint32_t Type,
> const uint8_t *Data, InputSectionBase &S,
> @@ -609,8 +616,8 @@
> return toPlt(Expr);
> }
>
> - error("symbol '" + toString(Body) + "' defined in " + toString(Body.File) +
> - " has no type");
> + errorOrWarn("symbol '" + toString(Body) + "' defined in " +
> + toString(Body.File) + " has no type");
> return Expr;
> }
>
> @@ -691,12 +698,10 @@
> Msg += Src + "\n>>> ";
> Msg += S.getObjMsg<ELFT>(Offset);
>
> - if (Config->UnresolvedSymbols == UnresolvedPolicy::WarnAll ||
> - (Config->UnresolvedSymbols == UnresolvedPolicy::Warn && CanBeExternal)) {
> + if (Config->UnresolvedSymbols == UnresolvedPolicy::Warn && CanBeExternal)
> warn(Msg);
> - } else {
> - error(Msg);
> - }
> + else
> + errorOrWarn(Msg);
> }
>
> template <class RelTy>
> @@ -905,9 +910,10 @@
> // We don't know anything about the finaly symbol. Just ask the dynamic
> // linker to handle the relocation for us.
> if (!Target->isPicRel(Type))
> - error("relocation " + toString(Type) +
> - " cannot be used against shared object; recompile with -fPIC" +
> - getLocation<ELFT>(Sec, Body, Offset));
> + errorOrWarn(
> + "relocation " + toString(Type) +
> + " cannot be used against shared object; recompile with -fPIC" +
> + getLocation<ELFT>(Sec, Body, Offset));
>
> In<ELFT>::RelaDyn->addReloc(
> {Target->getDynRel(Type), &Sec, Offset, false, &Body, Addend});
> Index: ELF/Driver.cpp
> ===================================================================
> --- ELF/Driver.cpp
> +++ ELF/Driver.cpp
> @@ -418,9 +418,6 @@
> // Determines what we should do if there are remaining unresolved
> // symbols after the name resolution.
> static UnresolvedPolicy getUnresolvedSymbolPolicy(opt::InputArgList &Args) {
> - // -noinhibit-exec or -r imply some default values.
> - if (Args.hasArg(OPT_noinhibit_exec))
> - return UnresolvedPolicy::WarnAll;
> if (Args.hasArg(OPT_relocatable))
> return UnresolvedPolicy::IgnoreAll;
>
> @@ -647,6 +644,7 @@
> Config->LTOPartitions = getInteger(Args, OPT_lto_partitions, 1);
> Config->MapFile = Args.getLastArgValue(OPT_Map);
> Config->NoGnuUnique = Args.hasArg(OPT_no_gnu_unique);
> + Config->NoinhibitExec = Args.hasArg(OPT_noinhibit_exec);
> Config->NoUndefinedVersion = Args.hasArg(OPT_no_undefined_version);
> Config->Nostdlib = Args.hasArg(OPT_nostdlib);
> Config->OFormatBinary = isOutputFormatBinary(Args);
> Index: ELF/Config.h
> ===================================================================
> --- ELF/Config.h
> +++ ELF/Config.h
> @@ -44,7 +44,7 @@
> enum class StripPolicy { None, All, Debug };
>
> // For --unresolved-symbols.
> -enum class UnresolvedPolicy { ReportError, Warn, WarnAll, Ignore, IgnoreAll };
> +enum class UnresolvedPolicy { ReportError, Warn, Ignore, IgnoreAll };
>
> // For --sort-section and linkerscript sorting rules.
> enum class SortSectionPolicy { Default, None, Alignment, Name, Priority };
> @@ -128,6 +128,7 @@
> bool ICF;
> bool MipsN32Abi = false;
> bool NoGnuUnique;
> + bool NoinhibitExec;
> bool NoUndefinedVersion;
> bool Nostdlib;
> bool OFormatBinary;
More information about the llvm-commits
mailing list