This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] glibc/sysdeps/microblaze/bits/atomic.h: Avoid include recursion to cause compiling break
- From: Chen Gang <gang dot chen dot 5i5j at gmail dot com>
- To: Michael Eager <eager at eagerm dot com>, roland at hack dot frob dot com, libc-alpha at sourceware dot org, gcc-patches List <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 21 Sep 2014 16:11:40 +0800
- Subject: [PATCH] glibc/sysdeps/microblaze/bits/atomic.h: Avoid include recursion to cause compiling break
- Authentication-results: sourceware.org; auth=none
The related definitions are in 'atomic.h', which also need include
'lowlevellock.h', which also need the related functions in 'atomic.h'.
The related configuration:
../glibc/configure --prefix /upstream/release/ \
--target=microblaze-linux-gnu --with-headers=/upstream/release/kernel \
--host=microblaze-linux-gnu
[root@localhost build-glibc]# cat configparms
CC=/usr/local/bin/microblaze-gchen-linux-gcc
BUILD_CC=gcc
LD=/usr/local/bin/microblaze-gchen-linux-ld
NM=/usr/local/bin/microblaze-gchen-linux-nm
AS=/usr/local/bin/microblaze-gchen-linux-as
AR=/usr/local/bin/microblaze-gchen-linux-ar
RANLIB=/usr/local/bin/microblaze-gchen-linux-ranlib
The related error:
/usr/local/bin/microblaze-gchen-linux-gcc assert.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wundef -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes -Werror=implicit-function-declaration -DFATAL_PREPARE_INCLUDE='<fatal-prepare.h>' -I../include -I/upstream/build-glibc/assert -I/upstream/build-glibc -I../sysdeps/unix/sysv/linux/microblaze -I../sysdeps/microblaze/nptl -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/microblaze -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.8.3/include -isystem /upstream/release/kernel -D_LIBC_REENTRANT -include ../include/libc-symbols.h -o /upstream/build-glibc/assert/assert.o -MD -MP -MF /upstream/build-gli
bc/assert/assert.o.dt -MT /upstream/build-glibc/assert/assert.o
In file included from ../nptl/descr.h:30:0,
from ../sysdeps/microblaze/nptl/tls.h:54,
from ../include/errno.h:27,
from ../sysdeps/unix/sysv/linux/microblaze/sysdep.h:27,
from ../sysdeps/microblaze/bits/atomic.h:20,
from ../include/atomic.h:50,
from assert.c:19:
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h: In function '__lll_cond_lock':
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h:208:27: error: implicit declaration of function 'atomic_exchange_acq' [-Werror=implicit-function-declaration]
if (__builtin_expect (atomic_exchange_acq (futex, 2), 0))
^
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h: In function '__lll_timedlock':
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h:226:25: error: implicit declaration of function 'atomic_compare_and_exchange_val_acq' [-Werror=implicit-function-declaration]
if (__builtin_expect (atomic_compare_and_exchange_val_acq (futex, 1, 0), 0) != 0)
^
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h: In function '__lll_robust_timedlock':
../sysdeps/unix/sysv/linux/microblaze/lowlevellock.h:238:25: error: implicit declaration of function 'atomic_compare_and_exchange_bool_acq' [-Werror=implicit-function-declaration]
if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, id, 0), 0))
^
cc1: some warnings being treated as errors
Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
sysdeps/microblaze/bits/atomic.h | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/sysdeps/microblaze/bits/atomic.h b/sysdeps/microblaze/bits/atomic.h
index 77004a0..c8d8d9c 100644
--- a/sysdeps/microblaze/bits/atomic.h
+++ b/sysdeps/microblaze/bits/atomic.h
@@ -17,7 +17,6 @@
<http://www.gnu.org/licenses/>. */
#include <stdint.h>
-#include <sysdep.h>
typedef int8_t atomic8_t;
@@ -267,3 +266,13 @@ typedef uintmax_t uatomic_max_t;
})
#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; })
+
+#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
+ ({ /* Cannot use __oldval here, because macros later in this file might \
+ call this macro with __oldval argument. */ \
+ __typeof (oldval) __atg3_old = (oldval); \
+ atomic_compare_and_exchange_val_acq (mem, newval, __atg3_old) \
+ != __atg3_old; \
+ })
+
+#include <sysdep.h>
--
1.9.3