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>