mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 00:29:50 +00:00
perf tools: Add feature test for __sync_val_compare_and_swap
Add a feature test for __sync_val_compare_and_swap() and __sync_bool_compare_and_swap() Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1405332185-4050-30-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
a8a8f3eb5d
commit
f6d313699a
@ -164,6 +164,7 @@ CORE_FEATURE_TESTS = \
|
|||||||
backtrace \
|
backtrace \
|
||||||
dwarf \
|
dwarf \
|
||||||
fortify-source \
|
fortify-source \
|
||||||
|
sync-compare-and-swap \
|
||||||
glibc \
|
glibc \
|
||||||
gtk2 \
|
gtk2 \
|
||||||
gtk2-infobar \
|
gtk2-infobar \
|
||||||
@ -199,6 +200,7 @@ LIB_FEATURE_TESTS = \
|
|||||||
VF_FEATURE_TESTS = \
|
VF_FEATURE_TESTS = \
|
||||||
backtrace \
|
backtrace \
|
||||||
fortify-source \
|
fortify-source \
|
||||||
|
sync-compare-and-swap \
|
||||||
gtk2-infobar \
|
gtk2-infobar \
|
||||||
libelf-getphdrnum \
|
libelf-getphdrnum \
|
||||||
libelf-mmap \
|
libelf-mmap \
|
||||||
@ -272,6 +274,10 @@ CFLAGS += -I$(LIB_INCLUDE)
|
|||||||
|
|
||||||
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
|
CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
|
||||||
|
|
||||||
|
ifeq ($(feature-sync-compare-and-swap), 1)
|
||||||
|
CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef NO_BIONIC
|
ifndef NO_BIONIC
|
||||||
$(call feature_check,bionic)
|
$(call feature_check,bionic)
|
||||||
ifeq ($(feature-bionic), 1)
|
ifeq ($(feature-bionic), 1)
|
||||||
|
@ -5,6 +5,7 @@ FILES= \
|
|||||||
test-bionic.bin \
|
test-bionic.bin \
|
||||||
test-dwarf.bin \
|
test-dwarf.bin \
|
||||||
test-fortify-source.bin \
|
test-fortify-source.bin \
|
||||||
|
test-sync-compare-and-swap.bin \
|
||||||
test-glibc.bin \
|
test-glibc.bin \
|
||||||
test-gtk2.bin \
|
test-gtk2.bin \
|
||||||
test-gtk2-infobar.bin \
|
test-gtk2-infobar.bin \
|
||||||
@ -141,6 +142,9 @@ test-timerfd.bin:
|
|||||||
test-libdw-dwarf-unwind.bin:
|
test-libdw-dwarf-unwind.bin:
|
||||||
$(BUILD)
|
$(BUILD)
|
||||||
|
|
||||||
|
test-sync-compare-and-swap.bin:
|
||||||
|
$(BUILD) -Werror
|
||||||
|
|
||||||
-include *.d
|
-include *.d
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
|
@ -89,6 +89,10 @@
|
|||||||
# include "test-libdw-dwarf-unwind.c"
|
# include "test-libdw-dwarf-unwind.c"
|
||||||
#undef main
|
#undef main
|
||||||
|
|
||||||
|
#define main main_test_sync_compare_and_swap
|
||||||
|
# include "test-sync-compare-and-swap.c"
|
||||||
|
#undef main
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
main_test_libpython();
|
main_test_libpython();
|
||||||
@ -111,6 +115,7 @@ int main(int argc, char *argv[])
|
|||||||
main_test_timerfd();
|
main_test_timerfd();
|
||||||
main_test_stackprotector_all();
|
main_test_stackprotector_all();
|
||||||
main_test_libdw_dwarf_unwind();
|
main_test_libdw_dwarf_unwind();
|
||||||
|
main_test_sync_compare_and_swap(argc, argv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
volatile uint64_t x;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
uint64_t old, new = argc;
|
||||||
|
|
||||||
|
argv = argv;
|
||||||
|
do {
|
||||||
|
old = __sync_val_compare_and_swap(&x, 0, 0);
|
||||||
|
} while (!__sync_bool_compare_and_swap(&x, old, new));
|
||||||
|
return old == new;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user