mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 17:59:20 -04:00
Add all patches from base llvm/clang/lld/lldb 7.0 to devel/llvm70
This adds all the patches that were applied in the past to the clang700-import branch, under contrib/llvm. After these, there only minimal diffs left between the port sources and the base sources. Most of these remaining diffs are due to #ifdef shortcuts in the base sources, because we don't compile certain features in. Other diffs are because the port has applied a few changes that we don't have in base. Also switch to the common LICENSE defintion in devel/llvm-devel and chase new USE_GNOME requirements (for libxml2). PR: 212343, 230604 Submitted by: dim MFH: 2018Q4 Differential Revision: https://reviews.freebsd.org/D17709
This commit is contained in:
parent
639af15655
commit
d38df13120
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=483690
9 changed files with 381 additions and 18 deletions
|
@ -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 @@ DISTFILES= ${PORTNAME}-${DISTVERSION}.src${EXTRACT_SUFX}
|
|||
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_DESC= Install lit and FileCheck test tools
|
|||
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 @@ CLANG_PATTERN= (c-index-test|clang|scan-|Reporter.py|ScanView.py|scanview.css|so
|
|||
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}
|
||||
|
|
30
devel/llvm70/files/clang/patch-head-r339019.diff
Normal file
30
devel/llvm70/files/clang/patch-head-r339019.diff
Normal file
|
@ -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();
|
39
devel/llvm70/files/lld/patch-head-r337282.diff
Normal file
39
devel/llvm70/files/lld/patch-head-r337282.diff
Normal file
|
@ -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; }
|
94
devel/llvm70/files/lld/patch-head-r338297.diff
Normal file
94
devel/llvm70/files/lld/patch-head-r338297.diff
Normal file
|
@ -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.
|
64
devel/llvm70/files/lld/patch-head-r338682.diff
Normal file
64
devel/llvm70/files/lld/patch-head-r338682.diff
Normal file
|
@ -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)
|
37
devel/llvm70/files/lld/patch-head-r339304.diff
Normal file
37
devel/llvm70/files/lld/patch-head-r339304.diff
Normal file
|
@ -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()
|
57
devel/llvm70/files/lld/patch-lld-manpage.diff
Normal file
57
devel/llvm70/files/lld/patch-lld-manpage.diff
Normal file
|
@ -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.
|
22
devel/llvm70/files/lldb/patch-head-r332965.diff
Normal file
22
devel/llvm70/files/lldb/patch-head-r332965.diff
Normal file
|
@ -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);
|
33
devel/llvm70/files/patch-head-r308867.diff
Normal file
33
devel/llvm70/files/patch-head-r308867.diff
Normal file
|
@ -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.
|
Loading…
Add table
Reference in a new issue