From f447fbe1a55560652610123c6096f448c8c1f7ec Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 8 Jan 2014 15:01:26 +0100 Subject: [PATCH] base: Do not link base libs against shared libs Base libraries are already contained within ldso.lib.so. Remove unnecessary filtering from 'dep_lib.mk', make ldso depend on base libs. Issue #1017 Issue #989 --- .../lib/mk/arm_v5/{l4.mk => syscall.mk} | 0 base-codezero/lib/mk/base-common.mk | 2 +- base/mk/base-libs.mk | 2 +- base/mk/dep_lib.mk | 20 ++++++++++--------- base/mk/lib.mk | 7 +++++-- libports/src/test/ldso/target.mk | 2 +- os/lib/mk/codezero/ldso-arch.mk | 2 +- os/src/lib/ldso/target.inc | 3 ++- 8 files changed, 22 insertions(+), 16 deletions(-) rename base-codezero/lib/mk/arm_v5/{l4.mk => syscall.mk} (100%) diff --git a/base-codezero/lib/mk/arm_v5/l4.mk b/base-codezero/lib/mk/arm_v5/syscall.mk similarity index 100% rename from base-codezero/lib/mk/arm_v5/l4.mk rename to base-codezero/lib/mk/arm_v5/syscall.mk diff --git a/base-codezero/lib/mk/base-common.mk b/base-codezero/lib/mk/base-common.mk index 3fc1a41b98..511b311127 100644 --- a/base-codezero/lib/mk/base-common.mk +++ b/base-codezero/lib/mk/base-common.mk @@ -4,7 +4,7 @@ # \date 2013-02-14 # -LIBS += cxx l4 startup +LIBS += cxx syscall startup SRC_CC += cap_copy.cc SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc diff --git a/base/mk/base-libs.mk b/base/mk/base-libs.mk index d8c16de1e3..72c95fb4e2 100644 --- a/base/mk/base-libs.mk +++ b/base/mk/base-libs.mk @@ -4,7 +4,7 @@ # These static libraries are filtered out when linking dynamically linked # binaries. # -BASE_LIBS = base-common base cxx timed_semaphore alarm config +BASE_LIBS = base-common base cxx timed_semaphore alarm config syscall # # Name of Genode's dynamic linker diff --git a/base/mk/dep_lib.mk b/base/mk/dep_lib.mk index da05046694..c0afbfe732 100644 --- a/base/mk/dep_lib.mk +++ b/base/mk/dep_lib.mk @@ -68,21 +68,17 @@ warn_missing_lib_mk: generate_lib_rule_for_defect_library override REP_DIR := $(firstword $(foreach REP,$(REPOSITORIES),$(findstring $(REP)/,$(LIB_MK)))) override REP_DIR := $(REP_DIR:/=) -include $(LIB_MK) include $(BASE_DIR)/mk/base-libs.mk -# -# Libraries from the library depends on +include $(LIB_MK) + +ifdef SHARED_LIB # # For shared libraries, we have to make sure to build ldso support before # building a shared library. # -ifdef SHARED_LIB LIBS += ldso-startup -ifeq ($(LIB),$(DYNAMIC_LINKER)) -LIBS += $(BASE_LIBS) -else -LIBS := $(filter-out $(BASE_LIBS),$(LIBS)) +ifneq ($(LIB),$(DYNAMIC_LINKER)) LIBS += $(DYNAMIC_LINKER) # @@ -95,7 +91,13 @@ LIBS += $(DYNAMIC_LINKER) LIBS += startup_dyn endif - +# +# Ensure that startup_dyn is build for the dynamic programs that depend on a +# shared library. They add it to their dependencies as replacement for the +# static-case startup as soon as they recognize that they are dynamic. +# The current library in contrast filters-out startup_dyn from its +# dependencies before they get merged. +# DEP_VAR_NAME := DEP_$(LIB).lib.so else DEP_VAR_NAME := DEP_$(LIB).lib diff --git a/base/mk/lib.mk b/base/mk/lib.mk index 296f7fdb87..4ae589084e 100644 --- a/base/mk/lib.mk +++ b/base/mk/lib.mk @@ -15,6 +15,8 @@ ## REP_DIR - repository where the library resides ## +include $(BASE_DIR)/mk/base-libs.mk + # # Prevent .mk rules to be executed as default rule # @@ -132,10 +134,11 @@ ifdef SHARED_LIB override DEPS := $(filter-out startup_dyn.lib,$(DEPS)) # -# Prevent linkage of startup code against shared libraries except for ld.lib.so +# Prevent linkage of startup code and base libs against shared libraries except +# for ld.lib.so # ifneq ($(LIB),ld) -override DEPS := $(filter-out startup.lib,$(DEPS)) +override DEPS := $(filter-out $(BASE_LIBS:=.lib) startup.lib,$(DEPS)) endif endif diff --git a/libports/src/test/ldso/target.mk b/libports/src/test/ldso/target.mk index dfa9b3b79d..b8d5c3184d 100644 --- a/libports/src/test/ldso/target.mk +++ b/libports/src/test/ldso/target.mk @@ -1,4 +1,4 @@ SRC_CC = main.cc TARGET = test-ldso -LIBS = test-ldso base libc libm +LIBS = test-ldso libc libm INC_DIR += $(REP_DIR)/src/test/ldso/include diff --git a/os/lib/mk/codezero/ldso-arch.mk b/os/lib/mk/codezero/ldso-arch.mk index 5bbcf6a14b..1a4e9e0719 100644 --- a/os/lib/mk/codezero/ldso-arch.mk +++ b/os/lib/mk/codezero/ldso-arch.mk @@ -1,6 +1,6 @@ SRC_CC = parent_cap.cc binary_name.cc SRC_C = dummy.c -LIBS = ldso_crt0 l4 +LIBS = ldso_crt0 syscall vpath parent_cap.cc $(REP_DIR)/src/lib/ldso/arch vpath binary_name.cc $(REP_DIR)/src/lib/ldso/arch diff --git a/os/src/lib/ldso/target.inc b/os/src/lib/ldso/target.inc index f6c40583c7..b72fb59815 100644 --- a/os/src/lib/ldso/target.inc +++ b/os/src/lib/ldso/target.inc @@ -1,7 +1,8 @@ #note: leave empty to disable debugging output DEBUG = -LIBS = base ldso-arch +include $(BASE_DIR)/mk/base-libs.mk +LIBS = $(BASE_LIBS) ldso-arch SRC_S = rtld_start.S SRC_C = reloc.c rtld.c map_object.c xmalloc.c debug.c main.c \