My Oracle Support Banner

Solaris[TM] Operating System: How to resolve _PROCEDURE_LINKAGE_TABLE_ calls manually? (Doc ID 1002002.1)

Last updated on NOVEMBER 05, 2021

Applies to:

Oracle Solaris Studio - Version Forte Developer 6 Update 2 to 12.3 [Release 6.0 to 12]
Oracle Solaris on SPARC (32-bit)
Oracle Solaris on SPARC (64-bit)


From the Oracle Solaris Linker and Libraries Guide:

"When creating a dynamic executable or shared object, many of the relocations cannot be completed at link-edit time because they require logical addresses that are known only when the objects are loaded into memory. In these cases the link-editor generates new relocation records as part of the output file image. The runtime linker must then process these new relocation records."

However, when looking at the disassembled code either via dbx(1) or dis(1), some calls remains unresolved and instead of a symbolic name it will display _PROCEDURE_LINKAGE_TABLE+offset in dbx(1) or a hexadecimal address in dis(1).

This is an extract of the output from issuing the dis command in dbx(1) for __do_f_out_nv:

       0xff311d8c: __do_f_out_nv+0x06a8:       call    _PROCEDURE_LINKAGE_TABLE_+0x1ec [PLT]
0xff311d90: __do_f_out_nv+0x06ac:       ld      [%i4 + 0x42c], %o1
0xff311d94: __do_f_out_nv+0x06b0:       ba      __do_f_out_nv+0xa4
0xff311d98: __do_f_out_nv+0x06b4:       ld      [%l6], %o0

Same output from dis(1):

       21d8c:  40 00 7e 49        call         0x416b0
21d90:  d2 07 24 2c        ld           [%i4 + 1068], %o1
21d94:  10 bf fe 7d        ba           0x21788
21d98:  d0 05 a0 00        ld           [%l6], %o0

On the first line of the dbx(1) output, there is an unresolved PLT at offset 0x1ec.

Troubleshooting Steps

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.