[CRIU] [PATCH 05/23] Makefiles: move -Wa, --noexecstack out of CFLAGS

Dmitry Safonov dsafonov at virtuozzo.com
Fri Oct 14 02:40:37 PDT 2016


On 10/14/2016 04:42 AM, Kir Kolyshkin wrote:
> On 10/13/2016 05:19 AM, Pavel Emelyanov wrote:
>> On 10/12/2016 04:46 AM, Kir Kolyshkin wrote:
>>> 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.
>> Cyrill, Dima what would you say?
>
> 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:
>
> diff --git a/compel/arch/aarch64/plugins/std/syscalls/syscall-aux.S
> b/compel/arch/aarch64/plugins/std/syscalls/syscall-aux.S
> index 00ccf79..4091680 100644
> --- 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.
>
> Let me know what you think.
>
> Kir.

There is also an option to provide this somehow like:
%.o: override AFLAGS += -Wa,--noexecstack

but I belive what you got with ldflags is nicer.
Let's tryout - no obivious reasons why it may broke something,
so if it will anyway - we'll fix it on the top.

-- 
              Dmitry


More information about the CRIU mailing list