mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-26 06:09:25 +00:00
f54c85e045
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
37 lines
1.3 KiB
Makefile
37 lines
1.3 KiB
Makefile
#
|
|
# Generic ld.lib.so stub library
|
|
#
|
|
# This library is used to build kernel-independent dynamically linked
|
|
# executables. It does not contain any code or data but only the symbol
|
|
# information of the binary interface of the Genode API.
|
|
#
|
|
# Note that this library is not used as runtime at all. At system-integration
|
|
# time, it is transparently replaced by the variant of the dynamic linker that
|
|
# matches the used kernel.
|
|
#
|
|
# The rule for generating 'symbols.s' is defined in the architecture-dependent
|
|
# 'spec/<architecture>/ld.mk' file.
|
|
#
|
|
|
|
SRC_S := symbols.s
|
|
|
|
SYMBOLS := $(BASE_DIR)/lib/symbols/ld
|
|
|
|
SHARED_LIB := yes
|
|
|
|
LD_OPT += -Bsymbolic-functions --version-script=$(BASE_DIR)/src/lib/ldso/symbol.map
|
|
LD_OPT += -T$(BASE_DIR)/src/lib/ldso/linker.ld
|
|
|
|
symbols.s: $(MAKEFILE_LIST)
|
|
|
|
symbols.s: $(SYMBOLS)
|
|
$(MSG_CONVERT)$@
|
|
$(VERBOSE)\
|
|
sed -e "s/^\(\w\+\) D \(\w\+\)\$$/.data; .global \1; .type \1,%object; .size \1,\2; \1:/p" \
|
|
-e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%object; \1:/p" \
|
|
-e "s/^\(\w\+\) T/.text; .global \1; .type \1,%function; \1:/p" \
|
|
-e "s/^\(\w\+\) R/.section .rodata; .global \1; \1:/p" \
|
|
-e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%function; \1:/p" \
|
|
-e "s/^\(\w\+\) B/.bss; .global \1; .type \1,%object; \1:/p" \
|
|
$(SYMBOLS) > $@
|