Don't pass the stack pointer to zImage's start() function

6 messages, 4 authors, 2007-03-16 · open the first message on its own page

Don't pass the stack pointer to zImage's start() function

From: David Gibson <hidden>
Date: 2007-03-15 04:29:04

At present, the zImage entry code passes a copy of the stack pointer
to the start() function.  There's no real reason for this; the only
thing start() does with it is print it out.  It appears to be a
leftover debugging hack, so, this patch removes it.

Signed-off-by: David Gibson <redacted>
---

As requested, a cleanup for this wart.  Please apply.

Index: working-2.6/arch/powerpc/boot/crt0.S
===================================================================
--- working-2.6.orig/arch/powerpc/boot/crt0.S	2007-03-15 14:04:14.000000000 +1100
+++ working-2.6/arch/powerpc/boot/crt0.S	2007-03-15 14:04:23.000000000 +1100
@@ -86,5 +86,4 @@ _zimage_start:
 	bl	platform_init
 
 	/* Call start */
-	mr	r3,r1
 	b	start
Index: working-2.6/arch/powerpc/boot/main.c
===================================================================
--- working-2.6.orig/arch/powerpc/boot/main.c	2007-03-15 14:03:09.000000000 +1100
+++ working-2.6/arch/powerpc/boot/main.c	2007-03-15 14:07:05.000000000 +1100
@@ -256,7 +256,7 @@ struct dt_ops dt_ops;
 struct console_ops console_ops;
 struct loader_info loader_info;
 
-void start(void *sp)
+void start(void)
 {
 	struct addr_range vmlinux, initrd;
 	kernel_entry_t kentry;
@@ -268,8 +268,7 @@ void start(void *sp)
 	if (platform_ops.fixups)
 		platform_ops.fixups();
 
-	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r",
-	       _start, sp);
+	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r", _start);
 
 	vmlinux = prep_kernel();
 	initrd = prep_initrd(vmlinux, loader_info.initrd_addr,
Index: working-2.6/arch/powerpc/boot/ops.h
===================================================================
--- working-2.6.orig/arch/powerpc/boot/ops.h	2007-03-15 14:07:13.000000000 +1100
+++ working-2.6/arch/powerpc/boot/ops.h	2007-03-15 14:07:17.000000000 +1100
@@ -66,7 +66,7 @@ struct loader_info {
 };
 extern struct loader_info loader_info;
 
-void start(void *sp);
+void start(void);
 int ft_init(void *dt_blob, unsigned int max_size, unsigned int max_find_device);
 int serial_console_init(void);
 int ns16550_console_init(void *devp, struct serial_console_data *scdp);
-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Re: Don't pass the stack pointer to zImage's start() function

From: Tony Breeds <hidden>
Date: 2007-03-15 04:35:46

On Thu, Mar 15, 2007 at 03:29:04PM +1100, David Gibson wrote:
At present, the zImage entry code passes a copy of the stack pointer
to the start() function.  There's no real reason for this; the only
thing start() does with it is print it out.  It appears to be a
leftover debugging hack, so, this patch removes it.
<snip>
quoted hunk
--- working-2.6.orig/arch/powerpc/boot/main.c	2007-03-15 14:03:09.000000000 +1100
+++ working-2.6/arch/powerpc/boot/main.c	2007-03-15 14:07:05.000000000 +1100
@@ -256,7 +256,7 @@ struct dt_ops dt_ops;
 struct console_ops console_ops;
 struct loader_info loader_info;
 
-void start(void *sp)
+void start(void)
 {
 	struct addr_range vmlinux, initrd;
 	kernel_entry_t kentry;
@@ -268,8 +268,7 @@ void start(void *sp)
 	if (platform_ops.fixups)
 		platform_ops.fixups();
 
-	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r",
-	       _start, sp);
+	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r", _start);
Shouldn't that be:

+	printf("\n\rzImage starting: loaded at 0x%p\n\r", _start);

or similar?

Yours Tony

  linux.conf.au        http://linux.conf.au/ || http://lca2008.linux.org.au/
  Jan 28 - Feb 02 2008 The Australian Linux Technical Conference!

Re: Don't pass the stack pointer to zImage's start() function

From: David Gibson <hidden>
Date: 2007-03-15 05:18:21

On Thu, Mar 15, 2007 at 03:35:46PM +1100, Tony Breeds wrote:
On Thu, Mar 15, 2007 at 03:29:04PM +1100, David Gibson wrote:
quoted
At present, the zImage entry code passes a copy of the stack pointer
to the start() function.  There's no real reason for this; the only
thing start() does with it is print it out.  It appears to be a
leftover debugging hack, so, this patch removes it.
<snip>
quoted
--- working-2.6.orig/arch/powerpc/boot/main.c	2007-03-15 14:03:09.000000000 +1100
+++ working-2.6/arch/powerpc/boot/main.c	2007-03-15 14:07:05.000000000 +1100
@@ -256,7 +256,7 @@ struct dt_ops dt_ops;
 struct console_ops console_ops;
 struct loader_info loader_info;
 
-void start(void *sp)
+void start(void)
 {
 	struct addr_range vmlinux, initrd;
 	kernel_entry_t kentry;
@@ -268,8 +268,7 @@ void start(void *sp)
 	if (platform_ops.fixups)
 		platform_ops.fixups();
 
-	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r",
-	       _start, sp);
+	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r", _start);
Shouldn't that be:

+	printf("\n\rzImage starting: loaded at 0x%p\n\r", _start);

or similar?
Crap, yes, I suck.

Fixed version coming, plus a patch to turn on gcc printf format
warnings for the zImage.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Re: Don't pass the stack pointer to zImage's start() function

From: Olaf Hering <hidden>
Date: 2007-03-16 18:37:51

On Thu, Mar 15, David Gibson wrote:
At present, the zImage entry code passes a copy of the stack pointer
to the start() function.  There's no real reason for this; the only
thing start() does with it is print it out.  It appears to be a
leftover debugging hack, so, this patch removes it.

Signed-off-by: David Gibson <redacted>
NACK.
It helps to determine the firmware memory layout.

Re: Don't pass the stack pointer to zImage's start() function

From: Josh Boyer <hidden>
Date: 2007-03-16 19:27:10

On Fri, 2007-03-16 at 19:37 +0100, Olaf Hering wrote:
On Thu, Mar 15, David Gibson wrote:
quoted
At present, the zImage entry code passes a copy of the stack pointer
to the start() function.  There's no real reason for this; the only
thing start() does with it is print it out.  It appears to be a
leftover debugging hack, so, this patch removes it.

Signed-off-by: David Gibson <redacted>
NACK.
It helps to determine the firmware memory layout.
How, why is that useful, and where is that ever used?

josh

Re: Don't pass the stack pointer to zImage's start() function

From: Olaf Hering <hidden>
Date: 2007-03-16 20:04:52

On Fri, Mar 16, Josh Boyer wrote:
How, why is that useful, and where is that ever used?
prom_init runs with the stack passed from the firmware (unless that
changed in since 2.6.13). Its better to know where the stack is when
looking at early boot bugreports.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help