svn commit: r345073 - head/contrib/llvm/lib/Target/X86

Dimitry Andric dim at FreeBSD.org
Tue Mar 12 18:19:45 UTC 2019


Author: dim
Date: Tue Mar 12 18:19:44 2019
New Revision: 345073
URL: https://svnweb.freebsd.org/changeset/base/345073

Log:
  Revert r308867 (which was originally committed in the clang390-import
  project branch):
  
    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.
  
  And indeed, after r345018 and r345019, which updated LLVM libunwind to
  the most recent version, the above workaround is no longer needed.  The
  upstream commit which fixed this is:
  
    https://llvm.org/viewvc/llvm-project?view=revision&revision=292723
  
  Specifically, 32 bit (i386-freebsd) executables optimized with omitted
  frame pointers and Call Frame Optimization should now behave correctly
  when a C++ exception is thrown, and the stack is unwound.
  
  Upstream PR:	https://llvm.org/bugs/show_bug.cgi?id=30879
  PR:		236062
  MFC after:	1 month
  X-MFC-With:	r344779

Modified:
  head/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp
Directory Properties:
  head/   (props changed)
  head/contrib/llvm/   (props changed)

Modified: head/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp
==============================================================================
--- head/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp	Tue Mar 12 17:04:48 2019	(r345072)
+++ head/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp	Tue Mar 12 18:19:44 2019	(r345073)
@@ -139,11 +139,6 @@ bool X86CallFrameOptimization::isLegal(MachineFunction
   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.


More information about the svn-src-all mailing list