2014-06-06 17:09:01

by Han Shen(沈涵)

[permalink] [raw]
Subject: Re: "." in vmlinux.lds.S

A gentle ping?

On Tue, Jun 3, 2014 at 2:46 PM, Hán Shěn (沈涵) <[email protected]> wrote:
> Hi we are trying to boot up a x86_64 chrome book using binutils 2.24 and
> kernel 3.8, but failed.
>
> After some triage work, we found that a 2-year-old binutil CL changed the
> interpretation of "." in linker script (short story: absolute -> relative,
> long story: https://sourceware.org/ml/binutils/2012-06/msg00155.html).
>
> After some further work, we are able to boot the kernel with a kernel patch
> pasted at EOM. I am curious, why the upstream kernel is never hit by this
> behavior? We enabled "CONFIG_DEBUG_RODATA", so we were hit, is this some
> macro not usually turned on?
>
> Patch here ----
> diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
> index d329fc4..d5dc570 100644
> --- a/arch/x86/kernel/vmlinux.lds.S
> +++ b/arch/x86/kernel/vmlinux.lds.S
> @@ -58,7 +58,7 @@ jiffies_64 = jiffies;
>
> #define X64_ALIGN_DEBUG_RODATA_END \
> . = ALIGN(HPAGE_SIZE); \
> - __end_rodata_hpage_align = .;
> + __end_rodata_hpage_align = ABSOLUTE(.);
>
> #else
>
> @@ -159,7 +159,7 @@ SECTIONS
> #ifdef CONFIG_X86_64
>
> . = ALIGN(PAGE_SIZE);
> - __vvar_page = .;
> + __vvar_page = ABSOLUTE(.);
>
> .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) {
> /* work around gold bug 13023 */
> @@ -325,7 +325,7 @@ SECTIONS
> __brk_limit = .;
> }
>
> - _end = .;
> + _end = ABSOLUTE(.);
>
> STABS_DEBUG
> DWARF_DEBUG
>



--
Han Shen | Software Engineer | [email protected] | +1-650-440-3330


2014-06-06 18:40:11

by Andy Lutomirski

[permalink] [raw]
Subject: Re: "." in vmlinux.lds.S

