Index | Thread | Search

From:
Brad Smith <brad@comstyle.com>
Subject:
UPDATE: LLVM 22
To:
ports@openbsd.org
Cc:
robert@openbsd.org
Date:
Mon, 15 Jun 2026 03:32:21 -0400

Download raw body.

Thread
  • Brad Smith:

    UPDATE: LLVM 22

- A build fix for libc++abi on 32-bit ARM
- Fixing libc++ src/filesystem/filesystem_clock.cpp to use clock_gettime()
  instead of gettimeofday() as was done already in src/chrono.cpp
- Move OpenBSD off of libc++ old locale API. 


Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/llvm/22/Makefile,v
retrieving revision 1.15
diff -u -p -u -p -r1.15 Makefile
--- Makefile	11 Jun 2026 14:08:18 -0000	1.15
+++ Makefile	15 Jun 2026 03:55:50 -0000
@@ -2,7 +2,7 @@ LLVM_MAJOR =	22
 LLVM_VERSION =	${LLVM_MAJOR}.1.7
 LLVM_PKGSPEC =	>=22,<23
 
-REVISION-main =	2
+REVISION-main =	3
 REVISION-lldb =	0
 
 SHARED_LIBS +=	LLVM		0.0 \
Index: patches/patch-libcxx_include_CMakeLists_txt
===================================================================
RCS file: patches/patch-libcxx_include_CMakeLists_txt
diff -N patches/patch-libcxx_include_CMakeLists_txt
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include_CMakeLists_txt	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,30 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/CMakeLists.txt
+--- libcxx/include/CMakeLists.txt.orig
++++ libcxx/include/CMakeLists.txt
+@@ -524,7 +524,6 @@ set(files
+   __locale_dir/locale_base_api.h
+   __locale_dir/locale_base_api/bsd_locale_fallbacks.h
+   __locale_dir/locale_base_api/ibm.h
+-  __locale_dir/locale_base_api/openbsd.h
+   __locale_dir/messages.h
+   __locale_dir/money.h
+   __locale_dir/num.h
+@@ -540,6 +539,7 @@ set(files
+   __locale_dir/support/newlib.h
+   __locale_dir/support/no_locale/characters.h
+   __locale_dir/support/no_locale/strtonum.h
++  __locale_dir/support/openbsd.h
+   __locale_dir/support/windows.h
+   __locale_dir/time.h
+   __locale_dir/wbuffer_convert.h
+@@ -768,7 +768,6 @@ set(files
+   __support/ibm/nanosleep.h
+   __support/xlocale/__nop_locale_mgmt.h
+   __support/xlocale/__posix_l_fallback.h
+-  __support/xlocale/__strtonum_fallback.h
+   __system_error/errc.h
+   __system_error/error_category.h
+   __system_error/error_code.h
Index: patches/patch-libcxx_include___locale_dir_locale_base_api_h
===================================================================
RCS file: patches/patch-libcxx_include___locale_dir_locale_base_api_h
diff -N patches/patch-libcxx_include___locale_dir_locale_base_api_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include___locale_dir_locale_base_api_h	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,28 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/__locale_dir/locale_base_api.h
+--- libcxx/include/__locale_dir/locale_base_api.h.orig
++++ libcxx/include/__locale_dir/locale_base_api.h
+@@ -112,6 +112,8 @@
+ #    include <__locale_dir/support/freebsd.h>
+ #  elif defined(__NetBSD__)
+ #    include <__locale_dir/support/netbsd.h>
++#  elif defined(__OpenBSD__)
++#    include <__locale_dir/support/openbsd.h>
+ #  elif defined(_LIBCPP_MSVCRT_LIKE)
+ #    include <__locale_dir/support/windows.h>
+ #  elif defined(__Fuchsia__)
+@@ -128,11 +130,7 @@
+ //       (by providing global non-reserved names) and the new API. As we move individual platforms
+ //       towards the new way of defining the locale base API, this should disappear since each platform
+ //       will define those directly.
+-#    if defined(__MVS__)
+-#      include <__locale_dir/locale_base_api/ibm.h>
+-#    elif defined(__OpenBSD__)
+-#      include <__locale_dir/locale_base_api/openbsd.h>
+-#    endif
++#    include <__locale_dir/locale_base_api/ibm.h>
+ 
+ #    include <__locale_dir/locale_base_api/bsd_locale_fallbacks.h>
+ 
Index: patches/patch-libcxx_include___locale_dir_locale_base_api_openbsd_h
===================================================================
RCS file: patches/patch-libcxx_include___locale_dir_locale_base_api_openbsd_h
diff -N patches/patch-libcxx_include___locale_dir_locale_base_api_openbsd_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include___locale_dir_locale_base_api_openbsd_h	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,26 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/__locale_dir/locale_base_api/openbsd.h
+--- libcxx/include/__locale_dir/locale_base_api/openbsd.h.orig
++++ libcxx/include/__locale_dir/locale_base_api/openbsd.h
+@@ -1,19 +0,0 @@
+-// -*- C++ -*-
+-//===-----------------------------------------------------------------------===//
+-//
+-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+-// See https://llvm.org/LICENSE.txt for license information.
+-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+-//
+-//===----------------------------------------------------------------------===//
+-
+-#ifndef _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
+-#define _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
+-
+-#include <__support/xlocale/__strtonum_fallback.h>
+-#include <clocale>
+-#include <cstdlib>
+-#include <ctype.h>
+-#include <cwctype>
+-
+-#endif // _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
Index: patches/patch-libcxx_include___locale_dir_support_openbsd_h
===================================================================
RCS file: patches/patch-libcxx_include___locale_dir_support_openbsd_h
diff -N patches/patch-libcxx_include___locale_dir_support_openbsd_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include___locale_dir_support_openbsd_h	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,236 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/__locale_dir/support/openbsd.h
+--- libcxx/include/__locale_dir/support/openbsd.h.orig
++++ libcxx/include/__locale_dir/support/openbsd.h
+@@ -0,0 +1,229 @@
++// -*- C++ -*-
++//===-----------------------------------------------------------------------===//
++//
++// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
++// See https://llvm.org/LICENSE.txt for license information.
++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
++//
++//===----------------------------------------------------------------------===//
++
++#ifndef _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
++#define _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
++
++#include <__config>
++#include <__cstddef/size_t.h>
++#include <__std_mbstate_t.h>
++#include <__utility/forward.h>
++#include <clocale> // std::lconv
++#include <ctype.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <time.h>
++#if _LIBCPP_HAS_WIDE_CHARACTERS
++#  include <wchar.h>
++#  include <wctype.h>
++#endif
++
++#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
++#  pragma GCC system_header
++#endif
++
++_LIBCPP_BEGIN_NAMESPACE_STD
++namespace __locale {
++
++struct __locale_guard {
++  __locale_guard(locale_t& __loc) : __old_loc_(::uselocale(__loc)) {}
++
++  ~__locale_guard() {
++    if (__old_loc_)
++      ::uselocale(__old_loc_);
++  }
++
++  locale_t __old_loc_;
++
++  __locale_guard(__locale_guard const&)            = delete;
++  __locale_guard& operator=(__locale_guard const&) = delete;
++};
++
++//
++// Locale management
++//
++#define _LIBCPP_COLLATE_MASK LC_COLLATE_MASK
++#define _LIBCPP_CTYPE_MASK LC_CTYPE_MASK
++#define _LIBCPP_MONETARY_MASK LC_MONETARY_MASK
++#define _LIBCPP_NUMERIC_MASK LC_NUMERIC_MASK
++#define _LIBCPP_TIME_MASK LC_TIME_MASK
++#define _LIBCPP_MESSAGES_MASK LC_MESSAGES_MASK
++#define _LIBCPP_ALL_MASK LC_ALL_MASK
++#define _LIBCPP_LC_ALL LC_ALL
++
++using __locale_t _LIBCPP_NODEBUG = ::locale_t;
++#if defined(_LIBCPP_BUILDING_LIBRARY)
++using __lconv_t _LIBCPP_NODEBUG = std::lconv;
++
++inline __locale_t __newlocale(int __category_mask, const char* __locale, __locale_t __base) {
++  return ::newlocale(__category_mask, __locale, __base);
++}
++
++inline void __freelocale(__locale_t __loc) { ::freelocale(__loc); }
++
++inline char* __setlocale(int __category, char const* __locale) { return ::setlocale(__category, __locale); }
++
++inline __lconv_t* __localeconv(__locale_t& __loc) {
++  __locale_guard __current(__loc);
++  return ::localeconv();
++}
++#endif // _LIBCPP_BUILDING_LIBRARY
++
++//
++// Strtonum functions
++//
++inline float __strtof(const char* __nptr, char** __endptr, __locale_t) { return ::strtof(__nptr, __endptr); }
++
++inline double __strtod(const char* __nptr, char** __endptr, __locale_t) { return ::strtod(__nptr, __endptr); }
++
++inline long double __strtold(const char* __nptr, char** __endptr, __locale_t) { return ::strtold(__nptr, __endptr); }
++
++//
++// Character manipulation functions
++//
++#if defined(_LIBCPP_BUILDING_LIBRARY)
++inline int __toupper(int __c, __locale_t __loc) { return ::toupper_l(__c, __loc); }
++
++inline int __tolower(int __c, __locale_t __loc) { return ::tolower_l(__c, __loc); }
++
++inline int __strcoll(const char* __s1, const char* __s2, __locale_t __loc) { return ::strcoll_l(__s1, __s2, __loc); }
++
++inline size_t __strxfrm(char* __dest, const char* __src, size_t __n, __locale_t __loc) {
++  return ::strxfrm_l(__dest, __src, __n, __loc);
++}
++
++#  if _LIBCPP_HAS_WIDE_CHARACTERS
++inline int __iswctype(wint_t __c, wctype_t __type, __locale_t __loc) { return ::iswctype_l(__c, __type, __loc); }
++
++inline int __iswspace(wint_t __c, __locale_t __loc) { return ::iswspace_l(__c, __loc); }
++
++inline int __iswprint(wint_t __c, __locale_t __loc) { return ::iswprint_l(__c, __loc); }
++
++inline int __iswcntrl(wint_t __c, __locale_t __loc) { return ::iswcntrl_l(__c, __loc); }
++
++inline int __iswupper(wint_t __c, __locale_t __loc) { return ::iswupper_l(__c, __loc); }
++
++inline int __iswlower(wint_t __c, __locale_t __loc) { return ::iswlower_l(__c, __loc); }
++
++inline int __iswalpha(wint_t __c, __locale_t __loc) { return ::iswalpha_l(__c, __loc); }
++
++inline int __iswblank(wint_t __c, __locale_t __loc) { return ::iswblank_l(__c, __loc); }
++
++inline int __iswdigit(wint_t __c, __locale_t __loc) { return ::iswdigit_l(__c, __loc); }
++
++inline int __iswpunct(wint_t __c, __locale_t __loc) { return ::iswpunct_l(__c, __loc); }
++
++inline int __iswxdigit(wint_t __c, __locale_t __loc) { return ::iswxdigit_l(__c, __loc); }
++
++inline wint_t __towupper(wint_t __c, __locale_t __loc) { return ::towupper_l(__c, __loc); }
++
++inline wint_t __towlower(wint_t __c, __locale_t __loc) { return ::towlower_l(__c, __loc); }
++
++inline int __wcscoll(const wchar_t* __ws1, const wchar_t* __ws2, __locale_t __loc) {
++  return ::wcscoll_l(__ws1, __ws2, __loc);
++}
++
++inline size_t __wcsxfrm(wchar_t* __dest, const wchar_t* __src, size_t __n, __locale_t __loc) {
++  return ::wcsxfrm_l(__dest, __src, __n, __loc);
++}
++#  endif // _LIBCPP_HAS_WIDE_CHARACTERS
++
++inline _LIBCPP_ATTRIBUTE_FORMAT(__strftime__, 3, 0) size_t
++    __strftime(char* __s, size_t __max, const char* __format, const struct tm* __tm, __locale_t __loc) {
++  return ::strftime_l(__s, __max, __format, __tm, __loc);
++}
++
++//
++// Other functions
++//
++inline decltype(MB_CUR_MAX) __mb_len_max(__locale_t __loc) {
++  __locale_guard __current(__loc);
++  return MB_CUR_MAX;
++}
++
++#  if _LIBCPP_HAS_WIDE_CHARACTERS
++inline wint_t __btowc(int __c, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return btowc(__c);
++}
++
++inline int __wctob(wint_t __c, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return wctob(__c);
++}
++
++inline size_t
++__wcsnrtombs(char* __dest, const wchar_t** __src, size_t __nwc, size_t __len, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return wcsnrtombs(__dest, __src, __nwc, __len, __ps); // wcsnrtombs is a POSIX extension
++}
++
++inline size_t __wcrtomb(char* __s, wchar_t __wc, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return wcrtomb(__s, __wc, __ps);
++}
++
++inline size_t
++__mbsnrtowcs(wchar_t* __dest, const char** __src, size_t __nms, size_t __len, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return mbsnrtowcs(__dest, __src, __nms, __len, __ps); // mbsnrtowcs is a POSIX extension
++}
++
++inline size_t __mbrtowc(wchar_t* __pwc, const char* __s, size_t __n, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return mbrtowc(__pwc, __s, __n, __ps);
++}
++
++inline int __mbtowc(wchar_t* __pwc, const char* __pmb, size_t __max, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return mbtowc(__pwc, __pmb, __max);
++}
++
++inline size_t __mbrlen(const char* __s, size_t __n, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return mbrlen(__s, __n, __ps);
++}
++
++inline size_t __mbsrtowcs(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps, __locale_t __loc) {
++  __locale_guard __current(__loc);
++  return mbsrtowcs(__dest, __src, __len, __ps);
++}
++#  endif // _LIBCPP_HAS_WIDE_CHARACTERS
++#endif   // _LIBCPP_BUILDING_LIBRARY
++
++_LIBCPP_DIAGNOSTIC_PUSH
++_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wgcc-compat")
++_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") // GCC doesn't support [[gnu::format]] on variadic templates
++#ifdef _LIBCPP_COMPILER_CLANG_BASED
++#  define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(...) _LIBCPP_ATTRIBUTE_FORMAT(__VA_ARGS__)
++#else
++#  define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(...) /* nothing */
++#endif
++
++template <class... _Args>
++_LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 4, 5)
++int __snprintf(char* __s, size_t __n, __locale_t __loc, const char* __format, _Args&&... __args) {
++  __locale_guard __current(__loc);
++  return ::snprintf(__s, __n, __format, std::forward<_Args>(__args)...);
++}
++
++template <class... _Args>
++_LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 3, 4)
++int __asprintf(char** __s, __locale_t __loc, const char* __format, _Args&&... __args) {
++  __locale_guard __current(__loc);
++  return ::asprintf(__s, __format, std::forward<_Args>(__args)...); // non-standard
++}
++_LIBCPP_DIAGNOSTIC_POP
++#undef _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT
++
++} // namespace __locale
++_LIBCPP_END_NAMESPACE_STD
++
++#endif // _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_OPENBSD_H
Index: patches/patch-libcxx_include___support_xlocale___strtonum_fallback_h
===================================================================
RCS file: patches/patch-libcxx_include___support_xlocale___strtonum_fallback_h
diff -N patches/patch-libcxx_include___support_xlocale___strtonum_fallback_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include___support_xlocale___strtonum_fallback_h	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,44 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/__support/xlocale/__strtonum_fallback.h
+--- libcxx/include/__support/xlocale/__strtonum_fallback.h.orig
++++ libcxx/include/__support/xlocale/__strtonum_fallback.h
+@@ -1,37 +0,0 @@
+-// -*- C++ -*-
+-//===-----------------------------------------------------------------------===//
+-//
+-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+-// See https://llvm.org/LICENSE.txt for license information.
+-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+-//
+-//===----------------------------------------------------------------------===//
+-// These are reimplementations of some extended locale functions ( *_l ) that
+-// aren't part of POSIX.  They are widely available though (GLIBC, BSD, maybe
+-// others).  The unifying aspect in this case is that all of these functions
+-// convert strings to some numeric type.
+-//===----------------------------------------------------------------------===//
+-
+-#ifndef _LIBCPP___SUPPORT_XLOCALE_STRTONUM_FALLBACK_H
+-#define _LIBCPP___SUPPORT_XLOCALE_STRTONUM_FALLBACK_H
+-
+-#include <__config>
+-#include <stdlib.h>
+-
+-#if _LIBCPP_HAS_WIDE_CHARACTERS
+-#  include <wchar.h>
+-#endif
+-
+-inline _LIBCPP_HIDE_FROM_ABI float strtof_l(const char* __nptr, char** __endptr, locale_t) {
+-  return ::strtof(__nptr, __endptr);
+-}
+-
+-inline _LIBCPP_HIDE_FROM_ABI double strtod_l(const char* __nptr, char** __endptr, locale_t) {
+-  return ::strtod(__nptr, __endptr);
+-}
+-
+-inline _LIBCPP_HIDE_FROM_ABI long double strtold_l(const char* __nptr, char** __endptr, locale_t) {
+-  return ::strtold(__nptr, __endptr);
+-}
+-
+-#endif // _LIBCPP___SUPPORT_XLOCALE_STRTONUM_FALLBACK_H
Index: patches/patch-libcxx_include_module_modulemap_in
===================================================================
RCS file: patches/patch-libcxx_include_module_modulemap_in
diff -N patches/patch-libcxx_include_module_modulemap_in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_include_module_modulemap_in	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,21 @@
+- [libc++] Port The OpenBSD localization to the new locale API
+  182ae96a82fc355eca89d12c179d6a0961c653d8
+
+Index: libcxx/include/module.modulemap.in
+--- libcxx/include/module.modulemap.in.orig
++++ libcxx/include/module.modulemap.in
+@@ -1591,13 +1591,13 @@ module std [system] {
+       textual header "__locale_dir/support/newlib.h"
+       textual header "__locale_dir/support/no_locale/characters.h"
+       textual header "__locale_dir/support/no_locale/strtonum.h"
++      textual header "__locale_dir/support/openbsd.h"
+       textual header "__locale_dir/support/windows.h"
+     }
+ 
+     module locale_base_api {
+       textual header "__locale_dir/locale_base_api/bsd_locale_fallbacks.h"
+       textual header "__locale_dir/locale_base_api/ibm.h"
+-      textual header "__locale_dir/locale_base_api/openbsd.h"
+     }
+     export *
+   }
Index: patches/patch-libcxx_src_filesystem_filesystem_clock_cpp
===================================================================
RCS file: patches/patch-libcxx_src_filesystem_filesystem_clock_cpp
diff -N patches/patch-libcxx_src_filesystem_filesystem_clock_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxx_src_filesystem_filesystem_clock_cpp	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,18 @@
+Copy missed fix for OpenBSD over from src/chrono.cpp
+
+Index: libcxx/src/filesystem/filesystem_clock.cpp
+--- libcxx/src/filesystem/filesystem_clock.cpp.orig
++++ libcxx/src/filesystem/filesystem_clock.cpp
+@@ -36,8 +36,10 @@
+ #  define _LIBCPP_HAS_TIMESPEC_GET
+ #endif
+ 
+-#if defined(__APPLE__) || defined(__gnu_hurd__) || defined(__AMDGPU__) || defined(__NVPTX__) ||                        \
+-    (defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0)
++// OpenBSD and GPU do not have a fully conformant suite of POSIX timers, but
++// it does have clock_gettime and CLOCK_MONOTONIC which is all we need.
++#if defined(__APPLE__) || defined(__gnu_hurd__) || defined(__OpenBSD__) || defined(__AMDGPU__) ||                      \
++    defined(__NVPTX__) || (defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0)
+ #  define _LIBCPP_HAS_CLOCK_GETTIME
+ #endif
+ 
Index: patches/patch-libcxxabi_src_cxa_personality_cpp
===================================================================
RCS file: patches/patch-libcxxabi_src_cxa_personality_cpp
diff -N patches/patch-libcxxabi_src_cxa_personality_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-libcxxabi_src_cxa_personality_cpp	15 Jun 2026 03:55:50 -0000
@@ -0,0 +1,15 @@
+- libcxxabi: declare __gnu_unwind_frame in cxa_personality
+  8119f1854948b50358bbfaea08f207f51970f06c
+
+Index: libcxxabi/src/cxa_personality.cpp
+--- libcxxabi/src/cxa_personality.cpp.orig
++++ libcxxabi/src/cxa_personality.cpp
+@@ -1125,6 +1125,8 @@ __gxx_personality_seh0(PEXCEPTION_RECORD ms_exc, void 
+ 
+ #else
+ 
++extern "C" _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception*, _Unwind_Context*);
++
+ // Helper function to unwind one frame.
+ // ARM EHABI 7.3 and 7.4: If the personality function returns _URC_CONTINUE_UNWIND, the
+ // personality routine should update the virtual register set (VRS) according to the
Index: pkg/PLIST-libcxx
===================================================================
RCS file: /cvs/ports/devel/llvm/22/pkg/PLIST-libcxx,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 PLIST-libcxx
--- pkg/PLIST-libcxx	25 Feb 2026 13:31:44 -0000	1.1.1.1
+++ pkg/PLIST-libcxx	15 Jun 2026 03:55:50 -0000
@@ -1162,7 +1162,6 @@ ${LLVM_BASE}/include/c++/v1/__locale_dir
 ${LLVM_BASE}/include/c++/v1/__locale_dir/locale_base_api.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/locale_base_api/bsd_locale_fallbacks.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/locale_base_api/ibm.h
