diff options
author | Jia Tan <jiat0218@gmail.com> | 2024-03-05 00:34:46 +0800 |
---|---|---|
committer | Jia Tan <jiat0218@gmail.com> | 2024-03-05 00:34:46 +0800 |
commit | 4e1c97052b5f14f4d6dda99d12cbbd01e66e3712 (patch) | |
tree | cd28d0c0d5fb472596adaff9f36ed9686124ef38 | |
parent | Build: Require attribute no_profile_instrument_function for ifunc usage. (diff) | |
download | xz-4e1c97052b5f14f4d6dda99d12cbbd01e66e3712.tar.xz |
liblzma: Use attribute no_profile_instrument_function with ifunc.
Thanks to Sam James for determining this was the attribute needed to
workaround the GCC bug and for his version of the patch in Gentoo.
-rw-r--r-- | src/liblzma/check/crc32_fast.c | 5 | ||||
-rw-r--r-- | src/liblzma/check/crc64_fast.c | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/liblzma/check/crc32_fast.c b/src/liblzma/check/crc32_fast.c index 5e26914a..079051f1 100644 --- a/src/liblzma/check/crc32_fast.c +++ b/src/liblzma/check/crc32_fast.c @@ -135,6 +135,11 @@ typedef uint32_t (*crc32_func_type)( // This resolver is shared between all three dispatch methods. It serves as // the ifunc resolver if ifunc is supported, otherwise it is called as a // regular function by the constructor or first call resolution methods. +// The __no_profile_instrument_function__ attribute support is checked when +// determining if ifunc can be used, so it is safe to use here. +#ifdef CRC_USE_IFUNC +__attribute__((__no_profile_instrument_function__)) +#endif static crc32_func_type crc32_resolve(void) { diff --git a/src/liblzma/check/crc64_fast.c b/src/liblzma/check/crc64_fast.c index f29fe3d3..5728b45e 100644 --- a/src/liblzma/check/crc64_fast.c +++ b/src/liblzma/check/crc64_fast.c @@ -98,6 +98,9 @@ typedef uint64_t (*crc64_func_type)( # pragma GCC diagnostic ignored "-Wunused-function" #endif +#ifdef CRC_USE_IFUNC +__attribute__((__no_profile_instrument_function__)) +#endif static crc64_func_type crc64_resolve(void) { |