On 06/06/2014 10:08 AM, Hán Shěn (沈涵) wrote:
> A gentle ping?
>
> On Tue, Jun 3, 2014 at 2:46 PM, Hán Shěn (沈涵) <[email protected]> wrote:
>> Hi we are trying to boot up a x86_64 chrome book using binutils 2.24 and
>> kernel 3.8, but failed.
>>
>> After some triage work, we found that a 2-year-old binutil CL changed the
>> interpretation of "." in linker script (short story: absolute -> relative,
>> long story: https://sourceware.org/ml/binutils/2012-06/msg00155.html).
>>
>> After some further work, we are able to boot the kernel with a kernel patch
>> pasted at EOM. I am curious, why the upstream kernel is never hit by this
>> behavior? We enabled "CONFIG_DEBUG_RODATA", so we were hit, is this some
>> macro not usually turned on?

What does a section-relative symbol do?

--Andy

2014-06-06 18:53:32

by Han Shen(沈涵)

[permalink] [raw]
Subject: Re: "." in vmlinux.lds.S

Yeah, the symbol "__end_rodata_hpage_align" is defined as absolute in
older binutils, the newer binutils making it relative seems
meaningless in this context.

On Fri, Jun 6, 2014 at 11:40 AM, Andy Lutomirski <[email protected]> wrote:
> On 06/06/2014 10:08 AM, Hán Shěn (沈涵) wrote:
>> A gentle ping?
>>
>> On Tue, Jun 3, 2014 at 2:46 PM, Hán Shěn (沈涵) <[email protected]> wrote:
>>> Hi we are trying to boot up a x86_64 chrome book using binutils 2.24 and
>>> kernel 3.8, but failed.
>>>
>>> After some triage work, we found that a 2-year-old binutil CL changed the
>>> interpretation of "." in linker script (short story: absolute -> relative,
>>> long story: https://sourceware.org/ml/binutils/2012-06/msg00155.html).
>>>
>>> After some further work, we are able to boot the kernel with a kernel patch
>>> pasted at EOM. I am curious, why the upstream kernel is never hit by this
>>> behavior? We enabled "CONFIG_DEBUG_RODATA", so we were hit, is this some
>>> macro not usually turned on?
>
> What does a section-relative symbol do?
>
> --Andy



--
Han Shen | Software Engineer | [email protected] | +1-650-440-3330

2014-06-06 19:08:54

by Andy Lutomirski

[permalink] [raw]
Subject: Re: "." in vmlinux.lds.S

On Fri, Jun 6, 2014 at 11:53 AM, Hán Shěn (沈涵) <[email protected]> wrote:
> Yeah, the symbol "__end_rodata_hpage_align" is defined as absolute in
> older binutils, the newer binutils making it relative seems
> meaningless in this context.

What I mean is: what actually changes in the linker output when the
symbol is relative?

--Andy

>
> On Fri, Jun 6, 2014 at 11:40 AM, Andy Lutomirski <[email protected]> wrote:
>> On 06/06/2014 10:08 AM, Hán Shěn (沈涵) wrote:
>>> A gentle ping?
>>>
>>> On Tue, Jun 3, 2014 at 2:46 PM, Hán Shěn (沈涵) <[email protected]> wrote:
>>>> Hi we are trying to boot up a x86_64 chrome book using binutils 2.24 and
>>>> kernel 3.8, but failed.
>>>>
>>>> After some triage work, we found that a 2-year-old binutil CL changed the
>>>> interpretation of "." in linker script (short story: absolute -> relative,
>>>> long story: https://sourceware.org/ml/binutils/2012-06/msg00155.html).
>>>>
>>>> After some further work, we are able to boot the kernel with a kernel patch
>>>> pasted at EOM. I am curious, why the upstream kernel is never hit by this
>>>> behavior? We enabled "CONFIG_DEBUG_RODATA", so we were hit, is this some
>>>> macro not usually turned on?
>>
>> What does a section-relative symbol do?
>>
>> --Andy
>
>
>
> --
> Han Shen | Software Engineer | [email protected] | +1-650-440-3330



--
Andy Lutomirski
AMA Capital Management, LLC

2014-06-06 20:45:17

by Han Shen(沈涵)

[permalink] [raw]
Subject: Re: "." in vmlinux.lds.S

Hi Andy, this changes "Ndx" field for the symbol. For example, one of
the symbol '__end_rodata_hpage_align' in symtab, the contents changed
from
50206: ffffffff81800000 0 NOTYPE GLOBAL DEFAULT ABS
__end_rodata_hpage_align
which is correct, to
50206: ffffffff81800000 0 NOTYPE GLOBAL DEFAULT 25
__end_rodata_hpage_align
(25 is the index to section '.data')
which is wrong.

Han



On Fri, Jun 6, 2014 at 12:08 PM, Andy Lutomirski <[email protected]> wrote:
> On Fri, Jun 6, 2014 at 11:53 AM, Hán Shěn (沈涵) <[email protected]> wrote:
>> Yeah, the symbol "__end_rodata_hpage_align" is defined as absolute in
>> older binutils, the newer binutils making it relative seems
>> meaningless in this context.
>
> What I mean is: what actually changes in the linker output when the
> symbol is relative?
>
> --Andy
>
>>
>> On Fri, Jun 6, 2014 at 11:40 AM, Andy Lutomirski <[email protected]> wrote:
>>> On 06/06/2014 10:08 AM, Hán Shěn (沈涵) wrote:
>>>> A gentle ping?
>>>>
>>>> On Tue, Jun 3, 2014 at 2:46 PM, Hán Shěn (沈涵) <[email protected]> wrote:
>>>>> Hi we are trying to boot up a x86_64 chrome book using binutils 2.24 and
>>>>> kernel 3.8, but failed.
>>>>>
>>>>> After some triage work, we found that a 2-year-old binutil CL changed the
>>>>> interpretation of "." in linker script (short story: absolute -> relative,
>>>>> long story: https://sourceware.org/ml/binutils/2012-06/msg00155.html).
>>>>>
>>>>> After some further work, we are able to boot the kernel with a kernel patch
>>>>> pasted at EOM. I am curious, why the upstream kernel is never hit by this
>>>>> behavior? We enabled "CONFIG_DEBUG_RODATA", so we were hit, is this some
>>>>> macro not usually turned on?
>>>
>>> What does a section-relative symbol do?
>>>
>>> --Andy
>>
>>
>>
>> --
>> Han Shen | Software Engineer | [email protected] | +1-650-440-3330
>
>
>
> --
> Andy Lutomirski
> AMA Capital Management, LLC



--
Han Shen | Software Engineer | [email protected] | +1-650-440-3330