Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Mar 2011 11:01:17 +0530
From:      Radha Mohan <mohun106@gmail.com>
To:        "Jayachandran C." <c.jayachandran@gmail.com>
Cc:        Adrian Chadd <adrian.chadd@gmail.com>, freebsd-mips@freebsd.org
Subject:   Re: linker weirdness for MIPS kernel?
Message-ID:  <AANLkTikpWsdEjyzzpMfR3CqYT5NG2b4H7dpZGTzwghr7@mail.gmail.com>
In-Reply-To: <AANLkTimPoLbZ=4TNmeW7S6=pMCVGGki1TeYa4sA0cVFP@mail.gmail.com>
References:  <AANLkTik5Xfk3oPqZVj%2BTCA2b4B53_=xWdZb0g98GPYcD@mail.gmail.com> <AANLkTimPoLbZ=4TNmeW7S6=pMCVGGki1TeYa4sA0cVFP@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi JC,

Incidentally I am also trying to load modules under FreeBSD on my MIPS plat=
form,
but I am getting following error.

# /sbin/kldload -v ext2fs
linker_load_file: Unsupported file type
kldload:can't load ext2fs: Exec format error

For me all the modules give me this error.

>From what I understood going through the module loading code is the
linker_load_file()
function is trying for all the registered classes (elf64_obj and elf64
in my case). But the
relocatable header type is handled in the link_elf_obj.c only and not
link_elf.c .

There is still some support lacking for the mips64 relocation in terms
of getting "mapbase"
(currently its taking only amd64 architecture into consideration)and
handling addend (ELF_RELOC_RELA),
R_MIPS_64, R_MIPS_HIGHER and R_MIPS_HIGHEST.


regards,
Radha Mohan


On Tue, Mar 29, 2011 at 5:05 PM, Jayachandran C.
<c.jayachandran@gmail.com> wrote:
>
> On Tue, Mar 29, 2011 at 12:45 PM, Adrian Chadd <adrian.chadd@gmail.com> w=
rote:
> > Hi guys,
> >
> > I'm trying to use modules on my MIPS boards and I'm hitting a snag.
> >
> > # kldload ./wlan.ko
> > # kldload ./ath_hal.ko
> > # kldload ./ath_rate_sample.ko
> > link_elf_obj: symbol ieee80211_iterate_nodes undefined (1)
> > linker_load_file: Unsupported file type
> > kldload: can't load ./ath_rate_sample.ko: Exec format error
> > # nm ./wlan.ko =A0| grep ieee80211_iterate_nodes
> > 00015edc t ieee80211_iterate_nodes
> > # kldstat
> > Id Refs Address =A0 =A0Size =A0 =A0 Name
> > =A01 =A0 =A07 0x80000000 80000000 kernel
> > =A02 =A0 =A01 0xc7b4e000 538e4 =A0 =A0wlan.ko
> > =A03 =A0 =A01 0xc7ba2000 70b88 =A0 =A0ath_hal.ko
> > #
> >
> > So the wlan module is loaded, it has that symbol internally, but the li=
nker
> > isn't gluing them together. That (1) is a local patch of mine to figure=
 out
> > where it's broken - here, it's broken in link_elf_obj.c:1038 . Ie, it's=
 the
> > first loop in relocate_file().
> >
> > I'm not up to date on how all this ELF and kernel module/linker magic w=
orks,
> > could someone please give me a hand diagnosing why this is happening?
>
> There was an issue we had seen in link_elf.c in another context, the valu=
e we
> have for linker_kernel_file->address is not correct for mips, it should b=
e
> actually the KERNLOADADDR in config file.
>
> Not really sure if your problem is related, but here is a small hack/patc=
h to
> try:
>
> diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
> index 1e0bac1..14dfe9e 100644
> --- a/sys/kern/link_elf.c
> +++ b/sys/kern/link_elf.c
> @@ -323,7 +323,11 @@ link_elf_init(void* arg)
>
> =A0 =A0 =A0 =A0if (dp !=3D NULL)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0parse_dynamic(ef);
> +#ifdef __mips__
> + =A0 =A0 =A0 linker_kernel_file->address =3D (caddr_t) 0xffffffff8010000=
0;
> +#else
> =A0 =A0 =A0 =A0linker_kernel_file->address =3D (caddr_t) KERNBASE;
> +#endif
> =A0 =A0 =A0 =A0linker_kernel_file->size =3D -(intptr_t)linker_kernel_file=
->address;
>
> =A0 =A0 =A0 =A0if (modptr !=3D NULL) {
> --
>
>
> JC.
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikpWsdEjyzzpMfR3CqYT5NG2b4H7dpZGTzwghr7>