Problem with GNU Linker on mips...
Koundinya.K
kk@ddeorg.soft.net
Thu Feb 18 06:39:00 GMT 1999
Hello,
First of all a quick thanks to Ian for the response to my queries.
O.K
-> Date: Thu, 11 Feb 1999 20:00:02 +0530
-> From: "Koundinya.K" <kk@ddeorg.soft.net>
->
-> /* Note that since the MIPS ABI doesn't provide a means for passing
-> * lm from the stub routines, so we must get this information
-> * someplace else. Here we just start with the head of the list
-> * which is stored in the global variable _ld_loaded. This may
-> * not be correct for objects which have DT_SYMBOLIC set.
-> * FIXME!
-> */
-> lm = _rt_address_to_lm(_ld_loaded,pc);
->
-> Can you find out what _ld_loaded is initialized to?
->
Yes and no , I am not able to watch the elements of the structure.
_ld_loaded contains the value 1074495092 and the address of _ld_loaded is
419304.
-> It looks like your dynamic linker expects some sort of structure which
-> the GNU linker is not setting up.
->
-> Could there be any problems with the start up file like crti, crt1 and crtn used.
->
-> I doubt it.
->
-> Could using the crtbegin and crtend help. Why don't the MIPS targets use them..
->
-> I doubt this would make any difference either. The Irix targets don't
-> use crtbegin and crtend because the Irix linker has another mechanism
-> for ensuring that the global constructors will run. Your target may
-> need crtbegin and crtend, but using them won't fix the problem you are
-> encountering.
->
->
Yes as you say, I don't think my target requires the crtbegin and end.
THen I then realized this when I saw what my native EPC compiler used. It is
very similar to IRIX*
------Clip of what my native compiler uses ------------------------------
$cc -Wl,-note -V t.c -o tt
EPC ANSI C 3.0.12
Copyright (c) 1991,1992,1993,1994,1995 EPCL. All Rights Reserved
Copyright (c) 1990,1991 UNIX System Laboratories, Inc.
Copyright (c) 1988 AT&T
ecc: C Development Set (ECCS) (3.0.12) Jun 6 1995
acomp: C Development Set (ECCS) (3.0.12) Jun 7 1995
as: (EPC MIPS-2 Compilation Tools) 3.6.3 Apr 11 1995
ld: EPC MIPS-2 Compilation Tools (3.6.6) Apr 11 1995
ld: /opt/epc/ecc/epctools/crt1.o: notice: reading: ELF flags=0x000003
ld: /opt/epc/ecc/epctools/crti.o: notice: reading: ELF flags=0x000003
ld: /opt/epc/ecc/epctools/values-Xt.o: notice: reading: ELF flags=0x000002
ld: t.o: notice: reading: ELF flags=0x000005
ld: /opt/epc/ecc/epctools/crtn.o: notice: reading: ELF flags=0x000002
ld: /usr/ccs/lib/libc.so(libc.so.1): notice: reading: ELF flags=0x10000003
-----------------------------------------------------------------------------
I am still in the process of debugging. I found out something else. I tried
to debug one test program. (both using gas)
1) Using gcc and native linker
2) Using gcc and the gnu linker.
I) In the first case as usual I don't have any problem.
>From the _exithandle() , _fini is called.
__________________ Clip of the debugging __________________________________
0x40062cc8 in _exithandle ()
0x40062ccc in _exithandle ()
0x40062cd0 in _exithandle ()
0x400744 in _fini ()
0x400748 in _fini ()
0x400750 in _fini ()
____________________ Later stuff not shown _________________________
II)
How ever in the second case the _fini () is *not* being called . Instead
_etext is being called from where on after return to _exithandle -> _cleanup
() -> _rtbinder ........ message "unidentifiable procedure reference
(address =0x40062cd8
Killed
___________________ Clip of the debugging ___________________________________
0x40062ccc in _exithandle ()
0x40062cd0 in _exithandle ()
0x4009c0 in _etext ()
0x4009c4 in _etext ()
0x4009cc in _etext ()
0x4009d0 in _etext ()
... ... ... ... ...
... .. .. .. .. .. .. ..
0x4009ec in _etext ()
0x40062cd8 in _exithandle ()
0x40062cdc in _exithandle ()
0x40062ce0 in _exithandle ()
0x40062ce4 in _exithandle ()
0x40062cc4 in _exithandle ()
0x40062cc8 in _exithandle ()
0x40062ccc in _exithandle ()
0x40062cd0 in _exithandle ()
0x400980 in _cleanup ()
0x400984 in _cleanup ()
0x400988 in _cleanup ()
0x40052f60 in _rtbinder ()
0x40052f64 in _rtbinder ()
0x40052f68 in _rtbinder ()
........
........
dynamic linker: unidentifiable procedure reference (address = 0x40062cd8)
killed
_____________________Later stuff not shown __________________________________
So I can see that _fini() is not being called , (which I think should be)...
Any pointers on this will help me for further debugging. Or may be this
could solve the problem , I suppose.
Thanks in advance for any help received.
With best regards
Koundinya
More information about the Bfd
mailing list