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

Dmitry Safonov dsafonov at virtuozzo.com
Fri Oct 14 11:17:14 PDT 2016


On 10/14/2016 09:15 PM, Kir Kolyshkin wrote:
> 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.

No, it will pass AFLAGS only for %.o files, but not for %.d.
Anyway again, I don't think it's prettier than ldflags and may need
to be more target-specific.

>> 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