summaryrefslogtreecommitdiff
path: root/gnu/llvm
AgeCommit message (Collapse)Author
2021-01-01Skip leaf function optimization under some circumstances.mortimer
On architectures that do not always spill the return address to the stack, it is possible for local stack frame data corruption in leaf functions to span stack frames if the retguard cookie is not spilled in the function. In leaf functions on these architectures, now spill the retguard cookie if the function contains arrays or has variables which have their address taken.
2020-12-01Implement Loongson 2F BTB bug workaround in clangVisa Hankala
This adapts the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang. Because LLVM emits machine code directly without using assembly as intermediary form, the workaround has to be applied in the compiler backend in addition to the integrated assembler. Discussed with miod@ OK mortimer@
2020-11-29Teach lld to link the macppc kernelgkoehler
Add R_PPC_ADDR24 to lld. We need R_PPC_ADDR24 for absolute branches "ba" and "bla" in locore.S in the kernel. In Makefile.macppc, add a gapdummy (like in Makefile.powerpc64) to avoid an lld error. Also adapt a part of Makefile.i386, so my powerpc64 can use clang and lld to build and link the macppc kernel. (I didn't boot that kernel.) My macppc can now build, link, and boot kernels with either ld.bfd or ld.lld. Beware that kernels linked with ld.lld have at least one problem (wrong &etext) not yet fixed. ok kettenis@
2020-11-21Backport https://reviews.llvm.org/D75419. This adds a workaround forMark Kettenis
undefined references to .got2 on powerpc making it possible to link llvm with lld. ok gkoehler@
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-11-20Fix va_arg in C++, Objective-C on 32-bit powerpcgkoehler
In the PPC32 SVR4 ABI, a va_list has copies of registers from the function call. va_arg looked in the wrong registers for (the pointer representation of) an object in Objective-C, and for some types in C++. Fix va_arg to look in the general-purpose registers, not the floating-point registers. Also fix va_arg for some C++ types, like a member function pointer, that are aggregates for the ABI. Anthony Richardby found the problem in Objective-C. Eli Friedman suggested part of this fix. Fixes https://bugs.llvm.org/show_bug.cgi?id=47921 I have submitted this diff as https://reviews.llvm.org/D90329 ok kettenis@
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-11-01Do not reserve PowerPC GOT header entries when creating a relocatableMark Kettenis
object file. ok guenther@
2020-10-18Use all 64 bits of the RETGUARD cookie on powerpc64gkoehler
Change the 64-bit target to use "ld" (load 64-bit doubleword) for the cookie. The 32-bit target stays with "lwz" (load 32-bit word). ok mortimer@
2020-10-12Add RETGUARD implementation for powerpc and powerpc64.mortimer
ok deraadt@ kettenis@
2020-10-11Always allocate GOT header entries on powerpc.Mark Kettenis
ok deraadt@
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-09-19Fix frame pointer slot on aarch64 for functions that do not save calleemortimer
registers with retguard enabled. ok kettenis@
2020-09-10Disable strict floating point if not X86gkoehler
Disable options like clang -fno-unsafe-math-optimizations for all targets except X86 (and SystemZ). This prevents a crash of clang, reported by cwen@, in graphics/babl or emulators/mednafen for powerpc. ok mortimer@ This change comes from llvm 11.x: https://github.com/llvm/llvm-project/commit/d4ce862 Reland "[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support." We currently have strict floating point/constrained floating point enabled for all targets. Constrained SDAG nodes get converted to the regular ones before reaching the target layer. In theory this should be fine. However, the changes are exposed to users through multiple clang options already in use in the field, and the changes are _completely_ _untested_ on almost all of our targets. Bugs have already been found, like "https://bugs.llvm.org/show_bug.cgi?id=45274". This patch disables constrained floating point options in clang everywhere except X86 and SystemZ. A warning will be printed when this happens. Use the new -fexperimental-strict-floating-point flag to force allowing strict floating point on hosts that aren't already marked as supporting it (X86 and SystemZ). Differential Revision: https://reviews.llvm.org/D80952
2020-08-31Delete my leftover comment.gkoehler
This comment was from my commit of 2020-05-02, > Don't make an illegal adde. Avoids fatal error on PowerPC. When we merged LLVM 10, we got upstream's fix for the illegal adde problem, and this comment became the only difference in this file between us and upstream. Found by Brad Smith.
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-08-14Remove local change to fix powerpc floating-point alignmentgkoehler
LLVM 10 includes a different fix (https://reviews.llvm.org/D71954), so this change (by kettenis on 2019-02-18) is no longer needed. Thanks to Brad Smith for providing the removal diff. ok kettenis@
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-08-10Re-apply our patches to compiler-rt.Patrick Wildt
ok kettenis@
2020-08-10Import compiler-rt 10.0.1 release.Patrick Wildt
ok kettenis@
2020-08-09Tedu files that got removed in LLVM 10.0.1.Patrick Wildt
2020-08-09Merge LLVM 10.0.1.Patrick Wildt
2020-08-09Import LLVM 10.0.1 including clang, lld and lldb.Patrick Wildt
2020-08-07default to -march=i586 on i386Jonathan Gray
llvm 9 and later take more care not to inline cmpxchg8b/cx8 with -march=i486 instead calling __atomic_* functions. This in turn breaks the build of a large number of ports. To avoid having to add a lock or conditionally building individual ports with -march=i586 change the default so 64 bit atomics will always be available. ok patrick@ sthen@ deraadt@
2020-08-03Remove LLVM 8.0.1 files.Patrick Wildt
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2020-08-03Import LLVM 10.0.0 release including clang, lld and lldb.Patrick Wildt
ok hackroom tested by plenty
2019-06-23Import LLVM 8.0.0 release including clang, lld and lldb.Patrick Wildt
2019-01-27Import LLVM 7.0.1 release including clang, lld and lldb.Patrick Wildt
2018-04-06Import LLVM 6.0.1 release including clang, lld and lldb.Patrick Wildt
"where is the kaboom?" deraadt@
2017-12-24Import LLVM 5.0.1 release including clang, lld and lldb.Patrick Wildt
2017-10-04Import LLVM 5.0.0 release including clang, lld and lldb.Patrick Wildt
2017-03-14Import LLVM 4.0.0 release including clang and lld.Patrick Wildt
2017-01-24Import LLVM 4.0.0 rc1 including clang and lld to help the currentPatrick Wildt
development effort on OpenBSD/arm64.
2017-01-14Import LLVM 3.9.1 including clang and lld.Patrick Wildt
2016-09-03Use the space freed up by sparc and zaurus to import LLVM.Pascal Stumpf
ok hackroom@
2020-07-18int64_t and intmax_t are always (signed) long long on OpenBSD.Mark Kettenis
ok deraadt@
2020-07-11Set the default ABI for OpenBSD to ELFv2 in the clang frontend as well.Mark Kettenis
This makes sure the compiler defines the _CALL_ELF pre-processor symbol correctly. ok mortimer@
2020-06-28Make long double the same as double for now on powerpc64 like we do onMark Kettenis
powerpc. This matched what FreeBSD does. ok patrick@
2020-06-04Set max atomic size for PowerPC.gkoehler
32-bit PowerPC doesn't have instructions for lock-free atomic ops on 8-byte values, and needs libcalls like __atomic_fetch_add_8(). In code like "_Atomic long long a; a++;", clang doesn't emit a libcall. This was causing linker errors on symbols like __sync_fetch_and_add_8. Now that LLVM knows the max atomic size, its AtomicExpandPass changes these 8-byte ops into libcalls. ok mortimer@
2020-05-30Switch Powerpc64 Big Endian to ELFv2 on OpenBSD, as least for now.Dale Rahn
This should simplify bringup and make it easier to support Big Endian and Little Endian with the same code. May be reconsidered if it causes too many problems with Ports. ok kettenis@
2020-05-30Powerpc64 should use same _mcount profiling as powerpc 32bit.Dale Rahn
ok kettenis@
2018-04-06Import LLVM 6.0.1 release including clang, lld and lldb.Patrick Wildt
"where is the kaboom?" deraadt@
2016-09-03Use the space freed up by sparc and zaurus to import LLVM.Pascal Stumpf
ok hackroom@
2020-05-25PowerPC: optimize away the frame pointer.gkoehler
clang defaulted to -fomit-frame-pointer when optimizing PowerPC code for Linux and NetBSD. Now do it for all systems, including OpenBSD. This affects both 32-bit and powerpc64 code. ok kettenis@
2020-05-23Use a distinct trap code with retguard on mips64.Visa Hankala
This lets the kernel detect retguard traps and send SIGABRT instead of SIGEMT. SIGEMT does not indicate correctly the nature of the error (stack overflow, violation of control flow). It can confuse the user to restart the program without further investigation. Prompted by and OK deraadt@ OK mortimer@
2020-05-20Make sure that we add our OpenBSD specific defines on PowerPC64 targets.Patrick Wildt
Prompted and tested by drahn@ ok deraadt@ drahn@ kettenis@ visa@
2020-05-02Don't make an illegal adde. Avoids fatal error on PowerPC.gkoehler
When the DAG truncates an ISD::ADDE node, DAGCombiner may optimize it by making an adde with smaller operands. PowerPC has i1 registers, and may truncate an i32 adde to i1, but an i1 adde is not legal for PowerPC, and the legalize-ops phase can't fix it. This was causing "fatal error: error in backend: Cannot select..." cwen@ reported the error ok mortimer@ kettenis@ deraadt@
2016-09-03Use the space freed up by sparc and zaurus to import LLVM.Pascal Stumpf
ok hackroom@