Daniel Jacobowitz <dan@debian.org> writes:
> I've been trying to make this patch work as part of a complete
> toolchain, based on glibc. In addition to a little snag (when building
> glibc for big-endian mips you need an equivalent change in the target
> format), I hit a serious shared library error - nothing linked
Do I understand you correctly that glibc needs a patch? Please send
it to me.
> dynamically worked. This is the cause:
>
> --- elf32lsmip.sh Thu Jun 3 14:02:10 1999
> +++ elf32ltsmip.sh Wed Apr 11 00:14:08 2001
>
> ...
>
> -SHLIB_TEXT_START_ADDR=0x5ffe0000
> +SHLIB_TEXT_START_ADDR=0x0
>
>
> Is this necessary for the ABI? If so, glibc needs to be updated to
> reflect that:
>
> /*
> * MIPS libraries are usually linked to a non-zero base address. We
> * subtract the base address from the address where we map the object
> * to. This results in more efficient address space usage.
> *
> * FIXME: By the time when MAP_BASE_ADDR is called we don't have the
> * DYNAMIC section read. Until this is fixed make the assumption that
> * libraries have their base address at 0x5ffe0000. This needs to be
> * fixed before we can safely get rid of this MIPSism.
> */
> #if 0
> #define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
> (l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
> #else
> #define MAP_BASE_ADDR(l) 0x5ffe0000
> #endif
>
>
> Of course, now that is completely wrong.
>
> One of the two definitely needs to give. From the evilness of the hack
> in glibc, I'm assuming that glibc needs to give.
>
>
> Am I on the right track here?
You might be - but it's quite difficult to fix in glibc. If you get
it working in glibc, send me a patch that works with old and new
binaries - and I'll gladly review and commit it.
Andreas
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
|