aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2024-12-23 05:11:58 +0800
committerH.J. Lu <hjl.tools@gmail.com>2024-12-23 06:28:55 +0800
commita2b0ff98a0d44259cc5f6bd7d3a3676ae9f8996a (patch)
tree7816983cdeea6e6c32dd005c76da785811ea3047 /stdlib
parent3fb895ac88e99201573352b1abc18db4340ecede (diff)
downloadglibc-a2b0ff98a0d44259cc5f6bd7d3a3676ae9f8996a.tar.xz
glibc-a2b0ff98a0d44259cc5f6bd7d3a3676ae9f8996a.zip
include/sys/cdefs.h: Add __attribute_optimization_barrier__
Add __attribute_optimization_barrier__ to disable inlining and cloning on a function. For Clang, expand it to __attribute__ ((optnone)) Otherwise, expand it to __attribute__ ((noinline, clone)) Co-Authored-By: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/tst-makecontext-align.c20
-rw-r--r--stdlib/tst-quick_exit.cc2
-rw-r--r--stdlib/tst-setcontext10.c6
-rw-r--r--stdlib/tst-setcontext11.c2
-rw-r--r--stdlib/tst-setcontext5.c4
-rw-r--r--stdlib/tst-setcontext8.c2
-rw-r--r--stdlib/tst-setcontext9.c2
-rw-r--r--stdlib/tst-swapcontext1.c8
-rw-r--r--stdlib/tst-swapcontext2.c8
-rw-r--r--stdlib/tst-thread-quick_exit.cc2
10 files changed, 28 insertions, 28 deletions
diff --git a/stdlib/tst-makecontext-align.c b/stdlib/tst-makecontext-align.c
index e54b3e1ff2..a2648bf41e 100644
--- a/stdlib/tst-makecontext-align.c
+++ b/stdlib/tst-makecontext-align.c
@@ -30,7 +30,7 @@ static const char *context;
/* Check that ADDRESS is aligned to ALIGNMENT bytes, behind a compiler
barrier. */
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align (void *address, size_t alignment)
{
@@ -45,7 +45,7 @@ check_align (void *address, size_t alignment)
/* Various alignment checking functions. */
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_int (void)
{
@@ -53,7 +53,7 @@ check_align_int (void)
check_align (&a, __alignof__ (a));
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_long (void)
{
@@ -61,7 +61,7 @@ check_align_long (void)
check_align (&a, __alignof__ (a));
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_long_long (void)
{
@@ -69,7 +69,7 @@ check_align_long_long (void)
check_align (&a, __alignof__ (a));
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_double (void)
{
@@ -77,7 +77,7 @@ check_align_double (void)
check_align (&a, __alignof__ (a));
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_4 (void)
{
@@ -85,7 +85,7 @@ check_align_4 (void)
check_align (&a, 4);
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_8 (void)
{
@@ -93,7 +93,7 @@ check_align_8 (void)
check_align (&a, 8);
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_16 (void)
{
@@ -105,7 +105,7 @@ check_align_16 (void)
check_align (&a, 16);
}
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_align_32 (void)
{
@@ -120,7 +120,7 @@ check_align_32 (void)
}
/* Call all the alignment checking functions. */
-__attribute__ ((noinline, noclone, weak))
+__attribute__ ((weak)) __attribute_optimization_barrier__
void
check_alignments (void)
{
diff --git a/stdlib/tst-quick_exit.cc b/stdlib/tst-quick_exit.cc
index 4331d80383..1cf2dbfed2 100644
--- a/stdlib/tst-quick_exit.cc
+++ b/stdlib/tst-quick_exit.cc
@@ -26,7 +26,7 @@ struct A
thread_local A a;
void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
optimization_barrier (A &)
{
}
diff --git a/stdlib/tst-setcontext10.c b/stdlib/tst-setcontext10.c
index 7267f5efe3..4991d87ebb 100644
--- a/stdlib/tst-setcontext10.c
+++ b/stdlib/tst-setcontext10.c
@@ -37,7 +37,7 @@ static ucontext_t ctx;
static void f2 (void);
static void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
f1 (void)
{
printf ("start f1\n");
@@ -45,7 +45,7 @@ f1 (void)
}
static void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
f2 (void)
{
printf ("start f2\n");
@@ -64,7 +64,7 @@ f3 (void)
}
static int
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
do_test_1 (void)
{
char st1[32768];
diff --git a/stdlib/tst-setcontext11.c b/stdlib/tst-setcontext11.c
index 1883c44b76..dbb23640d2 100644
--- a/stdlib/tst-setcontext11.c
+++ b/stdlib/tst-setcontext11.c
@@ -54,7 +54,7 @@ f1 (int a0, int a1, int a2, int a3)
}
static void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
call_longjmp (void)
{
longjmp_called = 1;
diff --git a/stdlib/tst-setcontext5.c b/stdlib/tst-setcontext5.c
index 9b29907a13..ad40081852 100644
--- a/stdlib/tst-setcontext5.c
+++ b/stdlib/tst-setcontext5.c
@@ -27,7 +27,7 @@ static volatile int done;
static void f2 (void);
static void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
f1 (void)
{
printf ("start f1\n");
@@ -35,7 +35,7 @@ f1 (void)
}
static void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
f2 (void)
{
printf ("start f2\n");
diff --git a/stdlib/tst-setcontext8.c b/stdlib/tst-setcontext8.c
index cdcf5eb871..72f1c1b2c4 100644
--- a/stdlib/tst-setcontext8.c
+++ b/stdlib/tst-setcontext8.c
@@ -26,7 +26,7 @@ static ucontext_t ctx[3];
static atomic_int done;
static void
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
f2 (void)
{
printf ("start f2\n");
diff --git a/stdlib/tst-setcontext9.c b/stdlib/tst-setcontext9.c
index 91b6255138..7d2d341fe0 100644
--- a/stdlib/tst-setcontext9.c
+++ b/stdlib/tst-setcontext9.c
@@ -26,7 +26,7 @@ static ucontext_t ctx[5];
static atomic_int done;
static void
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
f2 (void)
{
done++;
diff --git a/stdlib/tst-swapcontext1.c b/stdlib/tst-swapcontext1.c
index c96b8a27a8..8b1590d0fd 100644
--- a/stdlib/tst-swapcontext1.c
+++ b/stdlib/tst-swapcontext1.c
@@ -29,7 +29,7 @@ const char *fmt2 = "\e[34m";
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func4(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
{
@@ -39,7 +39,7 @@ func4(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
printf(" %sfunc4: returning\e[0m\n", fmt);
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func3(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
{
@@ -48,7 +48,7 @@ func3(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
printf(" %sfunc3: returning\e[0m\n", fmt);
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func1(void)
{
@@ -59,7 +59,7 @@ func1(void)
}
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func2(void)
{
diff --git a/stdlib/tst-swapcontext2.c b/stdlib/tst-swapcontext2.c
index a9c1dc827c..f8efdde7e6 100644
--- a/stdlib/tst-swapcontext2.c
+++ b/stdlib/tst-swapcontext2.c
@@ -32,7 +32,7 @@ static jmp_buf jmpbuf;
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func4(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
{
@@ -42,7 +42,7 @@ func4(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
printf(" %sfunc4: returning\e[0m\n", fmt);
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func3(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
{
@@ -51,7 +51,7 @@ func3(ucontext_t *uocp, ucontext_t *ucp, const char *str, const char *fmt)
printf(" %sfunc3: returning\e[0m\n", fmt);
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func1(void)
{
@@ -67,7 +67,7 @@ func1(void)
}
}
-__attribute__((noinline, noclone))
+__attribute_optimization_barrier__
static void
func2(void)
{
diff --git a/stdlib/tst-thread-quick_exit.cc b/stdlib/tst-thread-quick_exit.cc
index dadccee334..66ea855a0d 100644
--- a/stdlib/tst-thread-quick_exit.cc
+++ b/stdlib/tst-thread-quick_exit.cc
@@ -30,7 +30,7 @@ thread_local A a1;
thread_local A a2;
void
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
optimization_barrier (A &)
{
}