On Sun, Apr 22, 2001 at 06:07:18PM -0700, Keith M Wesolowski wrote: > On Wed, Apr 18, 2001 at 04:37:27PM -0400, Daniel Jacobowitz wrote: > > > If you're referring to libc-mips-04052001.patch.bz2, that's what I > > started with. I needed two changes on top of it. I'll post them in a > > bit. > > Have you or anyone else made further progress on this? One of the > additional patches is obvious; the glibc stuff is not so obvious. I have them working in the case I care about - no backwards compatibility at all. We (Monta Vista) can get away with this :) I've attached the patches. I can not do a more general fix for supporting both kinds of executables unless someone with a better understanding of ELF than I is willing to answer the questions I believe I sent to this list a few days ago. The only way I can see to get at the DT_MIPS(BASE_ADDRESS) or whatever it was called early enough to use it requires some extra disk activity; it shouldn't be too harmful, but I'd rather not impose that much of a speed penalty for every open of a shared object. Perhaps it could be done efficiently with mremap()... I still don't see why BASE_ADDRESS is necessary, but I'm sure there was a good reason it was added. I've never seen a shared object with the virtual address of the first LOAD not equal to the base address... -- Daniel Jacobowitz Debian GNU/Linux Developer Monta Vista Software Debian Security Team
diff -urN libc-04052001/sysdeps/mips/mipsel/rtld-parms libc-04052001-patched/sysdeps/mips/mipsel/rtld-parms --- libc-04052001/sysdeps/mips/mipsel/rtld-parms Sat Jul 12 18:26:15 1997 +++ libc-04052001-patched/sysdeps/mips/mipsel/rtld-parms Fri Apr 6 09:23:27 2001 @@ -1,3 +1,3 @@ ifndef rtld-oformat -rtld-oformat = elf32-littlemips +rtld-oformat = elf32-tradlittlemips endif --- glibc-2.2.3/sysdeps/mips/rtld-parms.orig Wed Apr 11 16:12:56 2001 +++ glibc-2.2.3/sysdeps/mips/rtld-parms Wed Apr 11 16:13:03 2001 @@ -2,7 +2,7 @@ rtld-wordsize = 32 endif ifndef rtld-oformat -rtld-oformat = elf$(rtld-wordsize)-bigmips +rtld-oformat = elf$(rtld-wordsize)-tradbigmips endif ifndef rtld-arch rtld-arch = mips --- glibc-2.2.3/sysdeps/mips/dl-machine.h.orig Wed Apr 18 14:20:17 2001 +++ glibc-2.2.3/sysdeps/mips/dl-machine.h Wed Apr 18 14:21:15 2001 @@ -61,6 +61,9 @@ in l_info array. */ #define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM) +#if 0 +/* mvista: This is no longer needed, or safe, after the tradlittlemips patch. */ + /* * MIPS libraries are usually linked to a non-zero base address. We * subtract the base address from the address where we map the object @@ -76,6 +79,7 @@ (l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0) #else #define MAP_BASE_ADDR(l) 0x5ffe0000 +#endif #endif /* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in