2016-11-16 14:19:27

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] x86: avoid warning for zero-filling .bss

The latest binutils are warning about a .fill directive with an explicit
value in a .bss section:

arch/x86/kernel/head_32.S: Assembler messages:
arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'

This comes from the 'ENTRY()' macro padding the space between the symbols
with 'nop'. Open-coding the .globl directive without the padding
avoids that warning.

Signed-off-by: Arnd Bergmann <[email protected]>
---
arch/x86/kernel/head_32.S | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index df541ac2071e..4e8577d03372 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -669,14 +669,17 @@ __PAGE_ALIGNED_BSS
initial_pg_pmd:
.fill 1024*KPMDS,4,0
#else
-ENTRY(initial_page_table)
+.globl initial_page_table
+initial_page_table:
.fill 1024,4,0
#endif
initial_pg_fixmap:
.fill 1024,4,0
-ENTRY(empty_zero_page)
+.globl empty_zero_page
+empty_zero_page:
.fill 4096,1,0
-ENTRY(swapper_pg_dir)
+.globl swapper_pg_dir
+swapper_pg_dir:
.fill 1024,4,0
EXPORT_SYMBOL(empty_zero_page)

--
2.9.0


Subject: [tip:x86/urgent] x86/boot: Avoid warning for zero-filling .bss

Commit-ID: 553bbc11aa6c1f9e0f529a06aeeca15fbe4a3985
Gitweb: http://git.kernel.org/tip/553bbc11aa6c1f9e0f529a06aeeca15fbe4a3985
Author: Arnd Bergmann <[email protected]>
AuthorDate: Wed, 16 Nov 2016 15:17:09 +0100
Committer: Ingo Molnar <[email protected]>
CommitDate: Thu, 17 Nov 2016 07:34:58 +0100

x86/boot: Avoid warning for zero-filling .bss

The latest binutils are warning about a .fill directive with an explicit
value in a .bss section:

arch/x86/kernel/head_32.S: Assembler messages:
arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'

This comes from the 'ENTRY()' macro padding the space between the symbols
with 'nop' via:

.align 4,0x90

Open-coding the .globl directive without the padding avoids that warning,
as all the symbols are already page aligned.

Signed-off-by: Arnd Bergmann <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Brian Gerst <[email protected]>
Cc: Denys Vlasenko <[email protected]>
Cc: H. Peter Anvin <[email protected]>
Cc: Josh Poimboeuf <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
---
arch/x86/kernel/head_32.S | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index b6b2f02..2dabea4 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -665,14 +665,17 @@ __PAGE_ALIGNED_BSS
initial_pg_pmd:
.fill 1024*KPMDS,4,0
#else
-ENTRY(initial_page_table)
+.globl initial_page_table
+initial_page_table:
.fill 1024,4,0
#endif
initial_pg_fixmap:
.fill 1024,4,0
-ENTRY(empty_zero_page)
+.globl empty_zero_page
+empty_zero_page:
.fill 4096,1,0
-ENTRY(swapper_pg_dir)
+.globl swapper_pg_dir
+swapper_pg_dir:
.fill 1024,4,0
EXPORT_SYMBOL(empty_zero_page)


2016-11-17 21:02:52

by Josh Poimboeuf

[permalink] [raw]
Subject: Re: [PATCH] x86: avoid warning for zero-filling .bss

On Wed, Nov 16, 2016 at 03:17:09PM +0100, Arnd Bergmann wrote:
> The latest binutils are warning about a .fill directive with an explicit
> value in a .bss section:
>
> arch/x86/kernel/head_32.S: Assembler messages:
> arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
> arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'
>
> This comes from the 'ENTRY()' macro padding the space between the symbols
> with 'nop'. Open-coding the .globl directive without the padding
> avoids that warning.

How is there space between the symbols? Aren't they already aligned?

Isn't the warning really about the fact that it's unnecessarily filling
a .bss section with zeros? Would it make sense to use .align instead?

> ---
> arch/x86/kernel/head_32.S | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
> index df541ac2071e..4e8577d03372 100644
> --- a/arch/x86/kernel/head_32.S
> +++ b/arch/x86/kernel/head_32.S
> @@ -669,14 +669,17 @@ __PAGE_ALIGNED_BSS
> initial_pg_pmd:
> .fill 1024*KPMDS,4,0
> #else
> -ENTRY(initial_page_table)
> +.globl initial_page_table
> +initial_page_table:
> .fill 1024,4,0
> #endif
> initial_pg_fixmap:
> .fill 1024,4,0
> -ENTRY(empty_zero_page)
> +.globl empty_zero_page
> +empty_zero_page:
> .fill 4096,1,0
> -ENTRY(swapper_pg_dir)
> +.globl swapper_pg_dir
> +swapper_pg_dir:
> .fill 1024,4,0
> EXPORT_SYMBOL(empty_zero_page)
>
> --
> 2.9.0
>

--
Josh

2016-11-17 21:19:47

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] x86: avoid warning for zero-filling .bss

