From 981b9f78f08240a46e939d114eb320fc071ac6da Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Tue, 24 Jun 2025 12:07:32 -0700 Subject: [PATCH 1/2] [llvm] annotate ABIBreakingChecks symobls for DLL export --- llvm/include/llvm/Config/abi-breaking.h.cmake | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/llvm/include/llvm/Config/abi-breaking.h.cmake b/llvm/include/llvm/Config/abi-breaking.h.cmake index 2d27e02b1d545..345d2100f09f8 100644 --- a/llvm/include/llvm/Config/abi-breaking.h.cmake +++ b/llvm/include/llvm/Config/abi-breaking.h.cmake @@ -12,12 +12,36 @@ #ifndef LLVM_ABI_BREAKING_CHECKS_H #define LLVM_ABI_BREAKING_CHECKS_H +// llvm-config.h is required for LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS +#include "llvm/Config/llvm-config.h" + /* Define to enable checks that alter the LLVM C++ ABI */ #cmakedefine01 LLVM_ENABLE_ABI_BREAKING_CHECKS /* Define to enable reverse iteration of unordered llvm containers */ #cmakedefine01 LLVM_ENABLE_REVERSE_ITERATION +// Properly annotate EnableABIBreakingChecks or DisableABIBreakingChecks for +// export from shared library. +#if !defined(LLVM_ABI_GENERATING_ANNOTATIONS) +// TODO(https://github.com/llvm/llvm-project/issues/145406): eliminate need for +// two preprocessor definitions to gate LLVM_ABI macro definitions. +#if defined(LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS) && !defined(LLVM_BUILD_STATIC) +#if defined(_WIN32) && !defined(__MINGW32__) +#if defined(LLVM_EXPORTS) +#define ABI_BREAKING_EXPORT_ABI __declspec(dllexport) +#else +#define ABI_BREAKING_EXPORT_ABI __declspec(dllimport) +#endif +#elif defined(__has_attribute) && __has_attribute(visibility) +#define ABI_BREAKING_EXPORT_ABI __attribute__((visibility("default"))) +#endif +#endif +#if !defined(ABI_BREAKING_EXPORT_ABI) +#define ABI_BREAKING_EXPORT_ABI +#endif +#endif + /* Allow selectively disabling link-time mismatch checking so that header-only ADT content from LLVM can be used without linking libSupport. */ #if !defined(LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING) || !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING @@ -43,12 +67,12 @@ #endif namespace llvm { #if LLVM_ENABLE_ABI_BREAKING_CHECKS -extern int EnableABIBreakingChecks; +ABI_BREAKING_EXPORT_ABI extern int EnableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyEnableABIBreakingChecks = &EnableABIBreakingChecks; #else -extern int DisableABIBreakingChecks; +ABI_BREAKING_EXPORT_ABI extern int DisableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyDisableABIBreakingChecks = &DisableABIBreakingChecks; From cc1665b66ad8cfe3612f46aaff597c0e1e2b6ae1 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Mon, 7 Jul 2025 10:32:51 -0700 Subject: [PATCH 2/2] [llvm] use LLVM_ABI annotation on ABI breaking check symbols --- llvm/include/llvm/Config/abi-breaking.h.cmake | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/llvm/include/llvm/Config/abi-breaking.h.cmake b/llvm/include/llvm/Config/abi-breaking.h.cmake index 345d2100f09f8..318bd015f80d2 100644 --- a/llvm/include/llvm/Config/abi-breaking.h.cmake +++ b/llvm/include/llvm/Config/abi-breaking.h.cmake @@ -12,8 +12,8 @@ #ifndef LLVM_ABI_BREAKING_CHECKS_H #define LLVM_ABI_BREAKING_CHECKS_H -// llvm-config.h is required for LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS -#include "llvm/Config/llvm-config.h" +// Compiler.h is required for LLVM_ABI definition. +#include "llvm/Support/Compiler.h" /* Define to enable checks that alter the LLVM C++ ABI */ #cmakedefine01 LLVM_ENABLE_ABI_BREAKING_CHECKS @@ -21,27 +21,6 @@ /* Define to enable reverse iteration of unordered llvm containers */ #cmakedefine01 LLVM_ENABLE_REVERSE_ITERATION -// Properly annotate EnableABIBreakingChecks or DisableABIBreakingChecks for -// export from shared library. -#if !defined(LLVM_ABI_GENERATING_ANNOTATIONS) -// TODO(https://github.com/llvm/llvm-project/issues/145406): eliminate need for -// two preprocessor definitions to gate LLVM_ABI macro definitions. -#if defined(LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS) && !defined(LLVM_BUILD_STATIC) -#if defined(_WIN32) && !defined(__MINGW32__) -#if defined(LLVM_EXPORTS) -#define ABI_BREAKING_EXPORT_ABI __declspec(dllexport) -#else -#define ABI_BREAKING_EXPORT_ABI __declspec(dllimport) -#endif -#elif defined(__has_attribute) && __has_attribute(visibility) -#define ABI_BREAKING_EXPORT_ABI __attribute__((visibility("default"))) -#endif -#endif -#if !defined(ABI_BREAKING_EXPORT_ABI) -#define ABI_BREAKING_EXPORT_ABI -#endif -#endif - /* Allow selectively disabling link-time mismatch checking so that header-only ADT content from LLVM can be used without linking libSupport. */ #if !defined(LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING) || !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING @@ -67,12 +46,12 @@ #endif namespace llvm { #if LLVM_ENABLE_ABI_BREAKING_CHECKS -ABI_BREAKING_EXPORT_ABI extern int EnableABIBreakingChecks; +LLVM_ABI extern int EnableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyEnableABIBreakingChecks = &EnableABIBreakingChecks; #else -ABI_BREAKING_EXPORT_ABI extern int DisableABIBreakingChecks; +LLVM_ABI extern int DisableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyDisableABIBreakingChecks = &DisableABIBreakingChecks;