aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2024-03-05 00:34:46 +0800
committerJia Tan <jiat0218@gmail.com>2024-03-05 00:34:46 +0800
commit4e1c97052b5f14f4d6dda99d12cbbd01e66e3712 (patch)
treecd28d0c0d5fb472596adaff9f36ed9686124ef38
parentBuild: Require attribute no_profile_instrument_function for ifunc usage. (diff)
downloadxz-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.c5
-rw-r--r--src/liblzma/check/crc64_fast.c3
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)
{