Commit 70e3b465 authored by Kir Kolyshkin's avatar Kir Kolyshkin Committed by Pavel Emelyanov

arm: rm -Wa from CFLAGS

Somehow clang doesn't always like -Wa flags, for example when making
dependencies (see commit 9303ed3 ("Makefiles: move -Wa,--noexecstack
out of CFLAGS"), which causes build break, scary error messages, and
even hair loss.

There are many ways to solve this. This patch employs the one
that is simple and clean.

The -Wa,-mimplicit-it=always flag was added by commit 79c4b747
("arm: fix compilation on ARMv7"). The reason is, ARM needs an IT
instruction before certain conditionals. Those IT instructions are
almost always automatically generated by assembler itself, but in some
cases a special assembler flag (like the one above) is needed.

As there is only one place in the code that need IT, it's easy to patch
it (add explicit IT) and remove the flag. Note that "IT" generates
no machine code per se, so there should not be any functional change
(although I haven't checked it).

For more info on IT, see http://tinyurl.com/z3ldsdr

Hope for a review from our ARM experts.

travis-ci: success for Fixes to compile on arm with clang
Cc: Christopher Covington <cov@codeaurora.org>
Cc: Dmitry Safonov <dsafonov@virtuozzo.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarKir Kolyshkin <kir@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 1dc67ae8
...@@ -61,8 +61,6 @@ ifeq ($(ARCH),arm) ...@@ -61,8 +61,6 @@ ifeq ($(ARCH),arm)
ARMV := $(shell echo $(UNAME-M) | sed -nr 's/armv([[:digit:]]).*/\1/p; t; i7') ARMV := $(shell echo $(UNAME-M) | sed -nr 's/armv([[:digit:]]).*/\1/p; t; i7')
DEFINES := -DCONFIG_ARMV$(ARMV) DEFINES := -DCONFIG_ARMV$(ARMV)
USERCFLAGS += -Wa,-mimplicit-it=always
ifeq ($(ARMV),6) ifeq ($(ARMV),6)
USERCFLAGS += -march=armv6 USERCFLAGS += -march=armv6
endif endif
......
...@@ -27,6 +27,7 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) ...@@ -27,6 +27,7 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
"ldrex %1, [%3]\n" "ldrex %1, [%3]\n"
"mov %0, #0\n" "mov %0, #0\n"
"teq %1, %4\n" "teq %1, %4\n"
"it eq\n"
"strexeq %0, %5, [%3]\n" "strexeq %0, %5, [%3]\n"
: "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter) : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
: "r" (&ptr->counter), "Ir" (old), "r" (new) : "r" (&ptr->counter), "Ir" (old), "r" (new)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment