Bugs in recent snapshots on Solaris

Ken Raeburn raeburn@cygnus.com
Fri Mar 13 16:09:00 GMT 1998


Yes, it appears that the symbol shlib_shlibvar1, which names a
function in the text section that has its address taken at various
points, has gotten moved in the shared library to the .plt section.
(The correct code is still in the text section, just without a name.)

The code at that .plt location, at run time, becomes a very tight
loop.  In the .so file:

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE 
...
00010790 R_SPARC_JMP_SLOT  shlib_shlibvar1
...

Disassembly of section .plt:

00010754 <shlib_shlibcalled-30>:
        ...

00010784 <shlib_shlibcalled>:
   10784:       03 00 00 30     sethi  %hi(0xc000), %g1
   10788:       30 bf ff f3     b,a   10754 <_PROCEDURE_LINKAGE_TABLE_>
   1078c:       01 00 00 00     nop 

00010790 <shlib_shlibvar1>:
   10790:       03 00 00 3c     sethi  %hi(0xf000), %g1
   10794:       30 bf ff f0     b,a   10754 <_PROCEDURE_LINKAGE_TABLE_>
   10798:       01 00 00 00     nop 
   1079c:       03 00 00 48     sethi  %hi(0x12000), %g1
   107a0:       30 bf ff ed     b,a   10754 <_PROCEDURE_LINKAGE_TABLE_>
   107a4:       01 00 00 00     nop 
   107a8:       01 00 00 00     nop 

And run time:

(gdb) x/20i &shlib_shlibvar1
0xef7a0790 <shlib_shlibvar1>:   sethi  %hi(0xf000), %g1
0xef7a0794 <shlib_shlibvar1+4>: sethi  %hi(0xef7a0400), %g1
0xef7a0798 <shlib_shlibvar1+8>:
    jmp  %g1 + 0x390    ! 0xef7a0790 <shlib_shlibvar1>
0xef7a079c <shlib_shlibvar1+12>:        sethi  %hi(0x12000), %g1


I'm not familiar with the shared library linker support, so for the
moment, I'll leave the rest to Richard.

Ken



More information about the Bfd mailing list