Index | Thread | Search

From:
Rafael Sadowski <rafael@sizeofvoid.org>
Subject:
UPDATE: devel/clang-tools-extra
To:
ports <ports@openbsd.org>
Date:
Wed, 22 May 2024 21:43:29 +0200

Download raw body.

Thread
Please below an update diff for clang-tools-extra to 16.0.6 (Our default
devel/llvm version). I waited a long time to do this because I never
found a clean way to install ONLY the extra-tools. This should solve
that. Check out "do-install".

I have decided deliberately NOT to install the libs and headers.
That doesn't make sense from my point of view, does it? This is just
about the tools.

Yes, I know I still have to test the consumers. patches all copy&waste
from devel/llvm/16/patches.

User test and feedback welcome.

diff --git a/devel/clang-tools-extra/Makefile b/devel/clang-tools-extra/Makefile
index a83a86a8c82..2138376d15b 100644
--- a/devel/clang-tools-extra/Makefile
+++ b/devel/clang-tools-extra/Makefile
@@ -12,10 +12,10 @@ DPB_PROPERTIES =	parallel
 
 COMMENT=	Clang extra tools
 
-LLVM_V =	13.0.0
-DISTNAME =	llvm-${LLVM_V}.src
+LLVM_V =	16.0.6
+LLVM_BASE =	llvm16
+DISTNAME =	llvm-project-${LLVM_V}.src
 PKGNAME=	clang-tools-extra-${LLVM_V}
-REVISION =	10
 
 CATEGORIES =	devel
 
@@ -26,15 +26,12 @@ MAINTAINER =	Rafael Sadowski <rsadowski@openbsd.org>
 # In transition from BSD-ish to Apache 2 + LLVM exceptions
 PERMIT_PACKAGE =	Yes
 
-WANTLIB += ${COMPILER_LIBCXX} c curses edit m z
+WANTLIB += ${COMPILER_LIBCXX} c m
+WANTLIB += llvm${MODCLANG_VERSION}/lib/clang-cpp
 
 SITES =		https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_V}/
 EXTRACT_SUFX =	.tar.xz
 
-DISTFILES =	llvm-${LLVM_V}.src${EXTRACT_SUFX} \
-		clang-${LLVM_V}.src${EXTRACT_SUFX} \
-		clang-tools-extra-${LLVM_V}.src${EXTRACT_SUFX}
-
 COMPILER =		base-clang ports-gcc
 
 MODULES =		devel/cmake \
@@ -47,26 +44,12 @@ MODCLANG_COMPILER_LINKS ?=	No
 
 CONFIGURE_STYLE =	cmake
 
-# Disable the most stuff to speed up the whole build step
-CONFIGURE_ARGS =	-DCMAKE_DISABLE_FIND_PACKAGE_Backtrace=ON \
-			-DCMAKE_DISABLE_FIND_PACKAGE_LibXml2=ON \
-			-DCMAKE_DISABLE_FIND_PACKAGE_Z3=ON \
-			-DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \
-			-DLLVM_BUILD_LLVM_DYLIB=OFF \
-			-DLLVM_ENABLE_FFI=OFF \
-			-DLLVM_ENABLE_RTTI=ON \
-			-DLLVM_ENABLE_TERMINFO=ON \
-			-DLLVM_LINK_LLVM_DYLIB=OFF
-
-CONFIGURE_ARGS +=	-DCLANG_ENABLE_STATIC_ANALYZER=ON \
-			-DCLANG_INCLUDE_TESTS=OFF \
-			-DLLVM_BUILD_BENCHMARKS=OFF \
-			-DLLVM_BUILD_TESTS=OFF \
-			-DLLVM_ENABLE_DOXYGEN=OFF \
-			-DLLVM_ENABLE_SPHINX=OFF \
-			-DLLVM_INCLUDE_BENCHMARKS=OFF \
-			-DLLVM_INCLUDE_EXAMPLES=OFF \
-			-DLLVM_INCLUDE_TESTS=OFF
+WRKDIST =	${WRKDIR}/llvm-project-${LLVM_V}.src
+WRKSRC =	${WRKDIR}/llvm-project-${LLVM_V}.src/llvm
+
+BUILD_DEPENDS +=	devel/swig \
+			textproc/py-sphinx${MODPY_FLAVOR} \
+			textproc/py-recommonmark${MODPY_FLAVOR}
 
 GCC_VER =		8.4.0
 .if ${MACHINE_ARCH} == "amd64"
@@ -74,29 +57,73 @@ GCC_CONFIG =		x86_64-unknown-openbsd${OSREV}
 .else
 GCC_CONFIG =		${MACHINE_ARCH}-unknown-openbsd${OSREV}
 .endif
-CLANG_INCLUDE_PATH =	lib/clang/${LLVM_V}/include
+
+CLANG_INCLUDE_PATH =	llvm16/lib/clang/16/include
 SUBST_VARS +=		CLANG_INCLUDE_PATH LLVM_V GCC_VER GCC_CONFIG
 
+CONFIGURE_ARGS +=	\
+	-DLLVM_ENABLE_BACKTRACES=OFF \
+	-DLLVM_ENABLE_FFI=OFF \
+	-DLLVM_ENABLE_LIBXML2=OFF \
+	-DLLVM_ENABLE_OCAMLDOC=OFF \
+	-DLLVM_ENABLE_PLUGINS=OFF \
+	-DLLVM_ENABLE_TERMINFO=OFF \
+	-DLLVM_ENABLE_RTTI=ON \
+	-DLLVM_ENABLE_Z3_SOLVER=OFF \
+	-DLLVM_ENABLE_ZSTD=OFF \
+	-DLLVM_INCLUDE_TESTS=OFF \
+	-DLLVM_INCLUDE_EXAMPLES=OFF \
+	-DLLVM_INCLUDE_BENCHMARKS=OFF \
+	-DLLVM_BUILD_LLVM_DYLIB=ON \
+	-DLLVM_LINK_LLVM_DYLIB=ON \
+
+# Generate documentation in man(1) format
+CONFIGURE_ARGS +=	\
+	-DLLVM_ENABLE_SPHINX=ON \
+	-DSPHINX_WARNINGS_AS_ERRORS=OFF \
+	-DSPHINX_OUTPUT_MAN=ON
+
+# OpenBSD specific options
+CONFIGURE_ARGS +=	\
+	-DLLD_ENABLE_MACHO=OFF \
+	-DLLD_ENABLE_WASM=ON \
+	-DLLD_ENABLE_COFF=ON \
+	-DLLD_ENABLE_MINGW=ON
+
+CONFIGURE_ARGS +=	-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra"
+
+# Disable some protections in the compiler to regain performance.
+CXXFLAGS-aarch64 =	-fno-ret-protector
+CXXFLAGS-amd64 =	-fno-ret-protector -mno-retpoline
+CXXFLAGS-i386 =		-fno-ret-protector -mno-retpoline
+CXXFLAGS-mips64 =	-fno-ret-protector -fomit-frame-pointer
+CXXFLAGS-mips64el =	-fno-ret-protector -fomit-frame-pointer
+CXXFLAGS-powerpc =	-fno-ret-protector
+CXXFLAGS +=		${CXXFLAGS-${MACHINE_ARCH}}
+
 # hack to disable the use of -Bsymbolic-functions
-# Keep in sync with devel/llvm
 OPENBSD_LD_IS_LLD =	FALSE
 SUBST_VARS +=		OPENBSD_LD_IS_LLD
 
-post-extract:
-	mv ${WRKDIR}/clang-${LLVM_V}.src ${WRKSRC}/tools/clang
-	mv ${WRKDIR}/clang-tools-extra-${LLVM_V}.src ${WRKSRC}/tools/clang/tools/extra
+MODCMAKE_LDFLAGS = -L${LOCALBASE}/llvm${MODCLANG_VERSION}/lib -Wl,-rpath=${LOCALBASE}/llvm${MODCLANG_VERSION}/lib
+
+ALL_TARGET =	clang-change-namespace clang-apply-replacements clang-doc
+ALL_TARGET +=	clang-include-fixer clang-move clang-query clang-reorder-fields
+ALL_TARGET +=	clang-tidy clangd modularize pp-trace tool-template find-all-symbols
 
 pre-configure:
-	@${SUBST_CMD} ${WRKSRC}/tools/clang/lib/Driver/ToolChains/OpenBSD.cpp
-	@${SUBST_CMD} ${WRKSRC}/cmake/modules/LLVMProcessSources.cmake
-	@${SUBST_CMD} ${WRKSRC}/tools/clang/tools/clang-shlib/CMakeLists.txt
-	@${SUBST_CMD} ${WRKSRC}/tools/llvm-shlib/CMakeLists.txt
-	-@ln -s ${MODPY_BIN} ${WRKDIR}/bin/python
-
-post-install:
-	find ${PREFIX}/share/clang -type f -name \*.py -exec ${MODPY_BIN_ADJ} {} +
-	2to3 -w -n ${PREFIX}/share/clang
-	${MODPY_BIN} ${MODPY_LIBDIR}/compileall.py \
-		${PREFIX}/share/clang
+	${SUBST_CMD} ${WRKDIST}/clang/lib/Driver/ToolChains/OpenBSD.cpp \
+		${WRKDIST}/clang/tools/clang-shlib/CMakeLists.txt \
+		${WRKDIST}/clang/tools/clang-format/clang-format-sublime.py \
+		${WRKDIST}/clang/tools/clang-format/clang-format.py \
+		${WRKDIST}/clang/tools/clang-format/git-clang-format \
+		${WRKSRC}/tools/llvm-shlib/CMakeLists.txt
+
+do-install:
+	cd ${WRKBUILD}
+.for _t in ${ALL_TARGET}
+	exec ${SETENV} ${MAKE_ENV} ${FAKE_SETUP} cmake --install ${WRKBUILD} \
+		--component "${_t}"
+.endfor
 
 .include <bsd.port.mk>
diff --git a/devel/clang-tools-extra/distinfo b/devel/clang-tools-extra/distinfo
index 7b092df5737..b952b5885df 100644
--- a/devel/clang-tools-extra/distinfo
+++ b/devel/clang-tools-extra/distinfo
@@ -1,6 +1,2 @@
-SHA256 (clang-13.0.0.src.tar.xz) = XWEcuwbPtmJr5G6y8j0AOyuA9AGCiY2qVLHE6LW54X4=
-SHA256 (clang-tools-extra-13.0.0.src.tar.xz) = QotgYKKLIq3wzfXYJ6u8K6gYCfRmHt49ArHT/tqj6tU=
-SHA256 (llvm-13.0.0.src.tar.xz) = QI0RcIZD6oJvUZ/3l2H838EtZBolECKe7EWecvgWMCA=
-SIZE (clang-13.0.0.src.tar.xz) = 17846828
-SIZE (clang-tools-extra-13.0.0.src.tar.xz) = 2739604
-SIZE (llvm-13.0.0.src.tar.xz) = 45471992
+SHA256 (llvm-project-16.0.6.src.tar.xz) = zl5xCB0Xzp6G18vPooxLBLkwD4+354Qisf62vFLDAo4=
+SIZE (llvm-project-16.0.6.src.tar.xz) = 118013488
diff --git a/devel/clang-tools-extra/patches/patch-clang_docs_CommandGuide_clang_rst b/devel/clang-tools-extra/patches/patch-clang_docs_CommandGuide_clang_rst
new file mode 100644
index 00000000000..aa968a11a93
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_docs_CommandGuide_clang_rst
@@ -0,0 +1,17 @@
+Index: clang/docs/CommandGuide/clang.rst
+--- clang/docs/CommandGuide/clang.rst.orig
++++ clang/docs/CommandGuide/clang.rst
+@@ -1,5 +1,5 @@
+-clang - the Clang C, C++, and Objective-C compiler
+-==================================================
++clang, clang++, clang-cpp - the Clang C, C++, and Objective-C compiler
++======================================================================
+ 
+ SYNOPSIS
+ --------
+@@ -697,4 +697,4 @@ output of the compiler, along with information to repr
+ SEE ALSO
+ --------
+ 
+-:manpage:`as(1)`, :manpage:`ld(1)`
++:manpage:`as(1)`, :manpage:`clang-local(1)`, :manpage:`ld(1)`
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_AST_FormatString_h b/devel/clang-tools-extra/patches/patch-clang_include_clang_AST_FormatString_h
similarity index 58%
rename from devel/clang-tools-extra/patches/patch-tools_clang_include_clang_AST_FormatString_h
rename to devel/clang-tools-extra/patches/patch-clang_include_clang_AST_FormatString_h
index 917a81df265..287fe89ef91 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_AST_FormatString_h
+++ b/devel/clang-tools-extra/patches/patch-clang_include_clang_AST_FormatString_h
@@ -1,11 +1,7 @@
-- The %b printf extension in the kernel is not fixed to a int type. On sparc64
-  there are various %llb formats. Adjust the code to handle the length specifiers
-  and type check like it is used by the regular case.
-
-Index: tools/clang/include/clang/AST/FormatString.h
---- tools/clang/include/clang/AST/FormatString.h.orig
-+++ tools/clang/include/clang/AST/FormatString.h
-@@ -227,8 +227,10 @@ class ConversionSpecifier { (public)
+Index: clang/include/clang/AST/FormatString.h
+--- clang/include/clang/AST/FormatString.h.orig
++++ clang/include/clang/AST/FormatString.h
+@@ -232,8 +232,10 @@ class ConversionSpecifier { (public)
  
    bool isIntArg() const { return (kind >= IntArgBeg && kind <= IntArgEnd) ||
      kind == FreeBSDrArg || kind == FreeBSDyArg; }
diff --git a/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_CodeGenOptions_def b/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_CodeGenOptions_def
new file mode 100644
index 00000000000..46dbbf00bf7
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_CodeGenOptions_def
@@ -0,0 +1,13 @@
+Index: clang/include/clang/Basic/CodeGenOptions.def
+--- clang/include/clang/Basic/CodeGenOptions.def.orig
++++ clang/include/clang/Basic/CodeGenOptions.def
+@@ -385,6 +385,9 @@ VALUE_CODEGENOPT(SmallDataLimit, 32, 0)
+ /// The lower bound for a buffer to be considered for stack protection.
+ VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
+ 
++/// Whether to use return protectors
++CODEGENOPT(ReturnProtector, 1, 0)
++
+ /// The kind of generated debug info.
+ ENUM_CODEGENOPT(DebugInfo, codegenoptions::DebugInfoKind, 4, codegenoptions::NoDebugInfo)
+ 
diff --git a/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_DiagnosticSemaKinds_td b/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_DiagnosticSemaKinds_td
new file mode 100644
index 00000000000..f4b4ec58189
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_include_clang_Basic_DiagnosticSemaKinds_td
@@ -0,0 +1,103 @@
+Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
+--- clang/include/clang/Basic/DiagnosticSemaKinds.td.orig
++++ clang/include/clang/Basic/DiagnosticSemaKinds.td
+@@ -251,7 +251,7 @@ def warn_deprecated_register : Warning<
+   "and incompatible with C++17">, InGroup<DeprecatedRegister>;
+ def ext_register_storage_class : ExtWarn<
+   "ISO C++17 does not allow 'register' storage class specifier">,
+-  DefaultError, InGroup<Register>;
++  InGroup<Register>;
+ 
+ def err_invalid_decl_spec_combination : Error<
+   "cannot combine with previous '%0' declaration specifier">;
+@@ -419,7 +419,7 @@ def warn_implicit_function_decl : Warning<
+   InGroup<ImplicitFunctionDeclare>, DefaultIgnore;
+ def ext_implicit_function_decl_c99 : ExtWarn<
+   "call to undeclared function %0; ISO C99 and later do not support implicit "
+-  "function declarations">, InGroup<ImplicitFunctionDeclare>, DefaultError;
++  "function declarations">, InGroup<ImplicitFunctionDeclare>;
+ def note_function_suggestion : Note<"did you mean %0?">;
+ 
+ def err_ellipsis_first_param : Error<
+@@ -709,7 +709,7 @@ def ext_implicit_lib_function_decl : ExtWarn<
+ def ext_implicit_lib_function_decl_c99 : ExtWarn<
+   "call to undeclared library function '%0' with type %1; ISO C99 and later "
+   "do not support implicit function declarations">,
+-  InGroup<ImplicitFunctionDeclare>, DefaultError;
++  InGroup<ImplicitFunctionDeclare>;
+ def note_include_header_or_declare : Note<
+   "include the header <%0> or explicitly provide a declaration for '%1'">;
+ def note_previous_builtin_declaration : Note<"%0 is a builtin with type %1">;
+@@ -4391,7 +4391,7 @@ def err_ident_list_in_fn_declaration : Error<
+   "a parameter list without types is only allowed in a function definition">;
+ def ext_param_not_declared : ExtWarn<
+   "parameter %0 was not declared, defaults to 'int'; ISO C99 and later do not "
+-  "support implicit int">, InGroup<ImplicitInt>, DefaultError;
++  "support implicit int">, InGroup<ImplicitInt>;
+ def err_param_default_argument : Error<
+   "C does not support default arguments">;
+ def err_param_default_argument_redefinition : Error<
+@@ -6980,7 +6980,7 @@ def warn_pointer_indirection_from_incompatible_type : 
+   InGroup<UndefinedReinterpretCast>, DefaultIgnore;
+ def warn_taking_address_of_packed_member : Warning<
+   "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value">,
+-  InGroup<DiagGroup<"address-of-packed-member">>;
++  InGroup<DiagGroup<"address-of-packed-member">>, DefaultIgnore;
+ def warn_param_mismatched_alignment : Warning<
+   "passing %0-byte aligned argument to %1-byte aligned parameter %2%select{| of %4}3 may result in an unaligned pointer access">,
+   InGroup<DiagGroup<"align-mismatch">>;
+@@ -8113,7 +8113,7 @@ def err_typecheck_convert_pointer_int : Error<
+   "; remove &}3">;
+ def ext_typecheck_convert_pointer_int : ExtWarn<
+   err_typecheck_convert_pointer_int.Summary>,
+-  InGroup<IntConversion>, DefaultError;
++  InGroup<IntConversion>;
+ def err_typecheck_convert_int_pointer : Error<
+   "incompatible integer to pointer conversion "
+   "%select{%diff{assigning to $ from $|assigning to different types}0,1"
+@@ -8133,7 +8133,7 @@ def err_typecheck_convert_int_pointer : Error<
+   "; remove &}3">;
+ def ext_typecheck_convert_int_pointer : ExtWarn<
+   err_typecheck_convert_int_pointer.Summary>,
+-  InGroup<IntConversion>, DefaultError;
++  InGroup<IntConversion>;
+ def ext_typecheck_convert_pointer_void_func : Extension<
+   "%select{%diff{assigning to $ from $|assigning to different types}0,1"
+   "|%diff{passing $ to parameter of type $|"
+@@ -8174,7 +8174,7 @@ def ext_typecheck_convert_incompatible_pointer_sign : 
+   "|%diff{casting $ to type $|casting between types}0,1}2"
+   " converts between pointers to integer types %select{with different sign|"
+   "where one is of the unique plain 'char' type and the other is not}3">,
+-  InGroup<DiagGroup<"pointer-sign">>;
++  InGroup<DiagGroup<"pointer-sign">>, DefaultIgnore;
+ def err_typecheck_convert_incompatible_pointer_sign :
+   Error<ext_typecheck_convert_incompatible_pointer_sign.Summary>;
+ def ext_typecheck_convert_incompatible_pointer : ExtWarn<
+@@ -8231,7 +8231,7 @@ def err_typecheck_convert_incompatible_function_pointe
+   "; remove &}3">;
+ def ext_typecheck_convert_incompatible_function_pointer : ExtWarn<
+   err_typecheck_convert_incompatible_function_pointer.Summary>,
+-  InGroup<IncompatibleFunctionPointerTypes>, DefaultError;
++  InGroup<IncompatibleFunctionPointerTypes>;
+ def warn_typecheck_convert_incompatible_function_pointer_strict : Warning<
+   err_typecheck_convert_incompatible_function_pointer.Summary>,
+   InGroup<DiagGroup<"incompatible-function-pointer-types-strict">>, DefaultIgnore;
+@@ -9769,6 +9769,9 @@ def err_os_log_argument_too_big : Error<
+ def warn_os_log_format_narg : Error<
+  "os_log() '%%n' format specifier is not allowed">, DefaultError;
+ 
++def warn_format_narg : Warning<
++  "'%%n' format specifier support is deactivated and will call abort(3)">;
++
+ // Statements.
+ def err_continue_not_in_loop : Error<
+   "'continue' statement not in loop statement">;
+@@ -10105,7 +10108,7 @@ def warn_receiver_forward_class : Warning<
+ def note_method_sent_forward_class : Note<"method %0 is used for the forward class">;
+ def ext_missing_type_specifier : ExtWarn<
+   "type specifier missing, defaults to 'int'; ISO C99 and later do not support "
+-  "implicit int">, InGroup<ImplicitInt>, DefaultError;
++  "implicit int">, InGroup<ImplicitInt>;
+ def err_missing_type_specifier : Error<
+   "a type specifier is required for all declarations">;
+ def err_decimal_unsupported : Error<
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Driver_Options_td b/devel/clang-tools-extra/patches/patch-clang_include_clang_Driver_Options_td
similarity index 69%
rename from devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Driver_Options_td
rename to devel/clang-tools-extra/patches/patch-clang_include_clang_Driver_Options_td
index a582c5d84c5..e4515949013 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Driver_Options_td
+++ b/devel/clang-tools-extra/patches/patch-clang_include_clang_Driver_Options_td
@@ -1,16 +1,10 @@
-- Add ret protector options as no-ops.
-- Improve the X86FixupGadgets pass
-- Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-- Alias the command line parameter -p to -pg.
-- implement -msave-args in clang/llvm, like the sun did for gcc
-
-Index: tools/clang/include/clang/Driver/Options.td
---- tools/clang/include/clang/Driver/Options.td.orig
-+++ tools/clang/include/clang/Driver/Options.td
-@@ -2528,6 +2528,16 @@ def ftrivial_auto_var_init : Joined<["-"], "ftrivial-a
- def enable_trivial_var_init_zero : Flag<["-"], "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">,
-   Flags<[CC1Option, CoreOption]>,
-   HelpText<"Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark">;
+Index: clang/include/clang/Driver/Options.td
+--- clang/include/clang/Driver/Options.td.orig
++++ clang/include/clang/Driver/Options.td
+@@ -2847,6 +2847,16 @@ def ftrivial_auto_var_init : Joined<["-"], "ftrivial-a
+   NormalizedValuesScope<"LangOptions::TrivialAutoVarInitKind">,
+   NormalizedValues<["Uninitialized", "Zero", "Pattern"]>,
+   MarshallingInfoEnum<LangOpts<"TrivialAutoVarInit">, "Uninitialized">;
 +def ret_protector : Flag<["-"], "ret-protector">, Flags<[CC1Option]>,
 +  HelpText<"Enable Return Protectors">;
 +def fno_ret_protector : Flag<["-"], "fno-ret-protector">, Group<f_Group>, Flags<[CoreOption]>,
@@ -24,8 +18,8 @@ Index: tools/clang/include/clang/Driver/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Flags<[CC1Option, CoreOption]>, HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
    MarshallingInfoInt<LangOpts<"TrivialAutoVarInitStopAfter">>;
-@@ -3493,6 +3503,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
-                               Group<m_mips_Features_Group>;
+@@ -3943,6 +3953,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
+ def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
  def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
                             Group<m_mips_Features_Group>;
 +def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
@@ -33,7 +27,7 @@ Index: tools/clang/include/clang/Driver/Options.td
  def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
    IgnoredGCCCompat;
  def mno_branch_likely : Flag<["-"], "mno-branch-likely">, Group<m_Group>,
-@@ -3721,7 +3733,7 @@ defm pthread : BoolOption<"", "pthread",
+@@ -4184,7 +4196,7 @@ defm pthread : BoolOption<"", "pthread",
    LangOpts<"POSIXThreads">, DefaultFalse,
    PosFlag<SetTrue, [], "Support POSIX threads in generated code">,
    NegFlag<SetFalse>, BothFlags<[CC1Option]>>;
@@ -42,7 +36,7 @@ Index: tools/clang/include/clang/Driver/Options.td
  def pie : Flag<["-"], "pie">, Group<Link_Group>;
  def static_pie : Flag<["-"], "static-pie">, Group<Link_Group>;
  def read__only__relocs : Separate<["-"], "read_only_relocs">;
-@@ -4252,6 +4264,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -4796,6 +4808,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
diff --git a/devel/clang-tools-extra/patches/patch-clang_include_clang_Sema_Sema_h b/devel/clang-tools-extra/patches/patch-clang_include_clang_Sema_Sema_h
new file mode 100644
index 00000000000..67a681185c6
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_include_clang_Sema_Sema_h
@@ -0,0 +1,11 @@
+Index: clang/include/clang/Sema/Sema.h
+--- clang/include/clang/Sema/Sema.h.orig
++++ clang/include/clang/Sema/Sema.h
+@@ -13567,6 +13567,7 @@ class Sema final { (public)
+     FST_FreeBSDKPrintf,
+     FST_OSTrace,
+     FST_OSLog,
++    FST_Syslog,
+     FST_Unknown
+   };
+   static FormatStringType GetFormatStringType(const FormatAttr *Format);
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_AST_FormatString_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_AST_FormatString_cpp
similarity index 67%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_AST_FormatString_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_AST_FormatString_cpp
index 646abf1fd07..aca6478eafe 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_AST_FormatString_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_AST_FormatString_cpp
@@ -1,11 +1,7 @@
-- The %b printf extension in the kernel is not fixed to a int type. On sparc64
-  there are various %llb formats. Adjust the code to handle the length specifiers
-  and type check like it is used by the regular case.
-
-Index: tools/clang/lib/AST/FormatString.cpp
---- tools/clang/lib/AST/FormatString.cpp.orig
-+++ tools/clang/lib/AST/FormatString.cpp
-@@ -759,6 +759,10 @@ bool FormatSpecifier::hasValidLengthModifier(const Tar
+Index: clang/lib/AST/FormatString.cpp
+--- clang/lib/AST/FormatString.cpp.orig
++++ clang/lib/AST/FormatString.cpp
+@@ -828,6 +828,10 @@ bool FormatSpecifier::hasValidLengthModifier(const Tar
          case ConversionSpecifier::XArg:
          case ConversionSpecifier::nArg:
            return true;
@@ -15,8 +11,8 @@ Index: tools/clang/lib/AST/FormatString.cpp
 +                 Target.getTriple().isOSOpenBSD();
          case ConversionSpecifier::FreeBSDrArg:
          case ConversionSpecifier::FreeBSDyArg:
-           return Target.getTriple().isOSFreeBSD() || Target.getTriple().isPS4();
-@@ -794,6 +798,10 @@ bool FormatSpecifier::hasValidLengthModifier(const Tar
+           return Target.getTriple().isOSFreeBSD() || Target.getTriple().isPS();
+@@ -863,6 +867,10 @@ bool FormatSpecifier::hasValidLengthModifier(const Tar
          case ConversionSpecifier::ScanListArg:
          case ConversionSpecifier::ZArg:
            return true;
@@ -26,8 +22,8 @@ Index: tools/clang/lib/AST/FormatString.cpp
 +                 Target.getTriple().isOSOpenBSD();
          case ConversionSpecifier::FreeBSDrArg:
          case ConversionSpecifier::FreeBSDyArg:
-           return Target.getTriple().isOSFreeBSD() || Target.getTriple().isPS4();
-@@ -953,6 +961,7 @@ bool FormatSpecifier::hasStandardLengthConversionCombi
+           return Target.getTriple().isOSFreeBSD() || Target.getTriple().isPS();
+@@ -1024,6 +1032,7 @@ bool FormatSpecifier::hasStandardLengthConversionCombi
          case ConversionSpecifier::uArg:
          case ConversionSpecifier::xArg:
          case ConversionSpecifier::XArg:
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_Mips_h b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_Mips_h
new file mode 100644
index 00000000000..a8caa7d0002
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_Mips_h
@@ -0,0 +1,11 @@
+Index: clang/lib/Basic/Targets/Mips.h
+--- clang/lib/Basic/Targets/Mips.h.orig
++++ clang/lib/Basic/Targets/Mips.h
+@@ -238,6 +238,7 @@ class LLVM_LIBRARY_VISIBILITY MipsTargetInfo : public 
+     case 'y': // Equivalent to "r", backward compatibility only.
+     case 'f': // floating-point registers.
+     case 'c': // $25 for indirect jumps
++    case 'h': // hi register
+     case 'l': // lo register
+     case 'x': // hilo register pair
+       Info.setAllowsRegister();
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_cpp
similarity index 61%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_cpp
index 21a80bc4b0e..d7b09c78663 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_cpp
@@ -1,9 +1,7 @@
-implement -msave-args in clang/llvm, like the sun did for gcc 
-
-Index: tools/clang/lib/Basic/Targets/X86.cpp
---- tools/clang/lib/Basic/Targets/X86.cpp.orig
-+++ tools/clang/lib/Basic/Targets/X86.cpp
-@@ -309,6 +309,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<s
+Index: clang/lib/Basic/Targets/X86.cpp
+--- clang/lib/Basic/Targets/X86.cpp.orig
++++ clang/lib/Basic/Targets/X86.cpp
+@@ -323,6 +323,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<s
        HasPTWRITE = true;
      } else if (Feature == "+invpcid") {
        HasINVPCID = true;
@@ -12,7 +10,7 @@ Index: tools/clang/lib/Basic/Targets/X86.cpp
      } else if (Feature == "+enqcmd") {
        HasENQCMD = true;
      } else if (Feature == "+hreset") {
-@@ -984,6 +986,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature) cons
+@@ -1070,6 +1072,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature) cons
        .Case("movbe", HasMOVBE)
        .Case("movdiri", HasMOVDIRI)
        .Case("movdir64b", HasMOVDIR64B)
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_h b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_h
new file mode 100644
index 00000000000..562ef76b7cb
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Basic_Targets_X86_h
@@ -0,0 +1,11 @@
+Index: clang/lib/Basic/Targets/X86.h
+--- clang/lib/Basic/Targets/X86.h.orig
++++ clang/lib/Basic/Targets/X86.h
+@@ -138,6 +138,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public T
+   bool HasMOVDIR64B = false;
+   bool HasPTWRITE = false;
+   bool HasINVPCID = false;
++  bool HasSaveArgs = false;
+   bool HasENQCMD = false;
+   bool HasAMXFP16 = false;
+   bool HasCMPCCXADD = false;
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CGCall_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CGCall_cpp
new file mode 100644
index 00000000000..0f0996cb884
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CGCall_cpp
@@ -0,0 +1,13 @@
+Index: clang/lib/CodeGen/CGCall.cpp
+--- clang/lib/CodeGen/CGCall.cpp.orig
++++ clang/lib/CodeGen/CGCall.cpp
+@@ -2347,6 +2347,9 @@ void CodeGenModule::ConstructAttributeList(StringRef N
+     // CPU/feature overrides.  addDefaultFunctionDefinitionAttributes
+     // handles these separately to set them based on the global defaults.
+     GetCPUAndFeaturesAttributes(CalleeInfo.getCalleeDecl(), FuncAttrs);
++
++    if (CodeGenOpts.ReturnProtector)
++      FuncAttrs.addAttribute("ret-protector");
+   }
+ 
+   // Collect attributes from arguments and return values.
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CodeGenModule_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CodeGenModule_cpp
new file mode 100644
index 00000000000..22715e57200
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_CodeGen_CodeGenModule_cpp
@@ -0,0 +1,12 @@
+Index: clang/lib/CodeGen/CodeGenModule.cpp
+--- clang/lib/CodeGen/CodeGenModule.cpp.orig
++++ clang/lib/CodeGen/CodeGenModule.cpp
+@@ -979,7 +979,7 @@ void CodeGenModule::EmitOpenCLMetadata() {
+ void CodeGenModule::EmitBackendOptionsMetadata(
+     const CodeGenOptions CodeGenOpts) {
+   if (getTriple().isRISCV()) {
+-    getModule().addModuleFlag(llvm::Module::Error, "SmallDataLimit",
++    getModule().addModuleFlag(llvm::Module::Warning, "SmallDataLimit",
+                               CodeGenOpts.SmallDataLimit);
+   }
+ }
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_Driver_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_Driver_cpp
similarity index 83%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_Driver_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Driver_Driver_cpp
index 82f63c7cb27..cb647f9d045 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_Driver_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_Driver_cpp
@@ -1,10 +1,8 @@
-- Report versioned lib.so in cc --print-file-name given short name
-
-Index: tools/clang/lib/Driver/Driver.cpp
---- tools/clang/lib/Driver/Driver.cpp.orig
-+++ tools/clang/lib/Driver/Driver.cpp
-@@ -5089,7 +5089,50 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
-   }
+Index: clang/lib/Driver/Driver.cpp
+--- clang/lib/Driver/Driver.cpp.orig
++++ clang/lib/Driver/Driver.cpp
+@@ -5826,7 +5826,50 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
+   return C.addResultFile(NamedOutput, &JA);
  }
  
 +
@@ -15,7 +13,7 @@ Index: tools/clang/lib/Driver/Driver.cpp
 +
 +  if (llvm::sys::fs::exists(s))
 +    return std::string(s);
-+  return None;
++  return std::nullopt;
 +}
 +
 +// Must be in sync with findMajMinShlib in lld/ELF/DriverUtils.cpp.
@@ -45,7 +43,7 @@ Index: tools/clang/lib/Driver/Driver.cpp
 +  }
 +  if (MaxMaj >= 0)
 +    return findFile(dir, LibName + Twine(MaxMaj) + "." + Twine(MaxMin));
-+  return None;
++  return std::nullopt;
 +}
 +}  // namespace
 +
@@ -53,8 +51,8 @@ Index: tools/clang/lib/Driver/Driver.cpp
 +  const bool lookForLibDotSo = Name.startswith("lib") && Name.endswith(".so");
    // Search for Name in a list of paths.
    auto SearchPaths = [&](const llvm::SmallVectorImpl<std::string> &P)
