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

Kir Kolyshkin kir at virtuozzo.com
Thu Oct 13 18:42:40 PDT 2016


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.


More information about the CRIU mailing list