On Wed, 31 Jan 2007, Atsushi Nemoto wrote:
> I compiled ip27 kernel and really confused...
>
> head.S:
> PTR_LA t0, __bss_start # clear .bss
> LONG_S zero, (t0)
>
> System.map:
> a8000000003b6000 A __bss_start
>
> vmlinux:
> a800000000385058: 3c0c003b lui t0,0x3b
> a80000000038505c: 658c6000 daddiu t0,t0,24576
> a800000000385060: fd800000 sd zero,0(t0)
>
> vmlinux.32:
> 80385058: 3c0c003b lui t4,0x3b
> 8038505c: 658c6000 daddiu t4,t4,24576
> 80385060: fd800000 sd zero,0(t4)
>
> How does this code work? Isn't address 0x3b6000 in user space?
Well, the default config for this machine specifies -msym32 with the load
address of 0xa80000000001c000. No wonder it does not work.
I suppose the setup for this platform should be more or less like this:
ifdef CONFIG_BUILD_ELF64
ifdef CONFIG_MAPPED_KERNEL
load-$(CONFIG_SGI_IP27) += 0xc00000004001c000
dataoffset-$(CONFIG_SGI_IP27) += 0x01000000
else
load-$(CONFIG_SGI_IP27) += 0xa80000000001c000
endif
else
ifdef CONFIG_MAPPED_KERNEL
load-$(CONFIG_SGI_IP27) += 0xffffffffc001c000
OBJCOPYFLAGS := --change-addresses=0xc000000080000000
dataoffset-$(CONFIG_SGI_IP27) += 0x01000000
else
load-$(CONFIG_SGI_IP27) += 0xffffffff8001c000
OBJCOPYFLAGS := --change-addresses=0xa800000080000000
endif
endif
I can cook a patch if some SGI expert steps in and comments whether this
makes sense from the platform point of view or not.
Maciej
|