-       -> llvm::Optional<std::string> {
-@@ -5099,9 +5142,14 @@ std::string Driver::GetFilePath(StringRef Name, const 
+       -> std::optional<std::string> {
+@@ -5836,9 +5879,14 @@ std::string Driver::GetFilePath(StringRef Name, const 
        if (Dir.empty())
          continue;
        SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
@@ -70,5 +68,5 @@ Index: tools/clang/lib/Driver/Driver.cpp
 +	  return std::string(*s);
 +      }
      }
-     return None;
+     return std::nullopt;
    };
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_RISCV_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Arch_RISCV_cpp
similarity index 63%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_RISCV_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Arch_RISCV_cpp
index cf961846938..bea7690795a 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_RISCV_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Arch_RISCV_cpp
@@ -1,9 +1,7 @@
-- ld.lld doesn't properly support R_RISCV_RELAX relocations, switch the default to -no-relax
-
-Index: tools/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
---- tools/clang/lib/Driver/ToolChains/Arch/RISCV.cpp.orig
-+++ tools/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-@@ -556,11 +556,19 @@ void riscv::getRISCVTargetFeatures(const Driver &D, co
+Index: clang/lib/Driver/ToolChains/Arch/RISCV.cpp
+--- clang/lib/Driver/ToolChains/Arch/RISCV.cpp.orig
++++ clang/lib/Driver/ToolChains/Arch/RISCV.cpp
+@@ -140,6 +140,13 @@ void riscv::getRISCVTargetFeatures(const Driver &D, co
    if (Args.hasArg(options::OPT_ffixed_x31))
      Features.push_back("+reserve-x31");
  
@@ -15,10 +13,12 @@ Index: tools/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
 +    Features.push_back("-relax");
 +#else
    // -mrelax is default, unless -mno-relax is specified.
-   if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true))
+   if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true)) {
      Features.push_back("+relax");
-   else
+@@ -152,6 +159,7 @@ void riscv::getRISCVTargetFeatures(const Driver &D, co
+   } else {
      Features.push_back("-relax");
+   }
 +#endif
  
    // GCC Compatibility: -mno-save-restore is default, unless -msave-restore is
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
similarity index 57%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
index a968ab35c14..f4e952230f7 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -1,61 +1,43 @@
-- Switch Powerpc64 Big Endian to ELFv2 on OpenBSD.
-- Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-- Disable -fstrict-aliasing per default on OpenBSD.
-- Enable -fwrapv by default
-- Add ret protector options as no-ops.
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Add retguard for arm64.
-- Add retguard for octeon/mips64.
-- Add RETGUARD implementation for powerpc and powerpc64.
-- Improve the X86FixupGadgets pass
-- On OpenBSD disable the malloc/calloc/realloc/free/str*dup builtins, since
-  they can perform strange transforms and optimizations.  Some of those could
-  gain a slight advantage, but would avoid the variety of important runtime
-  checks our malloc(3) code does.  In essence, the transforms performed are
-  considered "anti-mitigation".
-- Make -mbranch-protection=bti the default on OpenBSD.
-- On openbsd amd64, emit IBT endbr64 instructions by default (meaning,
-  -fcf-protection=branch is the default).
-- On openbsd amd64, the compiler has been found to generate some nasty jump
-  table variations (calculate address into %rax, jmp %rax) which is not
-  compatible with IBT endbr64.  So we will have to disable jump tables by
-  default.
-- Turn on pointer-authentication on arm64 as well by default.  This means
-  we effectively enable -mbranch-protection=standard on arm64 now.
-
-Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
---- tools/clang/lib/Driver/ToolChains/Clang.cpp.orig
-+++ tools/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -1818,6 +1818,12 @@ void Clang::AddAArch64TargetArgs(const ArgList &Args,
-         Args.MakeArgString(Twine("-msign-return-address-key=") + Key));
-     if (IndirectBranches)
-       CmdArgs.push_back("-mbranch-target-enforce");
-+  } else {
-+    if (Triple.isOSOpenBSD()) {
+Index: clang/lib/Driver/ToolChains/Clang.cpp
+--- clang/lib/Driver/ToolChains/Clang.cpp.orig
++++ clang/lib/Driver/ToolChains/Clang.cpp
+@@ -1566,15 +1566,21 @@ void AddUnalignedAccessWarning(ArgStringList &CmdArgs)
+ 
+ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
+                                     ArgStringList &CmdArgs, bool isAArch64) {
++  const llvm::Triple &Triple = TC.getEffectiveTriple();
+   const Arg *A = isAArch64
+                      ? Args.getLastArg(options::OPT_msign_return_address_EQ,
+                                        options::OPT_mbranch_protection_EQ)
+                      : Args.getLastArg(options::OPT_mbranch_protection_EQ);
+-  if (!A)
++  if (!A) {
++    if (Triple.isOSOpenBSD() && isAArch64) {
 +      CmdArgs.push_back("-msign-return-address=non-leaf");
 +      CmdArgs.push_back("-msign-return-address-key=a_key");
 +      CmdArgs.push_back("-mbranch-target-enforce");
 +    }
-   }
+     return;
++  }
  
-   // Handle -msve_vector_bits=<bits>
-@@ -2489,6 +2495,11 @@ static void CollectArgsForIntegratedAssembler(Compilat
+   const Driver &D = TC.getDriver();
+-  const llvm::Triple &Triple = TC.getEffectiveTriple();
+   if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))
+     D.Diag(diag::warn_incompatible_branch_protection_option)
+         << Triple.getArchName();
+@@ -1588,7 +1594,10 @@ static void CollectARMPACBTIOptions(const ToolChain &T
+       D.Diag(diag::err_drv_unsupported_option_argument)
+           << A->getSpelling() << Scope;
+     Key = "a_key";
+-    IndirectBranches = false;
++    if (Triple.isOSOpenBSD() && isAArch64)
++      IndirectBranches = true;
++    else
++      IndirectBranches = false;
+   } else {
+     StringRef DiagMsg;
+     llvm::ARM::ParsedBranchProtection PBP;
+@@ -2536,6 +2545,11 @@ static void CollectArgsForIntegratedAssembler(Compilat
            CmdArgs.push_back("-soft-float");
            continue;
          }
@@ -67,7 +49,7 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
  
          MipsTargetFeature = llvm::StringSwitch<const char *>(Value)
                                  .Case("-mips1", "+mips1")
-@@ -4943,9 +4954,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5289,9 +5303,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're in CL mode, since MSVC
    // doesn't do any TBAA.
@@ -81,8 +63,8 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
 +                    options::OPT_fno_strict_aliasing, StrictAliasingDefault))
      CmdArgs.push_back("-relaxed-aliasing");
    if (!Args.hasFlag(options::OPT_fstruct_path_tbaa,
-                     options::OPT_fno_struct_path_tbaa))
-@@ -5868,7 +5882,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+                     options::OPT_fno_struct_path_tbaa, true))
+@@ -6321,7 +6338,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                        options::OPT_fno_strict_overflow)) {
      if (A->getOption().matches(options::OPT_fno_strict_overflow))
        CmdArgs.push_back("-fwrapv");
@@ -92,9 +74,9 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
  
    if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
                                 options::OPT_fno_reroll_loops))
-@@ -5888,7 +5903,48 @@ void Clang::ConstructJob(Compilation &C, const JobActi
-                    options::OPT_mno_speculative_load_hardening, false))
-     CmdArgs.push_back(Args.MakeArgString("-mspeculative-load-hardening"));
+@@ -6342,7 +6360,48 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+   Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
+                     options::OPT_mno_speculative_load_hardening);
  
 -  RenderSSPOptions(D, TC, Args, CmdArgs, KernelOrKext);
 +  // -ret-protector
@@ -142,7 +124,7 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -5961,6 +6017,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6417,6 +6476,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) {
      CmdArgs.push_back(
          Args.MakeArgString(Twine("-fcf-protection=") + A->getValue()));
@@ -153,8 +135,8 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
 +    CmdArgs.push_back("-fno-jump-tables");
    }
  
-   // Forward -f options with positive and negative forms; we translate these by
-@@ -6445,6 +6506,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+   if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ))
+@@ -6895,6 +6959,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
@@ -171,5 +153,5 @@ Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
 +    CmdArgs.push_back("-fno-builtin-strndup");
 +  }
  
