Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Nov 2018 17:47:32 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r483690 - in head/devel/llvm70: . files files/clang files/lld files/lldb
Message-ID:  <201811011747.wA1HlWbE088060@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Thu Nov  1 17:47:32 2018
New Revision: 483690
URL: https://svnweb.freebsd.org/changeset/ports/483690

Log:
  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

Added:
  head/devel/llvm70/files/clang/patch-head-r339019.diff   (contents, props changed)
  head/devel/llvm70/files/lld/
  head/devel/llvm70/files/lld/patch-head-r337282.diff   (contents, props changed)
  head/devel/llvm70/files/lld/patch-head-r338297.diff   (contents, props changed)
  head/devel/llvm70/files/lld/patch-head-r338682.diff   (contents, props changed)
  head/devel/llvm70/files/lld/patch-head-r339304.diff   (contents, props changed)
  head/devel/llvm70/files/lld/patch-lld-manpage.diff   (contents, props changed)
  head/devel/llvm70/files/lldb/
  head/devel/llvm70/files/lldb/patch-head-r332965.diff   (contents, props changed)
  head/devel/llvm70/files/patch-head-r308867.diff   (contents, props changed)
Modified:
  head/devel/llvm70/Makefile

Modified: head/devel/llvm70/Makefile
==============================================================================
--- head/devel/llvm70/Makefile	Thu Nov  1 17:22:30 2018	(r483689)
+++ head/devel/llvm70/Makefile	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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_SUF
 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|S
 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}

Added: head/devel/llvm70/files/clang/patch-head-r339019.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/clang/patch-head-r339019.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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();

Added: head/devel/llvm70/files/lld/patch-head-r337282.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lld/patch-head-r337282.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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; }

Added: head/devel/llvm70/files/lld/patch-head-r338297.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lld/patch-head-r338297.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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.

Added: head/devel/llvm70/files/lld/patch-head-r338682.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lld/patch-head-r338682.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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)

Added: head/devel/llvm70/files/lld/patch-head-r339304.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lld/patch-head-r339304.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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()

Added: head/devel/llvm70/files/lld/patch-lld-manpage.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lld/patch-lld-manpage.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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.

Added: head/devel/llvm70/files/lldb/patch-head-r332965.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/lldb/patch-head-r332965.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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);

Added: head/devel/llvm70/files/patch-head-r308867.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm70/files/patch-head-r308867.diff	Thu Nov  1 17:47:32 2018	(r483690)
@@ -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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811011747.wA1HlWbE088060>