From a95269ab18fc1ac802dfc7f82bbc2d0a82695e51 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 23 Aug 2015 18:40:43 -0700 Subject: liburcu: Fix atomic function parameter types in calls __sync_val_compare_and_swap family specifically asks for proper types of pointer type parameters, gcc does not notice it but clang does and sends out errors calling it out. (From OE-Core rev: 2767b6be71ca809f4a39ba9b8707b311b8334434) (From OE-Core rev: 5a514163bc805e7f59405c0074cb577cf72b9f39) Signed-off-by: Khem Raj Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- ...cify-complete-types-for-atomic-function-c.patch | 158 +++++++++++++++++++++ meta/recipes-support/liburcu/liburcu_0.8.7.bb | 1 + 2 files changed, 159 insertions(+) create mode 100644 meta/recipes-support/liburcu/liburcu/0001-uatomic-Specify-complete-types-for-atomic-function-c.patch (limited to 'meta') diff --git a/meta/recipes-support/liburcu/liburcu/0001-uatomic-Specify-complete-types-for-atomic-function-c.patch b/meta/recipes-support/liburcu/liburcu/0001-uatomic-Specify-complete-types-for-atomic-function-c.patch new file mode 100644 index 0000000000..5ad0bbd159 --- /dev/null +++ b/meta/recipes-support/liburcu/liburcu/0001-uatomic-Specify-complete-types-for-atomic-function-c.patch @@ -0,0 +1,158 @@ +From 6af790818d074c103c4797f1ce764896f183e028 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 22 Aug 2015 21:35:03 -0700 +Subject: [PATCH] uatomic: Specify complete types for atomic function calls + +This was unearthed by clang compiler where it complained about parameter +mismatch, gcc doesnt notice this + +urcu/uatomic/generic.h:190:10: error: address argument to atomic builtin +must be a pointer to integer or pointer ('void *' invalid) + return __sync_add_and_fetch_4(addr, val); + +Fixed all instances thusly + +Signed-off-by: Khem Raj +--- +Upstream-Status: Submitted + + urcu/uatomic/generic.h | 40 ++++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 20 deletions(-) + +diff --git a/urcu/uatomic/generic.h b/urcu/uatomic/generic.h +index 37f59cc..0046ffd 100644 +--- a/urcu/uatomic/generic.h ++++ b/urcu/uatomic/generic.h +@@ -65,17 +65,17 @@ unsigned long _uatomic_cmpxchg(void *addr, unsigned long old, + switch (len) { + #ifdef UATOMIC_HAS_ATOMIC_BYTE + case 1: +- return __sync_val_compare_and_swap_1(addr, old, _new); ++ return __sync_val_compare_and_swap_1((unsigned char *)addr, old, _new); + #endif + #ifdef UATOMIC_HAS_ATOMIC_SHORT + case 2: +- return __sync_val_compare_and_swap_2(addr, old, _new); ++ return __sync_val_compare_and_swap_2((unsigned short int *)addr, old, _new); + #endif + case 4: +- return __sync_val_compare_and_swap_4(addr, old, _new); ++ return __sync_val_compare_and_swap_4((unsigned int *)addr, old, _new); + #if (CAA_BITS_PER_LONG == 64) + case 8: +- return __sync_val_compare_and_swap_8(addr, old, _new); ++ return __sync_val_compare_and_swap_8((unsigned long *)addr, old, _new); + #endif + } + _uatomic_link_error(); +@@ -100,20 +100,20 @@ void _uatomic_and(void *addr, unsigned long val, + switch (len) { + #ifdef UATOMIC_HAS_ATOMIC_BYTE + case 1: +- __sync_and_and_fetch_1(addr, val); ++ __sync_and_and_fetch_1((unsigned char *)addr, val); + return; + #endif + #ifdef UATOMIC_HAS_ATOMIC_SHORT + case 2: +- __sync_and_and_fetch_2(addr, val); ++ __sync_and_and_fetch_2((unsigned short int *)addr, val); + return; + #endif + case 4: +- __sync_and_and_fetch_4(addr, val); ++ __sync_and_and_fetch_4((unsigned int *)addr, val); + return; + #if (CAA_BITS_PER_LONG == 64) + case 8: +- __sync_and_and_fetch_8(addr, val); ++ __sync_and_and_fetch_8((unsigned long *)addr, val); + return; + #endif + } +@@ -139,20 +139,20 @@ void _uatomic_or(void *addr, unsigned long val, + switch (len) { + #ifdef UATOMIC_HAS_ATOMIC_BYTE + case 1: +- __sync_or_and_fetch_1(addr, val); ++ __sync_or_and_fetch_1((unsigned char *)addr, val); + return; + #endif + #ifdef UATOMIC_HAS_ATOMIC_SHORT + case 2: +- __sync_or_and_fetch_2(addr, val); ++ __sync_or_and_fetch_2((unsigned short int *)addr, val); + return; + #endif + case 4: +- __sync_or_and_fetch_4(addr, val); ++ __sync_or_and_fetch_4((unsigned int *)addr, val); + return; + #if (CAA_BITS_PER_LONG == 64) + case 8: +- __sync_or_and_fetch_8(addr, val); ++ __sync_or_and_fetch_8((unsigned long *)addr, val); + return; + #endif + } +@@ -180,17 +180,17 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, + switch (len) { + #ifdef UATOMIC_HAS_ATOMIC_BYTE + case 1: +- return __sync_add_and_fetch_1(addr, val); ++ return __sync_add_and_fetch_1((unsigned char *)addr, val); + #endif + #ifdef UATOMIC_HAS_ATOMIC_SHORT + case 2: +- return __sync_add_and_fetch_2(addr, val); ++ return __sync_add_and_fetch_2((unsigned short int *)addr, val); + #endif + case 4: +- return __sync_add_and_fetch_4(addr, val); ++ return __sync_add_and_fetch_4((unsigned int *)addr, val); + #if (CAA_BITS_PER_LONG == 64) + case 8: +- return __sync_add_and_fetch_8(addr, val); ++ return __sync_add_and_fetch_8((unsigned long *)addr, val); + #endif + } + _uatomic_link_error(); +@@ -218,7 +218,7 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) + + do { + old = uatomic_read((unsigned char *)addr); +- } while (!__sync_bool_compare_and_swap_1(addr, old, val)); ++ } while (!__sync_bool_compare_and_swap_1((unsigned char *)addr, old, val)); + + return old; + } +@@ -230,7 +230,7 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) + + do { + old = uatomic_read((unsigned short *)addr); +- } while (!__sync_bool_compare_and_swap_2(addr, old, val)); ++ } while (!__sync_bool_compare_and_swap_2((unsigned short int *)addr, old, val)); + + return old; + } +@@ -241,7 +241,7 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) + + do { + old = uatomic_read((unsigned int *)addr); +- } while (!__sync_bool_compare_and_swap_4(addr, old, val)); ++ } while (!__sync_bool_compare_and_swap_4((unsigned int *)addr, old, val)); + + return old; + } +@@ -252,7 +252,7 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) + + do { + old = uatomic_read((unsigned long *)addr); +- } while (!__sync_bool_compare_and_swap_8(addr, old, val)); ++ } while (!__sync_bool_compare_and_swap_8((unsigned long *)addr, old, val)); + + return old; + } +-- +2.1.4 + diff --git a/meta/recipes-support/liburcu/liburcu_0.8.7.bb b/meta/recipes-support/liburcu/liburcu_0.8.7.bb index 71cb149d95..a7f4f51b5b 100644 --- a/meta/recipes-support/liburcu/liburcu_0.8.7.bb +++ b/meta/recipes-support/liburcu/liburcu_0.8.7.bb @@ -10,6 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0f060c30a27922ce9c0d557a639b4fa3 \ SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2 \ file://Revert-Blacklist-ARM-gcc-4.8.0-4.8.1-4.8.2.patch \ file://aarch64.patch \ + file://0001-uatomic-Specify-complete-types-for-atomic-function-c.patch \ " SRC_URI[md5sum] = "7a6ee17871d31226db3f618e28351d22" -- cgit 1.2.3-korg