summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-03-02 22:27:56 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-03-02 22:27:56 +0000
commit4dc23804a220f917f400e2404bc4803cd60491c7 (patch)
tree1fde64622a7eba2f67bdf966b93a7f3721b3da92
parent1c81d55fc4b07b51adf68558ba74ce975153e580 (diff)
Fix powerpc ifunc-sel.h build for -Os.
Compiling the testsuite for powerpc (multi-arch configurations) with -Os with GCC 7 fails with: In file included from ifuncmod1.c:7:0, from ifuncdep1.c:3: ../sysdeps/powerpc/ifunc-sel.h: In function 'ifunc_sel': ../sysdeps/powerpc/ifunc-sel.h:12:3: error: asm operand 2 probably doesn't match constraints [-Werror] __asm__ ("mflr 12\n\t" ^~~~~~~ ../sysdeps/powerpc/ifunc-sel.h:12:3: error: asm operand 3 probably doesn't match constraints [-Werror] ../sysdeps/powerpc/ifunc-sel.h:12:3: error: asm operand 4 probably doesn't match constraints [-Werror] ../sysdeps/powerpc/ifunc-sel.h:12:3: error: impossible constraint in 'asm' The "i" constraints on function pointers require the function call to be inlined so the compiler can see the constant function pointer arguments passed to the asm. This patch marks the relevant functions as always_inline accordingly. Tested that this fixes the -Os testsuite build for powerpc-linux-gnu-power4, powerpc64-linux-gnu, powerpc64le-linux-gnu with build-many-glibcs.py. * sysdeps/powerpc/ifunc-sel.h (ifunc_sel): Make always_inline. (ifunc_one): Likewise.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/powerpc/ifunc-sel.h4
2 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 001141c73d..f2dd409fd2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-02 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/powerpc/ifunc-sel.h (ifunc_sel): Make always_inline.
+ (ifunc_one): Likewise.
+
2018-03-01 DJ Delorie <dj@delorie.com>
[BZ #22342]
diff --git a/sysdeps/powerpc/ifunc-sel.h b/sysdeps/powerpc/ifunc-sel.h
index bdb00bf2c6..7112bed22c 100644
--- a/sysdeps/powerpc/ifunc-sel.h
+++ b/sysdeps/powerpc/ifunc-sel.h
@@ -4,7 +4,7 @@
extern int global;
-static inline void *
+static inline __attribute__ ((always_inline)) void *
inhibit_stack_protector
ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void))
{
@@ -32,7 +32,7 @@ ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void))
return ret;
}
-static inline void *
+static inline __attribute__ ((always_inline)) void *
inhibit_stack_protector
ifunc_one (int (*f1) (void))
{