mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [REGRESSION] um: CONFIG_STATIC_LINK=y broken
@ 2009-12-22  0:21 richard -rw- weinberger
  2009-12-22  0:27 ` Tim Abbott
  0 siblings, 1 reply; 8+ messages in thread
From: richard -rw- weinberger @ 2009-12-22  0:21 UTC (permalink / raw)
  To: linux-kernel; +Cc: tabbott

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 <tabbott@ksplice.com>
Date:   Thu Sep 24 10:36:20 2009 -0400

    um: Clean up linker script using standard macros.

    Signed-off-by: Tim Abbott <tabbott@ksplice.com>
    Cc: Jeff Dike <jdike@addtoit.com>
    Cc: user-mode-linux-devel@lists.sourceforge.net
    Acked-by: Sam Ravnborg <sam@ravnborg.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

:040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M      arch

Cheers,
//richard

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  0:21 [REGRESSION] um: CONFIG_STATIC_LINK=y broken richard -rw- weinberger
@ 2009-12-22  0:27 ` Tim Abbott
  2009-12-22  0:39   ` richard -rw- weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Tim Abbott @ 2009-12-22  0:27 UTC (permalink / raw)
  To: richard -rw- weinberger; +Cc: linux-kernel

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 <tabbott@ksplice.com>
> Date:   Thu Sep 24 10:36:20 2009 -0400
> 
>     um: Clean up linker script using standard macros.
> 
>     Signed-off-by: Tim Abbott <tabbott@ksplice.com>
>     Cc: Jeff Dike <jdike@addtoit.com>
>     Cc: user-mode-linux-devel@lists.sourceforge.net
>     Acked-by: Sam Ravnborg <sam@ravnborg.org>
>     Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> 
> :040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
> fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M      arch
> 
> Cheers,
> //richard
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  0:27 ` Tim Abbott
@ 2009-12-22  0:39   ` richard -rw- weinberger
  2009-12-22  0:53     ` Tim Abbott
  0 siblings, 1 reply; 8+ messages in thread
From: richard -rw- weinberger @ 2009-12-22  0:39 UTC (permalink / raw)
  To: Tim Abbott; +Cc: linux-kernel

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 <tabbott@ksplice.com>:
> 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 <tabbott@ksplice.com>
>> Date:   Thu Sep 24 10:36:20 2009 -0400
>>
>>     um: Clean up linker script using standard macros.
>>
>>     Signed-off-by: Tim Abbott <tabbott@ksplice.com>
>>     Cc: Jeff Dike <jdike@addtoit.com>
>>     Cc: user-mode-linux-devel@lists.sourceforge.net
>>     Acked-by: Sam Ravnborg <sam@ravnborg.org>
>>     Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
>>
>> :040000 040000 43c1b7afe756beb0dc5073195916d54ac41e7546
>> fe33dda7c1b15c61a6a65195cc6522beb25e7ba2 M      arch
>>
>> Cheers,
>> //richard
>>
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  0:39   ` richard -rw- weinberger
@ 2009-12-22  0:53     ` Tim Abbott
  2009-12-22  1:10       ` richard -rw- weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Tim Abbott @ 2009-12-22  0:53 UTC (permalink / raw)
  To: richard -rw- weinberger; +Cc: linux-kernel

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  0:53     ` Tim Abbott
@ 2009-12-22  1:10       ` richard -rw- weinberger
  2009-12-22  2:13         ` Tim Abbott
  0 siblings, 1 reply; 8+ messages in thread
From: richard -rw- weinberger @ 2009-12-22  1:10 UTC (permalink / raw)
  To: Tim Abbott; +Cc: linux-kernel

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

Cheers,
//richard

2009/12/22, Tim Abbott <tabbott@ksplice.com>:
> 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
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  1:10       ` richard -rw- weinberger
@ 2009-12-22  2:13         ` Tim Abbott
  2009-12-22 11:42           ` richard -rw- weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Tim Abbott @ 2009-12-22  2:13 UTC (permalink / raw)
  To: richard -rw- weinberger; +Cc: linux-kernel, Jeff Dike, user-mode-linux-devel

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 <tabbott@ksplice.com>
Reported-by: richard -rw- weinberger <richard.weinberger@gmail.com>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: user-mode-linux-devel@lists.sourceforge.net
---
 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [REGRESSION] um: CONFIG_STATIC_LINK=y broken
  2009-12-22  2:13         ` Tim Abbott
@ 2009-12-22 11:42           ` richard -rw- weinberger
  0 siblings, 0 replies; 8+ messages in thread
From: richard -rw- weinberger @ 2009-12-22 11:42 UTC (permalink / raw)
  To: Tim Abbott; +Cc: linux-kernel, Jeff Dike, user-mode-linux-devel

2009/12/22, Tim Abbott <tabbott@ksplice.com>:
> 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [REGRESSION] um: CONFIG_STATIC_LINK=y broken
@ 2010-01-04 20:08 Tim Abbott
  0 siblings, 0 replies; 8+ messages in thread
From: Tim Abbott @ 2010-01-04 20:08 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: linux-kernel, Jeff Dike, user-mode-linux-devel, stable,
	richard -rw- weinberger, Sam Ravnborg

Hi Linus,

The following patch fixes a regression that I caused in 2.6.32 when 
cleaning up the um architecture's linker scripts.

I've not heard anything from the um maintainers (they have had since 
Richard Weinberger reported that this patch fixed the problem on December 
22), so I'm sending this to you now (and CCing stable@ since it affects 
2.6.32).

	-Tim Abbott

--

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

The linker script cleanup that I did in commit 
5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 accidentally introduced an 
ALIGN(PAGE_SIZE) when converting to use INIT_TEXT_SECTION; Richard 
Weinberger reported that this causes the kernel to segfault with 
CONFIG_STATIC_LINK=y.

I'm not certain why this extra alignment is a problem, but it seems likely 
it is because previously

__init_begin = _stext = _text = _sinittext 

and with the extra ALIGN(PAGE_SIZE), _sinittext becomes different from the 
rest.  So there is likely a bug here where something is assuming that 
_sinittext is the same as one of those other symbols.  But reverting the 
accidental change fixes the regression, so it seems worth committing that 
now.

Signed-off-by: Tim Abbott <tabbott@ksplice.com>
Reported-by: richard -rw- weinberger <richard.weinberger@gmail.com>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: user-mode-linux-devel@lists.sourceforge.net
---
 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-01-04 20:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-12-22  0:21 [REGRESSION] um: CONFIG_STATIC_LINK=y broken richard -rw- weinberger
2009-12-22  0:27 ` Tim Abbott
2009-12-22  0:39   ` richard -rw- weinberger
2009-12-22  0:53     ` Tim Abbott
2009-12-22  1:10       ` richard -rw- weinberger
2009-12-22  2:13         ` Tim Abbott
2009-12-22 11:42           ` richard -rw- weinberger
2010-01-04 20:08 Tim Abbott

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®