-${LLVM_BASE}/include/c++/v1/__locale_dir/locale_base_api/openbsd.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/messages.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/money.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/num.h
@@ -1180,6 +1179,7 @@ ${LLVM_BASE}/include/c++/v1/__locale_dir
 ${LLVM_BASE}/include/c++/v1/__locale_dir/support/no_locale/
 ${LLVM_BASE}/include/c++/v1/__locale_dir/support/no_locale/characters.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/support/no_locale/strtonum.h
+${LLVM_BASE}/include/c++/v1/__locale_dir/support/openbsd.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/support/windows.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/time.h
 ${LLVM_BASE}/include/c++/v1/__locale_dir/wbuffer_convert.h
@@ -1426,7 +1426,6 @@ ${LLVM_BASE}/include/c++/v1/__support/ib
 ${LLVM_BASE}/include/c++/v1/__support/xlocale/
 ${LLVM_BASE}/include/c++/v1/__support/xlocale/__nop_locale_mgmt.h
 ${LLVM_BASE}/include/c++/v1/__support/xlocale/__posix_l_fallback.h
-${LLVM_BASE}/include/c++/v1/__support/xlocale/__strtonum_fallback.h
 ${LLVM_BASE}/include/c++/v1/__system_error/
 ${LLVM_BASE}/include/c++/v1/__system_error/errc.h
 ${LLVM_BASE}/include/c++/v1/__system_error/error_category.h