Genode application binary interface (ABI)

This patch decouples the kernel-specific implementation of the dynamic
linker from its kernel-agnostic binary interface. The name of the
kernel-specific dynamic linker binary now corresponds to the kernel,
e.g., 'ld-linux.lib.so' or 'ld-nova.lib.so'. Applications are no longer
linked directly against a concrete instance of the dynamic linker but
against a shallow stub called 'ld.lib.so'. This stub contains nothing
but the symbols provided by the dynamic linker. It thereby represents
the Genode ABI.

At system-integration time, the kernel-specific run/boot_dir back ends
integrate the matching the kernel-specific variant of the dynamic linker
as 'ld.lib.so' into the boot image.

The ABI symbol file for the dynamic linker is located at
'base/lib/symbols/ld'. It contains the joint ABI of all supported
architectures. The new utility 'tool/abi_symbols' eases the creation of
such an ABI symbol file for a given shared library. Its result should be
manually inspected and edited as needed.

The patch removes the 'syscall' library from 'base_libs.mk' to avoid
polluting the kernel-agnostic ABI with kernel-specific interfaces.

Issue #2190
Issue #2195
This commit is contained in:
Norman Feske
2016-12-09 23:09:17 +01:00
parent 9b397b0321
commit f54c85e045
68 changed files with 946 additions and 107 deletions

View File

@@ -0,0 +1,3 @@
BASE_LIBS += base-nova-common base-nova
include $(BASE_DIR)/lib/mk/spec/x86_32/ld-platform.inc

View File

@@ -1,3 +0,0 @@
BASE_LIBS += base-nova-common base-nova
include $(BASE_DIR)/lib/mk/spec/x86_32/ld.inc

View File

@@ -0,0 +1,3 @@
BASE_LIBS += base-nova-common base-nova
include $(BASE_DIR)/lib/mk/spec/x86_64/ld-platform.inc

View File

@@ -1,3 +0,0 @@
BASE_LIBS += base-nova-common base-nova
include $(BASE_DIR)/lib/mk/spec/x86_64/ld.inc

View File

@@ -0,0 +1,2 @@
TARGET = ld-nova
LIBS = ld-nova

View File

@@ -1,3 +1,3 @@
TARGET = test-platform
SRC_CC = main.cc ipc.cc
LIBS = base config
LIBS = base-nova config