• Kir Kolyshkin's avatar
    Makefiles: move -Wa,--noexecstack out of CFLAGS · 1fe09eb3
    Kir Kolyshkin authored
    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>
    1fe09eb3
Name
Last commit
Last update
..
c Loading commit data...
py Loading commit data...
Makefile Loading commit data...