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

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 29, 2011 at 12:45 PM, Adrian Chadd <adrian.chadd@gmail.com> wro=
te:
> 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 link=
er
> isn't gluing them together. That (1) is a local patch of mine to figure o=
ut
> where it's broken - here, it's broken in link_elf_obj.c:1038 . Ie, it's t=
he
> first loop in relocate_file().
>
> I'm not up to date on how all this ELF and kernel module/linker magic wor=
ks,
> 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 value =
we
have for linker_kernel_file->address is not correct for mips, it should be
actually the KERNLOADADDR in config file.

Not really sure if your problem is related, but here is a small hack/patch =
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)

        if (dp !=3D NULL)
                parse_dynamic(ef);
+#ifdef __mips__
+       linker_kernel_file->address =3D (caddr_t) 0xffffffff80100000;
+#else
        linker_kernel_file->address =3D (caddr_t) KERNBASE;
+#endif
        linker_kernel_file->size =3D -(intptr_t)linker_kernel_file->address=
;

        if (modptr !=3D NULL) {
--


JC.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimPoLbZ=4TNmeW7S6=pMCVGGki1TeYa4sA0cVFP>