[CRIU] [PATCH 05/23] Makefiles: move -Wa, --noexecstack out of CFLAGS
Kir Kolyshkin
kir at virtuozzo.com
Fri Oct 14 11:15:16 PDT 2016
On 10/14/2016 02:40 AM, Dmitry Safonov wrote:
> 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
That's same (or very similar to) as (2) above (and similar to the way
it was done before). Same consequences -- breaks dependency generation
with clang.
>
> 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.
>
More information about the CRIU
mailing list