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>