lkml.org 
[lkml]   [2003]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] fix PPC compile failure with 2.6.0-test1-bk1
There are (at least) three compile failures on PowerMacs in
2.6.0-test1-bk1.

The first (actually a link failure, not a compile failure) is
bugme.osdl.org bug 954. That bug has a trivial fix (view the bug at
bugme.osdl.org to see the fix; it's also been posted to lkml).

The second is bug 965. This failure happens because PPC doesn't have its
own local_t implementation. The quick fix is to have PPC use the
asm-generic implementation. I've attached a patch to that bug which does
that.

Finally, bug 966 is caused by Rusty's "Centralize Linker Symbols" patch,
which is now in Linus' BK tree. The patch at the bottom of this message
is an attempt to (partially) fix PPC and make it compile again. AFAICT
this patch doesn't get everything, but it's enough to compile and boot
on my iMac, and I want to get feedback on this patch before I create
another patch to finish the job.

Some particular points of concern:

(a) This continues to perpetuate the char[] section.h stuff. Is this a
settled matter, or does anyone (Andrew?) still think this might be
incorrect? If anyone's wondering what I mean, see this post:
http://marc.theaimsgroup.com/?l=linux-kernel&m=105867566108404&w=2

(b) Should I #include the asm-generic stuff from
include/asm-ppc/sections.h, or should I copy-and-paste? Right now
I'm opting for the former.

(c) Look at the typecast in the second hunk of the
arch/ppc/kernel/setup.c patch. If I don't put it there, PTRRELOC tries
to typecast __bss_start to an unsigned long (OK) and then back to a
char[] (not OK, breaks the compile). More specifically, this happens:

arch/ppc/kernel/setup.c: In function `early_init':
arch/ppc/kernel/setup.c:280: cast specifies array type
make[1]: *** [arch/ppc/kernel/setup.o] Error 1

This typecast seems ugly to me, but OTOH I can't think of any cleaner
alternatives (i.e., I can think of alternatives, but they all seem even
uglier to me).

-Barry K. Nathan <barryn@pobox.com>

diff -ruN linux-2.6.0-test1-bk1-bkn1/arch/ppc/kernel/setup.c linux-2.6.0-test1-bk1-bkn2/arch/ppc/kernel/setup.c
--- linux-2.6.0-test1-bk1-bkn1/arch/ppc/kernel/setup.c 2003-07-14 07:00:13.000000000 -0700
+++ linux-2.6.0-test1-bk1-bkn2/arch/ppc/kernel/setup.c 2003-07-19 19:16:20.000000000 -0700
@@ -268,7 +268,7 @@
unsigned long
early_init(int r3, int r4, int r5)
{
- extern char __bss_start, _end;
+ extern char _end[];
unsigned long phys;
unsigned long offset = reloc_offset();

@@ -277,7 +277,7 @@

/* First zero the BSS -- use memset, some arches don't have
* caches on yet */
- memset_io(PTRRELOC(&__bss_start), 0, &_end - &__bss_start);
+ memset_io(PTRRELOC((char*)__bss_start), 0, _end - __bss_start);

/*
* Identify the CPU type and fix up code sections
@@ -591,7 +591,6 @@
void __init setup_arch(char **cmdline_p)
{
extern int panic_timeout;
- extern char _etext[], _edata[];
extern char *klimit;
extern void do_init_bootmem(void);

diff -ruN linux-2.6.0-test1-bk1-bkn1/arch/ppc/syslib/prom_init.c linux-2.6.0-test1-bk1-bkn2/arch/ppc/syslib/prom_init.c
--- linux-2.6.0-test1-bk1-bkn1/arch/ppc/syslib/prom_init.c 2003-07-20 01:47:34.000000000 -0700
+++ linux-2.6.0-test1-bk1-bkn2/arch/ppc/syslib/prom_init.c 2003-07-20 01:40:38.000000000 -0700
@@ -133,7 +133,6 @@
struct device_node *allnodes;

extern char *klimit;
-extern char _stext;

static void __init
prom_exit(void)
@@ -601,7 +600,7 @@
/* copy the holding pattern code to someplace safe (0) */
/* the holding pattern is now within the first 0x100
bytes of the kernel image -- paulus */
- memcpy((void *)0, &_stext, 0x100);
+ memcpy((void *)0, _stext, 0x100);
flush_icache_range(0, 0x100);

/* look for cpus */
@@ -631,7 +630,7 @@
prom_print(path);
*(ulong *)(0x4) = 0;
call_prom("start-cpu", 3, 0, node,
- (char *)__secondary_hold - &_stext, cpu);
+ (char *)__secondary_hold - _stext, cpu);
prom_print("...");
for ( i = 0 ; (i < 10000) && (*(ulong *)(0x4) == 0); i++ )
;
@@ -708,7 +707,7 @@
void *result[3];

/* Default */
- phys = (unsigned long) &_stext;
+ phys = (unsigned long) _stext;

/* First get a handle for the stdout device */
prom = pp;
@@ -766,7 +765,7 @@
&prom_mmu, sizeof(prom_mmu)) <= 0) {
prom_print(" no MMU found\n");
} else if ((int)call_prom_ret("call-method", 4, 4, result, "translate",
- prom_mmu, &_stext, 1) != 0) {
+ prom_mmu, _stext, 1) != 0) {
prom_print(" (translate failed)\n");
} else {
/* We assume the phys. address size is 3 cells */
@@ -882,7 +881,7 @@
* are in the hash table - the aim is to try to avoid
* getting DSI exceptions while copying the kernel image.
*/
- for (ptr = ((unsigned long) &_stext) & PAGE_MASK;
+ for (ptr = ((unsigned long) _stext) & PAGE_MASK;
ptr < (unsigned long)bi + space; ptr += PAGE_SIZE)
x = *(volatile unsigned long *)ptr;
}
diff -ruN linux-2.6.0-test1-bk1-bkn1/include/asm-ppc/sections.h linux-2.6.0-test1-bk1-bkn2/include/asm-ppc/sections.h
--- linux-2.6.0-test1-bk1-bkn1/include/asm-ppc/sections.h 2003-05-04 16:53:42.000000000 -0700
+++ linux-2.6.0-test1-bk1-bkn2/include/asm-ppc/sections.h 2003-07-19 19:15:59.000000000 -0700
@@ -26,6 +26,9 @@
#define __openfirmwarefunc(__argopenfirmware) \
__argopenfirmware __openfirmware; \
__argopenfirmware
-
+
+/* we need the generic references to section boundaries, too */
+#include <asm-generic/sections.h>
+
#endif /* _PPC_SECTIONS_H */
#endif /* __KERNEL__ */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:47    [W:0.076 / U:1.620 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site