Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6d31369 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarAdrian 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent a8a8f3eb
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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)
+4 −0
Original line number Original line Diff line number Diff line
@@ -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


###############################
###############################
+5 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}
+14 −0
Original line number Original line Diff line number Diff line
#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;
}