genode/repos/base/src/lib/ldso
Norman Feske fd401bdf53 Thread API cleanup
This patch cleans up the thread API and comes with the following
noteworthy changes:

- Introduced Cpu_session::Weight type that replaces a formerly used
  plain integer value to prevent the accidental mix-up of
  arguments.
- The enum definition of Cpu_session::DEFAULT_WEIGHT moved to
  Cpu_session::Weight::DEFAULT_WEIGHT
- New Thread constructor that takes a 'Env &' as first argument.
  The original constructors are now marked as deprecated. For the
  common use case where the default 'Weight' and 'Affinity' are
  used, a shortcut is provided. In the long term, those two
  constructors should be the only ones to remain.
- The former 'Thread<>' class template has been renamed to
  'Thread_deprecated'.
- The former 'Thread_base' class is now called 'Thread'.
- The new 'name()' accessor returns the thread's name as 'Name'
  object as centrally defined via 'Cpu_session::Name'. It is meant to
  replace the old-fashioned 'name' method that takes a buffer and size
  as arguments.
- Adaptation of the thread test to the new API

Issue #1954
2016-05-23 15:49:55 +02:00
..
include ldso: dump link map of loaded shared objects 2016-04-25 10:48:01 +02:00
spec ldso: Support for RISC-V 2016-02-26 11:36:51 +01:00
startup base: Genode's dynamic linker 2014-11-12 14:44:15 +01:00
debug.cc ldso: dump link map of loaded shared objects 2016-04-25 10:48:01 +02:00
dependency.cc Minor cleanup fixes 2015-08-21 11:00:59 +02:00
exception.cc ldso: Refactor dynamic linker 2015-03-19 08:57:22 +01:00
file.cc Consolidate RM service into PD session 2016-05-09 13:10:51 +02:00
linker.ld base: Genode's dynamic linker 2014-11-12 14:44:15 +01:00
linux-32.ld ldso: Make truly self relocatable 2015-12-10 13:16:25 +01:00
main.cc Thread API cleanup 2016-05-23 15:49:55 +02:00
README base: Genode's dynamic linker 2014-11-12 14:44:15 +01:00
shared_object.cc ldso: dump link map of loaded shared objects 2016-04-25 10:48:01 +02:00
symbol.map ldso: add lx_environ to symbol map 2015-07-07 19:48:07 +02:00
test.cc base: Genode's dynamic linker 2014-11-12 14:44:15 +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.