Date: Mon, 13 Oct 2008 20:26:38 +0100 From: Bruce M Simpson <bms@incunabulum.net> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-embedded@FreeBSD.org Subject: Re: ELF loader problem with CFE on ASUS WL500g Message-ID: <48F3A0EE.7040003@incunabulum.net> In-Reply-To: <20081013.125648.1239212699.imp@bsdimp.com> References: <48F39798.3010606@incunabulum.net> <20081013.125648.1239212699.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------000707010509060807020608 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit M. Warner Losh wrote: > I thought you could fix this with linker script tweaks... > Not in an automated way. It'll let you set a *fixed* LMA by adding AT(...) to the PHDR linker script section, but that's not very useful. Trying to use a non-constant expression produces an error; and LOADADDR() wants a *section*, not a *segment*. The first thing I tried was to use the "load -addr" option in CFE; it totally ignores this option as it only applies to raw images. I tried the GNU ld MEMORY { ... } section, but it changes the VMA as well as the LMA. I seem to remember I had headaches like this when trying to build FreeBSD with the MinGW toolchain to boot on an SGI Visual Workstation. > bummer... It sounds a bit like we need to do the normal tricks of > 'early' boot loaders: turn on the mmu and then jump to . to transition > from PA to VA addresses... > > : It looks like objcopy's --change-section-lma option, with a negative > : offset, would do what I want, however it will need to be scripted to > : work on named sections. > > You might try to mock-up a test with a newer version of binutils than > 2.15 we're using? > I tried the attached script, which produces a BFD error: BFD: kernel.rebased: section `.hash' can't be allocated in segment 3 One common problem with these Broadcom based platforms is that they almost always ship with CFE, and it's convenient to use the inbuilt ELF loader for bootstrapping. Unfortunately CFE comes with bugs attached, and there are usually no alternative boot loaders available due to Broadcom's less than, shall we say, "open" attitude towards open source. *ahem* So yeah, it sounds like we probably need something like the ARM ELF trampoline for MIPS ideally. It would probably also be relatively easy to write a small C tool with libelf to do the rebasing CFE expects. I have a train to catch in a few hours, I'd better not get in too deep... later BMS --------------000707010509060807020608 Content-Type: text/plain; name="fnord.sh" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fnord.sh" #!/bin/sh OBJCOPY=mips-rtems-objcopy KERNEL=kernel REBASE=0x80000000 SECTIONS=$(mips-rtems-objdump -h $KERNEL | grep ' \.' | awk '{ if (substr($4,0,2) == "80") print $2}') OCOPTS="" for i in $SECTIONS ; do OCOPTS="$OCOPTS --change-section-lma ${i}-${REBASE}" done set -x exec $OBJCOPY $OCOPTS $KERNEL ${KERNEL}.rebased --------------000707010509060807020608--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48F3A0EE.7040003>