Re: Building programs with MODE=shared in L4Re

Paul Boddie <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
On Sunday 17. June 2018 01.07.44 Paul Boddie wrote:
> 
> With these details, and using objdump to dump all the programs and
> libraries, I discovered that it comes from the _ftext section of
> libld-l4.so:
> 
>     2f5c:       8f998250        lw      t9,-32176(gp)
>     2f60:       24a55fa8        addiu   a1,a1,24488
>     2f64:       0320f809        jalr    t9
>     2f68:       24844ee4        addiu   a0,a0,20196
>     2f6c:       8fbc0010        lw      gp,16(sp)
> 
> So, what appears to be happening is that the "jalr t9" instruction is using
> a value for t9 that is 0x800000, which causes a jump to the object header
> and the subsequent failure.

Some more investigation (and off-list encouragement) eventually led me to 
realise what might be happening here. The table entry providing the value for 
t9 happens to be a "global" entry in the global offset table. Looking at the 
output from "readelf -a" for libld-l4.so yields the following:

 Global entries:
   Address     Access  Initial Sym.Val. Type    Ndx Name
  00025f80 -32176(gp) 00000000 00000000 FUNC    UND __register_frame_info

Here, we see the offending entry and what the program apparently expects to 
find. Other entries that are apparently undefined are the following:

_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
__deregister_frame_info

(It is worth noting at this point that the "_ITM" symbols are also undefined 
in the CI20's libld-l4.so, whereas the other symbols do not appear at all.)

What I can see is that various libgcc binaries produced for my toolchain 
provide __register_frame_info, notably libgcc_eh.a and libgcc_s.so. However, 
amongst the libgcc binaries in the L4Re build directory, only the following 
provides the object:

pkg/l4re-core/libgcc/lib/OBJ-mips_32-l4f/libgcc-l4.so

It isn't clear to me what relation this L4Re-built object has to the other 
libraries, however. The build system logic in the mk directory doesn't refer 
to such libraries in an obvious way. Maybe all I am missing is some linking 
option, but I cannot be certain of this.

Paul
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.