2009-12-22 00:21:32

by Richard Weinberger

[permalink] [raw]
Subject: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

Hi,

CONFIG_STATIC_LINK=y is broken since 2.6.32.
The linux binary segfaults immediately.

This patch introduced the regression (bisected):
5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 is first bad commit
commit 5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80
Author: Tim Abbott <[email protected]>
Date: Thu Sep 24 10:36:20 2009 -0400

um: Clean up linker script using standard macros.

Signed-off-by: Tim Abbott <[email protected]>
Cc: Jeff Dike <[email protected]>
Cc: [email protected]
Acked-by: Sam Ravnborg <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>

:040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M arch

Cheers,
//richard


2009-12-22 00:28:05

by Tim Abbott

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

The individual chunks of that patch are all independent; could you
determine which one of the changes causes the problem?

-Tim Abbott

On Tue, 22 Dec 2009, richard -rw- weinberger wrote:

> Hi,
>
> CONFIG_STATIC_LINK=y is broken since 2.6.32.
> The linux binary segfaults immediately.
>
> This patch introduced the regression (bisected):
> 5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 is first bad commit
> commit 5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80
> Author: Tim Abbott <[email protected]>
> Date: Thu Sep 24 10:36:20 2009 -0400
>
> um: Clean up linker script using standard macros.
>
> Signed-off-by: Tim Abbott <[email protected]>
> Cc: Jeff Dike <[email protected]>
> Cc: [email protected]
> Acked-by: Sam Ravnborg <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>
>
> :040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
> fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M arch
>
> Cheers,
> //richard
>

2009-12-22 00:39:39

by Richard Weinberger

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

This is the bad changeset:

diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
index 2ebd397..e7a6cca 100644
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -22,11 +22,7 @@ SECTIONS
_text = .;
_stext = .;
__init_begin = .;
- .init.text : {
- _sinittext = .;
- INIT_TEXT
- _einittext = .;
- }
+ INIT_TEXT_SECTION(PAGE_SIZE)
. = ALIGN(PAGE_SIZE);

.text :

//richard
2009/12/22, Tim Abbott <[email protected]>:
> The individual chunks of that patch are all independent; could you
> determine which one of the changes causes the problem?
>
> -Tim Abbott
>
> On Tue, 22 Dec 2009, richard -rw- weinberger wrote:
>
>> Hi,
>>
>> CONFIG_STATIC_LINK=y is broken since 2.6.32.
>> The linux binary segfaults immediately.
>>
>> This patch introduced the regression (bisected):
>> 5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 is first bad commit
>> commit 5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80
>> Author: Tim Abbott <[email protected]>
>> Date: Thu Sep 24 10:36:20 2009 -0400
>>
>> um: Clean up linker script using standard macros.
>>
>> Signed-off-by: Tim Abbott <[email protected]>
>> Cc: Jeff Dike <[email protected]>
>> Cc: [email protected]
>> Acked-by: Sam Ravnborg <[email protected]>
>> Signed-off-by: Linus Torvalds <[email protected]>
>>
>> :040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
>> fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M arch
>>
>> Cheers,
>> //richard
>>
>

2009-12-22 00:53:59

by Tim Abbott

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

On Tue, 22 Dec 2009, richard -rw- weinberger wrote:

> This is the bad changeset:

Thanks for tracking that down. INIT_TEXT_SECTION is:

#define INIT_TEXT_SECTION(inittext_align) \
. = ALIGN(inittext_align); \
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(_sinittext) = .; \
INIT_TEXT \
VMLINUX_SYMBOL(_einittext) = .; \
}

So there are only 3 code changes here:
(1) wrapping _sinittext and _einittext in VMLINUX_SYMBOL
(2) Adding the AT(ADDR(.init.text) - LOAD_OFFSET)
(3) The added ALIGN(PAGE_SIZE) before the start of .init.text.

I don't yet see why any of these would be problematic; would you be
willing to try them and figure out the precise cause?

I suspect it'd be easiest for you to try those individual changes
interactively, but if it's not trivial for you, I'd be happy to generate a
patch series splitting out this change into pieces for you to bisect.

-Tim Abbott

2009-12-22 01:10:11

by Richard Weinberger

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

Adding the ALIGN(PAGE_SIZE) causes the segfault.
But I cannot tell you why. :-(

Cheers,
//richard

2009/12/22, Tim Abbott <[email protected]>:
> On Tue, 22 Dec 2009, richard -rw- weinberger wrote:
>
>> This is the bad changeset:
>
> Thanks for tracking that down. INIT_TEXT_SECTION is:
>
> #define INIT_TEXT_SECTION(inittext_align) \
> . = ALIGN(inittext_align); \
> .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { \
> VMLINUX_SYMBOL(_sinittext) = .; \
> INIT_TEXT \
> VMLINUX_SYMBOL(_einittext) = .; \
> }
>
> So there are only 3 code changes here:
> (1) wrapping _sinittext and _einittext in VMLINUX_SYMBOL
> (2) Adding the AT(ADDR(.init.text) - LOAD_OFFSET)
> (3) The added ALIGN(PAGE_SIZE) before the start of .init.text.
>
> I don't yet see why any of these would be problematic; would you be
> willing to try them and figure out the precise cause?
>
> I suspect it'd be easiest for you to try those individual changes
> interactively, but if it's not trivial for you, I'd be happy to generate a
> patch series splitting out this change into pieces for you to bisect.
>
> -Tim Abbott
>

2009-12-22 02:13:58

by Tim Abbott

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

On Tue, 22 Dec 2009, richard -rw- weinberger wrote:

> Adding the ALIGN(PAGE_SIZE) causes the segfault.
> But I cannot tell you why. :-(

OK, then the following patch should fix the regression by reverting that
unintentional change.

Someone should probably determine why the ALIGN causes a segfault, since
that is probably a bug, but I don't have time to do that investigation.

Richard, can you test that this patch fixes the issue for you?

(adding the UML maintainer and list to the thread).

-Tim Abbott

um: remove PAGE_SIZE alignment in linker script causing kernel segfault.

The linker script cleanup that I did in commit
5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 introduced an ALIGN(PAGE_SIZE)
when using INIT_TEXT_SECTION; this apparently causes the kernel to
segfault with CONFIG_STATIC_LINK=y.

I'm not certain why this would cause the kernel to segfault, but it seems
likely it is because previously it was the case that

__init_begin = _stext = _text = _sinittext

and with the extra ALIGN(PAGE_SIZE), _sinittext becomes different.

Signed-off-by: Tim Abbott <[email protected]>
Reported-by: richard -rw- weinberger <[email protected]>
Cc: Jeff Dike <[email protected]>
Cc: [email protected]
---
arch/um/kernel/uml.lds.S | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
index e7a6cca..664f942 100644
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -22,7 +22,7 @@ SECTIONS
_text = .;
_stext = .;
__init_begin = .;
- INIT_TEXT_SECTION(PAGE_SIZE)
+ INIT_TEXT_SECTION(0)
. = ALIGN(PAGE_SIZE);

.text :
--
1.6.5.7

2009-12-22 11:42:45

by Richard Weinberger

[permalink] [raw]
Subject: Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken

2009/12/22, Tim Abbott <[email protected]>:
> Richard, can you test that this patch fixes the issue for you?

Using INIT_TEXT_SECTION(0) instead of INIT_TEXT_SECTION(PAGE_SIZE)
works fine here.
(Tested with 2.6.33-rc1 and 2.6.32)

//richard