Re: 2.6.8 link failure for powerpc-970?

Dan Kegel
2004-09-23T05:26:50Z

Herbert Poetzl wrote:
>>>arch/ppc64/kernel/built-in.o(.text+0xdc44): In function `.sys32_ipc':
>>>: undefined reference to `.compat_sys_shmctl'
>>>...
>>
>>Could it be a config problem? My config file was from 'allnoconfig', I
>>think, and has
>>$ egrep 'SYSV|COMPAT' .config
>>CONFIG_COMPAT=y
>># CONFIG_SYSVIPC is not set
>>compat_sys_shmctl is in ipc/compat.c, and is enabled by
>>CONFIG_SYSVIPC_COMPAT,
>>which depends on CONFIG_SYSVIPC, which is off. ...
>>Seems like linking problems are expected unless you turn on
>>CONFIG_SYSVIPC and CONFIG_SYSVIPC_COMPAT.
>
> once you figured out what 'default' configs
> are appropriate for the special archs not working
> with allyes/noconfig could you send me a note
> and/or post a link to them somewhere?

Sure. For ppc64, beyond allnoconfig, I had to enable

CONFIG_SYSVIPC
CONFIG_SYSCTL
CONFIG_NET
... um, but that didn't fix everything. Now it fails with

...
make -f scripts/Makefile.build obj=arch/ppc64/boot arch/ppc64/boot/zImage
gzip -f -9 < vmlinux > arch/ppc64/boot/kernel-vmlinux.gz
touch arch/ppc64/boot/kernel-vmlinux.c
gcc -Wp,-MD,arch/ppc64/boot/.kernel-vmlinux.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -Iinclude -fno-builtin -c -o arch/ppc64/boot/kernel-vmlinux.o arch/ppc64/boot/kernel-vmlinux.c
objcopy arch/ppc64/boot/kernel-vmlinux.o --add-section=.kernel:vmlinux=arch/ppc64/boot/kernel-vmlinux.gz --set-section-flags=.kernel:vmlinux=contents,alloc,load,readonly,data
gzip -f -9 < .config > arch/ppc64/boot/kernel-.config.gz
touch arch/ppc64/boot/kernel-.config.c
gcc -Wp,-MD,arch/ppc64/boot/.kernel-.config.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -Iinclude -fno-builtin -c -o arch/ppc64/boot/kernel-.config.o arch/ppc64/boot/kernel-.config.c
objcopy arch/ppc64/boot/kernel-.config.o --add-section=.kernel:.config=arch/ppc64/boot/kernel-.config.gz --set-section-flags=.kernel:.config=contents,alloc,load,readonly,data
gzip -f -9 < System.map > arch/ppc64/boot/kernel-System.map.gz
touch arch/ppc64/boot/kernel-System.map.c
gcc -Wp,-MD,arch/ppc64/boot/.kernel-System.map.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -Iinclude -fno-builtin -c -o arch/ppc64/boot/kernel-System.map.o arch/ppc64/boot/kernel-System.map.c
objcopy arch/ppc64/boot/kernel-System.map.o --add-section=.kernel:System.map=arch/ppc64/boot/kernel-System.map.gz --set-section-flags=.kernel:System.map=contents,alloc,load,readonly,data

gcc -Wp,-MD,arch/ppc64/boot/.crt0.o.d -D__ASSEMBLY__ -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -Iinclude -fno-builtin -traditional -c -o arch/ppc64/boot/crt0.o arch/ppc64/boot/crt0.S

arch/ppc64/boot/crt0.S: Assembler messages:
arch/ppc64/boot/crt0.S:17: Error: no such instruction: `lis 9,_start@h'
...

Um, why is it using the host's gcc? I ran make with
make V=1 ARCH=ppc64 CROSS_COMPILE=/opt/crosstool/powerpc64-unknown-linux-gnu/gcc-3.4.2-glibc-2.3.3/bin/powerpc64-unknown-linux-gnu-
so it really should know better, shouldn't it?

I'm too sleepy to figure this out at the moment.
Thanks for any tips ("I'm programming... while I sleep")!
- Dan