Commit 1fe09eb3 authored by Kir Kolyshkin's avatar Kir Kolyshkin Committed by Andrei Vagin

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: 's avatarKir Kolyshkin <kir@openvz.org>
Reviewed-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Reviewed-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent b6c43007
...@@ -22,9 +22,10 @@ asflags-y += -iquote $(PLUGIN_ARCH_DIR)/include ...@@ -22,9 +22,10 @@ asflags-y += -iquote $(PLUGIN_ARCH_DIR)/include
asflags-y += -iquote $(PLUGIN_ARCH_DIR) asflags-y += -iquote $(PLUGIN_ARCH_DIR)
# General flags for assembly # 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 += -D__ASSEMBLY__ -nostdlib -fomit-frame-pointer
asflags-y += -fno-stack-protector asflags-y += -fno-stack-protector
ldflags-y += -z noexecstack
# #
# Fds plugin # Fds plugin
......
target := native target := native
CFLAGS := $(filter-out -DCONFIG_X86_64,$(CFLAGS)) 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 CFLAGS_native += -fpie
......
...@@ -4,4 +4,5 @@ obj-y += $(SRC_DIR)/images/rpc.pb-c.o ...@@ -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/$(ARCH_DIR)/include
ccflags-y += -iquote $(SRC_DIR)/criu/include -iquote $(obj)/.. ccflags-y += -iquote $(SRC_DIR)/criu/include -iquote $(obj)/..
ccflags-y += -iquote $(SRC_DIR)/images ccflags-y += -iquote $(SRC_DIR)/images
ccflags-y += -fPIC -Wa,--noexecstack -fno-stack-protector ccflags-y += -fPIC -fno-stack-protector
ldflags-y += -z noexecstack
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