-   // Enable rewrite includes if the user's asked for it or if we're generating
-   // diagnostics.
+   Args.addOptInFlag(CmdArgs, options::OPT_fdirectives_only,
+                     options::OPT_fno_directives_only);
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_OpenBSD_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_OpenBSD_cpp
new file mode 100644
index 00000000000..d6b986ec80d
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_OpenBSD_cpp
@@ -0,0 +1,14 @@
+Index: clang/lib/Driver/ToolChains/OpenBSD.cpp
+--- clang/lib/Driver/ToolChains/OpenBSD.cpp.orig
++++ clang/lib/Driver/ToolChains/OpenBSD.cpp
+@@ -276,6 +276,10 @@ SanitizerMask OpenBSD::getSupportedSanitizers() const 
+     Res |= SanitizerKind::FuzzerNoLink;
+   }
+ 
++  if (IsX86_64) {
++    Res |= SanitizerKind::KernelAddress;
++  }
++
+   return Res;
+ }
+ 
diff --git a/devel/clang-tools-extra/patches/patch-clang_lib_Frontend_CompilerInvocation_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Frontend_CompilerInvocation_cpp
new file mode 100644
index 00000000000..ee43561e7d2
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Frontend_CompilerInvocation_cpp
@@ -0,0 +1,23 @@
+Index: clang/lib/Frontend/CompilerInvocation.cpp
+--- clang/lib/Frontend/CompilerInvocation.cpp.orig
++++ clang/lib/Frontend/CompilerInvocation.cpp
+@@ -1505,6 +1505,10 @@ void CompilerInvocation::GenerateCodeGenArgs(
+                 F.Filename, SA);
+   }
+ 
++  if (Opts.ReturnProtector) {
++    GenerateArg(Args, OPT_ret_protector, SA);
++  }
++
+   GenerateArg(
+       Args, Opts.EmulatedTLS ? OPT_femulated_tls : OPT_fno_emulated_tls, SA);
+ 
+@@ -1866,6 +1870,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptio
+     }
+     Opts.LinkBitcodeFiles.push_back(F);
+   }
++
++  Opts.ReturnProtector = Args.hasArg(OPT_ret_protector);
+ 
+   if (!Args.getLastArg(OPT_femulated_tls) &&
+       !Args.getLastArg(OPT_fno_emulated_tls)) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaChecking_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaChecking_cpp
similarity index 74%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaChecking_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaChecking_cpp
index 9c618c77ce7..4127d23acf2 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaChecking_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaChecking_cpp
@@ -1,14 +1,7 @@
-- Teach Clang about syslog format attribute
-- Enable the kprintf format attribute
-- The %b printf extension in the kernel is not fixed to a int type. On sparc64
-  there are various %llb formats. Adjust the code to handle the length
-  specifiers and type check like it is used by the regular case.
-- Add a new warning for %n format specifier usage in printf(3) family functions
-
-Index: tools/clang/lib/Sema/SemaChecking.cpp
---- tools/clang/lib/Sema/SemaChecking.cpp.orig
-+++ tools/clang/lib/Sema/SemaChecking.cpp
-@@ -7847,7 +7847,7 @@ checkFormatStringExpr(Sema &S, const Expr *E, ArrayRef
+Index: clang/lib/Sema/SemaChecking.cpp
+--- clang/lib/Sema/SemaChecking.cpp.orig
++++ clang/lib/Sema/SemaChecking.cpp
+@@ -9098,7 +9098,7 @@ static const Expr *maybeConstEvalStringLiteral(ASTCont
  Sema::FormatStringType Sema::GetFormatStringType(const FormatAttr *Format) {
    return llvm::StringSwitch<FormatStringType>(Format->getType()->getName())
        .Case("scanf", FST_Scanf)
@@ -17,7 +10,7 @@ Index: tools/clang/lib/Sema/SemaChecking.cpp
        .Cases("NSString", "CFString", FST_NSString)
        .Case("strftime", FST_Strftime)
        .Case("strfmon", FST_Strfmon)
-@@ -7944,6 +7944,7 @@ bool Sema::CheckFormatArguments(ArrayRef<const Expr *>
+@@ -9195,6 +9195,7 @@ bool Sema::CheckFormatArguments(ArrayRef<const Expr *>
      case FST_Kprintf:
      case FST_FreeBSDKPrintf:
      case FST_Printf:
@@ -25,7 +18,7 @@ Index: tools/clang/lib/Sema/SemaChecking.cpp
        Diag(FormatLoc, diag::note_format_security_fixit)
          << FixItHint::CreateInsertion(FormatLoc, "\"%s\", ");
        break;
-@@ -8769,19 +8770,34 @@ CheckPrintfHandler::HandlePrintfSpecifier(const analyz
+@@ -10018,19 +10019,34 @@ bool CheckPrintfHandler::HandlePrintfSpecifier(
      // Claim the second argument.
      CoveredArgs.set(argIndex + 1);
  
@@ -69,7 +62,7 @@ Index: tools/clang/lib/Sema/SemaChecking.cpp
      // Type check the second argument (char * for both %b and %D)
      Ex = getDataArg(argIndex + 1);
      const analyze_printf::ArgType &AT2 = ArgType::CStrTy;
-@@ -8819,6 +8835,15 @@ CheckPrintfHandler::HandlePrintfSpecifier(const analyz
+@@ -10068,6 +10084,15 @@ bool CheckPrintfHandler::HandlePrintfSpecifier(
      return true;
    }
  
@@ -85,7 +78,7 @@ Index: tools/clang/lib/Sema/SemaChecking.cpp
    // Only scalars are allowed for os_trace.
    if (FSType == Sema::FST_OSTrace &&
        (CS.getKind() == ConversionSpecifier::PArg ||
-@@ -9565,8 +9590,9 @@ static void CheckFormatString(Sema &S, const FormatStr
+@@ -10869,8 +10894,9 @@ static void CheckFormatString(
    }
  
    if (Type == Sema::FST_Printf || Type == Sema::FST_NSString ||
@@ -96,13 +89,13 @@ Index: tools/clang/lib/Sema/SemaChecking.cpp
 +      Type == Sema::FST_Syslog) {
      CheckPrintfHandler H(
          S, FExpr, OrigFormatExpr, Type, firstDataArg, numDataArgs,
-         (Type == Sema::FST_NSString || Type == Sema::FST_OSTrace), Str,
-@@ -9576,7 +9602,7 @@ static void CheckFormatString(Sema &S, const FormatStr
-     if (!analyze_format_string::ParsePrintfString(H, Str, Str + StrLen,
-                                                   S.getLangOpts(),
-                                                   S.Context.getTargetInfo(),
--                                            Type == Sema::FST_FreeBSDKPrintf))
-+                Type == Sema::FST_Kprintf || Type == Sema::FST_FreeBSDKPrintf))
+         (Type == Sema::FST_NSString || Type == Sema::FST_OSTrace), Str, APK,
+@@ -10879,7 +10905,7 @@ static void CheckFormatString(
+ 
+     if (!analyze_format_string::ParsePrintfString(
+             H, Str, Str + StrLen, S.getLangOpts(), S.Context.getTargetInfo(),
+-            Type == Sema::FST_FreeBSDKPrintf))
++            Type == Sema::FST_Kprintf || Type == Sema::FST_FreeBSDKPrintf))
        H.DoneProcessing();
    } else if (Type == Sema::FST_Scanf) {
      CheckScanfHandler H(S, FExpr, OrigFormatExpr, Type, firstDataArg,
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclAttr_cpp b/devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaDeclAttr_cpp
similarity index 56%
rename from devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclAttr_cpp
rename to devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaDeclAttr_cpp
index 94b6336544a..9ca32fb2bf6 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclAttr_cpp
+++ b/devel/clang-tools-extra/patches/patch-clang_lib_Sema_SemaDeclAttr_cpp
@@ -1,9 +1,7 @@
-Teach Clang about syslog format attribute
-
-Index: tools/clang/lib/Sema/SemaDeclAttr.cpp
---- tools/clang/lib/Sema/SemaDeclAttr.cpp.orig
-+++ tools/clang/lib/Sema/SemaDeclAttr.cpp
-@@ -3411,6 +3411,7 @@ static FormatAttrKind getFormatAttrKind(StringRef Form
+Index: clang/lib/Sema/SemaDeclAttr.cpp
+--- clang/lib/Sema/SemaDeclAttr.cpp.orig
++++ clang/lib/Sema/SemaDeclAttr.cpp
+@@ -3819,6 +3819,7 @@ static FormatAttrKind getFormatAttrKind(StringRef Form
        .Case("freebsd_kprintf", SupportedFormat) // FreeBSD.
        .Case("os_trace", SupportedFormat)
        .Case("os_log", SupportedFormat)
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_tools_clang-shlib_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-clang_tools_clang-shlib_CMakeLists_txt
similarity index 72%
rename from devel/clang-tools-extra/patches/patch-tools_clang_tools_clang-shlib_CMakeLists_txt
rename to devel/clang-tools-extra/patches/patch-clang_tools_clang-shlib_CMakeLists_txt
index f1622f9a10e..d38a5a7364b 100644
--- a/devel/clang-tools-extra/patches/patch-tools_clang_tools_clang-shlib_CMakeLists_txt
+++ b/devel/clang-tools-extra/patches/patch-clang_tools_clang-shlib_CMakeLists_txt
@@ -1,8 +1,8 @@
 -Bsymbolic-functions is not supported by our ld.bfd version.
 
-Index: tools/clang/tools/clang-shlib/CMakeLists.txt
---- tools/clang/tools/clang-shlib/CMakeLists.txt.orig
-+++ tools/clang/tools/clang-shlib/CMakeLists.txt
+Index: clang/tools/clang-shlib/CMakeLists.txt
+--- clang/tools/clang-shlib/CMakeLists.txt.orig
++++ clang/tools/clang-shlib/CMakeLists.txt
 @@ -50,6 +50,6 @@ add_clang_library(clang-cpp
                    ${_DEPS})
  # Optimize function calls for default visibility definitions to avoid PLT and
diff --git a/devel/clang-tools-extra/patches/patch-cmake_modules_LLVMProcessSources_cmake b/devel/clang-tools-extra/patches/patch-cmake_modules_LLVMProcessSources_cmake
deleted file mode 100644
index 4277b2a1b5a..00000000000
--- a/devel/clang-tools-extra/patches/patch-cmake_modules_LLVMProcessSources_cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-Avoid adding a dep on all headers in ${LOCALBASE}/include, not
-compatible with dpb(1) junking.
-
-Index: cmake/modules/LLVMProcessSources.cmake
---- cmake/modules/LLVMProcessSources.cmake.orig
-+++ cmake/modules/LLVMProcessSources.cmake
-@@ -46,6 +46,9 @@ function(find_all_header_files hdrs_out additional_hea
-   list(APPEND all_headers ${hds})
- 
-   foreach(additional_dir ${additional_headerdirs})
-+    if (${additional_dir} MATCHES "^${LOCALBASE}/include")
-+      message(FATAL_ERROR "ports: refusing to scan ${additional_dir}")
-+    endif()
-     add_header_files_for_glob(hds "${additional_dir}/*.h")
-     list(APPEND all_headers ${hds})
-     add_header_files_for_glob(hds "${additional_dir}/*.inc")
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_builtins_ppc_atomic_lock_free_c b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_builtins_ppc_atomic_lock_free_c
new file mode 100644
index 00000000000..ee9336b4259
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_builtins_ppc_atomic_lock_free_c
@@ -0,0 +1,26 @@
+Index: compiler-rt/lib/builtins/ppc/atomic_lock_free.c
+--- compiler-rt/lib/builtins/ppc/atomic_lock_free.c.orig
++++ compiler-rt/lib/builtins/ppc/atomic_lock_free.c
+@@ -0,0 +1,22 @@
++/* Public domain. */
++
++#include <stdbool.h>
++#include <stdint.h>
++#include <stdlib.h>
++
++#pragma redefine_extname __atomic_is_lock_free_c __atomic_is_lock_free
++
++bool
++__atomic_is_lock_free_c(size_t size, void *ptr)
++{
++	switch (size) {
++	case 1:
++		return true;
++	case 2:
++		return (((uintptr_t)ptr & 1) == 0);
++	case 4:
++		return (((uintptr_t)ptr & 3) == 0);
++	}
++
++	return false;
++}
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_h b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_h
new file mode 100644
index 00000000000..acde653d62e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_h
@@ -0,0 +1,21 @@
+Index: compiler-rt/lib/interception/interception.h
+--- compiler-rt/lib/interception/interception.h.orig
++++ compiler-rt/lib/interception/interception.h
+@@ -18,7 +18,7 @@
+ 
+ #if !SANITIZER_LINUX && !SANITIZER_FREEBSD && !SANITIZER_APPLE &&      \
+     !SANITIZER_NETBSD && !SANITIZER_WINDOWS && !SANITIZER_FUCHSIA && \
+-    !SANITIZER_SOLARIS
++    !SANITIZER_OPENBSD && !SANITIZER_SOLARIS
+ #  error "Interception doesn't work on this operating system."
+ #endif
+ 
+@@ -272,7 +272,7 @@ typedef unsigned long uptr;
+ #define INCLUDED_FROM_INTERCEPTION_LIB
+ 
+ #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \
+-    SANITIZER_SOLARIS
++    SANITIZER_OPENBSD || SANITIZER_SOLARIS
+ 
+ # include "interception_linux.h"
+ # define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_linux_h b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_linux_h
new file mode 100644
index 00000000000..b47c8e19c10
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_interception_interception_linux_h
@@ -0,0 +1,12 @@
+Index: compiler-rt/lib/interception/interception_linux.h
+--- compiler-rt/lib/interception/interception_linux.h.orig
++++ compiler-rt/lib/interception/interception_linux.h
+@@ -12,7 +12,7 @@
+ //===----------------------------------------------------------------------===//
+ 
+ #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \
+-    SANITIZER_SOLARIS
++    SANITIZER_OPENBSD || SANITIZER_SOLARIS
+ 
+ #if !defined(INCLUDED_FROM_INTERCEPTION_LIB)
+ # error "interception_linux.h should be included from interception library only"
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_cpp b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_cpp
new file mode 100644
index 00000000000..8dc438b3863
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_cpp
@@ -0,0 +1,12 @@
+Index: compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+--- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp.orig
++++ compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+@@ -598,7 +598,7 @@ u64 NanoTime() {
+ // 'environ' array (on some others) and does not use libc. This function
+ // should be called first inside __asan_init.
+ const char *GetEnv(const char *name) {
+-#if SANITIZER_FREEBSD || SANITIZER_NETBSD || SANITIZER_SOLARIS
++#if SANITIZER_FREEBSD || SANITIZER_NETBSD || SANITIZER_OPENBSD || SANITIZER_SOLARIS
+   if (::environ != 0) {
+     uptr NameLen = internal_strlen(name);
+     for (char **Env = ::environ; *Env != 0; Env++) {
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_h b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_h
new file mode 100644
index 00000000000..64fa0f2a85d
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_linux_h
@@ -0,0 +1,12 @@
+Index: compiler-rt/lib/sanitizer_common/sanitizer_linux.h
+--- compiler-rt/lib/sanitizer_common/sanitizer_linux.h.orig
++++ compiler-rt/lib/sanitizer_common/sanitizer_linux.h
+@@ -14,7 +14,7 @@
+ 
+ #include "sanitizer_platform.h"
+ #if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD ||                \
+-    SANITIZER_SOLARIS
++    SANITIZER_OPENBSD || SANITIZER_SOLARIS
+ #include "sanitizer_common.h"
+ #include "sanitizer_internal_defs.h"
+ #include "sanitizer_platform_limits_freebsd.h"
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_platform_h b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_platform_h
new file mode 100644
index 00000000000..d74b1506eb5
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_sanitizer_common_sanitizer_platform_h
@@ -0,0 +1,33 @@
+Index: compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+--- compiler-rt/lib/sanitizer_common/sanitizer_platform.h.orig
++++ compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+@@ -13,6 +13,7 @@
+ #define SANITIZER_PLATFORM_H
+ 
+ #if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && \
++    !defined(__OpenBSD__) && \
+     !defined(__APPLE__) && !defined(_WIN32) && !defined(__Fuchsia__) &&     \
+     !(defined(__sun__) && defined(__svr4__))
+ #  error "This operating system is not supported"
+@@ -49,6 +50,12 @@
+ #  define SANITIZER_NETBSD 0
+ #endif
+ 
++#if defined(__OpenBSD__)
++# define SANITIZER_OPENBSD 1
++#else
++# define SANITIZER_OPENBSD 0
++#endif
++
+ #if defined(__sun__) && defined(__svr4__)
+ #  define SANITIZER_SOLARIS 1
+ #else
+@@ -138,7 +145,7 @@
+ 
+ #define SANITIZER_POSIX                                     \
+   (SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_APPLE || \
+-   SANITIZER_NETBSD || SANITIZER_SOLARIS)
++    SANITIZER_NETBSD || SANITIZER_OPENBSD || SANITIZER_SOLARIS)
+ 
+ #if __LP64__ || defined(_WIN64)
+ #  define SANITIZER_WORDSIZE 64
diff --git a/devel/clang-tools-extra/patches/patch-compiler-rt_lib_ubsan_ubsan_platform_h b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_ubsan_ubsan_platform_h
new file mode 100644
index 00000000000..75babc6efbc
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-compiler-rt_lib_ubsan_ubsan_platform_h
@@ -0,0 +1,12 @@
+Index: compiler-rt/lib/ubsan/ubsan_platform.h
+--- compiler-rt/lib/ubsan/ubsan_platform.h.orig
++++ compiler-rt/lib/ubsan/ubsan_platform.h
+@@ -14,7 +14,7 @@
+ 
+ // Other platforms should be easy to add, and probably work as-is.
+ #if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) ||        \
+-    defined(__NetBSD__) || defined(__DragonFly__) ||                           \
++    defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) ||   \
+     (defined(__sun__) && defined(__svr4__)) || defined(_WIN32) ||              \
+     defined(__Fuchsia__)
+ #define CAN_SANITIZE_UB 1
diff --git a/devel/clang-tools-extra/patches/patch-docs_CommandGuide_llvm-ranlib_rst b/devel/clang-tools-extra/patches/patch-docs_CommandGuide_llvm-ranlib_rst
deleted file mode 100644
index 2db158b6933..00000000000
--- a/devel/clang-tools-extra/patches/patch-docs_CommandGuide_llvm-ranlib_rst
+++ /dev/null
@@ -1,21 +0,0 @@
-- support more than one input file in llvm-ranlib
-
-Index: docs/CommandGuide/llvm-ranlib.rst
---- docs/CommandGuide/llvm-ranlib.rst.orig
-+++ docs/CommandGuide/llvm-ranlib.rst
-@@ -6,13 +6,13 @@ llvm-ranlib - generates an archive index
- SYNOPSIS
- --------
- 
--:program:`llvm-ranlib` [*options*]
-+:program:`llvm-ranlib` [*options*] *archive ...*
- 
- DESCRIPTION
- -----------
- 
- :program:`llvm-ranlib` is an alias for the :doc:`llvm-ar <llvm-ar>` tool that
--generates an index for an archive. It can be used as a replacement for GNU's
-+generates an index for one or more archives. It can be used as a replacement for GNU's
- :program:`ranlib` tool.
- 
- Running :program:`llvm-ranlib` is equivalent to running ``llvm-ar s``.
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_BinaryFormat_ELF_h b/devel/clang-tools-extra/patches/patch-include_llvm_BinaryFormat_ELF_h
deleted file mode 100644
index 40cfe8c9218..00000000000
--- a/devel/clang-tools-extra/patches/patch-include_llvm_BinaryFormat_ELF_h
+++ /dev/null
@@ -1,20 +0,0 @@
-- In the linkers, collect objects in section "openbsd.mutable" and place
-  them into a page-aligned region in the bss, with the right markers for
-  kernel/ld.so to identify the region and skip making it immutable.
-- Implement support for PT_OPENBSD_NOBTCFI in lld(1).  This can be set using
-  the -z nobtcfi option.
-
-Index: include/llvm/BinaryFormat/ELF.h
---- include/llvm/BinaryFormat/ELF.h.orig
-+++ include/llvm/BinaryFormat/ELF.h
-@@ -1303,8 +1303,10 @@ enum {
-   PT_GNU_RELRO = 0x6474e552,    // Read-only after relocation.
-   PT_GNU_PROPERTY = 0x6474e553, // .note.gnu.property notes sections.
- 
-+  PT_OPENBSD_MUTABLE = 0x65a3dbe5, // Like bss, but not immutable.
-   PT_OPENBSD_RANDOMIZE = 0x65a3dbe6, // Fill with random data.
-   PT_OPENBSD_WXNEEDED = 0x65a3dbe7,  // Program does W^X violations.
-+  PT_OPENBSD_NOBTCFI = 0x65a3dbe8,   // Do not enforce branch target CFI
-   PT_OPENBSD_BOOTDATA = 0x65a41be6,  // Section for boot arguments.
- 
-   // ARM program header types.
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_MachineFrameInfo_h b/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_MachineFrameInfo_h
deleted file mode 100644
index b69eade7298..00000000000
--- a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_MachineFrameInfo_h
+++ /dev/null
@@ -1,56 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-
-Index: include/llvm/CodeGen/MachineFrameInfo.h
---- include/llvm/CodeGen/MachineFrameInfo.h.orig
-+++ include/llvm/CodeGen/MachineFrameInfo.h
-@@ -274,6 +274,15 @@ class MachineFrameInfo { (private)
-   /// The frame index for the stack protector.
-   int StackProtectorIdx = -1;
- 
-+  struct ReturnProtector {
-+    /// The register to use for return protector calculations
-+    unsigned Register = 0;
-+    /// Set to true if this function needs return protectors
-+    bool Needed = false;
-+    /// Does the return protector cookie need to be stored in frame
-+    bool NeedsStore = true;
-+  } RPI;
-+
-   /// The frame index for the function context. Used for SjLj exceptions.
-   int FunctionContextIdx = -1;
- 
-@@ -354,6 +363,17 @@ class MachineFrameInfo { (private)
-   int getStackProtectorIndex() const { return StackProtectorIdx; }
-   void setStackProtectorIndex(int I) { StackProtectorIdx = I; }
-   bool hasStackProtectorIndex() const { return StackProtectorIdx != -1; }
-+
-+  /// Get / Set return protector calculation register
-+  unsigned getReturnProtectorRegister() const { return RPI.Register; }
-+  void setReturnProtectorRegister(unsigned I) { RPI.Register = I; }
-+  bool hasReturnProtectorRegister() const { return RPI.Register != 0; }
-+  /// Get / Set if this frame needs a return protector
-+  void setReturnProtectorNeeded(bool I) { RPI.Needed = I; }
-+  bool getReturnProtectorNeeded() const { return RPI.Needed; }
-+  /// Get / Set if the return protector cookie needs to be stored in frame
-+  void setReturnProtectorNeedsStore(bool I) { RPI.NeedsStore = I; }
-+  bool getReturnProtectorNeedsStore() const { return RPI.NeedsStore; }
- 
-   /// Return the index for the function context object.
-   /// This object is used for SjLj exceptions.
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_Passes_h b/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_Passes_h
deleted file mode 100644
index 5b79f89bb74..00000000000
--- a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_Passes_h
+++ /dev/null
@@ -1,31 +0,0 @@
-Add RETGUARD to clang for amd64. This security mechanism uses per-function
-random cookies to protect access to function return instructions, with the
-effect that the integrity of the return address is protected, and function
-return instructions are harder to use in ROP gadgets.
-
-On function entry the return address is combined with a per-function random
-cookie and stored in the stack frame. The integrity of this value is verified
-before function return, and if this check fails, the program aborts. In this way
-RETGUARD is an improved stack protector, since the cookies are per-function. The
-verification routine is constructed such that the binary space immediately
-before each ret instruction is padded with int03 instructions, which makes these
-return instructions difficult to use in ROP gadgets. In the kernel, this has the
-effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-essentially gadget free, leaving only the polymorphic gadgets that result from
-jumping into the instruction stream partway through other instructions. Work to
-remove these gadgets will continue through other mechanisms.
-
-Index: include/llvm/CodeGen/Passes.h
---- include/llvm/CodeGen/Passes.h.orig
-+++ include/llvm/CodeGen/Passes.h
-@@ -353,6 +353,9 @@ namespace llvm {
-   ///
-   FunctionPass *createStackProtectorPass();
- 
-+  // createReturnProtectorPass - This pass add return protectors to functions.
-+  FunctionPass *createReturnProtectorPass();
-+
-   /// createMachineVerifierPass - This pass verifies cenerated machine code
-   /// instructions for correctness.
-   ///
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_TargetFrameLowering_h b/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_TargetFrameLowering_h
deleted file mode 100644
index 0c27b501174..00000000000
--- a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_TargetFrameLowering_h
+++ /dev/null
@@ -1,41 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-
-Index: include/llvm/CodeGen/TargetFrameLowering.h
---- include/llvm/CodeGen/TargetFrameLowering.h.orig
-+++ include/llvm/CodeGen/TargetFrameLowering.h
-@@ -14,6 +14,7 @@
- #define LLVM_CODEGEN_TARGETFRAMELOWERING_H
- 
- #include "llvm/CodeGen/MachineBasicBlock.h"
-+#include "llvm/CodeGen/ReturnProtectorLowering.h"
- #include "llvm/Support/TypeSize.h"
- #include <vector>
- 
-@@ -209,6 +210,10 @@ class TargetFrameLowering { (public)
-                             MachineBasicBlock &MBB) const = 0;
-   virtual void emitEpilogue(MachineFunction &MF,
-                             MachineBasicBlock &MBB) const = 0;
-+
-+  virtual const ReturnProtectorLowering *getReturnProtector() const {
-+    return nullptr;
-+  }
- 
-   /// With basic block sections, emit callee saved frame moves for basic blocks
-   /// that are in a different section.
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_InitializePasses_h b/devel/clang-tools-extra/patches/patch-include_llvm_InitializePasses_h
deleted file mode 100644
index 3f69ab6c0d0..00000000000
--- a/devel/clang-tools-extra/patches/patch-include_llvm_InitializePasses_h
+++ /dev/null
@@ -1,29 +0,0 @@
-Add RETGUARD to clang for amd64. This security mechanism uses per-function
-random cookies to protect access to function return instructions, with the
-effect that the integrity of the return address is protected, and function
-return instructions are harder to use in ROP gadgets.
-
-On function entry the return address is combined with a per-function random
-cookie and stored in the stack frame. The integrity of this value is verified
-before function return, and if this check fails, the program aborts. In this way
-RETGUARD is an improved stack protector, since the cookies are per-function. The
-verification routine is constructed such that the binary space immediately
-before each ret instruction is padded with int03 instructions, which makes these
-return instructions difficult to use in ROP gadgets. In the kernel, this has the
-effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-essentially gadget free, leaving only the polymorphic gadgets that result from
-jumping into the instruction stream partway through other instructions. Work to
-remove these gadgets will continue through other mechanisms.
-
-Index: include/llvm/InitializePasses.h
---- include/llvm/InitializePasses.h.orig
-+++ include/llvm/InitializePasses.h
-@@ -387,6 +387,7 @@ void initializeRemoveRedundantDebugValuesPass(PassRegi
- void initializeRenameIndependentSubregsPass(PassRegistry&);
- void initializeReplaceWithVeclibLegacyPass(PassRegistry &);
- void initializeResetMachineFunctionPass(PassRegistry&);
-+void initializeReturnProtectorPass(PassRegistry&);
- void initializeReversePostOrderFunctionAttrsLegacyPassPass(PassRegistry&);
- void initializeRewriteStatepointsForGCLegacyPassPass(PassRegistry &);
- void initializeRewriteSymbolsLegacyPassPass(PassRegistry&);
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-lib_CodeGen_CMakeLists_txt
deleted file mode 100644
index dbbd9c51b0c..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_CMakeLists_txt
+++ /dev/null
@@ -1,31 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-
-Index: lib/CodeGen/CMakeLists.txt
---- lib/CodeGen/CMakeLists.txt.orig
-+++ lib/CodeGen/CMakeLists.txt
-@@ -153,6 +153,8 @@ add_llvm_component_library(LLVMCodeGen
-   RegUsageInfoPropagate.cpp
-   ReplaceWithVeclib.cpp
-   ResetMachineFunctionPass.cpp
-+  ReturnProtectorLowering.cpp
-+  ReturnProtectorPass.cpp
-   SafeStack.cpp
-   SafeStackLayout.cpp
-   ScheduleDAG.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_TargetPassConfig_cpp b/devel/clang-tools-extra/patches/patch-lib_CodeGen_TargetPassConfig_cpp
deleted file mode 100644
index 133f7c21cb3..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_TargetPassConfig_cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-Add RETGUARD to clang for amd64. This security mechanism uses per-function
-random cookies to protect access to function return instructions, with the
-effect that the integrity of the return address is protected, and function
-return instructions are harder to use in ROP gadgets.
-
-On function entry the return address is combined with a per-function random
-cookie and stored in the stack frame. The integrity of this value is verified
-before function return, and if this check fails, the program aborts. In this way
-RETGUARD is an improved stack protector, since the cookies are per-function. The
-verification routine is constructed such that the binary space immediately
-before each ret instruction is padded with int03 instructions, which makes these
-return instructions difficult to use in ROP gadgets. In the kernel, this has the
-effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-essentially gadget free, leaving only the polymorphic gadgets that result from
-jumping into the instruction stream partway through other instructions. Work to
-remove these gadgets will continue through other mechanisms.
-
-Index: lib/CodeGen/TargetPassConfig.cpp
---- lib/CodeGen/TargetPassConfig.cpp.orig
-+++ lib/CodeGen/TargetPassConfig.cpp
-@@ -950,6 +950,8 @@ void TargetPassConfig::addISelPrepare() {
-   if (requiresCodeGenSCCOrder())
-     addPass(new DummyCGSCCPass);
- 
-+  addPass(createReturnProtectorPass());
-+
-   // Add both the safe stack and the stack protection passes: each of them will
-   // only protect functions that have corresponding attributes.
-   addPass(createSafeStackPass());
diff --git a/devel/clang-tools-extra/patches/patch-lib_MC_MCELFStreamer_cpp b/devel/clang-tools-extra/patches/patch-lib_MC_MCELFStreamer_cpp
deleted file mode 100644
index ad968cf5c16..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_MC_MCELFStreamer_cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-getNonexecutableStackSection() may return nullptr.
-
-Index: lib/MC/MCELFStreamer.cpp
---- lib/MC/MCELFStreamer.cpp.orig
-+++ lib/MC/MCELFStreamer.cpp
-@@ -93,8 +93,11 @@ void MCELFStreamer::InitSections(bool NoExecStack) {
-   SwitchSection(Ctx.getObjectFileInfo()->getTextSection());
-   emitCodeAlignment(4);
- 
--  if (NoExecStack)
--    SwitchSection(Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx));
-+  if (NoExecStack) {
-+    MCSection *s = Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx);
-+    if (s)
-+	SwitchSection(s);
-+  }
- }
- 
- void MCELFStreamer::emitLabel(MCSymbol *S, SMLoc Loc) {
diff --git a/devel/clang-tools-extra/patches/patch-lib_MC_MCParser_AsmParser_cpp b/devel/clang-tools-extra/patches/patch-lib_MC_MCParser_AsmParser_cpp
deleted file mode 100644
index f6a0b1e3bad..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_MC_MCParser_AsmParser_cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-make clang include a FILE symbol for .(s|S) files
-
-This is mostly needed by syspatch at the moment to be
-to be able to re-link in the same order as the original
-libraries were linked with by relying on the readelf(1)
-and without this .(s|S) assembly files were not getting
-a file directive.
-
-Index: lib/MC/MCParser/AsmParser.cpp
---- lib/MC/MCParser/AsmParser.cpp.orig
-+++ lib/MC/MCParser/AsmParser.cpp
-@@ -975,6 +975,10 @@ bool AsmParser::Run(bool NoInitialTextSection, bool No
-     (void)InsertResult;
-   }
- 
-+  StringRef Filename = getContext().getMainFileName();
-+  if (!Filename.empty() && (Filename.compare(StringRef("-")) != 0))
-+    Out.emitFileDirective(Filename);
-+
-   getTargetParser().onBeginOfFile();
- 
-   // While we have input, parse each statement.
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ISelLowering_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ISelLowering_cpp
deleted file mode 100644
index 2f988d6cb3b..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ISelLowering_cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-Disable the Load Stack Guard for OpenBSD on AArch64.  We don't use it
-on any other platform and it causes a segfault in combination with our
-IR Stack Guard.
-
-Index: lib/Target/AArch64/AArch64ISelLowering.cpp
---- lib/Target/AArch64/AArch64ISelLowering.cpp.orig
-+++ lib/Target/AArch64/AArch64ISelLowering.cpp
-@@ -17364,7 +17364,8 @@ void AArch64TargetLowering::ReplaceNodeResults(
- }
- 
- bool AArch64TargetLowering::useLoadStackGuardNode() const {
--  if (Subtarget->isTargetAndroid() || Subtarget->isTargetFuchsia())
-+  if (Subtarget->isTargetAndroid() || Subtarget->isTargetFuchsia() ||
-+      Subtarget->isTargetOpenBSD())
-     return TargetLowering::useLoadStackGuardNode();
-   return true;
- }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_cpp
deleted file mode 100644
index fa8c34d72f5..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-XXX no comment
-
-Index: lib/Target/AArch64/AArch64InstrInfo.cpp
---- lib/Target/AArch64/AArch64InstrInfo.cpp.orig
-+++ lib/Target/AArch64/AArch64InstrInfo.cpp
-@@ -97,6 +97,9 @@ unsigned AArch64InstrInfo::getInstSizeInBytes(const Ma
-   default:
-     // Anything not explicitly designated otherwise is a normal 4-byte insn.
-     NumBytes = 4;
-+
-+    if (Desc.getSize() > 0)
-+      NumBytes = Desc.getSize();
-     break;
-   case TargetOpcode::STACKMAP:
-     // The upper bound for a stackmap intrinsic is the full length of its shadow
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsTargetMachine_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsTargetMachine_cpp
deleted file mode 100644
index 9f4c1f8b378..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-
-Index: lib/Target/Mips/MipsTargetMachine.cpp
---- lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ lib/Target/Mips/MipsTargetMachine.cpp
-@@ -45,6 +45,8 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
-+
- extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeMipsTarget() {
-   // Register the target.
-   RegisterTargetMachine<MipsebTargetMachine> X(getTheMipsTarget());
-@@ -268,6 +270,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_Mips_h b/devel/clang-tools-extra/patches/patch-lib_Target_Mips_Mips_h
deleted file mode 100644
index 8159c013d21..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,21 +0,0 @@
-Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-
-Index: lib/Target/Mips/Mips.h
---- lib/Target/Mips/Mips.h.orig
-+++ lib/Target/Mips/Mips.h
-@@ -38,6 +38,7 @@ namespace llvm {
-   FunctionPass *createMicroMipsSizeReducePass();
-   FunctionPass *createMipsExpandPseudoPass();
-   FunctionPass *createMipsPreLegalizeCombiner();
-+  FunctionPass *createMipsLoongson2FBTBFix();
- 
-   InstructionSelector *createMipsInstructionSelector(const MipsTargetMachine &,
-                                                      MipsSubtarget &,
-@@ -47,6 +48,7 @@ namespace llvm {
-   void initializeMipsBranchExpansionPass(PassRegistry &);
-   void initializeMicroMipsSizeReducePass(PassRegistry &);
-   void initializeMipsPreLegalizerCombinerPass(PassRegistry&);
-+  void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- } // end namespace llvm;
- 
- #endif
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_CMakeLists_txt
deleted file mode 100644
index d57c1168a20..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_CMakeLists_txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Index: lib/Target/PowerPC/CMakeLists.txt
---- lib/Target/PowerPC/CMakeLists.txt.orig
-+++ lib/Target/PowerPC/CMakeLists.txt
-@@ -42,6 +42,7 @@ add_llvm_target(PowerPCCodeGen
-   PPCMacroFusion.cpp
-   PPCMIPeephole.cpp
-   PPCRegisterInfo.cpp
-+  PPCReturnProtectorLowering.cpp
-   PPCSubtarget.cpp
-   PPCTargetMachine.cpp
-   PPCTargetObjectFile.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_cpp
deleted file mode 100644
index 0544ee2f7b0..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-Add RETGUARD implementation for powerpc and powerpc64.
-
-Index: lib/Target/PowerPC/PPCFrameLowering.cpp
---- lib/Target/PowerPC/PPCFrameLowering.cpp.orig
-+++ lib/Target/PowerPC/PPCFrameLowering.cpp
-@@ -15,6 +15,7 @@
- #include "PPCInstrBuilder.h"
- #include "PPCInstrInfo.h"
- #include "PPCMachineFunctionInfo.h"
-+#include "PPCReturnProtectorLowering.h"
- #include "PPCSubtarget.h"
- #include "PPCTargetMachine.h"
- #include "llvm/ADT/Statistic.h"
-@@ -2696,4 +2697,8 @@ bool PPCFrameLowering::enableShrinkWrapping(const Mach
-   if (MF.getInfo<PPCFunctionInfo>()->shrinkWrapDisabled())
-     return false;
-   return !MF.getSubtarget<PPCSubtarget>().is32BitELFABI();
-+}
-+
-+const ReturnProtectorLowering *PPCFrameLowering::getReturnProtector() const {
-+  return &RPL;
- }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp
deleted file mode 100644
index 1ddd8707d6b..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-Switch Powerpc64 Big Endian to ELFv2 on OpenBSD.
-
-Index: lib/Target/PowerPC/PPCTargetMachine.cpp
---- lib/Target/PowerPC/PPCTargetMachine.cpp.orig
-+++ lib/Target/PowerPC/PPCTargetMachine.cpp
-@@ -228,6 +228,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const
-   case Triple::ppc64le:
-     return PPCTargetMachine::PPC_ABI_ELFv2;
-   case Triple::ppc64:
-+    if (TT.isOSOpenBSD())
-+      return PPCTargetMachine::PPC_ABI_ELFv2;
-     return PPCTargetMachine::PPC_ABI_ELFv1;
-   default:
-     return PPCTargetMachine::PPC_ABI_UNKNOWN;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcISelLowering_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcISelLowering_cpp
deleted file mode 100644
index 8874497a1f4..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcISelLowering_cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-- Make sure that we really don't emit quad-precision unless the
-  "hard-quad-float" feature is available
-
-Index: lib/Target/Sparc/SparcISelLowering.cpp
---- lib/Target/Sparc/SparcISelLowering.cpp.orig
-+++ lib/Target/Sparc/SparcISelLowering.cpp
-@@ -3116,6 +3116,11 @@ SparcTargetLowering::EmitInstrWithCustomInserter(Machi
-   case SP::SELECT_CC_DFP_ICC:
-   case SP::SELECT_CC_QFP_ICC:
-     return expandSelectCC(MI, BB, SP::BCOND);
-+  case SP::SELECT_CC_Int_XCC:
-+  case SP::SELECT_CC_FP_XCC:
-+  case SP::SELECT_CC_DFP_XCC:
-+  case SP::SELECT_CC_QFP_XCC:
-+    return expandSelectCC(MI, BB, SP::BPXCC);
-   case SP::SELECT_CC_Int_FCC:
-   case SP::SELECT_CC_FP_FCC:
-   case SP::SELECT_CC_DFP_FCC:
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstr64Bit_td b/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstr64Bit_td
deleted file mode 100644
index f050316f4a2..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstr64Bit_td
+++ /dev/null
@@ -1,42 +0,0 @@
-Make sure that we really don't emit quad-precision unless the
-"hard-quad-float" feature is available.
-
-Index: lib/Target/Sparc/SparcInstr64Bit.td
---- lib/Target/Sparc/SparcInstr64Bit.td.orig
-+++ lib/Target/Sparc/SparcInstr64Bit.td
-@@ -336,6 +336,7 @@ def FMOVD_XCC : F4_3<0b110101, 0b000010, (outs DFPRegs
-                       "fmovd$cond %xcc, $rs2, $rd",
-                       [(set f64:$rd,
-                        (SPselectxcc f64:$rs2, f64:$f, imm:$cond))]>;
-+let Predicates = [Is64Bit, HasHardQuad] in
- def FMOVQ_XCC : F4_3<0b110101, 0b000011, (outs QFPRegs:$rd),
-                       (ins QFPRegs:$rs2, QFPRegs:$f, CCOp:$cond),
-                       "fmovq$cond %xcc, $rs2, $rd",
-@@ -436,11 +437,11 @@ def FXTOD : F3_3u<2, 0b110100, 0b010001000,
-                  (outs DFPRegs:$rd), (ins DFPRegs:$rs2),
-                  "fxtod $rs2, $rd",
-                  [(set DFPRegs:$rd, (SPxtof DFPRegs:$rs2))]>;
-+let Predicates = [Is64Bit, HasHardQuad] in
- def FXTOQ : F3_3u<2, 0b110100, 0b010001100,
-                  (outs QFPRegs:$rd), (ins DFPRegs:$rs2),
-                  "fxtoq $rs2, $rd",
--                 [(set QFPRegs:$rd, (SPxtof DFPRegs:$rs2))]>,
--                 Requires<[HasHardQuad]>;
-+                 [(set QFPRegs:$rd, (SPxtof DFPRegs:$rs2))]>;
- 
- def FSTOX : F3_3u<2, 0b110100, 0b010000001,
-                  (outs DFPRegs:$rd), (ins FPRegs:$rs2),
-@@ -450,11 +451,11 @@ def FDTOX : F3_3u<2, 0b110100, 0b010000010,
-                  (outs DFPRegs:$rd), (ins DFPRegs:$rs2),
-                  "fdtox $rs2, $rd",
-                  [(set DFPRegs:$rd, (SPftox DFPRegs:$rs2))]>;
-+let Predicates = [Is64Bit, HasHardQuad] in
- def FQTOX : F3_3u<2, 0b110100, 0b010000011,
-                  (outs DFPRegs:$rd), (ins QFPRegs:$rs2),
-                  "fqtox $rs2, $rd",
--                 [(set DFPRegs:$rd, (SPftox QFPRegs:$rs2))]>,
--                 Requires<[HasHardQuad]>;
-+                 [(set DFPRegs:$rd, (SPftox QFPRegs:$rs2))]>;
- 
- } // Predicates = [Is64Bit]
- 
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstrInfo_td b/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstrInfo_td
deleted file mode 100644
index cc7f5e8d934..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Sparc_SparcInstrInfo_td
+++ /dev/null
@@ -1,113 +0,0 @@
-Make sure that we really don't emit quad-precision unless the
-"hard-quad-float" feature is available
-
-Index: lib/Target/Sparc/SparcInstrInfo.td
---- lib/Target/Sparc/SparcInstrInfo.td.orig
-+++ lib/Target/Sparc/SparcInstrInfo.td
-@@ -487,6 +487,27 @@ let Uses = [ICC], usesCustomInserter = 1 in {
-             [(set f128:$dst, (SPselecticc f128:$T, f128:$F, imm:$Cond))]>;
- }
- 
-+let Uses = [ICC], usesCustomInserter = 1 in {
-+  def SELECT_CC_Int_XCC
-+   : Pseudo<(outs IntRegs:$dst), (ins IntRegs:$T, IntRegs:$F, i32imm:$Cond),
-+            "; SELECT_CC_Int_XCC PSEUDO!",
-+            [(set i32:$dst, (SPselectxcc i32:$T, i32:$F, imm:$Cond))]>;
-+  def SELECT_CC_FP_XCC
-+   : Pseudo<(outs FPRegs:$dst), (ins FPRegs:$T, FPRegs:$F, i32imm:$Cond),
-+            "; SELECT_CC_FP_XCC PSEUDO!",
-+            [(set f32:$dst, (SPselectxcc f32:$T, f32:$F, imm:$Cond))]>;
-+
-+  def SELECT_CC_DFP_XCC
-+   : Pseudo<(outs DFPRegs:$dst), (ins DFPRegs:$T, DFPRegs:$F, i32imm:$Cond),
-+            "; SELECT_CC_DFP_XCC PSEUDO!",
-+            [(set f64:$dst, (SPselectxcc f64:$T, f64:$F, imm:$Cond))]>;
-+
-+  def SELECT_CC_QFP_XCC
-+   : Pseudo<(outs QFPRegs:$dst), (ins QFPRegs:$T, QFPRegs:$F, i32imm:$Cond),
-+            "; SELECT_CC_QFP_XCC PSEUDO!",
-+            [(set f128:$dst, (SPselectxcc f128:$T, f128:$F, imm:$Cond))]>;
-+}
-+
- let usesCustomInserter = 1, Uses = [FCC0] in {
- 
-   def SELECT_CC_Int_FCC
-@@ -1418,12 +1439,12 @@ let Predicates = [HasV9], Constraints = "$f = $rd" in 
-                (ins DFPRegs:$rs2, DFPRegs:$f, CCOp:$cond),
-                "fmovd$cond %icc, $rs2, $rd",
-                [(set f64:$rd, (SPselecticc f64:$rs2, f64:$f, imm:$cond))]>;
-+    let Predicates = [HasV9, HasHardQuad] in
-     def FMOVQ_ICC
-       : F4_3<0b110101, 0b000011, (outs QFPRegs:$rd),
-                (ins QFPRegs:$rs2, QFPRegs:$f, CCOp:$cond),
-                "fmovq$cond %icc, $rs2, $rd",
--               [(set f128:$rd, (SPselecticc f128:$rs2, f128:$f, imm:$cond))]>,
--               Requires<[HasHardQuad]>;
-+               [(set f128:$rd, (SPselecticc f128:$rs2, f128:$f, imm:$cond))]>;
-   }
- 
-   let Uses = [FCC0], intcc = 0, opf_cc = 0b00 in {
-@@ -1437,12 +1458,12 @@ let Predicates = [HasV9], Constraints = "$f = $rd" in 
-              (ins DFPRegs:$rs2, DFPRegs:$f, CCOp:$cond),
-              "fmovd$cond %fcc0, $rs2, $rd",
-              [(set f64:$rd, (SPselectfcc f64:$rs2, f64:$f, imm:$cond))]>;
-+    let Predicates = [HasV9, HasHardQuad] in
-     def FMOVQ_FCC
-       : F4_3<0b110101, 0b000011, (outs QFPRegs:$rd),
-              (ins QFPRegs:$rs2, QFPRegs:$f, CCOp:$cond),
-              "fmovq$cond %fcc0, $rs2, $rd",
--             [(set f128:$rd, (SPselectfcc f128:$rs2, f128:$f, imm:$cond))]>,
--             Requires<[HasHardQuad]>;
-+             [(set f128:$rd, (SPselectfcc f128:$rs2, f128:$f, imm:$cond))]>;
-   }
- 
- }
-@@ -1452,28 +1473,28 @@ let Predicates = [HasV9] in {
-   def FMOVD : F3_3u<2, 0b110100, 0b000000010,
-                    (outs DFPRegs:$rd), (ins DFPRegs:$rs2),
-                    "fmovd $rs2, $rd", []>;
-+  let Predicates = [HasV9, HasHardQuad] in
-   def FMOVQ : F3_3u<2, 0b110100, 0b000000011,
-                    (outs QFPRegs:$rd), (ins QFPRegs:$rs2),
--                   "fmovq $rs2, $rd", []>,
--                   Requires<[HasHardQuad]>;
-+                   "fmovq $rs2, $rd", []>;
-   def FNEGD : F3_3u<2, 0b110100, 0b000000110,
-                    (outs DFPRegs:$rd), (ins DFPRegs:$rs2),
-                    "fnegd $rs2, $rd",
-                    [(set f64:$rd, (fneg f64:$rs2))]>;
-+  let Predicates = [HasV9, HasHardQuad] in
-   def FNEGQ : F3_3u<2, 0b110100, 0b000000111,
-                    (outs QFPRegs:$rd), (ins QFPRegs:$rs2),
-                    "fnegq $rs2, $rd",
--                   [(set f128:$rd, (fneg f128:$rs2))]>,
--                   Requires<[HasHardQuad]>;
-+                   [(set f128:$rd, (fneg f128:$rs2))]>;
-   def FABSD : F3_3u<2, 0b110100, 0b000001010,
-                    (outs DFPRegs:$rd), (ins DFPRegs:$rs2),
-                    "fabsd $rs2, $rd",
-                    [(set f64:$rd, (fabs f64:$rs2))]>;
-+  let Predicates = [HasV9, HasHardQuad] in
-   def FABSQ : F3_3u<2, 0b110100, 0b000001011,
-                    (outs QFPRegs:$rd), (ins QFPRegs:$rs2),
-                    "fabsq $rs2, $rd",
--                   [(set f128:$rd, (fabs f128:$rs2))]>,
--                   Requires<[HasHardQuad]>;
-+                   [(set f128:$rd, (fabs f128:$rs2))]>;
- }
- 
- // Floating-point compare instruction with %fcc0-%fcc3.
-@@ -1520,11 +1541,11 @@ let Predicates = [HasV9] in {
-       : F4_3<0b110101, 0b000010, (outs DFPRegs:$rd),
-              (ins FCCRegs:$opf_cc, DFPRegs:$rs2, DFPRegs:$f, CCOp:$cond),
-              "fmovd$cond $opf_cc, $rs2, $rd", []>;
-+    let Predicates = [HasV9, HasHardQuad] in
-     def V9FMOVQ_FCC
-       : F4_3<0b110101, 0b000011, (outs QFPRegs:$rd),
-              (ins FCCRegs:$opf_cc, QFPRegs:$rs2, QFPRegs:$f, CCOp:$cond),
--             "fmovq$cond $opf_cc, $rs2, $rd", []>,
--             Requires<[HasHardQuad]>;
-+             "fmovq$cond $opf_cc, $rs2, $rd", []>;
-   } // Constraints = "$f = $rd", ...
- } // let Predicates = [hasV9]
- 
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-lib_Target_X86_CMakeLists_txt
deleted file mode 100644
index fd136189d29..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_CMakeLists_txt
+++ /dev/null
@@ -1,26 +0,0 @@
-- Add a clang pass that identifies potential ROP gadgets and replaces ROP
-  friendly instructions with safe alternatives. This initial commit fixes
-  3 instruction forms that will lower to include a c3 (return) byte.
-  Additional problematic instructions can be fixed incrementally using
-  this framework.
-- Refactor retguard to make adding additional arches easier.
-
-Index: lib/Target/X86/CMakeLists.txt
---- lib/Target/X86/CMakeLists.txt.orig
-+++ lib/Target/X86/CMakeLists.txt
-@@ -42,6 +42,7 @@ set(sources
-   X86ExpandPseudo.cpp
-   X86FastISel.cpp
-   X86FixupBWInsts.cpp
-+  X86FixupGadgets.cpp
-   X86FixupLEAs.cpp
-   X86AvoidStoreForwardingBlocks.cpp
-   X86FixupSetCC.cpp
-@@ -71,6 +72,7 @@ set(sources
-   X86PartialReduction.cpp
-   X86RegisterBankInfo.cpp
-   X86RegisterInfo.cpp
-+  X86ReturnProtectorLowering.cpp
-   X86SelectionDAGInfo.cpp
-   X86ShuffleDecodeConstantPool.cpp
-   X86SpeculativeLoadHardening.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86AsmPrinter_h b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86AsmPrinter_h
deleted file mode 100644
index 34daf123f63..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86AsmPrinter_h
+++ /dev/null
@@ -1,14 +0,0 @@
-Use int3 trap padding between functions instead of trapsleds with a leading jump.
-
-Index: lib/Target/X86/X86AsmPrinter.h
---- lib/Target/X86/X86AsmPrinter.h.orig
-+++ lib/Target/X86/X86AsmPrinter.h
-@@ -128,6 +128,8 @@ class LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public A
- 
-   void emitInstruction(const MachineInstr *MI) override;
- 
-+  void emitTrapToAlignment(Align Alignment) const override;
-+
-   void emitBasicBlockEnd(const MachineBasicBlock &MBB) override {
-     AsmPrinter::emitBasicBlockEnd(MBB);
-     SMShadowTracker.emitShadowPadding(*OutStreamer, getSubtargetInfo());
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_h b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_h
deleted file mode 100644
index 2950e9841b3..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_h
+++ /dev/null
@@ -1,59 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-- implement -msave-args in clang/llvm, like the sun did for gcc
-
-Index: lib/Target/X86/X86FrameLowering.h
---- lib/Target/X86/X86FrameLowering.h.orig
-+++ lib/Target/X86/X86FrameLowering.h
-@@ -13,6 +13,7 @@
- #ifndef LLVM_LIB_TARGET_X86_X86FRAMELOWERING_H
- #define LLVM_LIB_TARGET_X86_X86FRAMELOWERING_H
- 
-+#include "X86ReturnProtectorLowering.h"
- #include "llvm/CodeGen/TargetFrameLowering.h"
- #include "llvm/Support/TypeSize.h"
- 
-@@ -23,6 +24,7 @@ class MCCFIInstruction;
- class X86InstrInfo;
- class X86Subtarget;
- class X86RegisterInfo;
-+class X86ReturnProtectorLowering;
- 
- class X86FrameLowering : public TargetFrameLowering {
- public:
-@@ -33,7 +35,10 @@ class X86FrameLowering : public TargetFrameLowering { 
-   const X86Subtarget &STI;
-   const X86InstrInfo &TII;
-   const X86RegisterInfo *TRI;
-+  const X86ReturnProtectorLowering RPL;
- 
-+  bool SaveArgs;
-+
-   unsigned SlotSize;
- 
-   /// Is64Bit implies that x86_64 instructions are available.
-@@ -71,6 +76,8 @@ class X86FrameLowering : public TargetFrameLowering { 
-   /// the function.
-   void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
-   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
-+
-+  const ReturnProtectorLowering *getReturnProtector() const override;
- 
-   void adjustForSegmentedStacks(MachineFunction &MF,
-                                 MachineBasicBlock &PrologueMBB) const override;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86InstrCompiler_td b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86InstrCompiler_td
deleted file mode 100644
index 4c6e3cd6a90..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86InstrCompiler_td
+++ /dev/null
@@ -1,48 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Improve the X86FixupGadgets pass
-
-Index: lib/Target/X86/X86InstrCompiler.td
---- lib/Target/X86/X86InstrCompiler.td.orig
-+++ lib/Target/X86/X86InstrCompiler.td
-@@ -277,6 +277,25 @@ def MORESTACK_RET_RESTORE_R10 : I<0, Pseudo, (outs), (
- }
- 
- //===----------------------------------------------------------------------===//
-+// Pseudo instruction used by retguard
-+
-+// This is lowered to a JE 2; INT3; INT3. Prior to this pseudo should be a
-+// compare instruction to ensure the retguard cookie is correct.
-+// We use a pseudo here in order to avoid splitting the BB just before the return.
-+// Splitting the BB and inserting a JE_1 over a new INT3 BB occasionally
-+// resulted in incorrect code when a value from a byte register (CL) was
-+// used as a return value. When emitted as a split BB, the single byte
-+// register would sometimes be widened to 4 bytes, which would corrupt
-+// the return value (ie mov %ecx, %eax instead of mov %cl, %al).
-+let isCodeGenOnly = 1, hasNoSchedulingInfo = 1, Uses = [EFLAGS] in {
-+def RETGUARD_JMP_TRAP: I<0, Pseudo, (outs), (ins), "", []>;
-+}
-+
-+let isCodeGenOnly = 1, hasNoSchedulingInfo = 1 in {
-+def JMP_TRAP: I<0, Pseudo, (outs), (ins), "", []>;
-+}
-+
-+//===----------------------------------------------------------------------===//
- // Alias Instructions
- //===----------------------------------------------------------------------===//
- 
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86RegisterInfo_td b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86RegisterInfo_td
deleted file mode 100644
index 96477b3666a..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86RegisterInfo_td
+++ /dev/null
@@ -1,43 +0,0 @@
-- The compiler is generally free to allocate general purpose registers in
-  whatever order it chooses. Reasons for choosing one register before another
-  usually include compiled instruction size (avoidance of REX prefixes, etc.)
-  or usage conventions, but somehow haven't included security implications in
-  the compiled bytecode. Some bytecode is more useful in polymorphic ROP
-  sequences than others, so it seems prudent to try to avoid that bytecode
-  when possible.
-
-  This patch moves EBX/RBX towards the end of the allocation preference for 32
-  and 64 bit general purpose registers. Some instructions using RBX/EBX/BX/BL
-  as a destination register end up with a ModR/M byte of C3 or CB, which is often
-  useful in ROP gadgets. Because these gadgets often occur in the middle of
-  functions, they exhibit somewhat higher diversity than some other C3/CB
-  terminated gadgets. This change removes about 3% of total gadgets from the
-  kernel, but about 6% of unique gadgets.
-
-  There are other possible changes in this direction. BX/BL are obvious next
-  targets for avoidance, and MM3/XMM3 may also be useful to try to avoid if
-  possible.
-
-Index: lib/Target/X86/X86RegisterInfo.td
---- lib/Target/X86/X86RegisterInfo.td.orig
-+++ lib/Target/X86/X86RegisterInfo.td
-@@ -424,8 +424,8 @@ def GRH16 : RegisterClass<"X86", [i16], 16,
-                                R15WH)>;
- 
- def GR32 : RegisterClass<"X86", [i32], 32,
--                         (add EAX, ECX, EDX, ESI, EDI, EBX, EBP, ESP,
--                              R8D, R9D, R10D, R11D, R14D, R15D, R12D, R13D)>;
-+                         (add EAX, ECX, EDX, ESI, EDI,
-+                              R8D, R9D, R10D, R11D, R14D, R15D, R12D, R13D, EBX, EBP, ESP)>;
- 
- // GR64 - 64-bit GPRs. This oddly includes RIP, which isn't accurate, since
- // RIP isn't really a register and it can't be used anywhere except in an
-@@ -434,7 +434,7 @@ def GR32 : RegisterClass<"X86", [i32], 32,
- // tests because of the inclusion of RIP in this register class.
- def GR64 : RegisterClass<"X86", [i64], 64,
-                          (add RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11,
--                              RBX, R14, R15, R12, R13, RBP, RSP, RIP)>;
-+                              R14, R15, R12, R13, RBX, RBP, RSP, RIP)>;
- 
- // Segment registers for use by MOV instructions (and others) that have a
- //   segment register as one operand.  Always contain a 16-bit segment
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86Subtarget_h b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86Subtarget_h
deleted file mode 100644
index a28d81cd262..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86Subtarget_h
+++ /dev/null
@@ -1,33 +0,0 @@
-- implement -msave-args in clang/llvm, like the sun did for gcc
-- Turn on -mretpoline by default in clang on amd64.
-
-Index: lib/Target/X86/X86Subtarget.h
---- lib/Target/X86/X86Subtarget.h.orig
-+++ lib/Target/X86/X86Subtarget.h
-@@ -481,6 +481,9 @@ class X86Subtarget final : public X86GenSubtargetInfo 
- 
-   Align TileConfigAlignment = Align(4);
- 
-+  /// Whether function prologues should save register arguments on the stack.
-+  bool SaveArgs = false;
-+
-   /// Max. memset / memcpy size that is turned into rep/movs, rep/stos ops.
-   ///
-   // FIXME: this is a known good value for Yonah. How about others?
-@@ -567,6 +570,8 @@ class X86Subtarget final : public X86GenSubtargetInfo 
-   unsigned getTileConfigSize() const { return 64; }
-   Align getTileConfigAlignment() const { return TileConfigAlignment; }
- 
-+  bool getSaveArgs() const { return SaveArgs; }
-+
-   /// Returns the minimum alignment known to hold of the
-   /// stack frame on entry to the function and which must be maintained by every
-   /// function for this subtarget.
-@@ -832,6 +837,7 @@ class X86Subtarget final : public X86GenSubtargetInfo 
- 
-   bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
-   bool isTargetFreeBSD() const { return TargetTriple.isOSFreeBSD(); }
-+  bool isTargetOpenBSD() const { return TargetTriple.isOSOpenBSD(); }
-   bool isTargetDragonFly() const { return TargetTriple.isOSDragonFly(); }
-   bool isTargetSolaris() const { return TargetTriple.isOSSolaris(); }
-   bool isTargetPS4() const { return TargetTriple.isPS4CPU(); }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86TargetMachine_cpp b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86TargetMachine_cpp
deleted file mode 100644
index 0307d855312..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86TargetMachine_cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-Add a clang pass that identifies potential ROP gadgets and replaces ROP
-friendly instructions with safe alternatives. This initial commit fixes
-3 instruction forms that will lower to include a c3 (return) byte.
-Additional problematic instructions can be fixed incrementally using
-this framework.
-
-Index: lib/Target/X86/X86TargetMachine.cpp
---- lib/Target/X86/X86TargetMachine.cpp.orig
-+++ lib/Target/X86/X86TargetMachine.cpp
-@@ -546,6 +546,7 @@ void X86PassConfig::addPreEmitPass() {
-   addPass(createX86EvexToVexInsts());
-   addPass(createX86DiscriminateMemOpsPass());
-   addPass(createX86InsertPrefetchPass());
-+  addPass(createX86FixupGadgetsPass());
-   addPass(createX86InsertX87waitPass());
- }
- 
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_h b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_h
deleted file mode 100644
index 2ee9b45f610..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_h
+++ /dev/null
@@ -1,20 +0,0 @@
-Add a clang pass that identifies potential ROP gadgets and replaces ROP
-friendly instructions with safe alternatives. This initial commit fixes
-3 instruction forms that will lower to include a c3 (return) byte.
-Additional problematic instructions can be fixed incrementally using
-this framework.
-
-Index: lib/Target/X86/X86.h
---- lib/Target/X86/X86.h.orig
-+++ lib/Target/X86/X86.h
-@@ -122,6 +122,10 @@ FunctionPass *createX86FixupBWInsts();
- /// to another, when profitable.
- FunctionPass *createX86DomainReassignmentPass();
- 
-+/// Return a Machine Function pass that attempts to replace
-+/// ROP friendly instructions with alternatives.
-+FunctionPass *createX86FixupGadgetsPass();
-+
- /// This pass replaces EVEX encoded of AVX-512 instructiosn by VEX
- /// encoding when possible in order to reduce code size.
- FunctionPass *createX86EvexToVexInsts();
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_td b/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_td
deleted file mode 100644
index 1dd332c375b..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86_td
+++ /dev/null
@@ -1,15 +0,0 @@
-implement -msave-args in clang/llvm, like the sun did for gcc 
-
-Index: lib/Target/X86/X86.td
---- lib/Target/X86/X86.td.orig
-+++ lib/Target/X86/X86.td
-@@ -321,6 +321,9 @@ def FeatureLZCNTFalseDeps : SubtargetFeature<"false-de
-                                      "LZCNT/TZCNT have a false dependency on dest register">;
- def FeaturePCONFIG : SubtargetFeature<"pconfig", "HasPCONFIG", "true",
-                                       "platform configuration instruction">;
-+def FeatureSaveArgs
-+    : SubtargetFeature<"save-args", "SaveArgs", "true",
-+                       "Save register arguments on the stack.">;
- // On recent X86 (port bound) processors, its preferable to combine to a single shuffle
- // using a variable mask over multiple fixed shuffles.
- def FeatureFastVariableCrossLaneShuffle
diff --git a/devel/clang-tools-extra/patches/patch-lib_Transforms_Scalar_LoopIdiomRecognize_cpp b/devel/clang-tools-extra/patches/patch-lib_Transforms_Scalar_LoopIdiomRecognize_cpp
deleted file mode 100644
index 29da952f61d..00000000000
--- a/devel/clang-tools-extra/patches/patch-lib_Transforms_Scalar_LoopIdiomRecognize_cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-Disable loop idiom recognition for _libc_memset and _libc_memcpy.  These are
-the internal names we use in libc for memset and memcpy and having the
-compiler optimize them as calls to memset and memcpy will lead to infinite
-recursion.
-
-Index: lib/Transforms/Scalar/LoopIdiomRecognize.cpp
---- lib/Transforms/Scalar/LoopIdiomRecognize.cpp.orig
-+++ lib/Transforms/Scalar/LoopIdiomRecognize.cpp
-@@ -367,6 +367,8 @@ bool LoopIdiomRecognize::runOnLoop(Loop *L) {
-   StringRef Name = L->getHeader()->getParent()->getName();
-   if (Name == "memset" || Name == "memcpy")
-     return false;
-+  if (Name == "_libc_memset" || Name == "_libc_memcpy")
-+    return false;
- 
-   // Determine if code size heuristics need to be applied.
-   ApplyCodeSizeHeuristics =
diff --git a/devel/clang-tools-extra/patches/patch-libcxx_include_stdio_h b/devel/clang-tools-extra/patches/patch-libcxx_include_stdio_h
new file mode 100644
index 00000000000..7c63c4b79cd
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-libcxx_include_stdio_h
@@ -0,0 +1,12 @@
+Index: libcxx/include/stdio.h
+--- libcxx/include/stdio.h.orig
++++ libcxx/include/stdio.h
+@@ -115,6 +115,8 @@ void perror(const char* s);
+ #undef clearerr
+ #undef feof
+ #undef ferror
++#undef putchar
++#undef getchar
+ 
+ #endif
+ 
diff --git a/devel/clang-tools-extra/patches/patch-libunwind_src_AddressSpace_hpp b/devel/clang-tools-extra/patches/patch-libunwind_src_AddressSpace_hpp
new file mode 100644
index 00000000000..ee8040d5089
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-libunwind_src_AddressSpace_hpp
@@ -0,0 +1,86 @@
+Index: libunwind/src/AddressSpace.hpp
+--- libunwind/src/AddressSpace.hpp.orig
++++ libunwind/src/AddressSpace.hpp
+@@ -16,6 +16,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <sys/tree.h>
+ 
+ #include "libunwind.h"
+ #include "config.h"
+@@ -148,7 +149,63 @@ struct UnwindInfoSections {
+ #endif
+ };
+ 
++class UnwindInfoSectionsCache {
++public:
+ 
++  struct CacheItem {
++    CacheItem(UnwindInfoSections &uis, uintptr_t pc)
++      : m_uis(uis), m_pc(pc) {
++    }
++    CacheItem(uintptr_t pc)
++      : m_pc(pc) {
++    }
++
++    UnwindInfoSections m_uis;
++    uintptr_t m_pc;
++
++    RB_ENTRY(CacheItem) entry;
++  };
++
++  typedef uintptr_t CacheItemKey;
++
++  int CacheCmp(struct CacheItem *c1, struct CacheItem *c2) {
++    return (c1->m_pc < c2->m_pc ? -1 : c1->m_pc > c2->m_pc);
++  }
++
++  UnwindInfoSectionsCache() {
++    m_head = RB_INITIALIZER(&head);
++  }
++
++  bool getUnwindInfoSectionsForPC(CacheItemKey key, UnwindInfoSections &uis) {
++    UnwindInfoSections *result = nullptr;
++    if (m_prev_req_item && m_prev_req_item->m_pc == key)
++      result = &m_prev_req_item->m_uis;
++    else {
++      struct CacheItem find(key), *res;
++      res = RB_FIND(CacheTree, &m_head, &find);
++      if (res) {
++        m_prev_req_item = res;
++        result = &res->m_uis;
++      }
++    }
++    if (result) {
++      uis = *result;
++      return true;
++    }
++    return false;
++  }
++
++  void setUnwindInfoSectionsForPC(CacheItemKey key, UnwindInfoSections &uis) {
++    CacheItem *p_item(new CacheItem(uis, key));
++    RB_INSERT(CacheTree, &m_head, p_item);
++  }
++
++private:
++  CacheItem *m_prev_req_item = nullptr;
++  RB_HEAD(CacheTree, CacheItem) m_head;
++  RB_GENERATE(CacheTree, CacheItem, entry, CacheCmp);
++};
++
+ /// LocalAddressSpace is used as a template parameter to UnwindCursor when
+ /// unwinding a thread in the same process.  The wrappers compile away,
+ /// making local unwinds fast.
+@@ -269,6 +326,10 @@ LocalAddressSpace::getEncodedP(pint_t &addr, pint_t en
+   pint_t startAddr = addr;
+   const uint8_t *p = (uint8_t *)addr;
+   pint_t result;
++
++  if (encoding == DW_EH_PE_omit) {
++    return (pint_t)NULL;
++  }
+ 
+   // first get value
+   switch (encoding & 0x0F) {
diff --git a/devel/clang-tools-extra/patches/patch-libunwind_src_EHHeaderParser_hpp b/devel/clang-tools-extra/patches/patch-libunwind_src_EHHeaderParser_hpp
new file mode 100644
index 00000000000..a922a420e3e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-libunwind_src_EHHeaderParser_hpp
@@ -0,0 +1,23 @@
+Index: libunwind/src/EHHeaderParser.hpp
+--- libunwind/src/EHHeaderParser.hpp.orig
++++ libunwind/src/EHHeaderParser.hpp
+@@ -145,6 +145,10 @@ bool EHHeaderParser<A>::findFDE(A &addressSpace, pint_
+ 
+ template <typename A>
+ size_t EHHeaderParser<A>::getTableEntrySize(uint8_t tableEnc) {
++  if (tableEnc == DW_EH_PE_omit) {
++    return 0;
++  }
++
+   switch (tableEnc & 0x0f) {
+   case DW_EH_PE_sdata2:
+   case DW_EH_PE_udata2:
+@@ -158,8 +162,6 @@ size_t EHHeaderParser<A>::getTableEntrySize(uint8_t ta
+   case DW_EH_PE_sleb128:
+   case DW_EH_PE_uleb128:
+     _LIBUNWIND_ABORT("Can't binary search on variable length encoded data.");
+-  case DW_EH_PE_omit:
+-    return 0;
+   default:
+     _LIBUNWIND_ABORT("Unknown DWARF encoding for search table.");
+   }
diff --git a/devel/clang-tools-extra/patches/patch-libunwind_src_UnwindCursor_hpp b/devel/clang-tools-extra/patches/patch-libunwind_src_UnwindCursor_hpp
new file mode 100644
index 00000000000..01cd91f7343
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-libunwind_src_UnwindCursor_hpp
@@ -0,0 +1,28 @@
+Index: libunwind/src/UnwindCursor.hpp
+--- libunwind/src/UnwindCursor.hpp.orig
++++ libunwind/src/UnwindCursor.hpp
+@@ -88,6 +88,8 @@ extern "C" _Unwind_Reason_Code __libunwind_seh_persona
+ 
+ namespace libunwind {
+ 
++static thread_local UnwindInfoSectionsCache uwis_cache;
++
+ #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
+ /// Cache of recently found FDEs.
+ template <typename A>
+@@ -2537,7 +2539,14 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool
+ 
+   // Ask address space object to find unwind sections for this pc.
+   UnwindInfoSections sects;
+-  if (_addressSpace.findUnwindSections(pc, sects)) {
++  bool have_sects = false;
++  if (uwis_cache.getUnwindInfoSectionsForPC(pc, sects))
++    have_sects = true;
++  else if (_addressSpace.findUnwindSections(pc, sects)) {
++    uwis_cache.setUnwindInfoSectionsForPC(pc, sects);
++    have_sects = true;
++  }
++  if (have_sects) {
+ #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
+     // If there is a compact unwind encoding table, look there first.
+     if (sects.compact_unwind_section != 0) {
diff --git a/devel/clang-tools-extra/patches/patch-cmake_modules_GetLibraryName_cmake b/devel/clang-tools-extra/patches/patch-llvm_cmake_modules_GetLibraryName_cmake
similarity index 68%
rename from devel/clang-tools-extra/patches/patch-cmake_modules_GetLibraryName_cmake
rename to devel/clang-tools-extra/patches/patch-llvm_cmake_modules_GetLibraryName_cmake
index 148e3c33e2a..7e6041414af 100644
--- a/devel/clang-tools-extra/patches/patch-cmake_modules_GetLibraryName_cmake
+++ b/devel/clang-tools-extra/patches/patch-llvm_cmake_modules_GetLibraryName_cmake
@@ -1,8 +1,6 @@
-Properly parse library suffixes on OpenBSD
-
-Index: cmake/modules/GetLibraryName.cmake
---- cmake/modules/GetLibraryName.cmake.orig
-+++ cmake/modules/GetLibraryName.cmake
+Index: llvm/cmake/modules/GetLibraryName.cmake
+--- llvm/cmake/modules/GetLibraryName.cmake.orig
++++ llvm/cmake/modules/GetLibraryName.cmake
 @@ -2,7 +2,7 @@
  function(get_library_name path name)
    get_filename_component(path ${path} NAME)
diff --git a/devel/clang-tools-extra/patches/patch-llvm_include_llvm_BinaryFormat_ELF_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_BinaryFormat_ELF_h
new file mode 100644
index 00000000000..25b64d8e163
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_BinaryFormat_ELF_h
@@ -0,0 +1,12 @@
+Index: llvm/include/llvm/BinaryFormat/ELF.h
+--- llvm/include/llvm/BinaryFormat/ELF.h.orig
++++ llvm/include/llvm/BinaryFormat/ELF.h
+@@ -1404,6 +1404,8 @@ enum {
+   PT_OPENBSD_MUTABLE = 0x65a3dbe5,   // Like bss, but not immutable.
+   PT_OPENBSD_RANDOMIZE = 0x65a3dbe6, // Fill with random data.
+   PT_OPENBSD_WXNEEDED = 0x65a3dbe7,  // Program does W^X violations.
++  PT_OPENBSD_NOBTCFI = 0x65a3dbe8,   // Do not enforce branch target CFI
++  PT_OPENBSD_SYSCALLS = 0x65a3dbe9,  // System call sites.
+   PT_OPENBSD_BOOTDATA = 0x65a41be6,  // Section for boot arguments.
+ 
+   // ARM program header types.
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_AsmPrinter_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_AsmPrinter_h
similarity index 72%
rename from devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_AsmPrinter_h
rename to devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_AsmPrinter_h
index 99582d5370a..bd247569fd7 100644
--- a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_AsmPrinter_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_AsmPrinter_h
@@ -1,11 +1,9 @@
-Use int3 trap padding between functions instead of trapsleds with a leading jump.
-
-Index: include/llvm/CodeGen/AsmPrinter.h
---- include/llvm/CodeGen/AsmPrinter.h.orig
-+++ include/llvm/CodeGen/AsmPrinter.h
-@@ -434,6 +434,11 @@ class AsmPrinter : public MachineFunctionPass { (publi
-   /// correctness.
-   void emitAlignment(Align Alignment, const GlobalObject *GV = nullptr) const;
+Index: llvm/include/llvm/CodeGen/AsmPrinter.h
+--- llvm/include/llvm/CodeGen/AsmPrinter.h.orig
++++ llvm/include/llvm/CodeGen/AsmPrinter.h
+@@ -498,6 +498,11 @@ class AsmPrinter : public MachineFunctionPass { (publi
+   void emitAlignment(Align Alignment, const GlobalObject *GV = nullptr,
+                      unsigned MaxBytesToEmit = 0) const;
  
 +  /// Emit an alignment directive to the specified power of two boundary,
 +  /// like emitAlignment, but call emitTrapToAlignment to fill with
@@ -15,7 +13,7 @@ Index: include/llvm/CodeGen/AsmPrinter.h
    /// Lower the specified LLVM Constant to an MCExpr.
    virtual const MCExpr *lowerConstant(const Constant *CV);
  
-@@ -499,6 +504,11 @@ class AsmPrinter : public MachineFunctionPass { (publi
+@@ -567,6 +572,11 @@ class AsmPrinter : public MachineFunctionPass { (publi
    virtual void emitInstruction(const MachineInstr *) {
      llvm_unreachable("EmitInstruction not implemented");
    }
diff --git a/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_MachineFrameInfo_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_MachineFrameInfo_h
new file mode 100644
index 00000000000..a9bc9994d09
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_MachineFrameInfo_h
@@ -0,0 +1,37 @@
+Index: llvm/include/llvm/CodeGen/MachineFrameInfo.h
+--- llvm/include/llvm/CodeGen/MachineFrameInfo.h.orig
++++ llvm/include/llvm/CodeGen/MachineFrameInfo.h
+@@ -273,6 +273,15 @@ class MachineFrameInfo { (private)
+   /// The frame index for the stack protector.
+   int StackProtectorIdx = -1;
+ 
++  struct ReturnProtector {
++    /// The register to use for return protector calculations
++    unsigned Register = 0;
++    /// Set to true if this function needs return protectors
++    bool Needed = false;
++    /// Does the return protector cookie need to be stored in frame
++    bool NeedsStore = true;
++  } RPI;
++
+   /// The frame index for the function context. Used for SjLj exceptions.
+   int FunctionContextIdx = -1;
+ 
+@@ -358,6 +367,17 @@ class MachineFrameInfo { (private)
+   int getStackProtectorIndex() const { return StackProtectorIdx; }
+   void setStackProtectorIndex(int I) { StackProtectorIdx = I; }
+   bool hasStackProtectorIndex() const { return StackProtectorIdx != -1; }
++
++  /// Get / Set return protector calculation register
++  unsigned getReturnProtectorRegister() const { return RPI.Register; }
++  void setReturnProtectorRegister(unsigned I) { RPI.Register = I; }
++  bool hasReturnProtectorRegister() const { return RPI.Register != 0; }
++  /// Get / Set if this frame needs a return protector
++  void setReturnProtectorNeeded(bool I) { RPI.Needed = I; }
++  bool getReturnProtectorNeeded() const { return RPI.Needed; }
++  /// Get / Set if the return protector cookie needs to be stored in frame
++  void setReturnProtectorNeedsStore(bool I) { RPI.NeedsStore = I; }
++  bool getReturnProtectorNeedsStore() const { return RPI.NeedsStore; }
+ 
+   /// Return the index for the function context object.
+   /// This object is used for SjLj exceptions.
diff --git a/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_Passes_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_Passes_h
new file mode 100644
index 00000000000..e9f2e20b8aa
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_Passes_h
@@ -0,0 +1,13 @@
+Index: llvm/include/llvm/CodeGen/Passes.h
+--- llvm/include/llvm/CodeGen/Passes.h.orig
++++ llvm/include/llvm/CodeGen/Passes.h
+@@ -374,6 +374,9 @@ namespace llvm {
+   ///
+   FunctionPass *createStackProtectorPass();
+ 
++  // createReturnProtectorPass - This pass add return protectors to functions.
++  FunctionPass *createReturnProtectorPass();
++
+   /// createMachineVerifierPass - This pass verifies cenerated machine code
+   /// instructions for correctness.
+   ///
diff --git a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_ReturnProtectorLowering_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_ReturnProtectorLowering_h
similarity index 88%
rename from devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_ReturnProtectorLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_ReturnProtectorLowering_h
index adbaae3433c..ff4d70f79d2 100644
--- a/devel/clang-tools-extra/patches/patch-include_llvm_CodeGen_ReturnProtectorLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_ReturnProtectorLowering_h
@@ -1,11 +1,6 @@
-- Refactor retguard to make adding additional arches easier.
-- Do not store the retguard cookie in frame in leaf functions if possible.
-  Makes things slightly faster and also improves security in these functions,
-  since the retguard cookie can't leak via the stack.
-
-Index: include/llvm/CodeGen/ReturnProtectorLowering.h
---- include/llvm/CodeGen/ReturnProtectorLowering.h.orig
-+++ include/llvm/CodeGen/ReturnProtectorLowering.h
+Index: llvm/include/llvm/CodeGen/ReturnProtectorLowering.h
+--- llvm/include/llvm/CodeGen/ReturnProtectorLowering.h.orig
++++ llvm/include/llvm/CodeGen/ReturnProtectorLowering.h
 @@ -0,0 +1,79 @@
 +//===-- llvm/CodeGen/ReturnProtectorLowering.h ------------------*- C++ -*-===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_TargetFrameLowering_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_TargetFrameLowering_h
new file mode 100644
index 00000000000..37517b9e3a0
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_CodeGen_TargetFrameLowering_h
@@ -0,0 +1,22 @@
+Index: llvm/include/llvm/CodeGen/TargetFrameLowering.h
+--- llvm/include/llvm/CodeGen/TargetFrameLowering.h.orig
++++ llvm/include/llvm/CodeGen/TargetFrameLowering.h
+@@ -14,6 +14,7 @@
+ #define LLVM_CODEGEN_TARGETFRAMELOWERING_H
+ 
+ #include "llvm/CodeGen/MachineBasicBlock.h"
++#include "llvm/CodeGen/ReturnProtectorLowering.h"
+ #include "llvm/Support/TypeSize.h"
+ #include <vector>
+ 
+@@ -212,6 +213,10 @@ class TargetFrameLowering { (public)
+                             MachineBasicBlock &MBB) const = 0;
+   virtual void emitEpilogue(MachineFunction &MF,
+                             MachineBasicBlock &MBB) const = 0;
++
++  virtual const ReturnProtectorLowering *getReturnProtector() const {
++    return nullptr;
++  }
+ 
+   /// emitZeroCallUsedRegs - Zeros out call used registers.
+   virtual void emitZeroCallUsedRegs(BitVector RegsToZero,
diff --git a/devel/clang-tools-extra/patches/patch-llvm_include_llvm_InitializePasses_h b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_InitializePasses_h
new file mode 100644
index 00000000000..1257aed97a9
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_include_llvm_InitializePasses_h
@@ -0,0 +1,11 @@
+Index: llvm/include/llvm/InitializePasses.h
+--- llvm/include/llvm/InitializePasses.h.orig
++++ llvm/include/llvm/InitializePasses.h
+@@ -351,6 +351,7 @@ void initializeRemoveRedundantDebugValuesPass(PassRegi
+ void initializeRenameIndependentSubregsPass(PassRegistry&);
+ void initializeReplaceWithVeclibLegacyPass(PassRegistry &);
+ void initializeResetMachineFunctionPass(PassRegistry&);
++void initializeReturnProtectorPass(PassRegistry&);
+ void initializeReversePostOrderFunctionAttrsLegacyPassPass(PassRegistry&);
+ void initializeRewriteStatepointsForGCLegacyPassPass(PassRegistry &);
+ void initializeRewriteSymbolsLegacyPassPass(PassRegistry&);
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_AsmPrinter_AsmPrinter_cpp
similarity index 67%
rename from devel/clang-tools-extra/patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_AsmPrinter_AsmPrinter_cpp
index f6290c87af5..20486b0f483 100644
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_AsmPrinter_AsmPrinter_cpp
@@ -1,12 +1,7 @@
-- Use int3 trap padding between functions instead of trapsleds with a leading jump.
-- Emit trap alignment between basic blocks that are unreachable via
-  fallthrough. Avoids unnecessary jmp instructions in the middle
-  of functions and makes disassembly nicer to read.
-
-Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
---- lib/CodeGen/AsmPrinter/AsmPrinter.cpp.orig
-+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
-@@ -745,7 +745,7 @@ void AsmPrinter::emitFunctionHeader() {
+Index: llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+--- llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp.orig
++++ llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+@@ -900,7 +900,7 @@ void AsmPrinter::emitFunctionHeader() {
  
    emitLinkage(&F, CurrentFnSym);
    if (MAI->hasFunctionAlignment())
@@ -15,7 +10,7 @@ Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  
    if (MAI->hasDotTypeDotSizeDirective())
      OutStreamer->emitSymbolAttribute(CurrentFnSym, MCSA_ELF_TypeFunction);
-@@ -2462,6 +2462,30 @@ void AsmPrinter::emitAlignment(Align Alignment, const 
+@@ -2849,6 +2849,30 @@ void AsmPrinter::emitAlignment(Align Alignment, const 
  }
  
  //===----------------------------------------------------------------------===//
@@ -37,7 +32,7 @@ Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
 +/// the OutStreamer, but can be overridden by Target implementations.
 +void AsmPrinter::emitTrapToAlignment(Align Alignment) const {
 +  if (Alignment == Align(1)) return;
-+  OutStreamer->emitCodeAlignment(Alignment.value());
++  OutStreamer->emitCodeAlignment(Alignment, &getSubtargetInfo());
 +}
 +
 +
@@ -46,8 +41,8 @@ Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  // Constant emission.
  //===----------------------------------------------------------------------===//
  
-@@ -3246,10 +3270,17 @@ void AsmPrinter::emitBasicBlockStart(const MachineBasi
-     }
+@@ -3687,10 +3711,18 @@ void AsmPrinter::emitBasicBlockStart(const MachineBasi
+     CurrentSectionBeginSym = MBB.getSymbol();
    }
  
 +  bool isReachableViaFallthrough =
@@ -56,13 +51,14 @@ Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    // Emit an alignment directive for this block, if needed.
    const Align Alignment = MBB.getAlignment();
 -  if (Alignment != Align(1))
--    emitAlignment(Alignment);
+-    emitAlignment(Alignment, nullptr, MBB.getMaxBytesForAlignment());
 +  if (Alignment != Align(1)) {
-+    if (isReachableViaFallthrough)
-+      emitAlignment(Alignment);
-+    else
++    if (isReachableViaFallthrough) {
++      emitAlignment(Alignment, nullptr, MBB.getMaxBytesForAlignment());
++    } else {
 +      emitTrapAlignment(Alignment);
++    }
 +  }
  
-   // Switch to a new section if this basic block must begin a section. The
-   // entry block is always placed in the function section and is handled
+   // If the block has its address taken, emit any labels that were used to
+   // reference the block.  It is possible that there is more than one label
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_CMakeLists_txt
new file mode 100644
index 00000000000..f509e906c15
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_CMakeLists_txt
@@ -0,0 +1,12 @@
+Index: llvm/lib/CodeGen/CMakeLists.txt
+--- llvm/lib/CodeGen/CMakeLists.txt.orig
++++ llvm/lib/CodeGen/CMakeLists.txt
+@@ -196,6 +196,8 @@ add_llvm_component_library(LLVMCodeGen
+   RegUsageInfoPropagate.cpp
+   ReplaceWithVeclib.cpp
+   ResetMachineFunctionPass.cpp
++  ReturnProtectorLowering.cpp
++  ReturnProtectorPass.cpp
+   RegisterBank.cpp
+   RegisterBankInfo.cpp
+   SafeStack.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_PrologEpilogInserter_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_PrologEpilogInserter_cpp
similarity index 60%
rename from devel/clang-tools-extra/patches/patch-lib_CodeGen_PrologEpilogInserter_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_PrologEpilogInserter_cpp
index 266d3689d42..edb29c883bf 100644
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_PrologEpilogInserter_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_PrologEpilogInserter_cpp
@@ -1,26 +1,7 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-
-Index: lib/CodeGen/PrologEpilogInserter.cpp
---- lib/CodeGen/PrologEpilogInserter.cpp.orig
-+++ lib/CodeGen/PrologEpilogInserter.cpp
-@@ -213,7 +213,11 @@ bool PEI::runOnMachineFunction(MachineFunction &MF) {
+Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
+--- llvm/lib/CodeGen/PrologEpilogInserter.cpp.orig
++++ llvm/lib/CodeGen/PrologEpilogInserter.cpp
+@@ -224,7 +224,11 @@ bool PEI::runOnMachineFunction(MachineFunction &MF) {
    const Function &F = MF.getFunction();
    const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
    const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering();
@@ -32,7 +13,7 @@ Index: lib/CodeGen/PrologEpilogInserter.cpp
    RS = TRI->requiresRegisterScavenging(MF) ? new RegScavenger() : nullptr;
    FrameIndexVirtualScavenging = TRI->requiresFrameIndexScavenging(MF);
    ORE = &getAnalysis<MachineOptimizationRemarkEmitterPass>().getORE();
-@@ -251,6 +255,10 @@ bool PEI::runOnMachineFunction(MachineFunction &MF) {
+@@ -262,6 +266,10 @@ bool PEI::runOnMachineFunction(MachineFunction &MF) {
    if (!F.hasFnAttribute(Attribute::Naked))
      insertPrologEpilogCode(MF);
  
@@ -43,7 +24,7 @@ Index: lib/CodeGen/PrologEpilogInserter.cpp
    // Reinsert stashed debug values at the start of the entry blocks.
    for (auto &I : EntryDbgValues)
      I.first->insert(I.first->begin(), I.second.begin(), I.second.end());
-@@ -357,7 +365,9 @@ void PEI::calculateCallFrameInfo(MachineFunction &MF) 
+@@ -393,7 +401,9 @@ void PEI::calculateCallFrameInfo(MachineFunction &MF) 
  /// Compute the sets of entry and return blocks for saving and restoring
  /// callee-saved registers, and placing prolog and epilog code.
  void PEI::calculateSaveRestoreBlocks(MachineFunction &MF) {
@@ -54,7 +35,7 @@ Index: lib/CodeGen/PrologEpilogInserter.cpp
  
    // Even when we do not change any CSR, we still want to insert the
    // prologue and epilogue of the function.
-@@ -373,7 +383,18 @@ void PEI::calculateSaveRestoreBlocks(MachineFunction &
+@@ -409,7 +419,18 @@ void PEI::calculateSaveRestoreBlocks(MachineFunction &
      // epilogue.
      if (!RestoreBlock->succ_empty() || RestoreBlock->isReturnBlock())
        RestoreBlocks.push_back(RestoreBlock);
@@ -74,7 +55,7 @@ Index: lib/CodeGen/PrologEpilogInserter.cpp
    }
  
    // Save refs to entry and return blocks.
-@@ -384,6 +405,9 @@ void PEI::calculateSaveRestoreBlocks(MachineFunction &
+@@ -420,6 +441,9 @@ void PEI::calculateSaveRestoreBlocks(MachineFunction &
      if (MBB.isReturnBlock())
        RestoreBlocks.push_back(&MBB);
    }
@@ -84,7 +65,7 @@ Index: lib/CodeGen/PrologEpilogInserter.cpp
  }
  
  static void assignCalleeSavedSpillSlots(MachineFunction &F,
-@@ -405,6 +429,10 @@ static void assignCalleeSavedSpillSlots(MachineFunctio
+@@ -457,6 +481,10 @@ static void assignCalleeSavedSpillSlots(MachineFunctio
  
    const TargetFrameLowering *TFI = F.getSubtarget().getFrameLowering();
    MachineFrameInfo &MFI = F.getFrameInfo();
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorLowering_cpp
similarity index 96%
rename from devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorLowering_cpp
index 7a3bf57af28..fd13da6efa2 100644
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorLowering_cpp
@@ -1,11 +1,6 @@
-- Refactor retguard to make adding additional arches easier.
-- Do not store the retguard cookie in frame in leaf functions if possible.
-  Makes things slightly faster and also improves security in these functions,
-  since the retguard cookie can't leak via the stack.
-
-Index: lib/CodeGen/ReturnProtectorLowering.cpp
---- lib/CodeGen/ReturnProtectorLowering.cpp.orig
-+++ lib/CodeGen/ReturnProtectorLowering.cpp
+Index: llvm/lib/CodeGen/ReturnProtectorLowering.cpp
+--- llvm/lib/CodeGen/ReturnProtectorLowering.cpp.orig
++++ llvm/lib/CodeGen/ReturnProtectorLowering.cpp
 @@ -0,0 +1,339 @@
 +//===- ReturnProtectorLowering.cpp - ---------------------------------------==//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorPass_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorPass_cpp
similarity index 58%
rename from devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorPass_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorPass_cpp
index 72a4a51e305..e0de2e4fd06 100644
--- a/devel/clang-tools-extra/patches/patch-lib_CodeGen_ReturnProtectorPass_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_ReturnProtectorPass_cpp
@@ -1,30 +1,6 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Put the new retguard symbols in their own section,
-  '.openbsd.randomdata.retguard', to make them easier to work with in the
-  kernel hibernate code.
-- Move the hashed __retguard_* symbols into individual sections and mark
-  them as COMDATs so that the linker can individually discard them, instead
-  of just ignoring duplicate symbols but keep the (duplicate) space.
-
-Index: lib/CodeGen/ReturnProtectorPass.cpp
---- lib/CodeGen/ReturnProtectorPass.cpp.orig
-+++ lib/CodeGen/ReturnProtectorPass.cpp
+Index: llvm/lib/CodeGen/ReturnProtectorPass.cpp
+--- llvm/lib/CodeGen/ReturnProtectorPass.cpp.orig
++++ llvm/lib/CodeGen/ReturnProtectorPass.cpp
 @@ -0,0 +1,63 @@
 +//===- ReturnProtectorPass.cpp - Set up rteurn protectors -----------------===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_TargetPassConfig_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_TargetPassConfig_cpp
new file mode 100644
index 00000000000..504b594965e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_CodeGen_TargetPassConfig_cpp
@@ -0,0 +1,12 @@
+Index: llvm/lib/CodeGen/TargetPassConfig.cpp
+--- llvm/lib/CodeGen/TargetPassConfig.cpp.orig
++++ llvm/lib/CodeGen/TargetPassConfig.cpp
+@@ -977,6 +977,8 @@ void TargetPassConfig::addISelPrepare() {
+   if (requiresCodeGenSCCOrder())
+     addPass(new DummyCGSCCPass);
+ 
++  addPass(createReturnProtectorPass());
++
+   // Add both the safe stack and the stack protection passes: each of them will
+   // only protect functions that have corresponding attributes.
+   addPass(createSafeStackPass());
diff --git a/devel/clang-tools-extra/patches/patch-lib_MC_MCAsmInfoELF_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCAsmInfoELF_cpp
similarity index 70%
rename from devel/clang-tools-extra/patches/patch-lib_MC_MCAsmInfoELF_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCAsmInfoELF_cpp
index 38ab119c0d6..13153c21919 100644
--- a/devel/clang-tools-extra/patches/patch-lib_MC_MCAsmInfoELF_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCAsmInfoELF_cpp
@@ -1,8 +1,6 @@
-Do not use ident.
-
-Index: lib/MC/MCAsmInfoELF.cpp
---- lib/MC/MCAsmInfoELF.cpp.orig
-+++ lib/MC/MCAsmInfoELF.cpp
+Index: llvm/lib/MC/MCAsmInfoELF.cpp
+--- llvm/lib/MC/MCAsmInfoELF.cpp.orig
++++ llvm/lib/MC/MCAsmInfoELF.cpp
 @@ -25,7 +25,7 @@ MCSection *MCAsmInfoELF::getNonexecutableStackSection(
  }
  
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCELFStreamer_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCELFStreamer_cpp
new file mode 100644
index 00000000000..ec4c6afc2cf
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCELFStreamer_cpp
@@ -0,0 +1,17 @@
+Index: llvm/lib/MC/MCELFStreamer.cpp
+--- llvm/lib/MC/MCELFStreamer.cpp.orig
++++ llvm/lib/MC/MCELFStreamer.cpp
+@@ -94,8 +94,11 @@ void MCELFStreamer::initSections(bool NoExecStack, con
+   emitCodeAlignment(Align(Ctx.getObjectFileInfo()->getTextSectionAlignment()),
+                     &STI);
+ 
+-  if (NoExecStack)
+-    switchSection(Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx));
++  if (NoExecStack) {
++    MCSection *s = Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx);
++    if (s)
++      switchSection(s);
++  }
+ }
+ 
+ void MCELFStreamer::emitLabel(MCSymbol *S, SMLoc Loc) {
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCParser_AsmParser_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCParser_AsmParser_cpp
new file mode 100644
index 00000000000..5c2f942f18a
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_MC_MCParser_AsmParser_cpp
@@ -0,0 +1,14 @@
+Index: llvm/lib/MC/MCParser/AsmParser.cpp
+--- llvm/lib/MC/MCParser/AsmParser.cpp.orig
++++ llvm/lib/MC/MCParser/AsmParser.cpp
+@@ -993,6 +993,10 @@ bool AsmParser::Run(bool NoInitialTextSection, bool No
+     (void)InsertResult;
+   }
+ 
++  StringRef Filename = getContext().getMainFileName();
++  if (!Filename.empty() && (Filename.compare(StringRef("-")) != 0))
++    Out.emitFileDirective(Filename);
++
+   getTargetParser().onBeginOfFile();
+ 
+   // While we have input, parse each statement.
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Support_Unix_Process_inc b/devel/clang-tools-extra/patches/patch-llvm_lib_Support_Unix_Process_inc
new file mode 100644
index 00000000000..c7df1874cd3
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Support_Unix_Process_inc
@@ -0,0 +1,14 @@
+Index: llvm/lib/Support/Unix/Process.inc
+--- llvm/lib/Support/Unix/Process.inc.orig
++++ llvm/lib/Support/Unix/Process.inc
+@@ -346,6 +346,10 @@ bool checkTerminalEnvironmentForColors() {
+ }
+ 
+ static bool terminalHasColors(int fd) {
++#if defined(__OpenBSD__)
++  return false;
++#endif
++
+ #ifdef LLVM_ENABLE_TERMINFO
+   // First, acquire a global lock because these C routines are thread hostile.
+   static std::mutex TermColorMutex;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64AsmPrinter_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64AsmPrinter_cpp
similarity index 60%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64AsmPrinter_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64AsmPrinter_cpp
index 57c7848c533..3c8c25cf604 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64AsmPrinter_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64AsmPrinter_cpp
@@ -1,13 +1,10 @@
-Add retguard for arm64.
-
-Index: lib/Target/AArch64/AArch64AsmPrinter.cpp
---- lib/Target/AArch64/AArch64AsmPrinter.cpp.orig
-+++ lib/Target/AArch64/AArch64AsmPrinter.cpp
-@@ -1488,6 +1488,19 @@ void AArch64AsmPrinter::emitInstruction(const MachineI
-   case AArch64::SEH_EpilogEnd:
+Index: llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
+--- llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
+@@ -1662,6 +1662,18 @@ void AArch64AsmPrinter::emitInstruction(const MachineI
      TS->emitARM64WinCFIEpilogEnd();
      return;
-+
+ 
 +  case AArch64::RETGUARD_JMP_TRAP:
 +    {
 +    MCSymbol *RGSuccSym = OutContext.createTempSymbol();
@@ -20,6 +17,6 @@ Index: lib/Target/AArch64/AArch64AsmPrinter.cpp
 +    return;
 +    }
 +
-   }
- 
-   // Finally, do the automated lowerings for everything else.
+   case AArch64::SEH_PACSignLR:
+     TS->emitARM64WinCFIPACSignLR();
+     return;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_cpp
similarity index 75%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_cpp
index 64a9fc93787..07c4887db79 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_cpp
@@ -1,9 +1,7 @@
-Add retguard for arm64.
-
-Index: lib/Target/AArch64/AArch64FrameLowering.cpp
---- lib/Target/AArch64/AArch64FrameLowering.cpp.orig
-+++ lib/Target/AArch64/AArch64FrameLowering.cpp
-@@ -123,6 +123,7 @@
+Index: llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+--- llvm/lib/Target/AArch64/AArch64FrameLowering.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+@@ -189,6 +189,7 @@
  #include "AArch64InstrInfo.h"
  #include "AArch64MachineFunctionInfo.h"
  #include "AArch64RegisterInfo.h"
@@ -11,7 +9,7 @@ Index: lib/Target/AArch64/AArch64FrameLowering.cpp
  #include "AArch64Subtarget.h"
  #include "AArch64TargetMachine.h"
  #include "MCTargetDesc/AArch64AddressingModes.h"
-@@ -2753,6 +2754,10 @@ void AArch64FrameLowering::determineCalleeSaves(Machin
+@@ -2987,6 +2988,10 @@ void AArch64FrameLowering::determineCalleeSaves(Machin
                                  ? RegInfo->getBaseRegister()
                                  : (unsigned)AArch64::NoRegister;
  
@@ -22,7 +20,7 @@ Index: lib/Target/AArch64/AArch64FrameLowering.cpp
    unsigned ExtraCSSpill = 0;
    // Figure out which callee-saved registers to save/restore.
    for (unsigned i = 0; CSRegs[i]; ++i) {
-@@ -3532,6 +3537,10 @@ unsigned AArch64FrameLowering::getWinEHFuncletFrameSiz
+@@ -3799,6 +3804,10 @@ unsigned AArch64FrameLowering::getWinEHFuncletFrameSiz
    // This is the amount of stack a funclet needs to allocate.
    return alignTo(CSSize + MF.getFrameInfo().getMaxCallFrameSize(),
                   getStackAlign());
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_h
similarity index 73%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_h
index 8585b1a3c8e..ed6a9b76565 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64FrameLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64FrameLowering_h
@@ -1,8 +1,6 @@
-Add retguard for arm64.
-
-Index: lib/Target/AArch64/AArch64FrameLowering.h
---- lib/Target/AArch64/AArch64FrameLowering.h.orig
-+++ lib/Target/AArch64/AArch64FrameLowering.h
+Index: llvm/lib/Target/AArch64/AArch64FrameLowering.h
+--- llvm/lib/Target/AArch64/AArch64FrameLowering.h.orig
++++ llvm/lib/Target/AArch64/AArch64FrameLowering.h
 @@ -13,6 +13,7 @@
  #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64FRAMELOWERING_H
  #define LLVM_LIB_TARGET_AARCH64_AARCH64FRAMELOWERING_H
@@ -11,7 +9,7 @@ Index: lib/Target/AArch64/AArch64FrameLowering.h
  #include "llvm/Support/TypeSize.h"
  #include "llvm/CodeGen/TargetFrameLowering.h"
  
-@@ -22,9 +23,12 @@ class MCCFIInstruction;
+@@ -20,9 +21,12 @@ namespace llvm {
  
  class AArch64FrameLowering : public TargetFrameLowering {
  public:
@@ -23,9 +21,9 @@ Index: lib/Target/AArch64/AArch64FrameLowering.h
 -                            true /*StackRealignable*/) {}
 +                            true /*StackRealignable*/), RPL() {}
  
-   void
-   emitCalleeSavedFrameMoves(MachineBasicBlock &MBB,
-@@ -38,6 +42,8 @@ class AArch64FrameLowering : public TargetFrameLowerin
+   void resetCFIToInitialState(MachineBasicBlock &MBB) const override;
+ 
+@@ -34,6 +38,8 @@ class AArch64FrameLowering : public TargetFrameLowerin
    /// the function.
    void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
    void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ISelLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ISelLowering_cpp
new file mode 100644
index 00000000000..60be4617833
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ISelLowering_cpp
@@ -0,0 +1,13 @@
+Index: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+--- llvm/lib/Target/AArch64/AArch64ISelLowering.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+@@ -22256,7 +22256,8 @@ void AArch64TargetLowering::ReplaceNodeResults(
+ }
+ 
+ bool AArch64TargetLowering::useLoadStackGuardNode() const {
+-  if (Subtarget->isTargetAndroid() || Subtarget->isTargetFuchsia())
++  if (Subtarget->isTargetAndroid() || Subtarget->isTargetFuchsia() ||
++      Subtarget->isTargetOpenBSD())
+     return TargetLowering::useLoadStackGuardNode();
+   return true;
+ }
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_cpp
new file mode 100644
index 00000000000..5b6bb48f10a
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_cpp
@@ -0,0 +1,13 @@
+Index: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+--- llvm/lib/Target/AArch64/AArch64InstrInfo.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+@@ -108,6 +108,9 @@ unsigned AArch64InstrInfo::getInstSizeInBytes(const Ma
+     // with fixed constant size but not specified in .td file) is a normal
+     // 4-byte insn.
+     NumBytes = 4;
++
++    if (Desc.getSize() > 0)
++      NumBytes = Desc.getSize();
+     break;
+   case TargetOpcode::STACKMAP:
+     // The upper bound for a stackmap intrinsic is the full length of its shadow
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_td
similarity index 67%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_td
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_td
index 18d707dcc36..5be3f3d97fc 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64InstrInfo_td
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64InstrInfo_td
@@ -1,9 +1,7 @@
-Add retguard for arm64.
-
-Index: lib/Target/AArch64/AArch64InstrInfo.td
---- lib/Target/AArch64/AArch64InstrInfo.td.orig
-+++ lib/Target/AArch64/AArch64InstrInfo.td
-@@ -721,6 +721,14 @@ def ADDlowTLS
+Index: llvm/lib/Target/AArch64/AArch64InstrInfo.td
+--- llvm/lib/Target/AArch64/AArch64InstrInfo.td.orig
++++ llvm/lib/Target/AArch64/AArch64InstrInfo.td
+@@ -918,6 +918,14 @@ def ADDlowTLS
  
  } // isReMaterializable, isCodeGenOnly
  
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp
similarity index 89%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp
index ea326648660..7a96a269ed3 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_cpp
@@ -1,13 +1,6 @@
-- Add retguard for arm64.
-- Do not store the retguard cookie in frame in leaf functions if possible.
-  Makes things slightly faster and also improves security in these functions,
-  since the retguard cookie can't leak via the stack.
-- Fix frame pointer slot on aarch64 for functions that do not save callee
-  registers with retguard enabled.
-
-Index: lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp
---- lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp.orig
-+++ lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp
+Index: llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp
+--- llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.cpp
 @@ -0,0 +1,124 @@
 +//===-- AArch64ReturnProtectorLowering.cpp --------------------------------===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_h
similarity index 83%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_h
index 622cda1269e..0bfa4c1c1c9 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64ReturnProtectorLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64ReturnProtectorLowering_h
@@ -1,11 +1,6 @@
-- Add retguard for arm64.
-- Do not store the retguard cookie in frame in leaf functions if possible.
-  Makes things slightly faster and also improves security in these functions,
-  since the retguard cookie can't leak via the stack.
-
-Index: lib/Target/AArch64/AArch64ReturnProtectorLowering.h
---- lib/Target/AArch64/AArch64ReturnProtectorLowering.h.orig
-+++ lib/Target/AArch64/AArch64ReturnProtectorLowering.h
+Index: llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.h
+--- llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.h.orig
++++ llvm/lib/Target/AArch64/AArch64ReturnProtectorLowering.h
 @@ -0,0 +1,52 @@
 +//===-- AArch64ReturnProtectorLowering.h - --------------------- -*- C++ -*-==//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64Subtarget_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64Subtarget_h
similarity index 57%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64Subtarget_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64Subtarget_h
index 54aeab22dff..e0d313e6122 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64Subtarget_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64Subtarget_h
@@ -1,11 +1,7 @@
-Disable the Load Stack Guard for OpenBSD on AArch64.  We don't use it
-on any other platform and it causes a segfault in combination with our
-IR Stack Guard.
-
-Index: lib/Target/AArch64/AArch64Subtarget.h
---- lib/Target/AArch64/AArch64Subtarget.h.orig
-+++ lib/Target/AArch64/AArch64Subtarget.h
-@@ -500,6 +500,7 @@ class AArch64Subtarget final : public AArch64GenSubtar
+Index: llvm/lib/Target/AArch64/AArch64Subtarget.h
+--- llvm/lib/Target/AArch64/AArch64Subtarget.h.orig
++++ llvm/lib/Target/AArch64/AArch64Subtarget.h
+@@ -261,6 +261,7 @@ class AArch64Subtarget final : public AArch64GenSubtar
    bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
    bool isTargetIOS() const { return TargetTriple.isiOS(); }
    bool isTargetLinux() const { return TargetTriple.isOSLinux(); }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64TargetMachine_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64TargetMachine_cpp
similarity index 52%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64TargetMachine_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64TargetMachine_cpp
index bf3dce7dffb..27cf3522c4e 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_AArch64TargetMachine_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_AArch64TargetMachine_cpp
@@ -1,11 +1,7 @@
-Always disable GlobalISel on aarch64, fixes a crash when building on
-aarch64 without retguard, with a stack protector and without
-optimizations.
-
-Index: lib/Target/AArch64/AArch64TargetMachine.cpp
---- lib/Target/AArch64/AArch64TargetMachine.cpp.orig
-+++ lib/Target/AArch64/AArch64TargetMachine.cpp
-@@ -332,6 +332,7 @@ AArch64TargetMachine::AArch64TargetMachine(const Targe
+Index: llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+--- llvm/lib/Target/AArch64/AArch64TargetMachine.cpp.orig
++++ llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+@@ -357,6 +357,7 @@ AArch64TargetMachine::AArch64TargetMachine(const Targe
    // Enable GlobalISel at or below EnableGlobalISelAt0, unless this is
    // MachO/CodeModel::Large, which GlobalISel does not support.
    if (getOptLevel() <= EnableGlobalISelAtO &&
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_CMakeLists_txt
similarity index 52%
rename from devel/clang-tools-extra/patches/patch-lib_Target_AArch64_CMakeLists_txt
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_CMakeLists_txt
index a6d81953c00..286f80f00bf 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_AArch64_CMakeLists_txt
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_AArch64_CMakeLists_txt
@@ -1,9 +1,7 @@
-Add retguard for arm64.
-
-Index: lib/Target/AArch64/CMakeLists.txt
---- lib/Target/AArch64/CMakeLists.txt.orig
-+++ lib/Target/AArch64/CMakeLists.txt
-@@ -70,6 +70,7 @@ add_llvm_target(AArch64CodeGen
+Index: llvm/lib/Target/AArch64/CMakeLists.txt
+--- llvm/lib/Target/AArch64/CMakeLists.txt.orig
++++ llvm/lib/Target/AArch64/CMakeLists.txt
+@@ -73,6 +73,7 @@ add_llvm_target(AArch64CodeGen
    AArch64PromoteConstant.cpp
    AArch64PBQPRegAlloc.cpp
    AArch64RegisterInfo.cpp
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_ARM_ARMISelLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_ARM_ARMISelLowering_cpp
new file mode 100644
index 00000000000..e9a7c64ac4d
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_ARM_ARMISelLowering_cpp
@@ -0,0 +1,12 @@
+Index: llvm/lib/Target/ARM/ARMISelLowering.cpp
+--- llvm/lib/Target/ARM/ARMISelLowering.cpp.orig
++++ llvm/lib/Target/ARM/ARMISelLowering.cpp
+@@ -21198,6 +21198,8 @@ bool ARMTargetLowering::shouldInsertFencesForAtomic(
+ }
+ 
+ bool ARMTargetLowering::useLoadStackGuardNode() const {
++  if (Subtarget->getTargetTriple().isOSOpenBSD())
++    return false;
+   // ROPI/RWPI are not supported currently.
+   return !Subtarget->isROPI() && !Subtarget->isRWPI();
+ }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_AsmParser_MipsAsmParser_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
similarity index 83%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_AsmParser_MipsAsmParser_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
index 0548a2f66be..9ed66751372 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
@@ -1,9 +1,7 @@
-Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-
-Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -68,6 +68,7 @@ class MCInstrInfo;
+Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+--- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
++++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+@@ -69,6 +69,7 @@ class MCInstrInfo;
  } // end namespace llvm
  
  extern cl::opt<bool> EmitJalrReloc;
@@ -11,7 +9,7 @@ Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
  
  namespace {
  
-@@ -236,6 +237,9 @@ class MipsAsmParser : public MCTargetAsmParser {
+@@ -238,6 +239,9 @@ class MipsAsmParser : public MCTargetAsmParser {
  
    bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
  
@@ -21,7 +19,7 @@ Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
    bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
                       MCStreamer &Out, const MCSubtargetInfo *STI);
  
-@@ -2104,6 +2108,19 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
+@@ -2096,6 +2100,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
      Inst = BInst;
    }
  
@@ -33,6 +31,7 @@ Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
 +    case Mips::JalTwoReg:
 +      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
 +        return true;
++      LLVM_FALLTHROUGH;
 +    default:
 +      break;
 +    }
@@ -41,7 +40,7 @@ Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
    // This expansion is not in a function called by tryExpandInstruction()
    // because the pseudo-instruction doesn't have a distinct opcode.
    if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3334,6 +3351,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
+@@ -3325,6 +3343,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
        TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
      }
    }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
similarity index 50%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_CMakeLists_txt
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
index 4615d39c9e9..504b19f4493 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_CMakeLists_txt
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,10 +1,7 @@
-- Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-- Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/CMakeLists.txt
---- lib/Target/Mips/CMakeLists.txt.orig
-+++ lib/Target/Mips/CMakeLists.txt
-@@ -41,6 +41,7 @@ add_llvm_target(MipsCodeGen
+Index: llvm/lib/Target/Mips/CMakeLists.txt
+--- llvm/lib/Target/Mips/CMakeLists.txt.orig
++++ llvm/lib/Target/Mips/CMakeLists.txt
+@@ -43,6 +43,7 @@ add_llvm_target(MipsCodeGen
    MipsISelLowering.cpp
    MipsFrameLowering.cpp
    MipsLegalizerInfo.cpp
@@ -12,8 +9,8 @@ Index: lib/Target/Mips/CMakeLists.txt
    MipsBranchExpansion.cpp
    MipsMCInstLower.cpp
    MipsMachineFunction.cpp
-@@ -50,6 +51,7 @@ add_llvm_target(MipsCodeGen
-   MipsPreLegalizerCombiner.cpp
+@@ -53,6 +54,7 @@ add_llvm_target(MipsCodeGen
+   MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
 +  MipsReturnProtectorLowering.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
similarity index 57%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
index 66c0e9fd3e4..3fc5a9f5e98 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
@@ -1,9 +1,7 @@
-Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-
-Index: lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -21,6 +21,11 @@ EmitJalrReloc("mips-jalr-reloc", cl::Hidden,
+Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
+--- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
++++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
+@@ -23,6 +23,11 @@ EmitJalrReloc("mips-jalr-reloc", cl::Hidden,
                cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"),
                cl::init(true));
  
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsAsmPrinter_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsAsmPrinter_cpp
similarity index 93%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsAsmPrinter_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsAsmPrinter_cpp
index 76b4b9a736a..cb834a328c4 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsAsmPrinter_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsAsmPrinter_cpp
@@ -1,9 +1,7 @@
-- Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsAsmPrinter.cpp
---- lib/Target/Mips/MipsAsmPrinter.cpp.orig
-+++ lib/Target/Mips/MipsAsmPrinter.cpp
-@@ -242,6 +242,83 @@ void MipsAsmPrinter::emitInstruction(const MachineInst
+Index: llvm/lib/Target/Mips/MipsAsmPrinter.cpp
+--- llvm/lib/Target/Mips/MipsAsmPrinter.cpp.orig
++++ llvm/lib/Target/Mips/MipsAsmPrinter.cpp
+@@ -241,6 +241,83 @@ void MipsAsmPrinter::emitInstruction(const MachineInst
    case Mips::PATCHABLE_TAIL_CALL:
      LowerPATCHABLE_TAIL_CALL(*MI);
      return;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_cpp
similarity index 85%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_cpp
index 215c4859b61..e204b47df75 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_cpp
@@ -1,8 +1,6 @@
-Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsFrameLowering.cpp
---- lib/Target/Mips/MipsFrameLowering.cpp.orig
-+++ lib/Target/Mips/MipsFrameLowering.cpp
+Index: llvm/lib/Target/Mips/MipsFrameLowering.cpp
+--- llvm/lib/Target/Mips/MipsFrameLowering.cpp.orig
++++ llvm/lib/Target/Mips/MipsFrameLowering.cpp
 @@ -14,6 +14,7 @@
  #include "MCTargetDesc/MipsBaseInfo.h"
  #include "MipsInstrInfo.h"
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_h
similarity index 80%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_h
index cbe1b88212e..1a2542676ef 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsFrameLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsFrameLowering_h
@@ -1,8 +1,6 @@
-Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsFrameLowering.h
---- lib/Target/Mips/MipsFrameLowering.h.orig
-+++ lib/Target/Mips/MipsFrameLowering.h
+Index: llvm/lib/Target/Mips/MipsFrameLowering.h
+--- llvm/lib/Target/Mips/MipsFrameLowering.h.orig
++++ llvm/lib/Target/Mips/MipsFrameLowering.h
 @@ -14,6 +14,7 @@
  #define LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H
  
@@ -24,7 +22,7 @@ Index: lib/Target/Mips/MipsFrameLowering.h
    }
  
    static const MipsFrameLowering *create(const MipsSubtarget &ST);
-@@ -39,6 +43,8 @@ class MipsFrameLowering : public TargetFrameLowering {
+@@ -42,6 +46,8 @@ class MipsFrameLowering : public TargetFrameLowering {
    bool enableShrinkWrapping(const MachineFunction &MF) const override {
      return true;
    }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsISelLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsISelLowering_cpp
similarity index 60%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsISelLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsISelLowering_cpp
index 81a36a1d1be..6a7feb95b34 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsISelLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsISelLowering_cpp
@@ -1,16 +1,7 @@
-- Implement the 'h' register constraint on mips64. This lets clang build
-  pieces of software that use the constraint if the compiler claims
-  to be compatible with GCC 4.2.1.
-  Note that the constraint was removed in GCC 4.4. The reason was that
-  'h' could generate code whose result is unpredictable. The underlying
-  reason is that the HI and LO registers are special, and the optimizer
-  has to be careful when choosing the order of HI/LO accesses. It looks
-  that LLVM has the needed logic.
-
-Index: lib/Target/Mips/MipsISelLowering.cpp
---- lib/Target/Mips/MipsISelLowering.cpp.orig
-+++ lib/Target/Mips/MipsISelLowering.cpp
-@@ -3925,6 +3925,7 @@ MipsTargetLowering::getConstraintType(StringRef Constr
+Index: llvm/lib/Target/Mips/MipsISelLowering.cpp
+--- llvm/lib/Target/Mips/MipsISelLowering.cpp.orig
++++ llvm/lib/Target/Mips/MipsISelLowering.cpp
+@@ -3935,6 +3935,7 @@ MipsTargetLowering::getConstraintType(StringRef Constr
    //       backwards compatibility.
    // 'c' : A register suitable for use in an indirect
    //       jump. This will always be $25 for -mabicalls.
@@ -18,7 +9,7 @@ Index: lib/Target/Mips/MipsISelLowering.cpp
    // 'l' : The lo register. 1 word storage.
    // 'x' : The hilo register pair. Double word storage.
    if (Constraint.size() == 1) {
-@@ -3934,6 +3935,7 @@ MipsTargetLowering::getConstraintType(StringRef Constr
+@@ -3944,6 +3945,7 @@ MipsTargetLowering::getConstraintType(StringRef Constr
        case 'y':
        case 'f':
        case 'c':
@@ -26,7 +17,7 @@ Index: lib/Target/Mips/MipsISelLowering.cpp
        case 'l':
        case 'x':
          return C_RegisterClass;
-@@ -3979,6 +3981,7 @@ MipsTargetLowering::getSingleConstraintMatchWeight(
+@@ -3989,6 +3991,7 @@ MipsTargetLowering::getSingleConstraintMatchWeight(
        weight = CW_Register;
      break;
    case 'c': // $25 for indirect jumps
@@ -34,7 +25,7 @@ Index: lib/Target/Mips/MipsISelLowering.cpp
    case 'l': // lo register
    case 'x': // hilo register pair
      if (type->isIntegerTy())
-@@ -4153,6 +4156,11 @@ MipsTargetLowering::getRegForInlineAsmConstraint(const
+@@ -4163,6 +4166,11 @@ MipsTargetLowering::getRegForInlineAsmConstraint(const
          return std::make_pair((unsigned)Mips::T9_64, &Mips::GPR64RegClass);
        // This will generate an error message
        return std::make_pair(0U, nullptr);
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsInstrInfo_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsInstrInfo_td
similarity index 86%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsInstrInfo_td
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsInstrInfo_td
index caac38e64f6..6dffb998334 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsInstrInfo_td
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsInstrInfo_td
@@ -1,9 +1,7 @@
-- Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsInstrInfo.td
---- lib/Target/Mips/MipsInstrInfo.td.orig
-+++ lib/Target/Mips/MipsInstrInfo.td
-@@ -2012,6 +2012,31 @@ def LONG_BRANCH_ADDiu2Op : PseudoSE<(outs GPR32Opnd:$d
+Index: llvm/lib/Target/Mips/MipsInstrInfo.td
+--- llvm/lib/Target/Mips/MipsInstrInfo.td.orig
++++ llvm/lib/Target/Mips/MipsInstrInfo.td
+@@ -2016,6 +2016,31 @@ def LONG_BRANCH_ADDiu2Op : PseudoSE<(outs GPR32Opnd:$d
    bit hasNoSchedulingInfo = 1;
  }
  
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsLoongson2FBTBFix_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
similarity index 92%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsLoongson2FBTBFix_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
index ed6b29dc688..ea3b3c30fa8 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
@@ -1,8 +1,6 @@
-Adapt the -mfix-loongson2f-btb workaround from as(1) to LLVM/clang.
-
-Index: lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ lib/Target/Mips/MipsLoongson2FBTBFix.cpp
+Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
+--- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
++++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
 @@ -0,0 +1,91 @@
 +//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_cpp
similarity index 97%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_cpp
index 07bc5fc82f3..735c170fd97 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_cpp
@@ -1,8 +1,6 @@
-Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsReturnProtectorLowering.cpp
---- lib/Target/Mips/MipsReturnProtectorLowering.cpp.orig
-+++ lib/Target/Mips/MipsReturnProtectorLowering.cpp
+Index: llvm/lib/Target/Mips/MipsReturnProtectorLowering.cpp
+--- llvm/lib/Target/Mips/MipsReturnProtectorLowering.cpp.orig
++++ llvm/lib/Target/Mips/MipsReturnProtectorLowering.cpp
 @@ -0,0 +1,273 @@
 +//===-- MipsReturnProtectorLowering.cpp --------------------------------===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_h
similarity index 90%
rename from devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_h
index a8609caf80c..16975d206bb 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsReturnProtectorLowering_h
@@ -1,8 +1,6 @@
-Add retguard for octeon/mips64.
-
-Index: lib/Target/Mips/MipsReturnProtectorLowering.h
---- lib/Target/Mips/MipsReturnProtectorLowering.h.orig
-+++ lib/Target/Mips/MipsReturnProtectorLowering.h
+Index: llvm/lib/Target/Mips/MipsReturnProtectorLowering.h
+--- llvm/lib/Target/Mips/MipsReturnProtectorLowering.h.orig
++++ llvm/lib/Target/Mips/MipsReturnProtectorLowering.h
 @@ -0,0 +1,46 @@
 +//===-- MipsReturnProtectorLowering.h - --------------------- -*- C++ -*-==//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
new file mode 100644
index 00000000000..8d4fd17ba8c
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
@@ -0,0 +1,21 @@
+Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
+--- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
++++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
+@@ -48,6 +48,7 @@ using namespace llvm;
+ 
+ #define DEBUG_TYPE "mips"
+ 
++extern cl::opt<bool> FixLoongson2FBTB;
+ static cl::opt<bool>
+     EnableMulMulFix("mfix4300", cl::init(false),
+                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
+@@ -280,6 +281,9 @@ bool MipsPassConfig::addInstSelector() {
+ 
+ void MipsPassConfig::addPreRegAlloc() {
+   addPass(createMipsOptimizePICCallPass());
++
++  if (FixLoongson2FBTB)
++    addPass(createMipsLoongson2FBTBFix());
+ }
+ 
+ TargetTransformInfo
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_Mips_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_Mips_h
new file mode 100644
index 00000000000..98ab56729f8
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_Mips_h
@@ -0,0 +1,19 @@
+Index: llvm/lib/Target/Mips/Mips.h
+--- llvm/lib/Target/Mips/Mips.h.orig
++++ llvm/lib/Target/Mips/Mips.h
+@@ -30,6 +30,7 @@ class PassRegistry;
+ ModulePass *createMipsOs16Pass();
+ ModulePass *createMips16HardFloatPass();
+ 
++FunctionPass *createMipsLoongson2FBTBFix();
+ FunctionPass *createMipsModuleISelDagPass();
+ FunctionPass *createMipsOptimizePICCallPass();
+ FunctionPass *createMipsDelaySlotFillerPass();
+@@ -45,6 +46,7 @@ InstructionSelector *createMipsInstructionSelector(con
+                                                    MipsSubtarget &,
+                                                    MipsRegisterBankInfo &);
+ 
++void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
+ void initializeMicroMipsSizeReducePass(PassRegistry &);
+ void initializeMipsBranchExpansionPass(PassRegistry &);
+ void initializeMipsDAGToDAGISelPass(PassRegistry &);
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_CMakeLists_txt
new file mode 100644
index 00000000000..fd99361dda8
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_CMakeLists_txt
@@ -0,0 +1,11 @@
+Index: llvm/lib/Target/PowerPC/CMakeLists.txt
+--- llvm/lib/Target/PowerPC/CMakeLists.txt.orig
++++ llvm/lib/Target/PowerPC/CMakeLists.txt
+@@ -43,6 +43,7 @@ add_llvm_target(PowerPCCodeGen
+   PPCMacroFusion.cpp
+   PPCMIPeephole.cpp
+   PPCRegisterInfo.cpp
++  PPCReturnProtectorLowering.cpp
+   PPCSubtarget.cpp
+   PPCTargetMachine.cpp
+   PPCTargetObjectFile.cpp
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCAsmPrinter_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCAsmPrinter_cpp
similarity index 93%
rename from devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCAsmPrinter_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCAsmPrinter_cpp
index a255d21d44f..b3b7bd3316b 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCAsmPrinter_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCAsmPrinter_cpp
@@ -1,9 +1,7 @@
-Add RETGUARD implementation for powerpc and powerpc64.
-
-Index: lib/Target/PowerPC/PPCAsmPrinter.cpp
---- lib/Target/PowerPC/PPCAsmPrinter.cpp.orig
-+++ lib/Target/PowerPC/PPCAsmPrinter.cpp
-@@ -815,6 +815,85 @@ void PPCAsmPrinter::emitInstruction(const MachineInstr
+Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+--- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp.orig
++++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -835,6 +835,85 @@ void PPCAsmPrinter::emitInstruction(const MachineInstr
        return;
      }
    }
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_cpp
new file mode 100644
index 00000000000..af8f024349f
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_cpp
@@ -0,0 +1,33 @@
+Index: llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
+--- llvm/lib/Target/PowerPC/PPCFrameLowering.cpp.orig
++++ llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
+@@ -15,6 +15,7 @@
+ #include "PPCInstrBuilder.h"
+ #include "PPCInstrInfo.h"
+ #include "PPCMachineFunctionInfo.h"
++#include "PPCReturnProtectorLowering.h"
+ #include "PPCSubtarget.h"
+ #include "PPCTargetMachine.h"
+ #include "llvm/ADT/Statistic.h"
+@@ -1192,12 +1193,6 @@ void PPCFrameLowering::emitPrologue(MachineFunction &M
+       if ((Reg == PPC::X2 || Reg == PPC::R2) && MustSaveTOC)
+         continue;
+ 
+-      // For SVR4, don't emit a move for the CR spill slot if we haven't
+-      // spilled CRs.
+-      if (isSVR4ABI && (PPC::CR2 <= Reg && Reg <= PPC::CR4)
+-          && !MustSaveCR)
+-        continue;
+-
+       // For 64-bit SVR4 when we have spilled CRs, the spill location
+       // is SP+8, not a frame-relative slot.
+       if (isSVR4ABI && isPPC64 && (PPC::CR2 <= Reg && Reg <= PPC::CR4)) {
+@@ -2711,4 +2706,8 @@ bool PPCFrameLowering::enableShrinkWrapping(const Mach
+   if (MF.getInfo<PPCFunctionInfo>()->shrinkWrapDisabled())
+     return false;
+   return !MF.getSubtarget<PPCSubtarget>().is32BitELFABI();
++}
++
++const ReturnProtectorLowering *PPCFrameLowering::getReturnProtector() const {
++  return &RPL;
+ }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_h
similarity index 78%
rename from devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_h
index 07ff2bef2be..7071aec6c72 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCFrameLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCFrameLowering_h
@@ -1,8 +1,6 @@
-Add RETGUARD implementation for powerpc and powerpc64.
-
-Index: lib/Target/PowerPC/PPCFrameLowering.h
---- lib/Target/PowerPC/PPCFrameLowering.h.orig
-+++ lib/Target/PowerPC/PPCFrameLowering.h
+Index: llvm/lib/Target/PowerPC/PPCFrameLowering.h
+--- llvm/lib/Target/PowerPC/PPCFrameLowering.h.orig
++++ llvm/lib/Target/PowerPC/PPCFrameLowering.h
 @@ -12,6 +12,7 @@
  #ifndef LLVM_LIB_TARGET_POWERPC_PPCFRAMELOWERING_H
  #define LLVM_LIB_TARGET_POWERPC_PPCFRAMELOWERING_H
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCISelDAGToDAG_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCISelDAGToDAG_cpp
new file mode 100644
index 00000000000..dac479bd12e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCISelDAGToDAG_cpp
@@ -0,0 +1,13 @@
+Index: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+--- llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp.orig
++++ llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+@@ -5293,7 +5293,8 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
+     // generate secure plt code for TLS symbols.
+     getGlobalBaseReg();
+   } break;
+-  case PPCISD::CALL: {
++  case PPCISD::CALL:
++  case PPCISD::CALL_RM: {
+     if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
+         !TM.isPositionIndependent() || !Subtarget->isSecurePlt() ||
+         !Subtarget->isTargetELF())
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCInstrInfo_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCInstrInfo_td
similarity index 83%
rename from devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCInstrInfo_td
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCInstrInfo_td
index ad1ce8640d8..d1501f80d64 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCInstrInfo_td
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCInstrInfo_td
@@ -1,9 +1,7 @@
-Add RETGUARD implementation for powerpc and powerpc64.
-
-Index: lib/Target/PowerPC/PPCInstrInfo.td
---- lib/Target/PowerPC/PPCInstrInfo.td.orig
-+++ lib/Target/PowerPC/PPCInstrInfo.td
-@@ -1690,6 +1690,31 @@ let Defs = [LR] in
+Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
+--- llvm/lib/Target/PowerPC/PPCInstrInfo.td.orig
++++ llvm/lib/Target/PowerPC/PPCInstrInfo.td
+@@ -1226,6 +1226,31 @@ let Defs = [LR] in
    def MoveGOTtoLR : PPCEmitTimePseudo<(outs), (ins), "#MoveGOTtoLR", []>,
                      PPC970_Unit_BRU;
  
@@ -32,6 +30,6 @@ Index: lib/Target/PowerPC/PPCInstrInfo.td
 +                        (ins calltarget:$sym), "RGLoadCookie", []>;
 +}
 +
- let isBranch = 1, isTerminator = 1, hasCtrlDep = 1, PPC970_Unit = 7 in {
+ let isBranch = 1, isTerminator = 1, hasCtrlDep = 1, PPC970_Unit = 7,
+     hasSideEffects = 0 in {
    let isBarrier = 1 in {
-     let isPredicable = 1 in
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_cpp
similarity index 97%
rename from devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_cpp
index 0f0edc2b58b..25532dad0b6 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_cpp
@@ -1,9 +1,6 @@
-- Add RETGUARD implementation for powerpc and powerpc64.
-- Use all 64 bits of the RETGUARD cookie on powerpc64.
-
-Index: lib/Target/PowerPC/PPCReturnProtectorLowering.cpp
---- lib/Target/PowerPC/PPCReturnProtectorLowering.cpp.orig
-+++ lib/Target/PowerPC/PPCReturnProtectorLowering.cpp
+Index: llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.cpp
+--- llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.cpp.orig
++++ llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.cpp
 @@ -0,0 +1,278 @@
 +//===-- PPCReturnProtectorLowering.cpp --------------------------------===//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_h
similarity index 88%
rename from devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_h
index b36197d06c4..5f37f51cd0e 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_PowerPC_PPCReturnProtectorLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_PowerPC_PPCReturnProtectorLowering_h
@@ -1,8 +1,6 @@
-Add RETGUARD implementation for powerpc and powerpc64.
-
-Index: lib/Target/PowerPC/PPCReturnProtectorLowering.h
---- lib/Target/PowerPC/PPCReturnProtectorLowering.h.orig
-+++ lib/Target/PowerPC/PPCReturnProtectorLowering.h
+Index: llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.h
+--- llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.h.orig
++++ llvm/lib/Target/PowerPC/PPCReturnProtectorLowering.h
 @@ -0,0 +1,46 @@
 +//===-- PPCReturnProtectorLowering.h - --------------------- -*- C++ -*-==//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_RISCV_RISCVISelLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_RISCV_RISCVISelLowering_cpp
similarity index 56%
rename from devel/clang-tools-extra/patches/patch-lib_Target_RISCV_RISCVISelLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_RISCV_RISCVISelLowering_cpp
index 531bad6b1d2..c4b75a9f8f3 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_RISCV_RISCVISelLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_RISCV_RISCVISelLowering_cpp
@@ -1,9 +1,7 @@
-- enable EmuTLS on RiscV.
-
-Index: lib/Target/RISCV/RISCVISelLowering.cpp
---- lib/Target/RISCV/RISCVISelLowering.cpp.orig
-+++ lib/Target/RISCV/RISCVISelLowering.cpp
-@@ -2847,6 +2847,10 @@ SDValue RISCVTargetLowering::getDynamicTLSAddr(GlobalA
+Index: llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+--- llvm/lib/Target/RISCV/RISCVISelLowering.cpp.orig
++++ llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+@@ -4537,6 +4537,10 @@ SDValue RISCVTargetLowering::getDynamicTLSAddr(GlobalA
  
  SDValue RISCVTargetLowering::lowerGlobalTLSAddress(SDValue Op,
                                                     SelectionDAG &DAG) const {
@@ -11,6 +9,6 @@ Index: lib/Target/RISCV/RISCVISelLowering.cpp
 +  if (DAG.getTarget().useEmulatedTLS())
 +    return LowerToTLSEmulatedModel(GA, DAG);
 +
-   SDLoc DL(Op);
-   EVT Ty = Op.getValueType();
    GlobalAddressSDNode *N = cast<GlobalAddressSDNode>(Op);
+   assert(N->getOffset() == 0 && "unexpected offset in global node");
+ 
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_CMakeLists_txt
new file mode 100644
index 00000000000..6e339dce6d4
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_CMakeLists_txt
@@ -0,0 +1,19 @@
+Index: llvm/lib/Target/X86/CMakeLists.txt
+--- llvm/lib/Target/X86/CMakeLists.txt.orig
++++ llvm/lib/Target/X86/CMakeLists.txt
+@@ -45,6 +45,7 @@ set(sources
+   X86ExpandPseudo.cpp
+   X86FastISel.cpp
+   X86FixupBWInsts.cpp
++  X86FixupGadgets.cpp
+   X86FixupLEAs.cpp
+   X86AvoidStoreForwardingBlocks.cpp
+   X86DynAllocaExpander.cpp
+@@ -76,6 +77,7 @@ set(sources
+   X86PartialReduction.cpp
+   X86RegisterBankInfo.cpp
+   X86RegisterInfo.cpp
++  X86ReturnProtectorLowering.cpp
+   X86ReturnThunks.cpp
+   X86SelectionDAGInfo.cpp
+   X86ShuffleDecodeConstantPool.cpp
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_MCTargetDesc_X86AsmBackend_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_MCTargetDesc_X86AsmBackend_cpp
new file mode 100644
index 00000000000..260cea42beb
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_MCTargetDesc_X86AsmBackend_cpp
@@ -0,0 +1,75 @@
+Index: llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+--- llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp.orig
++++ llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+@@ -1018,56 +1018,23 @@ unsigned X86AsmBackend::getMaximumNopSize(const MCSubt
+ /// \return - true on success, false on failure
+ bool X86AsmBackend::writeNopData(raw_ostream &OS, uint64_t Count,
+                                  const MCSubtargetInfo *STI) const {
+-  static const char Nops32Bit[10][11] = {
+-      // nop
+-      "\x90",
+-      // xchg %ax,%ax
+-      "\x66\x90",
+-      // nopl (%[re]ax)
+-      "\x0f\x1f\x00",
+-      // nopl 0(%[re]ax)
+-      "\x0f\x1f\x40\x00",
+-      // nopl 0(%[re]ax,%[re]ax,1)
+-      "\x0f\x1f\x44\x00\x00",
+-      // nopw 0(%[re]ax,%[re]ax,1)
+-      "\x66\x0f\x1f\x44\x00\x00",
+-      // nopl 0L(%[re]ax)
+-      "\x0f\x1f\x80\x00\x00\x00\x00",
+-      // nopl 0L(%[re]ax,%[re]ax,1)
+-      "\x0f\x1f\x84\x00\x00\x00\x00\x00",
+-      // nopw 0L(%[re]ax,%[re]ax,1)
+-      "\x66\x0f\x1f\x84\x00\x00\x00\x00\x00",
+-      // nopw %cs:0L(%[re]ax,%[re]ax,1)
+-      "\x66\x2e\x0f\x1f\x84\x00\x00\x00\x00\x00",
+-  };
+ 
+-  // 16-bit mode uses different nop patterns than 32-bit.
+-  static const char Nops16Bit[4][11] = {
+-      // nop
+-      "\x90",
+-      // xchg %eax,%eax
+-      "\x66\x90",
+-      // lea 0(%si),%si
+-      "\x8d\x74\x00",
+-      // lea 0w(%si),%si
+-      "\x8d\xb4\x00\x00",
+-  };
+-
+-  const char(*Nops)[11] =
+-      STI->getFeatureBits()[X86::Is16Bit] ? Nops16Bit : Nops32Bit;
+-
+-  uint64_t MaxNopLength = (uint64_t)getMaximumNopSize(*STI);
+-
+-  // Emit as many MaxNopLength NOPs as needed, then emit a NOP of the remaining
+-  // length.
++  // Write 1 or 2 byte NOP sequences, or a longer trapsled, until
++  // we have written Count bytes
+   do {
+-    const uint8_t ThisNopLength = (uint8_t) std::min(Count, MaxNopLength);
+-    const uint8_t Prefixes = ThisNopLength <= 10 ? 0 : ThisNopLength - 10;
+-    for (uint8_t i = 0; i < Prefixes; i++)
+-      OS << '\x66';
+-    const uint8_t Rest = ThisNopLength - Prefixes;
+-    if (Rest != 0)
+-      OS.write(Nops[Rest - 1], Rest);
++    const uint8_t ThisNopLength = (uint8_t) std::min(Count, (uint64_t)127);
++    switch (ThisNopLength) {
++      case 0: break;
++      case 1: OS << '\x90';
++              break;
++      case 2: OS << '\x66';
++              OS << '\x90';
++              break;
++      default: OS << '\xEB';
++               OS << (uint8_t)(ThisNopLength - 2);
++               for(uint8_t i = 2; i < ThisNopLength; ++i)
++                 OS << '\xCC';
++    }
+     Count -= ThisNopLength;
+   } while (Count != 0);
+ 
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86AsmPrinter_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86AsmPrinter_h
new file mode 100644
index 00000000000..8999306d1a0
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86AsmPrinter_h
@@ -0,0 +1,12 @@
+Index: llvm/lib/Target/X86/X86AsmPrinter.h
+--- llvm/lib/Target/X86/X86AsmPrinter.h.orig
++++ llvm/lib/Target/X86/X86AsmPrinter.h
+@@ -136,6 +136,8 @@ class LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public A
+ 
+   void emitInstruction(const MachineInstr *MI) override;
+ 
++  void emitTrapToAlignment(Align Alignment) const override;
++
+   void emitBasicBlockEnd(const MachineBasicBlock &MBB) override;
+ 
+   bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FixupGadgets_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FixupGadgets_cpp
similarity index 95%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FixupGadgets_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FixupGadgets_cpp
index f8fe8762318..f4036a4c4b5 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FixupGadgets_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FixupGadgets_cpp
@@ -1,15 +1,7 @@
-- Add a clang pass that identifies potential ROP gadgets and replaces ROP
-  friendly instructions with safe alternatives. This initial commit fixes
-  3 instruction forms that will lower to include a c3 (return) byte.
-  Additional problematic instructions can be fixed incrementally using
-  this framework.
-- Improve the X86FixupGadgets pass
-- Optimize gadget fixups for MOV instructions
-
-Index: lib/Target/X86/X86FixupGadgets.cpp
---- lib/Target/X86/X86FixupGadgets.cpp.orig
-+++ lib/Target/X86/X86FixupGadgets.cpp
-@@ -0,0 +1,708 @@
+Index: llvm/lib/Target/X86/X86FixupGadgets.cpp
+--- llvm/lib/Target/X86/X86FixupGadgets.cpp.orig
++++ llvm/lib/Target/X86/X86FixupGadgets.cpp
+@@ -0,0 +1,704 @@
 +//===-- X86FixupGadgets.cpp - Fixup Instructions that make ROP Gadgets ----===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -554,23 +546,19 @@ Index: lib/Target/X86/X86FixupGadgets.cpp
 +
 +  const MCInstrDesc &Desc = MI.getDesc();
 +
-+  const MCPhysReg *ImpDefs = Desc.getImplicitDefs();
-+  if (ImpDefs) {
-+    for (; *ImpDefs; ++ImpDefs) {
-+      unsigned w = getWidestRegForReg(*ImpDefs);
-+      if (w == Reg1 || w == Reg2) {
-+        return true;
-+      }
++  const ArrayRef<MCPhysReg> ImpDefs = Desc.implicit_defs();
++  for (MCPhysReg ImpDef : ImpDefs) {
++    unsigned w = getWidestRegForReg(ImpDef);
++    if (w == Reg1 || w == Reg2) {
++      return true;
 +    }
 +  }
 +
-+  const MCPhysReg *ImpUses = Desc.getImplicitUses();
-+  if (ImpUses) {
-+    for (; *ImpUses; ++ImpUses) {
-+      unsigned w = getWidestRegForReg(*ImpUses);
-+      if (w == Reg1 || w == Reg2) {
-+        return true;
-+      }
++  const ArrayRef<MCPhysReg> ImpUses = Desc.implicit_uses();
++  for (MCPhysReg ImpUse : ImpUses) {
++    unsigned w = getWidestRegForReg(ImpUse);
++    if (w == Reg1 || w == Reg2) {
++      return true;
 +    }
 +  }
 +  return false;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_cpp
similarity index 69%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_cpp
index be2bf440f0a..6962a37e84a 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86FrameLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_cpp
@@ -1,27 +1,7 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Refactor retguard to make adding additional arches easier.
-- implement -msave-args in clang/llvm, like the sun did for gcc
-
-Index: lib/Target/X86/X86FrameLowering.cpp
---- lib/Target/X86/X86FrameLowering.cpp.orig
-+++ lib/Target/X86/X86FrameLowering.cpp
-@@ -14,6 +14,7 @@
+Index: llvm/lib/Target/X86/X86FrameLowering.cpp
+--- llvm/lib/Target/X86/X86FrameLowering.cpp.orig
++++ llvm/lib/Target/X86/X86FrameLowering.cpp
+@@ -15,6 +15,7 @@
  #include "X86InstrBuilder.h"
  #include "X86InstrInfo.h"
  #include "X86MachineFunctionInfo.h"
@@ -29,7 +9,7 @@ Index: lib/Target/X86/X86FrameLowering.cpp
  #include "X86Subtarget.h"
  #include "X86TargetMachine.h"
  #include "llvm/ADT/SmallSet.h"
-@@ -46,7 +47,7 @@ X86FrameLowering::X86FrameLowering(const X86Subtarget 
+@@ -48,7 +49,7 @@ X86FrameLowering::X86FrameLowering(const X86Subtarget 
                                     MaybeAlign StackAlignOverride)
      : TargetFrameLowering(StackGrowsDown, StackAlignOverride.valueOrOne(),
                            STI.is64Bit() ? -8 : -4),
@@ -38,7 +18,7 @@ Index: lib/Target/X86/X86FrameLowering.cpp
    // Cache a bunch of frame-related predicates for this subtarget.
    SlotSize = TRI->getSlotSize();
    Is64Bit = STI.is64Bit();
-@@ -54,6 +55,7 @@ X86FrameLowering::X86FrameLowering(const X86Subtarget 
+@@ -56,6 +57,7 @@ X86FrameLowering::X86FrameLowering(const X86Subtarget 
    // standard x86_64 and NaCl use 64-bit frame/stack pointers, x32 - 32-bit.
    Uses64BitFramePtr = STI.isTarget64BitLP64() || STI.isTargetNaCl64();
    StackPtr = TRI->getStackRegister();
@@ -46,17 +26,17 @@ Index: lib/Target/X86/X86FrameLowering.cpp
  }
  
  bool X86FrameLowering::hasReservedCallFrame(const MachineFunction &MF) const {
-@@ -99,7 +101,8 @@ bool X86FrameLowering::hasFP(const MachineFunction &MF
+@@ -101,7 +103,8 @@ bool X86FrameLowering::hasFP(const MachineFunction &MF
            MF.getInfo<X86MachineFunctionInfo>()->hasPreallocatedCall() ||
            MF.callsUnwindInit() || MF.hasEHFunclets() || MF.callsEHReturn() ||
            MFI.hasStackMap() || MFI.hasPatchPoint() ||
--          MFI.hasCopyImplyingStackAdjustment());
-+          MFI.hasCopyImplyingStackAdjustment() ||
+-          (isWin64Prologue(MF) && MFI.hasCopyImplyingStackAdjustment()));
++          (isWin64Prologue(MF) && MFI.hasCopyImplyingStackAdjustment()) ||
 +          SaveArgs);
  }
  
  static unsigned getSUBriOpcode(bool IsLP64, int64_t Imm) {
-@@ -1213,6 +1216,24 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasic
+@@ -1367,6 +1370,24 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasic
    }
  }
  
@@ -81,7 +61,7 @@ Index: lib/Target/X86/X86FrameLowering.cpp
  bool X86FrameLowering::has128ByteRedZone(const MachineFunction& MF) const {
    // x86-64 (non Win64) has a 128 byte red zone which is guaranteed not to be
    // clobbered by any interrupt handler.
-@@ -1537,6 +1558,43 @@ void X86FrameLowering::emitPrologue(MachineFunction &M
+@@ -1730,6 +1751,43 @@ void X86FrameLowering::emitPrologue(MachineFunction &M
                .addReg(StackPtr)
                .setMIFlag(MachineInstr::FrameSetup);
  
@@ -125,7 +105,7 @@ Index: lib/Target/X86/X86FrameLowering.cpp
          if (NeedsDwarfCFI) {
            // Mark effective beginning of when frame pointer becomes valid.
            // Define the current CFA to use the EBP/RBP register.
-@@ -2047,10 +2105,17 @@ void X86FrameLowering::emitEpilogue(MachineFunction &M
+@@ -2235,10 +2293,17 @@ void X86FrameLowering::emitEpilogue(MachineFunction &M
        int Offset = 16 + mergeSPUpdates(MBB, MBBI, true);
        emitSPUpdate(MBB, MBBI, DL, Offset, /*InEpilogue*/true);
      }
@@ -145,7 +125,7 @@ Index: lib/Target/X86/X86FrameLowering.cpp
  
      // We need to reset FP to its untagged state on return. Bit 60 is currently
      // used to show the presence of an extended frame.
-@@ -2087,6 +2152,7 @@ void X86FrameLowering::emitEpilogue(MachineFunction &M
+@@ -2277,6 +2342,7 @@ void X86FrameLowering::emitEpilogue(MachineFunction &M
      if (Opc != X86::DBG_VALUE && !PI->isTerminator()) {
        if ((Opc != X86::POP32r || !PI->getFlag(MachineInstr::FrameDestroy)) &&
            (Opc != X86::POP64r || !PI->getFlag(MachineInstr::FrameDestroy)) &&
@@ -153,16 +133,17 @@ Index: lib/Target/X86/X86FrameLowering.cpp
            (Opc != X86::BTR64ri8 || !PI->getFlag(MachineInstr::FrameDestroy)) &&
            (Opc != X86::ADD64ri8 || !PI->getFlag(MachineInstr::FrameDestroy)))
          break;
-@@ -2266,6 +2332,8 @@ StackOffset X86FrameLowering::getFrameIndexReference(c
+@@ -2451,6 +2517,9 @@ StackOffset X86FrameLowering::getFrameIndexReference(c
             "FPDelta isn't aligned per the Win64 ABI!");
    }
  
 +  if (FI >= 0)
 +    Offset -= X86FI->getSaveArgSize();
- 
-   if (TRI->hasBasePointer(MF)) {
-     assert(HasFP && "VLAs and dynamic stack realign, but no FP?!");
-@@ -3699,6 +3767,10 @@ void X86FrameLowering::adjustFrameForMsvcCxxEh(Machine
++
+   if (FrameReg == TRI->getFramePtr()) {
+     // Skip saved EBP/RBP
+     Offset += SlotSize;
+@@ -3870,6 +3939,10 @@ void X86FrameLowering::adjustFrameForMsvcCxxEh(Machine
    addFrameReference(BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64mi32)),
                      UnwindHelpFI)
        .addImm(-2);
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_h
new file mode 100644
index 00000000000..8c327c10fd0
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86FrameLowering_h
@@ -0,0 +1,39 @@
+Index: llvm/lib/Target/X86/X86FrameLowering.h
+--- llvm/lib/Target/X86/X86FrameLowering.h.orig
++++ llvm/lib/Target/X86/X86FrameLowering.h
+@@ -13,6 +13,7 @@
+ #ifndef LLVM_LIB_TARGET_X86_X86FRAMELOWERING_H
+ #define LLVM_LIB_TARGET_X86_X86FRAMELOWERING_H
+ 
++#include "X86ReturnProtectorLowering.h"
+ #include "llvm/CodeGen/MachineFunction.h"
+ #include "llvm/CodeGen/TargetFrameLowering.h"
+ #include "llvm/Support/TypeSize.h"
+@@ -24,6 +25,7 @@ class MCCFIInstruction;
+ class X86InstrInfo;
+ class X86Subtarget;
+ class X86RegisterInfo;
++class X86ReturnProtectorLowering;
+ 
+ class X86FrameLowering : public TargetFrameLowering {
+ public:
+@@ -34,7 +36,10 @@ class X86FrameLowering : public TargetFrameLowering { 
+   const X86Subtarget &STI;
+   const X86InstrInfo &TII;
+   const X86RegisterInfo *TRI;
++  const X86ReturnProtectorLowering RPL;
+ 
++  bool SaveArgs;
++
+   unsigned SlotSize;
+ 
+   /// Is64Bit implies that x86_64 instructions are available.
+@@ -77,6 +82,8 @@ class X86FrameLowering : public TargetFrameLowering { 
+   /// the function.
+   void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
+   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
++
++  const ReturnProtectorLowering *getReturnProtector() const override;
+ 
+   void adjustForSegmentedStacks(MachineFunction &MF,
+                                 MachineBasicBlock &PrologueMBB) const override;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86IndirectThunks_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86IndirectThunks_cpp
similarity index 50%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86IndirectThunks_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86IndirectThunks_cpp
index dcc7f5d2b68..c332b28d202 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86IndirectThunks_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86IndirectThunks_cpp
@@ -1,9 +1,7 @@
-Add lfence after ret in retpoline thunk.
-
-Index: lib/Target/X86/X86IndirectThunks.cpp
---- lib/Target/X86/X86IndirectThunks.cpp.orig
-+++ lib/Target/X86/X86IndirectThunks.cpp
-@@ -249,6 +249,7 @@ void RetpolineThunkInserter::populateThunk(MachineFunc
+Index: llvm/lib/Target/X86/X86IndirectThunks.cpp
+--- llvm/lib/Target/X86/X86IndirectThunks.cpp.orig
++++ llvm/lib/Target/X86/X86IndirectThunks.cpp
+@@ -257,6 +257,7 @@ void RetpolineThunkInserter::populateThunk(MachineFunc
  
    CallTarget->back().setPreInstrSymbol(MF, TargetSym);
    BuildMI(CallTarget, DebugLoc(), TII->get(RetOpc));
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86InstrCompiler_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86InstrCompiler_td
new file mode 100644
index 00000000000..bc655ed51b1
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86InstrCompiler_td
@@ -0,0 +1,29 @@
+Index: llvm/lib/Target/X86/X86InstrCompiler.td
+--- llvm/lib/Target/X86/X86InstrCompiler.td.orig
++++ llvm/lib/Target/X86/X86InstrCompiler.td
+@@ -293,6 +293,25 @@ def MORESTACK_RET_RESTORE_R10 : I<0, Pseudo, (outs), (
+ }
+ 
+ //===----------------------------------------------------------------------===//
++// Pseudo instruction used by retguard
++
++// This is lowered to a JE 2; INT3; INT3. Prior to this pseudo should be a
++// compare instruction to ensure the retguard cookie is correct.
++// We use a pseudo here in order to avoid splitting the BB just before the return.
++// Splitting the BB and inserting a JE_1 over a new INT3 BB occasionally
++// resulted in incorrect code when a value from a byte register (CL) was
++// used as a return value. When emitted as a split BB, the single byte
++// register would sometimes be widened to 4 bytes, which would corrupt
++// the return value (ie mov %ecx, %eax instead of mov %cl, %al).
++let isCodeGenOnly = 1, hasNoSchedulingInfo = 1, Uses = [EFLAGS] in {
++def RETGUARD_JMP_TRAP: I<0, Pseudo, (outs), (ins), "", []>;
++}
++
++let isCodeGenOnly = 1, hasNoSchedulingInfo = 1 in {
++def JMP_TRAP: I<0, Pseudo, (outs), (ins), "", []>;
++}
++
++//===----------------------------------------------------------------------===//
+ // Alias Instructions
+ //===----------------------------------------------------------------------===//
+ 
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MCInstLower_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MCInstLower_cpp
similarity index 54%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MCInstLower_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MCInstLower_cpp
index 3dc46f2eca5..2f765f48743 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MCInstLower_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MCInstLower_cpp
@@ -1,29 +1,7 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Use int3 trap padding between functions instead of trapsleds with a leading jump.
-- Emit variable length trap padding in retguard epilogue.
-  This adds more trap padding before the return while ensuring that the
-  return is still in the same cache line.
-
-Index: lib/Target/X86/X86MCInstLower.cpp
---- lib/Target/X86/X86MCInstLower.cpp.orig
-+++ lib/Target/X86/X86MCInstLower.cpp
-@@ -2570,6 +2570,50 @@ void X86AsmPrinter::emitInstruction(const MachineInstr
+Index: llvm/lib/Target/X86/X86MCInstLower.cpp
+--- llvm/lib/Target/X86/X86MCInstLower.cpp.orig
++++ llvm/lib/Target/X86/X86MCInstLower.cpp
+@@ -2694,6 +2694,50 @@ void X86AsmPrinter::emitInstruction(const MachineInstr
          MCInstBuilder(X86::MOV64rr).addReg(X86::R10).addReg(X86::RAX));
      return;
  
@@ -66,7 +44,7 @@ Index: lib/Target/X86/X86MCInstLower.cpp
 +    EmitAndCountInstruction(MCInstBuilder(X86::JMP_1).addExpr(RGSuccExpr));
 +    EmitAndCountInstruction(MCInstBuilder(X86::INT3));
 +    EmitAndCountInstruction(MCInstBuilder(X86::INT3));
-+    OutStreamer->emitValueToAlignment(8, 0xCC, 1);
++    OutStreamer->emitValueToAlignment(Align(8), 0xCC, 1);
 +    OutStreamer->emitLabel(RGSuccSym);
 +    return;
 +  }
@@ -74,7 +52,7 @@ Index: lib/Target/X86/X86MCInstLower.cpp
    case X86::SEH_PushReg:
    case X86::SEH_SaveReg:
    case X86::SEH_SaveXMM:
-@@ -2628,4 +2672,10 @@ void X86AsmPrinter::emitInstruction(const MachineInstr
+@@ -2756,4 +2800,10 @@ void X86AsmPrinter::emitInstruction(const MachineInstr
    }
  
    EmitAndCountInstruction(TmpInst);
@@ -83,5 +61,5 @@ Index: lib/Target/X86/X86MCInstLower.cpp
 +/// Emit Trap bytes to the specified power of two alignment
 +void X86AsmPrinter::emitTrapToAlignment(Align Alignment) const {
 +  if (Alignment == Align(1)) return;
-+  OutStreamer->emitValueToAlignment(Alignment.value(), 0xCC, 1);
++  OutStreamer->emitValueToAlignment(Alignment, 0xCC, 1);
  }
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MachineFunctionInfo_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MachineFunctionInfo_h
similarity index 76%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MachineFunctionInfo_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MachineFunctionInfo_h
index c10ecce289d..da1ff2b4232 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86MachineFunctionInfo_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86MachineFunctionInfo_h
@@ -1,8 +1,6 @@
-implement -msave-args in clang/llvm, like the sun did for gcc 
-
-Index: lib/Target/X86/X86MachineFunctionInfo.h
---- lib/Target/X86/X86MachineFunctionInfo.h.orig
-+++ lib/Target/X86/X86MachineFunctionInfo.h
+Index: llvm/lib/Target/X86/X86MachineFunctionInfo.h
+--- llvm/lib/Target/X86/X86MachineFunctionInfo.h.orig
++++ llvm/lib/Target/X86/X86MachineFunctionInfo.h
 @@ -45,6 +45,9 @@ class X86MachineFunctionInfo : public MachineFunctionI
    /// stack frame in bytes.
    unsigned CalleeSavedFrameSize = 0;
@@ -13,7 +11,7 @@ Index: lib/Target/X86/X86MachineFunctionInfo.h
    /// BytesToPopOnReturn - Number of bytes function pops on return (in addition
    /// to the space used by the return address).
    /// Used on windows platform for stdcall & fastcall name decoration
-@@ -145,6 +148,9 @@ class X86MachineFunctionInfo : public MachineFunctionI
+@@ -157,6 +160,9 @@ class X86MachineFunctionInfo : public MachineFunctionI
  
    unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
    void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; }
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86RegisterInfo_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86RegisterInfo_td
new file mode 100644
index 00000000000..00f88ac7dd7
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86RegisterInfo_td
@@ -0,0 +1,23 @@
+Index: llvm/lib/Target/X86/X86RegisterInfo.td
+--- llvm/lib/Target/X86/X86RegisterInfo.td.orig
++++ llvm/lib/Target/X86/X86RegisterInfo.td
+@@ -415,8 +415,8 @@ def GRH16 : RegisterClass<"X86", [i16], 16,
+                                R15WH)>;
+ 
+ def GR32 : RegisterClass<"X86", [i32], 32,
+-                         (add EAX, ECX, EDX, ESI, EDI, EBX, EBP, ESP,
+-                              R8D, R9D, R10D, R11D, R14D, R15D, R12D, R13D)>;
++                         (add EAX, ECX, EDX, ESI, EDI,
++                              R8D, R9D, R10D, R11D, R14D, R15D, R12D, R13D, EBX, EBP, ESP)>;
+ 
+ // GR64 - 64-bit GPRs. This oddly includes RIP, which isn't accurate, since
+ // RIP isn't really a register and it can't be used anywhere except in an
+@@ -425,7 +425,7 @@ def GR32 : RegisterClass<"X86", [i32], 32,
+ // tests because of the inclusion of RIP in this register class.
+ def GR64 : RegisterClass<"X86", [i64], 64,
+                          (add RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11,
+-                              RBX, R14, R15, R12, R13, RBP, RSP, RIP)>;
++                              R14, R15, R12, R13, RBX, RBP, RSP, RIP)>;
+ 
+ // GR64PLTSafe - 64-bit GPRs without R10, R11, RSP and RIP. Could be used when
+ // emitting code for intrinsics, which use implict input registers.
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_cpp
similarity index 83%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_cpp
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_cpp
index 0092d6dd35a..edc60a980bd 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_cpp
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_cpp
@@ -1,11 +1,6 @@
-- Refactor retguard to make adding additional arches easier.
-- Do not store the retguard cookie in frame in leaf functions if possible.
-  Makes things slightly faster and also improves security in these functions,
-  since the retguard cookie can't leak via the stack.
-
-Index: lib/Target/X86/X86ReturnProtectorLowering.cpp
---- lib/Target/X86/X86ReturnProtectorLowering.cpp.orig
-+++ lib/Target/X86/X86ReturnProtectorLowering.cpp
+Index: llvm/lib/Target/X86/X86ReturnProtectorLowering.cpp
+--- llvm/lib/Target/X86/X86ReturnProtectorLowering.cpp.orig
++++ llvm/lib/Target/X86/X86ReturnProtectorLowering.cpp
 @@ -0,0 +1,121 @@
 +//===-- X86ReturnProtectorLowering.cpp - ----------------------------------===//
 +//
@@ -80,18 +75,18 @@ Index: lib/Target/X86/X86ReturnProtectorLowering.cpp
 +bool X86ReturnProtectorLowering::opcodeIsReturn(unsigned opcode) const {
 +  switch (opcode) {
 +  case X86::RET:
-+  case X86::RETL:
-+  case X86::RETQ:
-+  case X86::RETW:
-+  case X86::RETIL:
-+  case X86::RETIQ:
-+  case X86::RETIW:
-+  case X86::LRETL:
-+  case X86::LRETQ:
-+  case X86::LRETW:
-+  case X86::LRETIL:
-+  case X86::LRETIQ:
-+  case X86::LRETIW:
++  case X86::RET16:
++  case X86::RET32:
++  case X86::RET64:
++  case X86::RETI16:
++  case X86::RETI32:
++  case X86::RETI64:
++  case X86::LRET16:
++  case X86::LRET32:
++  case X86::LRET64:
++  case X86::LRETI16:
++  case X86::LRETI32:
++  case X86::LRETI64:
 +    return true;
 +  default:
 +    return false;
diff --git a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_h
similarity index 89%
rename from devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_h
rename to devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_h
index 9edf24374d1..897b51b6e78 100644
--- a/devel/clang-tools-extra/patches/patch-lib_Target_X86_X86ReturnProtectorLowering_h
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86ReturnProtectorLowering_h
@@ -1,8 +1,6 @@
-Refactor retguard to make adding additional arches easier.
-
-Index: lib/Target/X86/X86ReturnProtectorLowering.h
---- lib/Target/X86/X86ReturnProtectorLowering.h.orig
-+++ lib/Target/X86/X86ReturnProtectorLowering.h
+Index: llvm/lib/Target/X86/X86ReturnProtectorLowering.h
+--- llvm/lib/Target/X86/X86ReturnProtectorLowering.h.orig
++++ llvm/lib/Target/X86/X86ReturnProtectorLowering.h
 @@ -0,0 +1,45 @@
 +//===-- X86ReturnProtectorLowering.h - ------------------------- -*- C++ -*-==//
 +//
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86Subtarget_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86Subtarget_h
new file mode 100644
index 00000000000..f9a6cfdae6c
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86Subtarget_h
@@ -0,0 +1,20 @@
+Index: llvm/lib/Target/X86/X86Subtarget.h
+--- llvm/lib/Target/X86/X86Subtarget.h.orig
++++ llvm/lib/Target/X86/X86Subtarget.h
+@@ -139,6 +139,8 @@ class X86Subtarget final : public X86GenSubtargetInfo 
+     return &getInstrInfo()->getRegisterInfo();
+   }
+ 
++  bool getSaveArgs() const { return SaveArgs; }
++
+   unsigned getTileConfigSize() const { return 64; }
+   Align getTileConfigAlignment() const { return TileConfigAlignment; }
+ 
+@@ -279,6 +281,7 @@ class X86Subtarget final : public X86GenSubtargetInfo 
+ 
+   bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
+   bool isTargetFreeBSD() const { return TargetTriple.isOSFreeBSD(); }
++  bool isTargetOpenBSD() const { return TargetTriple.isOSOpenBSD(); }
+   bool isTargetDragonFly() const { return TargetTriple.isOSDragonFly(); }
+   bool isTargetSolaris() const { return TargetTriple.isOSSolaris(); }
+   bool isTargetPS() const { return TargetTriple.isPS(); }
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86TargetMachine_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86TargetMachine_cpp
new file mode 100644
index 00000000000..2a85bd3ac5e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86TargetMachine_cpp
@@ -0,0 +1,11 @@
+Index: llvm/lib/Target/X86/X86TargetMachine.cpp
+--- llvm/lib/Target/X86/X86TargetMachine.cpp.orig
++++ llvm/lib/Target/X86/X86TargetMachine.cpp
+@@ -575,6 +575,7 @@ void X86PassConfig::addPreEmitPass() {
+   addPass(createX86EvexToVexInsts());
+   addPass(createX86DiscriminateMemOpsPass());
+   addPass(createX86InsertPrefetchPass());
++  addPass(createX86FixupGadgetsPass());
+   addPass(createX86InsertX87waitPass());
+ }
+ 
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_h b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_h
new file mode 100644
index 00000000000..cdd86ad7915
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_h
@@ -0,0 +1,14 @@
+Index: llvm/lib/Target/X86/X86.h
+--- llvm/lib/Target/X86/X86.h.orig
++++ llvm/lib/Target/X86/X86.h
+@@ -128,6 +128,10 @@ FunctionPass *createX86FixupBWInsts();
+ /// to another, when profitable.
+ FunctionPass *createX86DomainReassignmentPass();
+ 
++/// Return a Machine Function pass that attempts to replace
++/// ROP friendly instructions with alternatives.
++FunctionPass *createX86FixupGadgetsPass();
++
+ /// This pass replaces EVEX encoded of AVX-512 instructiosn by VEX
+ /// encoding when possible in order to reduce code size.
+ FunctionPass *createX86EvexToVexInsts();
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_td b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_td
new file mode 100644
index 00000000000..f195282aa54
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Target_X86_X86_td
@@ -0,0 +1,14 @@
+Index: llvm/lib/Target/X86/X86.td
+--- llvm/lib/Target/X86/X86.td.orig
++++ llvm/lib/Target/X86/X86.td
+@@ -491,6 +491,10 @@ def TuningLZCNTFalseDeps : SubtargetFeature<"false-dep
+                                      "HasLZCNTFalseDeps", "true",
+                                      "LZCNT/TZCNT have a false dependency on dest register">;
+ 
++def FeatureSaveArgs
++    : SubtargetFeature<"save-args", "SaveArgs", "true",
++                       "Save register arguments on the stack.">;
++
+ def TuningMULCFalseDeps : SubtargetFeature<"false-deps-mulc",
+                                "HasMULCFalseDeps", "true",
+                                "VF[C]MULCPH/SH has a false dependency on dest register">;
diff --git a/devel/clang-tools-extra/patches/patch-llvm_lib_Transforms_Scalar_LoopIdiomRecognize_cpp b/devel/clang-tools-extra/patches/patch-llvm_lib_Transforms_Scalar_LoopIdiomRecognize_cpp
new file mode 100644
index 00000000000..d7a6541283e
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_lib_Transforms_Scalar_LoopIdiomRecognize_cpp
@@ -0,0 +1,12 @@
+Index: llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
+--- llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp.orig
++++ llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
+@@ -366,6 +366,8 @@ bool LoopIdiomRecognize::runOnLoop(Loop *L) {
+   StringRef Name = L->getHeader()->getParent()->getName();
+   if (Name == "memset" || Name == "memcpy")
+     return false;
++  if (Name == "_libc_memset" || Name == "_libc_memcpy")
++    return false;
+ 
+   // Determine if code size heuristics need to be applied.
+   ApplyCodeSizeHeuristics =
diff --git a/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-ar_llvm-ar_cpp b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-ar_llvm-ar_cpp
new file mode 100644
index 00000000000..dc746e04e39
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-ar_llvm-ar_cpp
@@ -0,0 +1,17 @@
+Index: llvm/tools/llvm-ar/llvm-ar.cpp
+--- llvm/tools/llvm-ar/llvm-ar.cpp.orig
++++ llvm/tools/llvm-ar/llvm-ar.cpp
+@@ -1432,8 +1432,12 @@ static int ranlib_main(int argc, char **argv) {
+         } else if (arg.front() == 'v') {
+           cl::PrintVersionMessage();
+           return 0;
++        } else if (arg.front() == 't') {
++          // GNU ranlib also supports a -t flag, but does nothing
++          // because it just returns true without touching the
++          // timestamp, so simulate the same behaviour.
++          return 0;
+         } else {
+-          // TODO: GNU ranlib also supports a -t flag
+           fail("Invalid option: '-" + arg + "'");
+         }
+         arg = arg.drop_front(1);
diff --git a/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-config_llvm-config_cpp b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-config_llvm-config_cpp
new file mode 100644
index 00000000000..667cf8a9af8
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-config_llvm-config_cpp
@@ -0,0 +1,39 @@
+Index: llvm/tools/llvm-config/llvm-config.cpp
+--- llvm/tools/llvm-config/llvm-config.cpp.orig
++++ llvm/tools/llvm-config/llvm-config.cpp
+@@ -412,6 +412,12 @@ int main(int argc, char **argv) {
+     StaticExt = "a";
+     StaticDir = SharedDir = ActiveLibDir;
+     StaticPrefix = SharedPrefix = "lib";
++  } else if (HostTriple.isOSOpenBSD()) {
++    SharedExt = "so";
++    SharedVersionedExt = ".so" ;
++    StaticExt = "a";
++    StaticDir = SharedDir = ActiveLibDir;
++    StaticPrefix = SharedPrefix = "lib";
+   } else {
+     // default to the unix values:
+     SharedExt = "so";
+@@ -428,7 +434,7 @@ int main(int argc, char **argv) {
+ 
+   bool DyLibExists = false;
+   const std::string DyLibName =
+-      (SharedPrefix + "LLVM-" + SharedVersionedExt).str();
++      (SharedPrefix + "LLVM" + SharedVersionedExt).str();
+ 
+   // If LLVM_LINK_DYLIB is ON, the single shared library will be returned
+   // for "--libs", etc, if they exist. This behaviour can be overridden with
+@@ -440,7 +446,12 @@ int main(int argc, char **argv) {
+     if (DirSep == "\\") {
+       std::replace(path.begin(), path.end(), '/', '\\');
+     }
+-    DyLibExists = sys::fs::exists(path);
++    // path does not include major.minor
++    if (HostTriple.isOSOpenBSD()) {
++      DyLibExists = true;
++    } else {
++      DyLibExists = sys::fs::exists(path);
++    }
+     if (!DyLibExists) {
+       // The shared library does not exist: don't error unless the user
+       // explicitly passes --link-shared.
diff --git a/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-objdump_ELFDump_cpp b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-objdump_ELFDump_cpp
new file mode 100644
index 00000000000..82c0e0204c8
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-objdump_ELFDump_cpp
@@ -0,0 +1,18 @@
+Index: llvm/tools/llvm-objdump/ELFDump.cpp
+--- llvm/tools/llvm-objdump/ELFDump.cpp.orig
++++ llvm/tools/llvm-objdump/ELFDump.cpp
+@@ -253,8 +253,14 @@ static void printProgramHeaders(const ELFFile<ELFT> &O
+     case ELF::PT_OPENBSD_MUTABLE:
+       outs() << "OPENBSD_MUTABLE ";
+       break;
++    case ELF::PT_OPENBSD_NOBTCFI:
++      outs() << "OPENBSD_NOBTCFI ";
++      break;
+     case ELF::PT_OPENBSD_RANDOMIZE:
+       outs() << "OPENBSD_RANDOMIZE ";
++      break;
++    case ELF::PT_OPENBSD_SYSCALLS:
++      outs() << "OPENBSD_SYSCALLS ";
+       break;
+     case ELF::PT_OPENBSD_WXNEEDED:
+       outs() << "OPENBSD_WXNEEDED ";
diff --git a/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-readobj_ELFDumper_cpp b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-readobj_ELFDumper_cpp
new file mode 100644
index 00000000000..fcd76f0302c
--- /dev/null
+++ b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-readobj_ELFDumper_cpp
@@ -0,0 +1,13 @@
+Index: llvm/tools/llvm-readobj/ELFDumper.cpp
+--- llvm/tools/llvm-readobj/ELFDumper.cpp.orig
++++ llvm/tools/llvm-readobj/ELFDumper.cpp
+@@ -1411,7 +1411,9 @@ static StringRef segmentTypeToString(unsigned Arch, un
+ 
+     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_MUTABLE);
+     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_RANDOMIZE);
++    LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_SYSCALLS);
+     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_WXNEEDED);
++    LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_NOBTCFI);
+     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_BOOTDATA);
+   default:
+     return "";
diff --git a/devel/clang-tools-extra/patches/patch-tools_llvm-shlib_CMakeLists_txt b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-shlib_CMakeLists_txt
similarity index 76%
rename from devel/clang-tools-extra/patches/patch-tools_llvm-shlib_CMakeLists_txt
rename to devel/clang-tools-extra/patches/patch-llvm_tools_llvm-shlib_CMakeLists_txt
index 728af5802b6..7b2eeca5abd 100644
--- a/devel/clang-tools-extra/patches/patch-tools_llvm-shlib_CMakeLists_txt
+++ b/devel/clang-tools-extra/patches/patch-llvm_tools_llvm-shlib_CMakeLists_txt
@@ -1,9 +1,9 @@
 -Bsymbolic-functions is not supported by our ld.bfd version.
 
-Index: tools/llvm-shlib/CMakeLists.txt
---- tools/llvm-shlib/CMakeLists.txt.orig
-+++ tools/llvm-shlib/CMakeLists.txt
-@@ -50,7 +50,7 @@ if(LLVM_BUILD_LLVM_DYLIB)
+Index: llvm/tools/llvm-shlib/CMakeLists.txt
+--- llvm/tools/llvm-shlib/CMakeLists.txt.orig
++++ llvm/tools/llvm-shlib/CMakeLists.txt
+@@ -51,7 +51,7 @@ if(LLVM_BUILD_LLVM_DYLIB)
        # Solaris ld does not accept global: *; so there is no way to version *all* global symbols
        set(LIB_NAMES -Wl,--version-script,${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map ${LIB_NAMES})
      endif()
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_CodeGenOptions_def b/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_CodeGenOptions_def
deleted file mode 100644
index ddd3d24b119..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_CodeGenOptions_def
+++ /dev/null
@@ -1,32 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-- Disable strict floating point if not X86.
-
-Index: tools/clang/include/clang/Basic/CodeGenOptions.def
---- tools/clang/include/clang/Basic/CodeGenOptions.def.orig
-+++ tools/clang/include/clang/Basic/CodeGenOptions.def
-@@ -340,6 +340,9 @@ VALUE_CODEGENOPT(SmallDataLimit, 32, 0)
- /// The lower bound for a buffer to be considered for stack protection.
- VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
- 
-+/// Whether to use return protectors
-+CODEGENOPT(ReturnProtector, 1, 0)
-+
- /// The kind of generated debug info.
- ENUM_CODEGENOPT(DebugInfo, codegenoptions::DebugInfoKind, 4, codegenoptions::NoDebugInfo)
- 
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_DiagnosticSemaKinds_td b/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_DiagnosticSemaKinds_td
deleted file mode 100644
index effb07ea0b6..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Basic_DiagnosticSemaKinds_td
+++ /dev/null
@@ -1,72 +0,0 @@
-- Disable -Waddress-of-packed-member by default.
-
-While these warnings have the potential to be useful, there are too many
-false positives right now.
-
-- Disable -Wpointer-sign warnings per default
-
-base gcc does the same.
-
-- Add a new warning for %n format specifier usage in printf(3) family functions
-
-- allow out-of-class defaulting of comparison operators
-  this is backport of the following upstream commit:
-  commit 5fbe21a7748f91adbd1b16c95bbfe180642320a3
-
-Index: tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
---- tools/clang/include/clang/Basic/DiagnosticSemaKinds.td.orig
-+++ tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
-@@ -6768,7 +6768,7 @@ def warn_pointer_indirection_from_incompatible_type : 
-   InGroup<UndefinedReinterpretCast>, DefaultIgnore;
- def warn_taking_address_of_packed_member : Warning<
-   "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value">,
--  InGroup<DiagGroup<"address-of-packed-member">>;
-+  InGroup<DiagGroup<"address-of-packed-member">>, DefaultIgnore;
- def warn_param_mismatched_alignment : Warning<
-   "passing %0-byte aligned argument to %1-byte aligned parameter %2 of %3 may result in an unaligned pointer access">,
-   InGroup<DiagGroup<"align-mismatch">>;
-@@ -7980,7 +7980,7 @@ def ext_typecheck_convert_incompatible_pointer_sign : 
-   "|%diff{casting $ to type $|casting between types}0,1}2"
-   " converts between pointers to integer types %select{with different sign|"
-   "where one is of the unique plain 'char' type and the other is not}3">,
--  InGroup<DiagGroup<"pointer-sign">>;
-+  InGroup<DiagGroup<"pointer-sign">>, DefaultIgnore;
- def err_typecheck_convert_incompatible_pointer_sign :
-   Error<ext_typecheck_convert_incompatible_pointer_sign.Text>;
- def ext_typecheck_convert_incompatible_pointer : ExtWarn<
-@@ -9100,15 +9100,22 @@ def warn_cxx17_compat_defaulted_comparison : Warning<
-   "before C++20">, InGroup<CXXPre20Compat>, DefaultIgnore;
- def err_defaulted_comparison_template : Error<
-   "comparison operator template cannot be defaulted">;
--def err_defaulted_comparison_out_of_class : Error<
--  "%sub{select_defaulted_comparison_kind}0 can only be defaulted in a class "
--  "definition">;
-+def err_defaulted_comparison_num_args : Error<
-+  "%select{non-member|member}0 %sub{select_defaulted_comparison_kind}1"
-+  " comparison operator must have %select{2|1}0 parameters">;
- def err_defaulted_comparison_param : Error<
-   "invalid parameter type for defaulted %sub{select_defaulted_comparison_kind}0"
-   "; found %1, expected %2%select{| or %4}3">;
-+def err_defaulted_comparison_param_unknown : Error<
-+  "invalid parameter type for non-member defaulted"
-+  " %sub{select_defaulted_comparison_kind}0"
-+  "; found %1, expected class or reference to a constant class">;
- def err_defaulted_comparison_param_mismatch : Error<
-   "parameters for defaulted %sub{select_defaulted_comparison_kind}0 "
-   "must have the same type%diff{ (found $ vs $)|}1,2">;
-+def err_defaulted_comparison_not_friend : Error<
-+  "%sub{select_defaulted_comparison_kind}0 is not a friend of"
-+  " %select{|incomplete class }1%2">;
- def err_defaulted_comparison_non_const : Error<
-   "defaulted member %sub{select_defaulted_comparison_kind}0 must be "
-   "const-qualified">;
-@@ -9512,6 +9519,9 @@ def err_os_log_argument_too_big : Error<
-   "os_log() argument %0 is too big (%1 bytes, max %2)">;
- def warn_os_log_format_narg : Error<
-  "os_log() '%%n' format specifier is not allowed">, DefaultError;
-+
-+def warn_format_narg : Warning<
-+  "'%%n' format specifier support is deactivated and will call abort(3)">;
- 
- // Statements.
- def err_continue_not_in_loop : Error<
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Sema_Sema_h b/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Sema_Sema_h
deleted file mode 100644
index f94d948f9e3..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_include_clang_Sema_Sema_h
+++ /dev/null
@@ -1,13 +0,0 @@
-Teach Clang about syslog format attribute
-
-Index: tools/clang/include/clang/Sema/Sema.h
---- tools/clang/include/clang/Sema/Sema.h.orig
-+++ tools/clang/include/clang/Sema/Sema.h
-@@ -12648,6 +12648,7 @@ class Sema final { (public)
-     FST_FreeBSDKPrintf,
-     FST_OSTrace,
-     FST_OSLog,
-+    FST_Syslog,
-     FST_Unknown
-   };
-   static FormatStringType GetFormatStringType(const FormatAttr *Format);
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_TargetInfo_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_TargetInfo_cpp
deleted file mode 100644
index 17dcb42ea75..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_TargetInfo_cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-- Our malloc(3) guarantees 16-byte alignment.
-
-Index: tools/clang/lib/Basic/TargetInfo.cpp
---- tools/clang/lib/Basic/TargetInfo.cpp.orig
-+++ tools/clang/lib/Basic/TargetInfo.cpp
-@@ -70,7 +70,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Target
-   // the alignment is 16 bytes on both 64-bit and 32-bit systems.
-   if (T.isGNUEnvironment() || T.isWindowsMSVCEnvironment() || T.isAndroid())
-     NewAlign = Triple.isArch64Bit() ? 128 : Triple.isArch32Bit() ? 64 : 0;
--  else if (T.isOSDarwin())
-+  else if (T.isOSDarwin() || T.isOSOpenBSD())
-     NewAlign = 128;
-   else
-     NewAlign = 0; // Infer from basic type alignment.
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_Mips_h b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_Mips_h
deleted file mode 100644
index b69f02f43d4..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_Mips_h
+++ /dev/null
@@ -1,20 +0,0 @@
-- Implement the 'h' register constraint on mips64. This lets clang build
-  pieces of software that use the constraint if the compiler claims
-  to be compatible with GCC 4.2.1.
-  Note that the constraint was removed in GCC 4.4. The reason was that
-  'h' could generate code whose result is unpredictable. The underlying
-  reason is that the HI and LO registers are special, and the optimizer
-  has to be careful when choosing the order of HI/LO accesses. It looks
-  that LLVM has the needed logic.
-
-Index: tools/clang/lib/Basic/Targets/Mips.h
---- tools/clang/lib/Basic/Targets/Mips.h.orig
-+++ tools/clang/lib/Basic/Targets/Mips.h
-@@ -239,6 +239,7 @@ class LLVM_LIBRARY_VISIBILITY MipsTargetInfo : public 
-     case 'y': // Equivalent to "r", backward compatibility only.
-     case 'f': // floating-point registers.
-     case 'c': // $25 for indirect jumps
-+    case 'h': // hi register
-     case 'l': // lo register
-     case 'x': // hilo register pair
-       Info.setAllowsRegister();
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_h b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_h
deleted file mode 100644
index f8d6f71b009..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Basic_Targets_X86_h
+++ /dev/null
@@ -1,13 +0,0 @@
-- implement -msave-args in clang/llvm, like the sun did for gcc.
-
-Index: tools/clang/lib/Basic/Targets/X86.h
---- tools/clang/lib/Basic/Targets/X86.h.orig
-+++ tools/clang/lib/Basic/Targets/X86.h
-@@ -131,6 +131,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public T
-   bool HasMOVDIR64B = false;
-   bool HasPTWRITE = false;
-   bool HasINVPCID = false;
-+  bool HasSaveArgs = false;
-   bool HasENQCMD = false;
-   bool HasKL = false;      // For key locker
-   bool HasWIDEKL = false; // For wide key locker
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CGCall_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CGCall_cpp
deleted file mode 100644
index 8906ccbc2ea..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CGCall_cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-Add RETGUARD to clang for amd64. This security mechanism uses per-function
-random cookies to protect access to function return instructions, with the
-effect that the integrity of the return address is protected, and function
-return instructions are harder to use in ROP gadgets.
-
-On function entry the return address is combined with a per-function random
-cookie and stored in the stack frame. The integrity of this value is verified
-before function return, and if this check fails, the program aborts. In this way
-RETGUARD is an improved stack protector, since the cookies are per-function. The
-verification routine is constructed such that the binary space immediately
-before each ret instruction is padded with int03 instructions, which makes these
-return instructions difficult to use in ROP gadgets. In the kernel, this has the
-effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-essentially gadget free, leaving only the polymorphic gadgets that result from
-jumping into the instruction stream partway through other instructions. Work to
-remove these gadgets will continue through other mechanisms.
-
-Index: tools/clang/lib/CodeGen/CGCall.cpp
---- tools/clang/lib/CodeGen/CGCall.cpp.orig
-+++ tools/clang/lib/CodeGen/CGCall.cpp
-@@ -2215,6 +2215,9 @@ void CodeGenModule::ConstructAttributeList(StringRef N
-     // CPU/feature overrides.  addDefaultFunctionDefinitionAttributes
-     // handles these separately to set them based on the global defaults.
-     GetCPUAndFeaturesAttributes(CalleeInfo.getCalleeDecl(), FuncAttrs);
-+
-+    if (CodeGenOpts.ReturnProtector)
-+      FuncAttrs.addAttribute("ret-protector");
-   }
- 
-   // Collect attributes from arguments and return values.
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CodeGenModule_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CodeGenModule_cpp
deleted file mode 100644
index 321f7c568ec..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_CodeGen_CodeGenModule_cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-- Downgrade riscv64-specific LTO error to a warning
-
-Index: tools/clang/lib/CodeGen/CodeGenModule.cpp
---- tools/clang/lib/CodeGen/CodeGenModule.cpp.orig
-+++ tools/clang/lib/CodeGen/CodeGenModule.cpp
-@@ -846,7 +846,7 @@ void CodeGenModule::EmitBackendOptionsMetadata(
-     break;
-   case llvm::Triple::riscv32:
-   case llvm::Triple::riscv64:
--    getModule().addModuleFlag(llvm::Module::Error, "SmallDataLimit",
-+    getModule().addModuleFlag(llvm::Module::Warning, "SmallDataLimit",
-                               CodeGenOpts.SmallDataLimit);
-     break;
-   }
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_X86_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_X86_cpp
deleted file mode 100644
index 31847371ca9..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Arch_X86_cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-- Turn on -mretpoline by default in clang on amd64.
-
-Index: tools/clang/lib/Driver/ToolChains/Arch/X86.cpp
---- tools/clang/lib/Driver/ToolChains/Arch/X86.cpp.orig
-+++ tools/clang/lib/Driver/ToolChains/Arch/X86.cpp
-@@ -149,6 +149,12 @@ void x86::getX86TargetFeatures(const Driver &D, const 
-   // consider deprecating this and instead warn if the user requests external
-   // retpoline thunks and *doesn't* request some form of retpolines.
-   auto SpectreOpt = clang::driver::options::ID::OPT_INVALID;
-+  if (Triple.isOSOpenBSD() && Triple.getArch() == llvm::Triple::x86_64 &&
-+      Args.hasFlag(options::OPT_mretpoline, options::OPT_mno_retpoline, true)) {
-+      Features.push_back("+retpoline-indirect-calls");
-+      Features.push_back("+retpoline-indirect-branches");
-+      SpectreOpt = options::OPT_mretpoline;
-+  } else
-   if (Args.hasArgNoClaim(options::OPT_mretpoline, options::OPT_mno_retpoline,
-                          options::OPT_mspeculative_load_hardening,
-                          options::OPT_mno_speculative_load_hardening)) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Gnu_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Gnu_cpp
deleted file mode 100644
index 0b6dff053ae..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_Gnu_cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-- Disable IAS for OpenBSD SPARC.
-
-Index: tools/clang/lib/Driver/ToolChains/Gnu.cpp
---- tools/clang/lib/Driver/ToolChains/Gnu.cpp.orig
-+++ tools/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2763,7 +2763,7 @@ bool Generic_GCC::IsIntegratedAssemblerDefault() const
-   case llvm::Triple::sparc:
-   case llvm::Triple::sparcel:
-   case llvm::Triple::sparcv9:
--    if (getTriple().isOSFreeBSD() || getTriple().isOSOpenBSD() ||
-+    if (getTriple().isOSFreeBSD() ||
-         getTriple().isOSSolaris())
-       return true;
-     return false;
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_cpp
deleted file mode 100644
index fd5cccc6503..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-- Add support for building against libestdc++ from ports-gcc.
-- Allow the compiler driver to link the libclang_rt.profile library.
-- Use Component in OpenBSD::getCompilerRT to find libraries.
-- Enable kernel-address sanitizer for clang openbsd target
-
-Index: tools/clang/lib/Driver/ToolChains/OpenBSD.cpp
---- tools/clang/lib/Driver/ToolChains/OpenBSD.cpp.orig
-+++ tools/clang/lib/Driver/ToolChains/OpenBSD.cpp
-@@ -12,10 +12,13 @@
- #include "CommonArgs.h"
- #include "clang/Config/config.h"
- #include "clang/Driver/Compilation.h"
-+#include "clang/Driver/Driver.h"
-+#include "clang/Driver/DriverDiagnostic.h"
- #include "clang/Driver/Options.h"
- #include "clang/Driver/SanitizerArgs.h"
- #include "llvm/Option/ArgList.h"
- #include "llvm/Support/Path.h"
-+#include "llvm/Support/VirtualFileSystem.h"
- 
- using namespace clang::driver;
- using namespace clang::driver::tools;
-@@ -197,7 +200,13 @@ void openbsd::Linker::ConstructJob(Compilation &C, con
-     }
-     // FIXME: For some reason GCC passes -lgcc before adding
-     // the default system libraries. Just mimic this for now.
--    CmdArgs.push_back("-lcompiler_rt");
-+    if (ToolChain.GetCXXStdlibType(Args) == ToolChain::CST_Libcxx)
-+      CmdArgs.push_back("-lcompiler_rt");
-+    else {
-+      CmdArgs.push_back("-L${LOCALBASE}/lib/gcc/${GCC_CONFIG}/${GCC_VER}");
-+      CmdArgs.push_back("-L${LOCALBASE}/lib"); // XXX nasty
-+      CmdArgs.push_back("-lgcc");
-+    }
- 
-     if (Args.hasArg(options::OPT_pthread)) {
-       if (!Args.hasArg(options::OPT_shared) && Args.hasArg(options::OPT_pg))
-@@ -213,7 +222,10 @@ void openbsd::Linker::ConstructJob(Compilation &C, con
-         CmdArgs.push_back("-lc");
-     }
- 
--    CmdArgs.push_back("-lcompiler_rt");
-+    if (ToolChain.GetCXXStdlibType(Args) == ToolChain::CST_Libcxx)
-+      CmdArgs.push_back("-lcompiler_rt");
-+    else
-+      CmdArgs.push_back("-lgcc");
-   }
- 
-   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
-@@ -247,6 +259,10 @@ SanitizerMask OpenBSD::getSupportedSanitizers() const 
-     Res |= SanitizerKind::FuzzerNoLink;
-   }
- 
-+  if (IsX86_64) {
-+    Res |= SanitizerKind::KernelAddress;
-+  }
-+
-   return Res;
- }
- 
-@@ -301,17 +317,34 @@ void OpenBSD::AddCXXStdlibLibArgs(const ArgList &Args,
-                                   ArgStringList &CmdArgs) const {
-   bool Profiling = Args.hasArg(options::OPT_pg);
- 
--  CmdArgs.push_back(Profiling ? "-lc++_p" : "-lc++");
--  CmdArgs.push_back(Profiling ? "-lc++abi_p" : "-lc++abi");
--  CmdArgs.push_back(Profiling ? "-lpthread_p" : "-lpthread");
-+  switch (GetCXXStdlibType(Args)) {
-+  case ToolChain::CST_Libcxx:
-+    CmdArgs.push_back(Profiling ? "-lc++_p" : "-lc++");
-+    CmdArgs.push_back(Profiling ? "-lc++abi_p" : "-lc++abi");
-+    CmdArgs.push_back(Profiling ? "-lpthread_p" : "-lpthread");
-+    break;
-+  case ToolChain::CST_Libstdcxx:
-+    CmdArgs.push_back("-lestdc++");
-+    break;
-+  }
- }
- 
- std::string OpenBSD::getCompilerRT(const ArgList &Args,
-                                    StringRef Component,
-                                    FileType Type) const {
--  SmallString<128> Path(getDriver().SysRoot);
--  llvm::sys::path::append(Path, "/usr/lib/libcompiler_rt.a");
--  return std::string(Path.str());
-+  if (Component == "builtins") {
-+    SmallString<128> Path(getDriver().SysRoot);
-+    llvm::sys::path::append(Path, "/usr/lib/libcompiler_rt.a");
-+    return std::string(Path.str());
-+  } else {
-+    SmallString<128> P(getDriver().ResourceDir);
-+    std::string CRTBasename =
-+        buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false);
-+    llvm::sys::path::append(P, "lib", CRTBasename);
-+    if (getVFS().exists(P))
-+      return std::string(P.str());
-+    return ToolChain::getCompilerRT(Args, Component, Type);
-+  }
- }
- 
- Tool *OpenBSD::buildAssembler() const {
-@@ -321,3 +354,54 @@ Tool *OpenBSD::buildAssembler() const {
- Tool *OpenBSD::buildLinker() const { return new tools::openbsd::Linker(*this); }
- 
- bool OpenBSD::HasNativeLLVMSupport() const { return true; }
-+
-+ToolChain::CXXStdlibType OpenBSD::GetCXXStdlibType(const ArgList &Args) const {
-+  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
-+    StringRef Value = A->getValue();
-+    if (Value == "libstdc++")
-+      return ToolChain::CST_Libstdcxx;
-+    if (Value == "libc++")
-+      return ToolChain::CST_Libcxx;
-+
-+    getDriver().Diag(clang::diag::err_drv_invalid_stdlib_name)
-+        << A->getAsString(Args);
-+  }
-+  switch (getTriple().getArch()) {
-+  case llvm::Triple::aarch64:
-+  case llvm::Triple::arm:
-+  case llvm::Triple::mips64:
-+  case llvm::Triple::mips64el:
-+  case llvm::Triple::ppc:
-+  case llvm::Triple::ppc64:
-+  case llvm::Triple::riscv64:
-+  case llvm::Triple::x86:
-+  case llvm::Triple::x86_64:
-+    return ToolChain::CST_Libcxx;
-+    break;
-+  default:
-+    return ToolChain::CST_Libstdcxx;
-+    break;
-+  }
-+}
-+
-+void OpenBSD::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
-+                                          ArgStringList &CC1Args) const {
-+  if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
-+      DriverArgs.hasArg(options::OPT_nostdincxx))
-+    return;
-+
-+  switch (GetCXXStdlibType(DriverArgs)) {
-+  case ToolChain::CST_Libcxx:
-+    addSystemInclude(DriverArgs, CC1Args,
-+                     getDriver().SysRoot + "/usr/include/c++/v1");
-+    break;
-+  case ToolChain::CST_Libstdcxx:
-+    addSystemInclude(DriverArgs, CC1Args,
-+                     getDriver().SysRoot + "${LOCALBASE}/include/c++/${GCC_VER}");
-+    addSystemInclude(DriverArgs, CC1Args,
-+                     getDriver().SysRoot + "${LOCALBASE}/include/c++/${GCC_VER}/${GCC_CONFIG}");
-+    addSystemInclude(DriverArgs, CC1Args,
-+                     getDriver().SysRoot + "${LOCALBASE}/include/c++/${GCC_VER}/backward");
-+    break;
-+  }
-+}
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_h b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_h
deleted file mode 100644
index 413963e6a9c..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Driver_ToolChains_OpenBSD_h
+++ /dev/null
@@ -1,30 +0,0 @@
-- Add support for building against libestdc++ from ports-gcc.
-- Enable unwind tables on all clang architectures.
-- Arm is not ready for unwinding yet. Disable unwind info generation for now.
-
-Index: tools/clang/lib/Driver/ToolChains/OpenBSD.h
---- tools/clang/lib/Driver/ToolChains/OpenBSD.h.orig
-+++ tools/clang/lib/Driver/ToolChains/OpenBSD.h
-@@ -77,8 +77,22 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic
-   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
-                            llvm::opt::ArgStringList &CmdArgs) const override;
- 
-+  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
-+  void AddClangCXXStdlibIncludeArgs(
-+      const llvm::opt::ArgList &DriverArgs,
-+      llvm::opt::ArgStringList &CC1Args) const override;
-+
-   std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component,
-                             FileType Type = ToolChain::FT_Static) const override;
-+
-+  bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const override {
-+    switch (getArch()) {
-+      case llvm::Triple::arm:
-+        return false;
-+      default:
-+        return true;
-+    }
-+  }
- 
-   LangOptions::StackProtectorMode
-   GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Frontend_CompilerInvocation_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Frontend_CompilerInvocation_cpp
deleted file mode 100644
index c4a2e74ccf2..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Frontend_CompilerInvocation_cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-- Add RETGUARD to clang for amd64. This security mechanism uses per-function
-  random cookies to protect access to function return instructions, with the
-  effect that the integrity of the return address is protected, and function
-  return instructions are harder to use in ROP gadgets.
-
-  On function entry the return address is combined with a per-function random
-  cookie and stored in the stack frame. The integrity of this value is verified
-  before function return, and if this check fails, the program aborts. In this way
-  RETGUARD is an improved stack protector, since the cookies are per-function. The
-  verification routine is constructed such that the binary space immediately
-  before each ret instruction is padded with int03 instructions, which makes these
-  return instructions difficult to use in ROP gadgets. In the kernel, this has the
-  effect of removing approximately 50% of total ROP gadgets, and 15% of unique
-  ROP gadgets compared to the 6.3 release kernel. Function epilogues are
-  essentially gadget free, leaving only the polymorphic gadgets that result from
-  jumping into the instruction stream partway through other instructions. Work to
-  remove these gadgets will continue through other mechanisms.
-
-Index: tools/clang/lib/Frontend/CompilerInvocation.cpp
---- tools/clang/lib/Frontend/CompilerInvocation.cpp.orig
-+++ tools/clang/lib/Frontend/CompilerInvocation.cpp
-@@ -1470,6 +1470,10 @@ void CompilerInvocation::GenerateCodeGenArgs(
-                 F.Filename, SA);
-   }
- 
-+  if (Opts.ReturnProtector) {
-+    GenerateArg(Args, OPT_ret_protector, SA);
-+  }
-+
-   // TODO: Consider removing marshalling annotations from f[no_]emulated_tls.
-   //  That would make it easy to generate the option only **once** if it was
-   //  explicitly set to non-default value.
-@@ -1805,6 +1809,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptio
-     }
-     Opts.LinkBitcodeFiles.push_back(F);
-   }
-+
-+  Opts.ReturnProtector = Args.hasArg(OPT_ret_protector);
- 
-   if (Args.getLastArg(OPT_femulated_tls) ||
-       Args.getLastArg(OPT_fno_emulated_tls)) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclCXX_cpp b/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclCXX_cpp
deleted file mode 100644
index 102fc42f4e6..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_lib_Sema_SemaDeclCXX_cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-- allow out-of-class defaulting of comparison operators
-  this is backport of the following upstream commit:
-  commit 5fbe21a7748f91adbd1b16c95bbfe180642320a3
-
-Index: tools/clang/lib/Sema/SemaDeclCXX.cpp
---- tools/clang/lib/Sema/SemaDeclCXX.cpp.orig
-+++ tools/clang/lib/Sema/SemaDeclCXX.cpp
-@@ -8371,9 +8371,6 @@ bool Sema::CheckExplicitlyDefaultedComparison(Scope *S
-                                               DefaultedComparisonKind DCK) {
-   assert(DCK != DefaultedComparisonKind::None && "not a defaulted comparison");
- 
--  CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext());
--  assert(RD && "defaulted comparison is not defaulted in a class");
--
-   // Perform any unqualified lookups we're going to need to default this
-   // function.
-   if (S) {
-@@ -8391,43 +8388,17 @@ bool Sema::CheckExplicitlyDefaultedComparison(Scope *S
-   //       const C&, or
-   //    -- a friend of C having two parameters of type const C& or two
-   //       parameters of type C.
--  QualType ExpectedParmType1 = Context.getRecordType(RD);
--  QualType ExpectedParmType2 =
--      Context.getLValueReferenceType(ExpectedParmType1.withConst());
--  if (isa<CXXMethodDecl>(FD))
--    ExpectedParmType1 = ExpectedParmType2;
--  for (const ParmVarDecl *Param : FD->parameters()) {
--    if (!Param->getType()->isDependentType() &&
--        !Context.hasSameType(Param->getType(), ExpectedParmType1) &&
--        !Context.hasSameType(Param->getType(), ExpectedParmType2)) {
--      // Don't diagnose an implicit 'operator=='; we will have diagnosed the
--      // corresponding defaulted 'operator<=>' already.
--      if (!FD->isImplicit()) {
--        Diag(FD->getLocation(), diag::err_defaulted_comparison_param)
--            << (int)DCK << Param->getType() << ExpectedParmType1
--            << !isa<CXXMethodDecl>(FD)
--            << ExpectedParmType2 << Param->getSourceRange();
--      }
--      return true;
--    }
--  }
--  if (FD->getNumParams() == 2 &&
--      !Context.hasSameType(FD->getParamDecl(0)->getType(),
--                           FD->getParamDecl(1)->getType())) {
--    if (!FD->isImplicit()) {
--      Diag(FD->getLocation(), diag::err_defaulted_comparison_param_mismatch)
--          << (int)DCK
--          << FD->getParamDecl(0)->getType()
--          << FD->getParamDecl(0)->getSourceRange()
--          << FD->getParamDecl(1)->getType()
--          << FD->getParamDecl(1)->getSourceRange();
--    }
--    return true;
--  }
- 
--  // ... non-static const member ...
--  if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
-+  CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext());
-+  bool IsMethod = isa<CXXMethodDecl>(FD);
-+  if (IsMethod) {
-+    auto *MD = cast<CXXMethodDecl>(FD);
-     assert(!MD->isStatic() && "comparison function cannot be a static member");
-+
-+    // If we're out-of-class, this is the class we're comparing.
-+    if (!RD)
-+      RD = MD->getParent();
-+
-     if (!MD->isConst()) {
-       SourceLocation InsertLoc;
-       if (FunctionTypeLoc Loc = MD->getFunctionTypeLoc())
-@@ -8436,7 +8407,7 @@ bool Sema::CheckExplicitlyDefaultedComparison(Scope *S
-       // corresponding defaulted 'operator<=>' already.
-       if (!MD->isImplicit()) {
-         Diag(MD->getLocation(), diag::err_defaulted_comparison_non_const)
--          << (int)DCK << FixItHint::CreateInsertion(InsertLoc, " const");
-+            << (int)DCK << FixItHint::CreateInsertion(InsertLoc, " const");
-       }
- 
-       // Add the 'const' to the type to recover.
-@@ -8446,9 +8417,100 @@ bool Sema::CheckExplicitlyDefaultedComparison(Scope *S
-       MD->setType(Context.getFunctionType(FPT->getReturnType(),
-                                           FPT->getParamTypes(), EPI));
-     }
--  } else {
--    // A non-member function declared in a class must be a friend.
-+  }
-+
-+  if (FD->getNumParams() != (IsMethod ? 1 : 2)) {
-+    // Let's not worry about using a variadic template pack here -- who would do
-+    // such a thing?
-+    Diag(FD->getLocation(), diag::err_defaulted_comparison_num_args)
-+        << int(IsMethod) << int(DCK);
-+    return true;
-+  }
-+
-+  const ParmVarDecl *KnownParm = nullptr;
-+  for (const ParmVarDecl *Param : FD->parameters()) {
-+    QualType ParmTy = Param->getType();
-+    if (ParmTy->isDependentType())
-+      continue;
-+    if (!KnownParm) {
-+      auto CTy = ParmTy;
-+      // Is it `T const &`?
-+      bool Ok = !IsMethod;
-+      QualType ExpectedTy;
-+      if (RD)
-+        ExpectedTy = Context.getRecordType(RD);
-+      if (auto *Ref = CTy->getAs<ReferenceType>()) {
-+        CTy = Ref->getPointeeType();
-+        if (RD)
-+          ExpectedTy.addConst();
-+        Ok = true;
-+      }
-+
-+      // Is T a class?
-+      if (!Ok) {
-+      } else if (RD) {
-+        if (!RD->isDependentType() && !Context.hasSameType(CTy, ExpectedTy))
-+          Ok = false;
-+      } else if (auto *CRD = CTy->getAsRecordDecl()) {
-+        RD = cast<CXXRecordDecl>(CRD);
-+      } else {
-+        Ok = false;
-+      }
-+
-+      if (Ok) {
-+        KnownParm = Param;
-+      } else {
-+        // Don't diagnose an implicit 'operator=='; we will have diagnosed the
-+        // corresponding defaulted 'operator<=>' already.
-+        if (!FD->isImplicit()) {
-+          if (RD) {
-+            QualType PlainTy = Context.getRecordType(RD);
-+            QualType RefTy =
-+                Context.getLValueReferenceType(PlainTy.withConst());
-+            if (IsMethod)
-+              PlainTy = QualType();
-+            Diag(FD->getLocation(), diag::err_defaulted_comparison_param)
-+                << int(DCK) << ParmTy << RefTy << int(!IsMethod) << PlainTy
-+                << Param->getSourceRange();
-+          } else {
-+            assert(!IsMethod && "should know expected type for method");
-+            Diag(FD->getLocation(),
-+                 diag::err_defaulted_comparison_param_unknown)
-+                << int(DCK) << ParmTy << Param->getSourceRange();
-+          }
-+        }
-+        return true;
-+      }
-+    } else if (!Context.hasSameType(KnownParm->getType(), ParmTy)) {
-+      Diag(FD->getLocation(), diag::err_defaulted_comparison_param_mismatch)
-+          << int(DCK) << KnownParm->getType() << KnownParm->getSourceRange()
-+          << ParmTy << Param->getSourceRange();
-+      return true;
-+    }
-+  }
-+
-+  assert(RD && "must have determined class");
-+  if (IsMethod) {
-+  } else if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
-+    // In-class, must be a friend decl.
-     assert(FD->getFriendObjectKind() && "expected a friend declaration");
-+  } else {
-+    // Out of class, require the defaulted comparison to be a friend (of a
-+    // complete type).
-+    if (RequireCompleteType(FD->getLocation(), Context.getRecordType(RD),
-+                            diag::err_defaulted_comparison_not_friend, int(DCK),
-+                            int(1)))
-+      return true;
-+
-+    if (llvm::find_if(RD->friends(), [&](const FriendDecl *F) {
-+          return FD->getCanonicalDecl() ==
-+                 F->getFriendDecl()->getCanonicalDecl();
-+        }) == RD->friends().end()) {
-+      Diag(FD->getLocation(), diag::err_defaulted_comparison_not_friend)
-+          << int(DCK) << int(0) << RD;
-+      Diag(RD->getCanonicalDecl()->getLocation(), diag::note_declared_at);
-+      return true;
-+    }
-   }
- 
-   // C++2a [class.eq]p1, [class.rel]p1:
-@@ -8606,7 +8668,10 @@ void Sema::DefineDefaultedComparison(SourceLocation Us
- 
-   {
-     // Build and set up the function body.
--    CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getLexicalParent());
-+    // The first parameter has type maybe-ref-to maybe-const T, use that to get
-+    // the type of the class being compared.
-+    auto PT = FD->getParamDecl(0)->getType();
-+    CXXRecordDecl *RD = PT.getNonReferenceType()->getAsCXXRecordDecl();
-     SourceLocation BodyLoc =
-         FD->getEndLoc().isValid() ? FD->getEndLoc() : FD->getLocation();
-     StmtResult Body =
-@@ -17088,13 +17153,6 @@ void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation 
-     return;
-   }
- 
--  if (DefKind.isComparison() &&
--      !isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
--    Diag(FD->getLocation(), diag::err_defaulted_comparison_out_of_class)
--        << (int)DefKind.asComparison();
--    return;
--  }
--
-   // Issue compatibility warning. We already warned if the operator is
-   // 'operator<=>' when parsing the '<=>' token.
-   if (DefKind.isComparison() &&
-@@ -17116,31 +17174,37 @@ void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation 
-   // that we've marked it as defaulted.
-   FD->setWillHaveBody(false);
- 
--  // If this definition appears within the record, do the checking when
--  // the record is complete. This is always the case for a defaulted
--  // comparison.
--  if (DefKind.isComparison())
-+  // If this is a comparison's defaulted definition within the record, do
-+  // the checking when the record is complete.
-+  if (DefKind.isComparison() && isa<CXXRecordDecl>(FD->getLexicalDeclContext()))
-     return;
--  auto *MD = cast<CXXMethodDecl>(FD);
- 
--  const FunctionDecl *Primary = FD;
--  if (const FunctionDecl *Pattern = FD->getTemplateInstantiationPattern())
--    // Ask the template instantiation pattern that actually had the
--    // '= default' on it.
--    Primary = Pattern;
--
--  // If the method was defaulted on its first declaration, we will have
-+  // If this member fn was defaulted on its first declaration, we will have
-   // already performed the checking in CheckCompletedCXXClass. Such a
-   // declaration doesn't trigger an implicit definition.
--  if (Primary->getCanonicalDecl()->isDefaulted())
--    return;
-+  if (isa<CXXMethodDecl>(FD)) {
-+    const FunctionDecl *Primary = FD;
-+    if (const FunctionDecl *Pattern = FD->getTemplateInstantiationPattern())
-+      // Ask the template instantiation pattern that actually had the
-+      // '= default' on it.
-+      Primary = Pattern;
-+    if (Primary->getCanonicalDecl()->isDefaulted())
-+      return;
-+  }
- 
--  // FIXME: Once we support defining comparisons out of class, check for a
--  // defaulted comparison here.
--  if (CheckExplicitlyDefaultedSpecialMember(MD, DefKind.asSpecialMember()))
--    MD->setInvalidDecl();
--  else
--    DefineDefaultedFunction(*this, MD, DefaultLoc);
-+  if (DefKind.isComparison()) {
-+    if (CheckExplicitlyDefaultedComparison(nullptr, FD, DefKind.asComparison()))
-+      FD->setInvalidDecl();
-+    else
-+      DefineDefaultedComparison(DefaultLoc, FD, DefKind.asComparison());
-+  } else {
-+    auto *MD = cast<CXXMethodDecl>(FD);
-+
-+    if (CheckExplicitlyDefaultedSpecialMember(MD, DefKind.asSpecialMember()))
-+      MD->setInvalidDecl();
-+    else
-+      DefineDefaultedFunction(*this, MD, DefaultLoc);
-+  }
- }
- 
- static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer b/devel/clang-tools-extra/patches/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer
deleted file mode 100644
index 7abe17062da..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer
+++ /dev/null
@@ -1,16 +0,0 @@
-Our default compilers are cc/c++.
-
-Index: tools/clang/tools/scan-build/libexec/ccc-analyzer
---- tools/clang/tools/scan-build/libexec/ccc-analyzer.orig
-+++ tools/clang/tools/scan-build/libexec/ccc-analyzer
-@@ -84,8 +84,8 @@ if (`uname -a` =~ m/Darwin/) {
-   $DefaultCCompiler = 'cc';
-   $DefaultCXXCompiler = 'c++';
- } else {
--  $DefaultCCompiler = 'gcc';
--  $DefaultCXXCompiler = 'g++';
-+  $DefaultCCompiler = 'cc';
-+  $DefaultCXXCompiler = 'c++';
- }
- 
- if ($FindBin::Script =~ /c\+\+-analyzer/) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_llvm-ar_llvm-ar_cpp b/devel/clang-tools-extra/patches/patch-tools_llvm-ar_llvm-ar_cpp
deleted file mode 100644
index 96280047558..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_llvm-ar_llvm-ar_cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-- add a dummy -t flag to llvm-ranlib to match binutils' ranlib's -t flag which
-  is a no-op
-- support more than one input file in llvm-ranlib
-
-Index: tools/llvm-ar/llvm-ar.cpp
---- tools/llvm-ar/llvm-ar.cpp.orig
-+++ tools/llvm-ar/llvm-ar.cpp
-@@ -63,9 +63,9 @@ static StringRef Stem;
- 
- const char RanlibHelp[] = R"(OVERVIEW: LLVM Ranlib (llvm-ranlib)
- 
--  This program generates an index to speed access to archives
-+  Generate an index for archives
- 
--USAGE: llvm-ranlib <archive-file>
-+USAGE: llvm-ranlib archive...
- 
- OPTIONS:
-   -h --help             - Display available options
-@@ -1224,7 +1224,7 @@ static int ar_main(int argc, char **argv) {
- }
- 
- static int ranlib_main(int argc, char **argv) {
--  bool ArchiveSpecified = false;
-+  std::vector<StringRef> Archives;
-   for (int i = 1; i < argc; ++i) {
-     StringRef arg(argv[i]);
-     if (handleGenericOption(arg)) {
-@@ -1242,23 +1242,27 @@ static int ranlib_main(int argc, char **argv) {
-         } else if (arg.front() == 'v') {
-           cl::PrintVersionMessage();
-           return 0;
-+        } else if (arg.front() == 't') {
-+          // GNU ranlib also supports a -t flag, but does nothing
-+          // because it just returns true without touching the
-+          // timestamp, so simulate the same behaviour.
-+          return 0;
-         } else {
--          // TODO: GNU ranlib also supports a -t flag
-           fail("Invalid option: '-" + arg + "'");
-         }
-         arg = arg.drop_front(1);
-       }
-     } else {
--      if (ArchiveSpecified)
--        fail("exactly one archive should be specified");
--      ArchiveSpecified = true;
--      ArchiveName = arg.str();
-+      Archives.push_back(arg);
-     }
-   }
--  if (!ArchiveSpecified) {
--    badUsage("an archive name must be specified");
-+  for (StringRef Archive : Archives) {
-+    ArchiveName = Archive.str();
-+    performOperation(CreateSymTab, nullptr);
-   }
--  return performOperation(CreateSymTab, nullptr);
-+  if (Archives.empty())
-+    badUsage("an archive name must be specified");
-+  return 0;
- }
- 
- int main(int argc, char **argv) {
diff --git a/devel/clang-tools-extra/patches/patch-tools_llvm-objdump_ELFDump_cpp b/devel/clang-tools-extra/patches/patch-tools_llvm-objdump_ELFDump_cpp
deleted file mode 100644
index 28dd2e4890e..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_llvm-objdump_ELFDump_cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-- Recognize PT_OPENBSD_MUTABLE with LLVM's readobj / objdump.
-- correct alignment
-- Implement support for PT_OPENBSD_NOBTCFI in lld(1).  This can be set using
-  the -z nobtcfi option.
-
-Index: tools/llvm-objdump/ELFDump.cpp
---- tools/llvm-objdump/ELFDump.cpp.orig
-+++ tools/llvm-objdump/ELFDump.cpp
-@@ -244,13 +244,19 @@ static void printProgramHeaders(const ELFFile<ELFT> &O
-       outs() << "    NOTE ";
-       break;
-     case ELF::PT_OPENBSD_BOOTDATA:
--      outs() << "    OPENBSD_BOOTDATA ";
-+      outs() << "OPENBSD_BOOTDATA ";
-       break;
-+    case ELF::PT_OPENBSD_MUTABLE:
-+      outs() << "OPENBSD_MUTABLE ";
-+      break;
-+    case ELF::PT_OPENBSD_NOBTCFI:
-+      outs() << "OPENBSD_NOBTCFI ";
-+      break;
-     case ELF::PT_OPENBSD_RANDOMIZE:
--      outs() << "    OPENBSD_RANDOMIZE ";
-+      outs() << "OPENBSD_RANDOMIZE ";
-       break;
-     case ELF::PT_OPENBSD_WXNEEDED:
--      outs() << "    OPENBSD_WXNEEDED ";
-+      outs() << "OPENBSD_WXNEEDED ";
-       break;
-     case ELF::PT_PHDR:
-       outs() << "    PHDR ";
diff --git a/devel/clang-tools-extra/patches/patch-tools_llvm-readobj_ELFDumper_cpp b/devel/clang-tools-extra/patches/patch-tools_llvm-readobj_ELFDumper_cpp
deleted file mode 100644
index 29c1bafe575..00000000000
--- a/devel/clang-tools-extra/patches/patch-tools_llvm-readobj_ELFDumper_cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-- Recognize PT_OPENBSD_MUTABLE with LLVM's readobj / objdump.
-- Implement support for PT_OPENBSD_NOBTCFI in lld(1).  This can be set using
-  the -z nobtcfi option.
-
-Index: tools/llvm-readobj/ELFDumper.cpp
---- tools/llvm-readobj/ELFDumper.cpp.orig
-+++ tools/llvm-readobj/ELFDumper.cpp
-@@ -1369,8 +1369,10 @@ static StringRef segmentTypeToString(unsigned Arch, un
-     LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_RELRO);
-     LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_PROPERTY);
- 
-+    LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_MUTABLE);
-     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_RANDOMIZE);
-     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_WXNEEDED);
-+    LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_NOBTCFI);
-     LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_BOOTDATA);
-   default:
-     return "";
diff --git a/devel/clang-tools-extra/pkg/PLIST b/devel/clang-tools-extra/pkg/PLIST
index f06929a09bf..724abf03ecb 100644
--- a/devel/clang-tools-extra/pkg/PLIST
+++ b/devel/clang-tools-extra/pkg/PLIST
@@ -11,397 +11,7 @@
 @bin bin/modularize
 @bin bin/pp-trace
 bin/run-clang-tidy
-include/clang-tidy/
-include/clang-tidy/ClangTidy.h
-include/clang-tidy/ClangTidyCheck.h
-include/clang-tidy/ClangTidyDiagnosticConsumer.h
-include/clang-tidy/ClangTidyForceLinker.h
-include/clang-tidy/ClangTidyModule.h
-include/clang-tidy/ClangTidyModuleRegistry.h
-include/clang-tidy/ClangTidyOptions.h
-include/clang-tidy/ClangTidyProfiling.h
-include/clang-tidy/ExpandModularHeadersPPCallbacks.h
-include/clang-tidy/GlobList.h
-include/clang-tidy/abseil/
-include/clang-tidy/abseil/AbseilMatcher.h
-include/clang-tidy/abseil/DurationAdditionCheck.h
-include/clang-tidy/abseil/DurationComparisonCheck.h
-include/clang-tidy/abseil/DurationConversionCastCheck.h
-include/clang-tidy/abseil/DurationDivisionCheck.h
-include/clang-tidy/abseil/DurationFactoryFloatCheck.h
-include/clang-tidy/abseil/DurationFactoryScaleCheck.h
-include/clang-tidy/abseil/DurationRewriter.h
-include/clang-tidy/abseil/DurationSubtractionCheck.h
-include/clang-tidy/abseil/DurationUnnecessaryConversionCheck.h
-include/clang-tidy/abseil/FasterStrsplitDelimiterCheck.h
-include/clang-tidy/abseil/NoInternalDependenciesCheck.h
-include/clang-tidy/abseil/NoNamespaceCheck.h
-include/clang-tidy/abseil/RedundantStrcatCallsCheck.h
-include/clang-tidy/abseil/StrCatAppendCheck.h
-include/clang-tidy/abseil/StringFindStartswithCheck.h
-include/clang-tidy/abseil/StringFindStrContainsCheck.h
-include/clang-tidy/abseil/TimeComparisonCheck.h
-include/clang-tidy/abseil/TimeSubtractionCheck.h
-include/clang-tidy/abseil/UpgradeDurationConversionsCheck.h
-include/clang-tidy/altera/
-include/clang-tidy/altera/IdDependentBackwardBranchCheck.h
-include/clang-tidy/altera/KernelNameRestrictionCheck.h
-include/clang-tidy/altera/SingleWorkItemBarrierCheck.h
-include/clang-tidy/altera/StructPackAlignCheck.h
-include/clang-tidy/altera/UnrollLoopsCheck.h
-include/clang-tidy/android/
-include/clang-tidy/android/CloexecAccept4Check.h
-include/clang-tidy/android/CloexecAcceptCheck.h
-include/clang-tidy/android/CloexecCheck.h
-include/clang-tidy/android/CloexecCreatCheck.h
-include/clang-tidy/android/CloexecDupCheck.h
-include/clang-tidy/android/CloexecEpollCreate1Check.h
-include/clang-tidy/android/CloexecEpollCreateCheck.h
-include/clang-tidy/android/CloexecFopenCheck.h
-include/clang-tidy/android/CloexecInotifyInit1Check.h
-include/clang-tidy/android/CloexecInotifyInitCheck.h
-include/clang-tidy/android/CloexecMemfdCreateCheck.h
-include/clang-tidy/android/CloexecOpenCheck.h
-include/clang-tidy/android/CloexecPipe2Check.h
-include/clang-tidy/android/CloexecPipeCheck.h
-include/clang-tidy/android/CloexecSocketCheck.h
-include/clang-tidy/android/ComparisonInTempFailureRetryCheck.h
-include/clang-tidy/boost/
-include/clang-tidy/boost/UseToStringCheck.h
-include/clang-tidy/bugprone/
-include/clang-tidy/bugprone/ArgumentCommentCheck.h
-include/clang-tidy/bugprone/AssertSideEffectCheck.h
-include/clang-tidy/bugprone/BadSignalToKillThreadCheck.h
-include/clang-tidy/bugprone/BoolPointerImplicitConversionCheck.h
-include/clang-tidy/bugprone/BranchCloneCheck.h
-include/clang-tidy/bugprone/CopyConstructorInitCheck.h
-include/clang-tidy/bugprone/DanglingHandleCheck.h
-include/clang-tidy/bugprone/DynamicStaticInitializersCheck.h
-include/clang-tidy/bugprone/EasilySwappableParametersCheck.h
-include/clang-tidy/bugprone/ExceptionEscapeCheck.h
-include/clang-tidy/bugprone/FoldInitTypeCheck.h
-include/clang-tidy/bugprone/ForwardDeclarationNamespaceCheck.h
-include/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.h
-include/clang-tidy/bugprone/ImplicitWideningOfMultiplicationResultCheck.h
-include/clang-tidy/bugprone/InaccurateEraseCheck.h
-include/clang-tidy/bugprone/IncorrectRoundingsCheck.h
-include/clang-tidy/bugprone/InfiniteLoopCheck.h
-include/clang-tidy/bugprone/IntegerDivisionCheck.h
-include/clang-tidy/bugprone/LambdaFunctionNameCheck.h
-include/clang-tidy/bugprone/MacroParenthesesCheck.h
-include/clang-tidy/bugprone/MacroRepeatedSideEffectsCheck.h
-include/clang-tidy/bugprone/MisplacedOperatorInStrlenInAllocCheck.h
-include/clang-tidy/bugprone/MisplacedPointerArithmeticInAllocCheck.h
-include/clang-tidy/bugprone/MisplacedWideningCastCheck.h
-include/clang-tidy/bugprone/MoveForwardingReferenceCheck.h
-include/clang-tidy/bugprone/MultipleStatementMacroCheck.h
-include/clang-tidy/bugprone/NoEscapeCheck.h
-include/clang-tidy/bugprone/NotNullTerminatedResultCheck.h
-include/clang-tidy/bugprone/ParentVirtualCallCheck.h
-include/clang-tidy/bugprone/PosixReturnCheck.h
-include/clang-tidy/bugprone/RedundantBranchConditionCheck.h
-include/clang-tidy/bugprone/ReservedIdentifierCheck.h
-include/clang-tidy/bugprone/SignalHandlerCheck.h
-include/clang-tidy/bugprone/SignedCharMisuseCheck.h
-include/clang-tidy/bugprone/SizeofContainerCheck.h
-include/clang-tidy/bugprone/SizeofExpressionCheck.h
-include/clang-tidy/bugprone/SpuriouslyWakeUpFunctionsCheck.h
-include/clang-tidy/bugprone/StringConstructorCheck.h
-include/clang-tidy/bugprone/StringIntegerAssignmentCheck.h
-include/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.h
-include/clang-tidy/bugprone/SuspiciousEnumUsageCheck.h
-include/clang-tidy/bugprone/SuspiciousIncludeCheck.h
-include/clang-tidy/bugprone/SuspiciousMemsetUsageCheck.h
-include/clang-tidy/bugprone/SuspiciousMissingCommaCheck.h
-include/clang-tidy/bugprone/SuspiciousSemicolonCheck.h
-include/clang-tidy/bugprone/SuspiciousStringCompareCheck.h
-include/clang-tidy/bugprone/SwappedArgumentsCheck.h
-include/clang-tidy/bugprone/TerminatingContinueCheck.h
-include/clang-tidy/bugprone/ThrowKeywordMissingCheck.h
-include/clang-tidy/bugprone/TooSmallLoopVariableCheck.h
-include/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.h
-include/clang-tidy/bugprone/UndelegatedConstructorCheck.h
-include/clang-tidy/bugprone/UnhandledExceptionAtNewCheck.h
-include/clang-tidy/bugprone/UnhandledSelfAssignmentCheck.h
-include/clang-tidy/bugprone/UnusedRaiiCheck.h
-include/clang-tidy/bugprone/UnusedReturnValueCheck.h
-include/clang-tidy/bugprone/UseAfterMoveCheck.h
-include/clang-tidy/bugprone/VirtualNearMissCheck.h
-include/clang-tidy/cert/
-include/clang-tidy/cert/CommandProcessorCheck.h
-include/clang-tidy/cert/DefaultOperatorNewAlignmentCheck.h
-include/clang-tidy/cert/DontModifyStdNamespaceCheck.h
-include/clang-tidy/cert/FloatLoopCounter.h
-include/clang-tidy/cert/LimitedRandomnessCheck.h
-include/clang-tidy/cert/MutatingCopyCheck.h
-include/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h
-include/clang-tidy/cert/PostfixOperatorCheck.h
-include/clang-tidy/cert/ProperlySeededRandomGeneratorCheck.h
-include/clang-tidy/cert/SetLongJmpCheck.h
-include/clang-tidy/cert/StaticObjectExceptionCheck.h
-include/clang-tidy/cert/StrToNumCheck.h
-include/clang-tidy/cert/ThrownExceptionTypeCheck.h
-include/clang-tidy/cert/VariadicFunctionDefCheck.h
-include/clang-tidy/concurrency/
-include/clang-tidy/concurrency/MtUnsafeCheck.h
-include/clang-tidy/concurrency/ThreadCanceltypeAsynchronousCheck.h
-include/clang-tidy/cppcoreguidelines/
-include/clang-tidy/cppcoreguidelines/AvoidGotoCheck.h
-include/clang-tidy/cppcoreguidelines/AvoidNonConstGlobalVariablesCheck.h
-include/clang-tidy/cppcoreguidelines/InitVariablesCheck.h
-include/clang-tidy/cppcoreguidelines/InterfacesGlobalInitCheck.h
-include/clang-tidy/cppcoreguidelines/MacroUsageCheck.h
-include/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h
-include/clang-tidy/cppcoreguidelines/NoMallocCheck.h
-include/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h
-include/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
-include/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.h
-include/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h
-include/clang-tidy/cppcoreguidelines/ProBoundsPointerArithmeticCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeConstCastCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeCstyleCastCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeReinterpretCastCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeStaticCastDowncastCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeUnionAccessCheck.h
-include/clang-tidy/cppcoreguidelines/ProTypeVarargCheck.h
-include/clang-tidy/cppcoreguidelines/SlicingCheck.h
-include/clang-tidy/cppcoreguidelines/SpecialMemberFunctionsCheck.h
-include/clang-tidy/darwin/
-include/clang-tidy/darwin/AvoidSpinlockCheck.h
-include/clang-tidy/darwin/DispatchOnceNonstaticCheck.h
-include/clang-tidy/fuchsia/
-include/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.h
-include/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.h
-include/clang-tidy/fuchsia/MultipleInheritanceCheck.h
-include/clang-tidy/fuchsia/OverloadedOperatorCheck.h
-include/clang-tidy/fuchsia/StaticallyConstructedObjectsCheck.h
-include/clang-tidy/fuchsia/TrailingReturnCheck.h
-include/clang-tidy/fuchsia/VirtualInheritanceCheck.h
-include/clang-tidy/google/
-include/clang-tidy/google/AvoidCStyleCastsCheck.h
-include/clang-tidy/google/AvoidNSObjectNewCheck.h
-include/clang-tidy/google/AvoidThrowingObjCExceptionCheck.h
-include/clang-tidy/google/AvoidUnderscoreInGoogletestNameCheck.h
-include/clang-tidy/google/DefaultArgumentsCheck.h
-include/clang-tidy/google/ExplicitConstructorCheck.h
-include/clang-tidy/google/ExplicitMakePairCheck.h
-include/clang-tidy/google/FunctionNamingCheck.h
-include/clang-tidy/google/GlobalNamesInHeadersCheck.h
-include/clang-tidy/google/GlobalVariableDeclarationCheck.h
-include/clang-tidy/google/IntegerTypesCheck.h
-include/clang-tidy/google/OverloadedUnaryAndCheck.h
-include/clang-tidy/google/TodoCommentCheck.h
-include/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
-include/clang-tidy/google/UpgradeGoogletestCaseCheck.h
-include/clang-tidy/google/UsingNamespaceDirectiveCheck.h
-include/clang-tidy/hicpp/
-include/clang-tidy/hicpp/ExceptionBaseclassCheck.h
-include/clang-tidy/hicpp/MultiwayPathsCoveredCheck.h
-include/clang-tidy/hicpp/NoAssemblerCheck.h
-include/clang-tidy/hicpp/SignedBitwiseCheck.h
-include/clang-tidy/linuxkernel/
-include/clang-tidy/linuxkernel/MustCheckErrsCheck.h
-include/clang-tidy/llvm/
-include/clang-tidy/llvm/HeaderGuardCheck.h
-include/clang-tidy/llvm/IncludeOrderCheck.h
-include/clang-tidy/llvm/PreferIsaOrDynCastInConditionalsCheck.h
-include/clang-tidy/llvm/PreferRegisterOverUnsignedCheck.h
-include/clang-tidy/llvm/TwineLocalCheck.h
-include/clang-tidy/llvmlibc/
-include/clang-tidy/llvmlibc/CalleeNamespaceCheck.h
-include/clang-tidy/llvmlibc/ImplementationInNamespaceCheck.h
-include/clang-tidy/llvmlibc/RestrictSystemLibcHeadersCheck.h
-include/clang-tidy/misc/
-include/clang-tidy/misc/DefinitionsInHeadersCheck.h
-include/clang-tidy/misc/MisplacedConstCheck.h
-include/clang-tidy/misc/NewDeleteOverloadsCheck.h
-include/clang-tidy/misc/NoRecursionCheck.h
-include/clang-tidy/misc/NonCopyableObjects.h
-include/clang-tidy/misc/NonPrivateMemberVariablesInClassesCheck.h
-include/clang-tidy/misc/RedundantExpressionCheck.h
-include/clang-tidy/misc/StaticAssertCheck.h
-include/clang-tidy/misc/ThrowByValueCatchByReferenceCheck.h
-include/clang-tidy/misc/UnconventionalAssignOperatorCheck.h
-include/clang-tidy/misc/UniqueptrResetReleaseCheck.h
-include/clang-tidy/misc/UnusedAliasDeclsCheck.h
-include/clang-tidy/misc/UnusedParametersCheck.h
-include/clang-tidy/misc/UnusedUsingDeclsCheck.h
-include/clang-tidy/modernize/
-include/clang-tidy/modernize/AvoidBindCheck.h
-include/clang-tidy/modernize/AvoidCArraysCheck.h
-include/clang-tidy/modernize/ConcatNestedNamespacesCheck.h
-include/clang-tidy/modernize/DeprecatedHeadersCheck.h
-include/clang-tidy/modernize/DeprecatedIosBaseAliasesCheck.h
-include/clang-tidy/modernize/LoopConvertCheck.h
-include/clang-tidy/modernize/LoopConvertUtils.h
-include/clang-tidy/modernize/MakeSharedCheck.h
-include/clang-tidy/modernize/MakeSmartPtrCheck.h
-include/clang-tidy/modernize/MakeUniqueCheck.h
-include/clang-tidy/modernize/PassByValueCheck.h
-include/clang-tidy/modernize/RawStringLiteralCheck.h
-include/clang-tidy/modernize/RedundantVoidArgCheck.h
-include/clang-tidy/modernize/ReplaceAutoPtrCheck.h
-include/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h
-include/clang-tidy/modernize/ReplaceRandomShuffleCheck.h
-include/clang-tidy/modernize/ReturnBracedInitListCheck.h
-include/clang-tidy/modernize/ShrinkToFitCheck.h
-include/clang-tidy/modernize/UnaryStaticAssertCheck.h
-include/clang-tidy/modernize/UseAutoCheck.h
-include/clang-tidy/modernize/UseBoolLiteralsCheck.h
-include/clang-tidy/modernize/UseDefaultMemberInitCheck.h
-include/clang-tidy/modernize/UseEmplaceCheck.h
-include/clang-tidy/modernize/UseEqualsDefaultCheck.h
-include/clang-tidy/modernize/UseEqualsDeleteCheck.h
-include/clang-tidy/modernize/UseNodiscardCheck.h
-include/clang-tidy/modernize/UseNoexceptCheck.h
-include/clang-tidy/modernize/UseNullptrCheck.h
-include/clang-tidy/modernize/UseOverrideCheck.h
-include/clang-tidy/modernize/UseTrailingReturnTypeCheck.h
-include/clang-tidy/modernize/UseTransparentFunctorsCheck.h
-include/clang-tidy/modernize/UseUncaughtExceptionsCheck.h
-include/clang-tidy/modernize/UseUsingCheck.h
-include/clang-tidy/mpi/
-include/clang-tidy/mpi/BufferDerefCheck.h
-include/clang-tidy/mpi/TypeMismatchCheck.h
-include/clang-tidy/objc/
-include/clang-tidy/objc/AvoidNSErrorInitCheck.h
-include/clang-tidy/objc/DeallocInCategoryCheck.h
-include/clang-tidy/objc/ForbiddenSubclassingCheck.h
-include/clang-tidy/objc/MissingHashCheck.h
-include/clang-tidy/objc/NSInvocationArgumentLifetimeCheck.h
-include/clang-tidy/objc/PropertyDeclarationCheck.h
-include/clang-tidy/objc/SuperSelfCheck.h
-include/clang-tidy/openmp/
-include/clang-tidy/openmp/ExceptionEscapeCheck.h
-include/clang-tidy/openmp/UseDefaultNoneCheck.h
-include/clang-tidy/performance/
-include/clang-tidy/performance/FasterStringFindCheck.h
-include/clang-tidy/performance/ForRangeCopyCheck.h
-include/clang-tidy/performance/ImplicitConversionInLoopCheck.h
-include/clang-tidy/performance/InefficientAlgorithmCheck.h
-include/clang-tidy/performance/InefficientStringConcatenationCheck.h
-include/clang-tidy/performance/InefficientVectorOperationCheck.h
-include/clang-tidy/performance/MoveConstArgCheck.h
-include/clang-tidy/performance/MoveConstructorInitCheck.h
-include/clang-tidy/performance/NoAutomaticMoveCheck.h
-include/clang-tidy/performance/NoIntToPtrCheck.h
-include/clang-tidy/performance/NoexceptMoveConstructorCheck.h
-include/clang-tidy/performance/TriviallyDestructibleCheck.h
-include/clang-tidy/performance/TypePromotionInMathFnCheck.h
-include/clang-tidy/performance/UnnecessaryCopyInitialization.h
-include/clang-tidy/performance/UnnecessaryValueParamCheck.h
-include/clang-tidy/plugin/
-include/clang-tidy/portability/
-include/clang-tidy/portability/RestrictSystemIncludesCheck.h
-include/clang-tidy/portability/SIMDIntrinsicsCheck.h
-include/clang-tidy/readability/
-include/clang-tidy/readability/AvoidConstParamsInDecls.h
-include/clang-tidy/readability/BracesAroundStatementsCheck.h
-include/clang-tidy/readability/ConstReturnTypeCheck.h
-include/clang-tidy/readability/ContainerSizeEmptyCheck.h
-include/clang-tidy/readability/ConvertMemberFunctionsToStatic.h
-include/clang-tidy/readability/DeleteNullPointerCheck.h
-include/clang-tidy/readability/ElseAfterReturnCheck.h
-include/clang-tidy/readability/FunctionCognitiveComplexityCheck.h
-include/clang-tidy/readability/FunctionSizeCheck.h
-include/clang-tidy/readability/IdentifierNamingCheck.h
-include/clang-tidy/readability/ImplicitBoolConversionCheck.h
-include/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.h
-include/clang-tidy/readability/IsolateDeclarationCheck.h
-include/clang-tidy/readability/MagicNumbersCheck.h
-include/clang-tidy/readability/MakeMemberFunctionConstCheck.h
-include/clang-tidy/readability/MisleadingIndentationCheck.h
-include/clang-tidy/readability/MisplacedArrayIndexCheck.h
-include/clang-tidy/readability/NamedParameterCheck.h
-include/clang-tidy/readability/NamespaceCommentCheck.h
-include/clang-tidy/readability/NonConstParameterCheck.h
-include/clang-tidy/readability/QualifiedAutoCheck.h
-include/clang-tidy/readability/RedundantAccessSpecifiersCheck.h
-include/clang-tidy/readability/RedundantControlFlowCheck.h
-include/clang-tidy/readability/RedundantDeclarationCheck.h
-include/clang-tidy/readability/RedundantFunctionPtrDereferenceCheck.h
-include/clang-tidy/readability/RedundantMemberInitCheck.h
-include/clang-tidy/readability/RedundantPreprocessorCheck.h
-include/clang-tidy/readability/RedundantSmartptrGetCheck.h
-include/clang-tidy/readability/RedundantStringCStrCheck.h
-include/clang-tidy/readability/RedundantStringInitCheck.h
-include/clang-tidy/readability/SimplifyBooleanExprCheck.h
-include/clang-tidy/readability/SimplifySubscriptExprCheck.h
-include/clang-tidy/readability/StaticAccessedThroughInstanceCheck.h
-include/clang-tidy/readability/StaticDefinitionInAnonymousNamespaceCheck.h
-include/clang-tidy/readability/StringCompareCheck.h
-include/clang-tidy/readability/SuspiciousCallArgumentCheck.h
-include/clang-tidy/readability/UniqueptrDeleteReleaseCheck.h
-include/clang-tidy/readability/UppercaseLiteralSuffixCheck.h
-include/clang-tidy/readability/UseAnyOfAllOfCheck.h
-include/clang-tidy/tool/
-include/clang-tidy/tool/ClangTidyMain.h
-include/clang-tidy/utils/
-include/clang-tidy/utils/ASTUtils.h
-include/clang-tidy/utils/Aliasing.h
-include/clang-tidy/utils/DeclRefExprUtils.h
-include/clang-tidy/utils/ExceptionAnalyzer.h
-include/clang-tidy/utils/ExprSequence.h
-include/clang-tidy/utils/FileExtensionsUtils.h
-include/clang-tidy/utils/FixItHintUtils.h
-include/clang-tidy/utils/HeaderGuard.h
-include/clang-tidy/utils/IncludeInserter.h
-include/clang-tidy/utils/IncludeSorter.h
-include/clang-tidy/utils/LexerUtils.h
-include/clang-tidy/utils/Matchers.h
-include/clang-tidy/utils/NamespaceAliaser.h
-include/clang-tidy/utils/OptionsUtils.h
-include/clang-tidy/utils/RenamerClangTidyCheck.h
-include/clang-tidy/utils/TransformerClangTidyCheck.h
-include/clang-tidy/utils/TypeTraits.h
-include/clang-tidy/utils/UsingInserter.h
-include/clang-tidy/zircon/
-include/clang-tidy/zircon/TemporaryObjectsCheck.h
-@static-lib lib/libclangApplyReplacements.a
-@static-lib lib/libclangChangeNamespace.a
-@static-lib lib/libclangDaemon.a
-@static-lib lib/libclangDaemonTweaks.a
-@static-lib lib/libclangDoc.a
-@static-lib lib/libclangIncludeFixer.a
-@static-lib lib/libclangIncludeFixerPlugin.a
-@static-lib lib/libclangMove.a
-@static-lib lib/libclangQuery.a
-@static-lib lib/libclangReorderFields.a
-@static-lib lib/libclangTidy.a
-@static-lib lib/libclangTidyAbseilModule.a
-@static-lib lib/libclangTidyAlteraModule.a
-@static-lib lib/libclangTidyAndroidModule.a
-@static-lib lib/libclangTidyBoostModule.a
-@static-lib lib/libclangTidyBugproneModule.a
-@static-lib lib/libclangTidyCERTModule.a
-@static-lib lib/libclangTidyConcurrencyModule.a
-@static-lib lib/libclangTidyCppCoreGuidelinesModule.a
-@static-lib lib/libclangTidyDarwinModule.a
-@static-lib lib/libclangTidyFuchsiaModule.a
-@static-lib lib/libclangTidyGoogleModule.a
-@static-lib lib/libclangTidyHICPPModule.a
-@static-lib lib/libclangTidyLLVMLibcModule.a
-@static-lib lib/libclangTidyLLVMModule.a
-@static-lib lib/libclangTidyLinuxKernelModule.a
-@static-lib lib/libclangTidyMPIModule.a
-@static-lib lib/libclangTidyMain.a
-@static-lib lib/libclangTidyMiscModule.a
-@static-lib lib/libclangTidyModernizeModule.a
-@static-lib lib/libclangTidyObjCModule.a
-@static-lib lib/libclangTidyOpenMPModule.a
-@static-lib lib/libclangTidyPerformanceModule.a
-@static-lib lib/libclangTidyPlugin.a
-@static-lib lib/libclangTidyPortabilityModule.a
-@static-lib lib/libclangTidyReadabilityModule.a
-@static-lib lib/libclangTidyUtils.a
-@static-lib lib/libclangTidyZirconModule.a
-@static-lib lib/libclangdRemoteIndex.a
-@static-lib lib/libclangdSupport.a
-@static-lib lib/libfindAllSymbols.a
-share/clang/${MODPY_PYCACHE}clang-include-fixer.${MODPY_PYC_MAGIC_TAG}pyc
-share/clang/${MODPY_PYCACHE}clang-tidy-diff.${MODPY_PYC_MAGIC_TAG}pyc
-share/clang/${MODPY_PYCACHE}run-find-all-symbols.${MODPY_PYC_MAGIC_TAG}pyc
+share/clang/
 share/clang/clang-doc-default-stylesheet.css
 share/clang/clang-include-fixer.el
 share/clang/clang-include-fixer.py