From 1fe09eb358cbe21a5859ed63fe13fdd2b3dab0ae Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Wed, 12 Oct 2016 04:46:00 +0300 Subject: [PATCH] Makefiles: move -Wa,--noexecstack out of CFLAGS The problem is, -Wa is a flag for assembler, but CFLAGS are also used to generate dependencies, and clang complains loudly when it is used for deps: > > DEP compel/arch/x86/plugins/std/syscalls-64.d > > clang-3.8: error: argument unused during compilation: > > '-Wa,--noexecstack' This patch moved the noexecflag from assembler to linker. I am not 100% sure but the end result seems to be the same. This fixes dependency generation when using clang instead of gcc. I surely have done my research before proposing this change, and I have tested this change as good as I could. Sorry, I should have provided more background in the commit message. Here it goes. There are a few ways to have non-executable stack: 1. mark the assembler source file (.S) with .section .note.GNU-stack,"",%progbits 2. pass the -Wa,--noexecstack to compiler 3. pass the -z execstack to linker All three ways are fine, let's see them in greater details. Some people say (1) is the best way, but we have way too many .S files now (23 of them, to be exact). Anyway, I can certainly do it this way if you like, just let me know. It would look like this: --- a/compel/arch/aarch64/plugins/std/syscalls/syscall-aux.S +++ b/compel/arch/aarch64/plugins/std/syscalls/syscall-aux.S @@ -3,6 +3,8 @@ * that are not implemented in the AArch64 Linux kernel */ +.section .note.GNU-stack,"",%progbits + ENTRY(sys_open) mov x3, x2 mov x2, x1 Way (2) is what is currently used. Unfortunately it breaks dependency generation with clang. One way to fix it would be to filter-out the bad flag when we're generating deps. I tried experimenting with $(filter-out) function in Makefiles today but it's complicated and I failed to make it work. Way (3) is what this commit offers. It seem to work fine while being the least intrusive. Signed-off-by: Kir Kolyshkin Reviewed-by: Cyrill Gorcunov Reviewed-by: Dmitry Safonov Signed-off-by: Pavel Emelyanov Signed-off-by: Andrei Vagin --- compel/plugins/Makefile | 3 ++- criu/pie/Makefile.library | 3 ++- lib/c/Makefile | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compel/plugins/Makefile b/compel/plugins/Makefile index 09587d1e0..ac54f7c2e 100644 --- a/compel/plugins/Makefile +++ b/compel/plugins/Makefile @@ -22,9 +22,10 @@ asflags-y += -iquote $(PLUGIN_ARCH_DIR)/include asflags-y += -iquote $(PLUGIN_ARCH_DIR) # General flags for assembly -asflags-y += -fpie -Wstrict-prototypes -Wa,--noexecstack +asflags-y += -fpie -Wstrict-prototypes asflags-y += -D__ASSEMBLY__ -nostdlib -fomit-frame-pointer asflags-y += -fno-stack-protector +ldflags-y += -z noexecstack # # Fds plugin diff --git a/criu/pie/Makefile.library b/criu/pie/Makefile.library index 3b5380194..1b408d14c 100644 --- a/criu/pie/Makefile.library +++ b/criu/pie/Makefile.library @@ -1,7 +1,8 @@ target := native CFLAGS := $(filter-out -DCONFIG_X86_64,$(CFLAGS)) -CFLAGS += -Wa,--noexecstack -fno-stack-protector -DCR_NOGLIBC +CFLAGS += -fno-stack-protector -DCR_NOGLIBC +LDFLAGS += -z noexecstack CFLAGS_native += -fpie diff --git a/lib/c/Makefile b/lib/c/Makefile index 21bf85614..68cf2b9ce 100644 --- a/lib/c/Makefile +++ b/lib/c/Makefile @@ -4,4 +4,5 @@ obj-y += $(SRC_DIR)/images/rpc.pb-c.o ccflags-y += -iquote $(SRC_DIR)/criu/$(ARCH_DIR)/include ccflags-y += -iquote $(SRC_DIR)/criu/include -iquote $(obj)/.. ccflags-y += -iquote $(SRC_DIR)/images -ccflags-y += -fPIC -Wa,--noexecstack -fno-stack-protector +ccflags-y += -fPIC -fno-stack-protector +ldflags-y += -z noexecstack