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-gl i 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.5...@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