genode/repos/base/src/lib/ldso
Sebastian Sumpf 0cc87d3c85 ldso: check for DYNAMIC segment in ELF files
If the DYNAMIC segment cannot be located the ELF file may be statically
linked. In this case an error is raised.

Fixes #3000
2018-10-01 10:41:46 +02:00
..
include ldso: check for DYNAMIC segment in ELF files 2018-10-01 10:41:46 +02:00
spec Follow practices suggested by "Effective C++" 2018-01-17 12:14:35 +01:00
startup Follow practices suggested by "Effective C++" 2018-01-17 12:14:35 +01:00
debug.cc Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
dependency.cc ldso: defer execution of static constructors 2017-03-24 16:20:04 +01:00
exception.cc Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
linker.ld Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
linux-32.ld Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
main.cc ldso: check ctors sections of shared-object deps 2018-05-30 12:26:18 +02:00
README base: Genode's dynamic linker 2014-11-12 14:44:15 +01:00
shared_object.cc ldso/cxx: show symbols names of undefined references 2017-08-18 10:24:48 +02:00
test.cc Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00

This directory contains Genode's dynamic linker (ldso)


Usage
-----

To build a shared library instead of a regular static library, you just need to
declare 'SHARED_LIB = yes' in the library-description file.  When doing so, a
'<libname>.lib.so' file will be generated and installed in the
'<build-dir>/bin/' directory.  For building an executable that uses a shared
library, no special precautions are needed. The build system will automatically
detect the use of shared libraries, concludes that the binary must be
dynamically linked, and will use the correct linker script.  When loading a
dynamically linked program, the dynamic linker 'ldso.lib.so' and all used shared
objects must be loaded as well.

The linker can be configured through the '<config>' node when loading a dynamic
binary. Currently there are to configurations options, 'ld_bind_now="yes"'
causes the linker to resolve all symbol references on program loading.
'ld_verbose="yes"' outputs library load informations before starting the
program.

Configuration snippet:

!<!-- bind immediately, no library informations -->
!<start name="dynamic_binary">
!  <resource name="RAM" quantum="1M" />
!  <config ld_bind_now="yes" ld_verbose="no">
!  </config>
!</start>

Debugging dynamic binaries with GDB stubs
-----------------------------------------

! # go to directory containing the binaries
! cd <build/dir>/bin
!
! # start GDB with binary to debug
! gdb <binary name>
!
! # break in main routine
! b main
!
! # inspect loaded shared libraries
! info sharedlibrary
!
! # load shared symbols of shared libraries (if not already loaded)
! share
!
! # from here you can debug within libraries

:Known issues:

GDB 7.2 has a regression bug in its line information parser. These issue has
been fixed with version 7.3.