On November 17, 2016 1:02:48 PM PST, Josh Poimboeuf <[email protected]> wrote:
>On Wed, Nov 16, 2016 at 03:17:09PM +0100, Arnd Bergmann wrote:
>> The latest binutils are warning about a .fill directive with an
>explicit
>> value in a .bss section:
>>
>> arch/x86/kernel/head_32.S: Assembler messages:
>> arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in
>section `.bss..page_aligned'
>> arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in
>section `.bss..page_aligned'
>>
>> This comes from the 'ENTRY()' macro padding the space between the
>symbols
>> with 'nop'. Open-coding the .globl directive without the padding
>> avoids that warning.
>
>How is there space between the symbols? Aren't they already aligned?
>
>Isn't the warning really about the fact that it's unnecessarily filling
>a .bss section with zeros? Would it make sense to use .align instead?
>
>> ---
>> arch/x86/kernel/head_32.S | 9 ++++++---
>> 1 file changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
>> index df541ac2071e..4e8577d03372 100644
>> --- a/arch/x86/kernel/head_32.S
>> +++ b/arch/x86/kernel/head_32.S
>> @@ -669,14 +669,17 @@ __PAGE_ALIGNED_BSS
>> initial_pg_pmd:
>> .fill 1024*KPMDS,4,0
>> #else
>> -ENTRY(initial_page_table)
>> +.globl initial_page_table
>> +initial_page_table:
>> .fill 1024,4,0
>> #endif
>> initial_pg_fixmap:
>> .fill 1024,4,0
>> -ENTRY(empty_zero_page)
>> +.globl empty_zero_page
>> +empty_zero_page:
>> .fill 4096,1,0
>> -ENTRY(swapper_pg_dir)
>> +.globl swapper_pg_dir
>> +swapper_pg_dir:
>> .fill 1024,4,0
>> EXPORT_SYMBOL(empty_zero_page)
>>
>> --
>> 2.9.0
>>

Use .org, .align, or .space
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

2016-11-17 22:34:28

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] x86: avoid warning for zero-filling .bss

On Thursday, November 17, 2016 3:02:48 PM CET Josh Poimboeuf wrote:
> On Wed, Nov 16, 2016 at 03:17:09PM +0100, Arnd Bergmann wrote:
> > The latest binutils are warning about a .fill directive with an explicit
> > value in a .bss section:
> >
> > arch/x86/kernel/head_32.S: Assembler messages:
> > arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
> > arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'
> >
> > This comes from the 'ENTRY()' macro padding the space between the symbols
> > with 'nop'. Open-coding the .globl directive without the padding
> > avoids that warning.
>
> How is there space between the symbols? Aren't they already aligned?

My understanding is that they are aligned, it's just that gas complains
about the .align directive with a nonzero fill value.

> Isn't the warning really about the fact that it's unnecessarily filling
> a .bss section with zeros? Would it make sense to use .align instead?

Filling with zeroes is allowed, and that's what we are intending anyway.
.align would not do the right thing here as it only adds padding if it's
not already aligned, but we know it is.

Arnd

2016-11-17 22:44:50

by Josh Poimboeuf

[permalink] [raw]
Subject: Re: [PATCH] x86: avoid warning for zero-filling .bss

On Thu, Nov 17, 2016 at 11:32:30PM +0100, Arnd Bergmann wrote:
> On Thursday, November 17, 2016 3:02:48 PM CET Josh Poimboeuf wrote:
> > On Wed, Nov 16, 2016 at 03:17:09PM +0100, Arnd Bergmann wrote:
> > > The latest binutils are warning about a .fill directive with an explicit
> > > value in a .bss section:
> > >
> > > arch/x86/kernel/head_32.S: Assembler messages:
> > > arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
> > > arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'
> > >
> > > This comes from the 'ENTRY()' macro padding the space between the symbols
> > > with 'nop'. Open-coding the .globl directive without the padding
> > > avoids that warning.
> >
> > How is there space between the symbols? Aren't they already aligned?
>
> My understanding is that they are aligned, it's just that gas complains
> about the .align directive with a nonzero fill value.

Ah, I see now. In that case your patch looks fine to me.

Reviewed-by: Josh Poimboeuf <[email protected]>

>
> > Isn't the warning really about the fact that it's unnecessarily filling
> > a .bss section with zeros? Would it make sense to use .align instead?
>
> Filling with zeroes is allowed, and that's what we are intending anyway.
> .align would not do the right thing here as it only adds padding if it's
> not already aligned, but we know it is.

--
Josh

2016-11-18 00:08:11

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] x86: avoid warning for zero-filling .bss

On 11/17/16 14:44, Josh Poimboeuf wrote:
> On Thu, Nov 17, 2016 at 11:32:30PM +0100, Arnd Bergmann wrote:
>> On Thursday, November 17, 2016 3:02:48 PM CET Josh Poimboeuf wrote:
>>> On Wed, Nov 16, 2016 at 03:17:09PM +0100, Arnd Bergmann wrote:
>>>> The latest binutils are warning about a .fill directive with an explicit
>>>> value in a .bss section:
>>>>
>>>> arch/x86/kernel/head_32.S: Assembler messages:
>>>> arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
>>>> arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'
>>>>
>>>> This comes from the 'ENTRY()' macro padding the space between the symbols
>>>> with 'nop'. Open-coding the .globl directive without the padding
>>>> avoids that warning.
>>>
>>> How is there space between the symbols? Aren't they already aligned?
>>
>> My understanding is that they are aligned, it's just that gas complains
>> about the .align directive with a nonzero fill value.
>
> Ah, I see now. In that case your patch looks fine to me.
>

Yes, ENTRY() is for code.

-hpa