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
This commit is contained in:
parent
67bc8c8b9e
commit
f1d9b58cd4
@ -125,6 +125,11 @@ bool X86CallFrameOptimization::isLegal(MachineFunction &MF) {
|
||||
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…
Reference in New Issue
Block a user