Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136806800
D17709.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
19 KB
Referenced Files
None
Subscribers
None
D17709.id.diff
View Options
Index: head/devel/llvm70/Makefile
===================================================================
--- head/devel/llvm70/Makefile
+++ head/devel/llvm70/Makefile
@@ -2,7 +2,7 @@
PORTNAME= llvm
DISTVERSION= 7.0.0
-PORTREVISION= 0
+PORTREVISION= 1
CATEGORIES= devel lang
MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
PKGNAMESUFFIX= ${LLVM_SUFFIX}
@@ -12,23 +12,7 @@
MAINTAINER= brooks@FreeBSD.org
COMMENT= LLVM and Clang
-# License are listed in the order they appear in LICENSE.TXT
-LICENSE= LLVM GTEST REGEX MIT ARM PD
-LICENSE_COMB= multi
-LICENSE_NAME_LLVM= LLVM Release License
-LICENSE_NAME_GTEST= Google test license
-LICENSE_NAME_REGEX= OpenBSD Regex License
-# pyyaml tests are under the MIT license
-LICENSE_NAME_ARM= ARM Limited license
-# md5 is in the public domain
-LICENSE_FILE_LLVM= ${WRKSRC}/LICENSE.TXT
-LICENSE_FILE_GTEST= ${WRKSRC}/utils/unittest/googletest/LICENSE.TXT
-LICENSE_FILE_REGEX= ${WRKSRC}/lib/Support/COPYRIGHT.regex
-LICENSE_FILE_ARM= ${WRKSRC}/lib/Target/ARM/LICENSE.TXT
-LICENSE_PERMS_LLVM= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-LICENSE_PERMS_GTEST= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-LICENSE_PERMS_REGEX= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-LICENSE_PERMS_ARM= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+.include "${.CURDIR}/../llvm-devel/Makefile.LICENSE"
LLVM_RELEASE= ${DISTVERSION:C/rc.*//}
LLVM_MAJOR= ${LLVM_RELEASE:C/\.[0-9]\.[0-9]$//}
@@ -97,10 +81,12 @@
LIT_VARS= _USES_PYTHON=python:2.7
LLD_DESC= Install lld, the LLVM linker
LLD_DISTFILES= lld-${DISTVERSION}.src${EXTRACT_SUFX}
+LLD_EXTRA_PATCHES= ${PATCHDIR}/lld
LLDB_BUILD_DEPENDS= swig3.0:devel/swig30 \
${PY_ENUM34}
LLDB_DESC= Install lldb, the LLVM debugger
LLDB_DISTFILES= lldb-${DISTVERSION}.src${EXTRACT_SUFX}
+LLDB_EXTRA_PATCHES= ${PATCHDIR}/lldb
LLDB_IMPLIES= CLANG
LLDB_VARS= _USES_PYTHON=python:2.7
OPENMP_DESC= Install libomp, the LLVM OpenMP runtime library
@@ -246,6 +232,7 @@
SHEBANG_FILES+= tools/clang/tools/scan-view/bin/scan-view \
tools/clang/tools/clang-format/git-clang-format \
tools/clang/tools/clang-format/clang-format-diff.py
+USES+= gnome
.endif
.if ${PORT_OPTIONS:MCOMPILER_RT}
Index: head/devel/llvm70/files/clang/patch-head-r339019.diff
===================================================================
--- head/devel/llvm70/files/clang/patch-head-r339019.diff
+++ head/devel/llvm70/files/clang/patch-head-r339019.diff
@@ -0,0 +1,30 @@
+r339019 | emaste | 2018-09-29 22:01:23 +0200 (Sat, 29 Sep 2018) | 15 lines
+
+clang: allow ifunc resolvers to accept arguments
+
+Previously Clang required ifunc resolution functions to take no
+arguments, presumably because GCC documented ifunc resolvers as taking
+no arguments. However, GCC accepts resolvers accepting arguments, and
+our rtld passes CPU ID information (cpuid, hwcap, etc.) to ifunc
+resolvers. Just remove the check from the in-tree compiler for our in-
+tree compiler; a different (per-OS) approach may be required upstream.
+
+Reported by: mjg
+Approved by: re (rgrimes)
+MFC after: 1 week
+Relnotes: Yes
+Sponsored by: The FreeBSD Foundation
+
+Index: tools/clang/lib/CodeGen/CodeGenModule.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339018)
++++ tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339019)
+@@ -321,8 +321,6 @@ void CodeGenModule::checkAliases() {
+ assert(FTy);
+ if (!FTy->getReturnType()->isPointerTy())
+ Diags.Report(Location, diag::err_ifunc_resolver_return);
+- if (FTy->getNumParams())
+- Diags.Report(Location, diag::err_ifunc_resolver_params);
+ }
+
+ llvm::Constant *Aliasee = Alias->getIndirectSymbol();
Index: head/devel/llvm70/files/lld/patch-head-r337282.diff
===================================================================
--- head/devel/llvm70/files/lld/patch-head-r337282.diff
+++ head/devel/llvm70/files/lld/patch-head-r337282.diff
@@ -0,0 +1,39 @@
+r337282 | alc | 2018-08-04 04:30:51 +0200 (Sat, 04 Aug 2018) | 7 lines
+
+Set the default image base on arm64 and i386 to a superpage-aligned
+address.
+
+Reviewed by: emaste, markj
+Discussed with: dim
+Differential Revision: https://reviews.freebsd.org/D16385
+
+Index: tools/lld/ELF/Arch/AArch64.cpp
+===================================================================
+--- tools/lld/ELF/Arch/AArch64.cpp (revision 337281)
++++ tools/lld/ELF/Arch/AArch64.cpp (revision 337282)
+@@ -66,6 +66,10 @@ AArch64::AArch64() {
+ PltHeaderSize = 32;
+ DefaultMaxPageSize = 65536;
+
++ // Align to the 2 MiB page size (known as a superpage or huge page).
++ // FreeBSD automatically promotes 2 MiB-aligned allocations.
++ DefaultImageBase = 0x200000;
++
+ // It doesn't seem to be documented anywhere, but tls on aarch64 uses variant
+ // 1 of the tls structures and the tcb size is 16.
+ TcbSize = 16;
+Index: tools/lld/ELF/Arch/X86.cpp
+===================================================================
+--- tools/lld/ELF/Arch/X86.cpp (revision 337281)
++++ tools/lld/ELF/Arch/X86.cpp (revision 337282)
+@@ -61,6 +61,10 @@ X86::X86() {
+ PltHeaderSize = 16;
+ TlsGdRelaxSkip = 2;
+ TrapInstr = 0xcccccccc; // 0xcc = INT3
++
++ // Align to the non-PAE large page size (known as a superpage or huge page).
++ // FreeBSD automatically promotes large, superpage-aligned allocations.
++ DefaultImageBase = 0x400000;
+ }
+
+ static bool hasBaseReg(uint8_t ModRM) { return (ModRM & 0xc7) != 0x5; }
Index: head/devel/llvm70/files/lld/patch-head-r338297.diff
===================================================================
--- head/devel/llvm70/files/lld/patch-head-r338297.diff
+++ head/devel/llvm70/files/lld/patch-head-r338297.diff
@@ -0,0 +1,94 @@
+r338297 | dim | 2018-08-24 19:48:05 +0200 (Fri, 24 Aug 2018) | 6 lines
+
+Apply r338251 ("Preserve relocations against ifuncs when -zifunc-noplt
+is specified") on top of lld 7.0.0. This is to prepare for another
+merge from head.
+
+Obtained from: https://github.com/markjdb/freebsd-dev/commit/02f35faa6df364769b9223746b99e3c7ba05c5dd
+
+Index: tools/lld/ELF/Config.h
+===================================================================
+--- tools/lld/ELF/Config.h (revision 338296)
++++ tools/lld/ELF/Config.h (revision 338297)
+@@ -181,6 +181,7 @@ struct Configuration {
+ bool ZCopyreloc;
+ bool ZExecstack;
+ bool ZHazardplt;
++ bool ZIfuncnoplt;
+ bool ZInitfirst;
+ bool ZKeepTextSectionPrefix;
+ bool ZNodelete;
+Index: tools/lld/ELF/Driver.cpp
+===================================================================
+--- tools/lld/ELF/Driver.cpp (revision 338296)
++++ tools/lld/ELF/Driver.cpp (revision 338297)
+@@ -338,7 +338,8 @@ static bool getZFlag(opt::InputArgList &Args, Stri
+
+ static bool isKnown(StringRef S) {
+ return S == "combreloc" || S == "copyreloc" || S == "defs" ||
+- S == "execstack" || S == "hazardplt" || S == "initfirst" ||
++ S == "execstack" || S == "hazardplt" || S == "ifunc-noplt" ||
++ S == "initfirst" ||
+ S == "keep-text-section-prefix" || S == "lazy" || S == "muldefs" ||
+ S == "nocombreloc" || S == "nocopyreloc" || S == "nodelete" ||
+ S == "nodlopen" || S == "noexecstack" ||
+@@ -843,6 +844,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &
+ Config->ZCopyreloc = getZFlag(Args, "copyreloc", "nocopyreloc", true);
+ Config->ZExecstack = getZFlag(Args, "execstack", "noexecstack", false);
+ Config->ZHazardplt = hasZOption(Args, "hazardplt");
++ Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
+ Config->ZInitfirst = hasZOption(Args, "initfirst");
+ Config->ZKeepTextSectionPrefix = getZFlag(
+ Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false);
+Index: tools/lld/ELF/Relocations.cpp
+===================================================================
+--- tools/lld/ELF/Relocations.cpp (revision 338296)
++++ tools/lld/ELF/Relocations.cpp (revision 338297)
+@@ -366,6 +366,10 @@ static bool isStaticLinkTimeConstant(RelExpr E, Re
+ R_TLSLD_HINT>(E))
+ return true;
+
++ // The computation involves output from the ifunc resolver.
++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt)
++ return false;
++
+ // These never do, except if the entire file is position dependent or if
+ // only the low bits are used.
+ if (E == R_GOT || E == R_PLT || E == R_TLSDESC)
+@@ -816,6 +820,10 @@ static void processRelocAux(InputSectionBase &Sec,
+ Sec.Relocations.push_back({Expr, Type, Offset, Addend, &Sym});
+ return;
+ }
++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt) {
++ InX::RelaDyn->addReloc(Type, &Sec, Offset, &Sym, Addend, R_ADDEND, Type);
++ return;
++ }
+ bool CanWrite = (Sec.Flags & SHF_WRITE) || !Config->ZText;
+ if (CanWrite) {
+ // R_GOT refers to a position in the got, even if the symbol is preemptible.
+@@ -985,7 +993,7 @@ static void scanReloc(InputSectionBase &Sec, Offse
+ // all dynamic symbols that can be resolved within the executable will
+ // actually be resolved that way at runtime, because the main exectuable
+ // is always at the beginning of a search list. We can leverage that fact.
+- if (Sym.isGnuIFunc())
++ if (Sym.isGnuIFunc() && !Config->ZIfuncnoplt)
+ Expr = toPlt(Expr);
+ else if (!Sym.IsPreemptible && Expr == R_GOT_PC && !isAbsoluteValue(Sym))
+ Expr = Target->adjustRelaxExpr(Type, RelocatedAddr, Expr);
+Index: tools/lld/ELF/Writer.cpp
+===================================================================
+--- tools/lld/ELF/Writer.cpp (revision 338296)
++++ tools/lld/ELF/Writer.cpp (revision 338297)
+@@ -1561,8 +1561,11 @@ template <class ELFT> void Writer<ELFT>::finalizeS
+ applySynthetic({InX::EhFrame},
+ [](SyntheticSection *SS) { SS->finalizeContents(); });
+
+- for (Symbol *S : Symtab->getSymbols())
++ for (Symbol *S : Symtab->getSymbols()) {
+ S->IsPreemptible |= computeIsPreemptible(*S);
++ if (S->isGnuIFunc() && Config->ZIfuncnoplt)
++ S->ExportDynamic = true;
++ }
+
+ // Scan relocations. This must be done after every symbol is declared so that
+ // we can correctly decide if a dynamic relocation is needed.
Index: head/devel/llvm70/files/lld/patch-head-r338682.diff
===================================================================
--- head/devel/llvm70/files/lld/patch-head-r338682.diff
+++ head/devel/llvm70/files/lld/patch-head-r338682.diff
@@ -0,0 +1,64 @@
+r338682 | emaste | 2018-09-14 17:15:16 +0200 (Fri, 14 Sep 2018) | 16 lines
+
+lld: add -z interpose support
+
+-z interpose sets the DF_1_INTERPOSE flag, marking the object as an
+interposer.
+
+Committed upstream as LLVM r342239.
+
+PR: 230604
+Reported by: jbeich
+Reviewed by: markj
+Approved by: re (kib)
+MFC after: 1 week
+Relnotes: Yes
+Sponsored by: The FreeBSD Foundation
+Differential Revision: https://reviews.freebsd.org/D17172
+
+Index: tools/lld/ELF/Config.h
+===================================================================
+--- tools/lld/ELF/Config.h (revision 338681)
++++ tools/lld/ELF/Config.h (revision 338682)
+@@ -183,6 +183,7 @@ struct Configuration {
+ bool ZHazardplt;
+ bool ZIfuncnoplt;
+ bool ZInitfirst;
++ bool ZInterpose;
+ bool ZKeepTextSectionPrefix;
+ bool ZNodelete;
+ bool ZNodlopen;
+Index: tools/lld/ELF/Driver.cpp
+===================================================================
+--- tools/lld/ELF/Driver.cpp (revision 338681)
++++ tools/lld/ELF/Driver.cpp (revision 338682)
+@@ -339,7 +339,7 @@ static bool getZFlag(opt::InputArgList &Args, StringRe
+ static bool isKnown(StringRef S) {
+ return S == "combreloc" || S == "copyreloc" || S == "defs" ||
+ S == "execstack" || S == "hazardplt" || S == "ifunc-noplt" ||
+- S == "initfirst" ||
++ S == "initfirst" || S == "interpose" ||
+ S == "keep-text-section-prefix" || S == "lazy" || S == "muldefs" ||
+ S == "nocombreloc" || S == "nocopyreloc" || S == "nodelete" ||
+ S == "nodlopen" || S == "noexecstack" ||
+@@ -846,6 +846,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args
+ Config->ZHazardplt = hasZOption(Args, "hazardplt");
+ Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
+ Config->ZInitfirst = hasZOption(Args, "initfirst");
++ Config->ZInterpose = hasZOption(Args, "interpose");
+ Config->ZKeepTextSectionPrefix = getZFlag(
+ Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false);
+ Config->ZNodelete = hasZOption(Args, "nodelete");
+Index: tools/lld/ELF/SyntheticSections.cpp
+===================================================================
+--- tools/lld/ELF/SyntheticSections.cpp (revision 338681)
++++ tools/lld/ELF/SyntheticSections.cpp (revision 338682)
+@@ -1266,6 +1266,8 @@ template <class ELFT> void DynamicSection<ELFT>::final
+ DtFlags |= DF_SYMBOLIC;
+ if (Config->ZInitfirst)
+ DtFlags1 |= DF_1_INITFIRST;
++ if (Config->ZInterpose)
++ DtFlags1 |= DF_1_INTERPOSE;
+ if (Config->ZNodelete)
+ DtFlags1 |= DF_1_NODELETE;
+ if (Config->ZNodlopen)
Index: head/devel/llvm70/files/lld/patch-head-r339304.diff
===================================================================
--- head/devel/llvm70/files/lld/patch-head-r339304.diff
+++ head/devel/llvm70/files/lld/patch-head-r339304.diff
@@ -0,0 +1,37 @@
+r339304 | emaste | 2018-10-11 15:19:17 +0200 (Thu, 11 Oct 2018) | 13 lines
+
+lld: set sh_link and sh_info for .rela.plt sections
+
+ELF spec says that for SHT_REL and SHT_RELA sh_link should reference the
+associated string table and sh_info should reference the "section to
+which the relocation applies." ELF Tool Chain's elfcopy / strip use
+this (in part) to control whether or not the relocation entry is copied
+to the output.
+
+LLVM PR 37538 https://bugs.llvm.org/show_bug.cgi?id=37538
+
+Approved by: re (kib)
+Obtained from: llvm r344226 (backported for 6.0)
+
+Index: tools/lld/ELF/SyntheticSections.cpp
+===================================================================
+--- tools/lld/ELF/SyntheticSections.cpp (revision 339303)
++++ tools/lld/ELF/SyntheticSections.cpp (revision 339304)
+@@ -1213,11 +1213,13 @@ void RelocationBaseSection::addReloc(const Dynamic
+ void RelocationBaseSection::finalizeContents() {
+ // If all relocations are R_*_RELATIVE they don't refer to any
+ // dynamic symbol and we don't need a dynamic symbol table. If that
+- // is the case, just use 0 as the link.
+- Link = InX::DynSymTab ? InX::DynSymTab->getParent()->SectionIndex : 0;
++ // is the case, just use the index of the regular symbol table section.
++ getParent()->Link = InX::DynSymTab ?
++ InX::DynSymTab->getParent()->SectionIndex :
++ InX::SymTab->getParent()->SectionIndex;
+
+- // Set required output section properties.
+- getParent()->Link = Link;
++ if (InX::RelaIplt == this || InX::RelaPlt == this)
++ getParent()->Info = InX::GotPlt->getParent()->SectionIndex;
+ }
+
+ RelrBaseSection::RelrBaseSection()
Index: head/devel/llvm70/files/lld/patch-lld-manpage.diff
===================================================================
--- head/devel/llvm70/files/lld/patch-lld-manpage.diff
+++ head/devel/llvm70/files/lld/patch-lld-manpage.diff
@@ -0,0 +1,57 @@
+head r329003: explain long options may use one or two dashes
+head r338251: document -z ifunc-noplt option
+head r338682: document -z interpose option
+
+--- tools/lld/docs/ld.lld.1
++++ tools/lld/docs/ld.lld.1
+@@ -3,7 +3,7 @@
+ .\"
+ .\" This man page documents only lld's ELF linking support, obtained originally
+ .\" from FreeBSD.
+-.Dd July 30, 2018
++.Dd September 14, 2018
+ .Dt LD.LLD 1
+ .Os
+ .Sh NAME
+@@ -25,6 +25,17 @@ is a drop-in replacement for the GNU BFD and gold link
+ It accepts most of the same command line arguments and linker scripts
+ as GNU linkers.
+ .Pp
++Many options have both a single-letter and long form.
++When using the long form options other than those beginning with the
++letter
++.Cm o
++may be specified using either one or two dashes preceding the option name.
++Long options beginning with
++.Cm o
++require two dashes to avoid confusion with the
++.Fl o Ar path
++option.
++.Pp
+ These options are available:
+ .Bl -tag -width indent
+ .It Fl -allow-multiple-definition
+@@ -440,10 +451,23 @@ Make the main stack executable.
+ Stack permissions are recorded in the
+ .Dv PT_GNU_STACK
+ segment.
++.It Cm ifunc-noplt
++Do not emit PLT entries for GNU ifuncs.
++Instead, preserve relocations for ifunc call sites so that they may
++be applied by a run-time loader.
++Note that this feature requires special loader support and will
++generally result in application crashes when used outside of freestanding
++environments.
+ .It Cm initfirst
+ Sets the
+ .Dv DF_1_INITFIRST
+ flag to indicate the module should be initialized first.
++.It Cm interpose
++Set the
++.Dv DF_1_INTERPOSE
++flag to indicate that the object is an interposer.
++Runtime linkers perform symbol resolution by first searching the application,
++followed by interposers, and then any other dependencies.
+ .It Cm muldefs
+ Do not error if a symbol is defined multiple times.
+ The first definition will be used.
Index: head/devel/llvm70/files/lldb/patch-head-r332965.diff
===================================================================
--- head/devel/llvm70/files/lldb/patch-head-r332965.diff
+++ head/devel/llvm70/files/lldb/patch-head-r332965.diff
@@ -0,0 +1,22 @@
+r332965 | emaste | 2018-04-24 21:26:58 +0200 (Tue, 24 Apr 2018) | 8 lines
+
+lldb: remove assertion that target_arch is FreeBSD
+
+The target is not necessarily a FreeBSD binary - for example, it may be
+a Linux binary running under the linuxulator. Basic ptrace (live)
+debugging already worked in this case, except for the assertion.
+
+Sponsored by: Turing Robotic Industries Inc.
+
+Index: tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
+===================================================================
+--- tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332964)
++++ tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332965)
+@@ -169,7 +169,6 @@ lldb::RegisterContextSP FreeBSDThread::GetRegister
+ RegisterInfoInterface *reg_interface = nullptr;
+ const ArchSpec &target_arch = GetProcess()->GetTarget().GetArchitecture();
+
+- assert(target_arch.GetTriple().getOS() == llvm::Triple::FreeBSD);
+ switch (target_arch.GetMachine()) {
+ case llvm::Triple::aarch64:
+ reg_interface = new RegisterInfoPOSIX_arm64(target_arch);
Index: head/devel/llvm70/files/patch-head-r308867.diff
===================================================================
--- head/devel/llvm70/files/patch-head-r308867.diff
+++ head/devel/llvm70/files/patch-head-r308867.diff
@@ -0,0 +1,33 @@
+r308867 | dim | 2016-11-19 22:05:17 +0100 (Sat, 19 Nov 2016) | 15 lines
+
+Work around LLVM PR30879, which is about a bad interaction between X86
+Call Frame Optimization on i386 and libunwind, by disallowing the
+optimization for i386-freebsd12.
+
+This should fix some instances of broken exception handling when frame
+pointers are omitted, in particular some unittests run during the build
+of editors/libreoffice.
+
+This hack will be removed as soon as upstream has implemented a more
+permanent fix for this problem.
+
+Upstream PR: https://llvm.org/bugs/show_bug.cgi?id=30879
+Reviewed by: emaste
+PR: 212343
+
+Index: lib/Target/X86/X86CallFrameOptimization.cpp
+===================================================================
+--- lib/Target/X86/X86CallFrameOptimization.cpp (revision 308866)
++++ lib/Target/X86/X86CallFrameOptimization.cpp (revision 308867)
+@@ -125,6 +125,11 @@ bool X86CallFrameOptimization::isLegal(MachineFunc
+ if (NoX86CFOpt.getValue())
+ return false;
+
++ // Work around LLVM PR30879 (bad interaction between CFO and libunwind)
++ if (STI->isTargetFreeBSD() && STI->is32Bit() &&
++ STI->getTargetTriple().getOSMajorVersion() >= 12)
++ return false;
++
+ // We can't encode multiple DW_CFA_GNU_args_size or DW_CFA_def_cfa_offset
+ // in the compact unwind encoding that Darwin uses. So, bail if there
+ // is a danger of that being generated.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 20, 5:04 PM (7 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25735256
Default Alt Text
D17709.id.diff (19 KB)
Attached To
Mode
D17709: Add all patches from base llvm/clang/lld/lldb 7.0 to devel/llvm70
Attached
Detach File
Event Timeline
Log In to Comment