[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 4/8] lib/uklibparam: Add linker script for parameter



This patch introduces a linker script to create linker
section to place the library arguments meta-data.

Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
---
 Makefile                      |  2 ++
 lib/uklibparam/libparam.lds.S | 23 +++++++++++++++++++++++
 plat/kvm/Linker.uk            |  2 +-
 plat/linuxu/Linker.uk         |  3 ++-
 plat/xen/Linker.uk            |  2 +-
 support/build/Makefile.rules  | 35 +++++++++++++++++++++++++++++++++++
 6 files changed, 64 insertions(+), 3 deletions(-)
 create mode 100644 lib/uklibparam/libparam.lds.S

diff --git a/Makefile b/Makefile
index 8e81c64..e0fc145 100644
--- a/Makefile
+++ b/Makefile
@@ -198,6 +198,8 @@ UK_ALIBS:=
 UK_ALIBS-y:=
 UK_OLIBS:=
 UK_OLIBS-y:=
+UK_LDS:=
+UK_LDS-y:=
 UK_SRCS:=
 UK_SRCS-y:=
 UK_DEPS:=
diff --git a/lib/uklibparam/libparam.lds.S b/lib/uklibparam/libparam.lds.S
new file mode 100644
index 0000000..3a9c920
--- /dev/null
+++ b/lib/uklibparam/libparam.lds.S
@@ -0,0 +1,23 @@
+#include <uk/config.h>
+#include <uk/libparam.h>
+
+#define create_var(x,y) __STRINGCONCAT(x,y)
+#ifdef UK_LIBPARAM_PREFIX
+SECTIONS
+{
+       create_var(UK_LIBPARAM_PREFIX,__param_arg) : {
+               _SECTION_START(
+                               _LIB_PARAM_SECTION_NAME(UK_LIBPARAM_PREFIX,
+                                                       PARAM_SECTION_SUFFIX)
+                                 ) = .;
+
+               KEEP (*(create_var(UK_LIBPARAM_PREFIX,PARAM_SECTION_SUFFIX)))
+
+               _SECTION_STOP(
+                               _LIB_PARAM_SECTION_NAME(UK_LIBPARAM_PREFIX,
+                                                       PARAM_SECTION_SUFFIX)
+                                 ) = .;
+       }
+}
+INSERT AFTER .rodata
+#endif /* UK_LIBPARAM_PREFIX */
diff --git a/plat/kvm/Linker.uk b/plat/kvm/Linker.uk
index f696e25..4b8b167 100644
--- a/plat/kvm/Linker.uk
+++ b/plat/kvm/Linker.uk
@@ -15,7 +15,7 @@ EXTRA_LD_SCRIPT_FLAGS := $(addprefix 
-Wl$(comma)-T,$(EXTRA_LD_SCRIPT-y))
 
 $(KVM_IMAGE): $(KVM_ALIBS) $(KVM_ALIBS-y) $(KVM_OLIBS) $(KVM_OLIBS-y) \
               $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) \
-              $(KVM_LDSCRIPT)
+              $(UK_LDS) $(UK_LDS-y)
        $(call build_cmd,LD,,$@.ld.o,\
               $(LD) -r $(LIBLDFLAGS) $(LIBLDFLAGS-y) \
                        $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) \
diff --git a/plat/linuxu/Linker.uk b/plat/linuxu/Linker.uk
index dbdf9d9..f4387fa 100644
--- a/plat/linuxu/Linker.uk
+++ b/plat/linuxu/Linker.uk
@@ -8,7 +8,8 @@ EXTRA_LD_SCRIPT_FLAGS := $(addprefix 
-Wl$(comma)-T,$(EXTRA_LD_SCRIPT-y))
 
 $(LINUXU_IMAGE): $(LINUXU_ALIBS) $(LINUXU_ALIBS-y) \
                 $(LINUXU_OLIBS) $(LINUXU_OLIBS-y) \
-                $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y)
+                $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) \
+                $(UK_LDS) $(UK_LDS-y)
        $(call build_cmd,LD,,$@,\
               $(LD) $(LDFLAGS) $(LDFLAGS-y) \
                     $(LINUXU_LDFLAGS) $(LINUXU_LDFLAGS-y) \
diff --git a/plat/xen/Linker.uk b/plat/xen/Linker.uk
index 801f5e2..aea1089 100644
--- a/plat/xen/Linker.uk
+++ b/plat/xen/Linker.uk
@@ -22,7 +22,7 @@ EXTRA_LD_SCRIPT_FLAGS := $(addprefix 
-Wl$(comma)-T,$(EXTRA_LD_SCRIPT-y))
 
 $(XEN_IMAGE): $(XEN_ALIBS) $(XEN_ALIBS-y) $(XEN_OLIBS) $(XEN_OLIBS-y) \
               $(UK_ALIBS) $(UK_ALIBS-y) $(UK_OLIBS) $(UK_OLIBS-y) \
-              $(XEN_LDSCRIPT)
+              $(UK_LDS) $(UK_LDS-y)
        $(call build_cmd,LD,,$@.ld.o,\
               $(LD) -r $(LIBLDFLAGS) $(LIBLDFLAGS-y) \
                        $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) \
diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index 04f2f0d..631fee3 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -157,6 +157,26 @@ $(call addlib,$(1))
 endif
 endef
 
+# add_paramprefix $name $libname
+define add_paramprefix =
+$(eval UK_LIB_PARAM_LDS:=$(CONFIG_UK_BASE)/lib/uklibparam/libparam.lds.S)
+$(eval $(call uc,$(2))_CFLAGS += -DUK_LIBPARAM_PREFIX=$(1))
+$(eval $(call uc,$(2))_CXXFLAGS += -DUK_LIBPARAM_PREFIX=$(1))
+$(eval $(call uc,$(2))_ASFLAGS += -DUK_LIBPARAM_PREFIX=$(1))
+$(eval $(call uc,$(2))_LD_SCRIPT := $(call src2lds,$(2),$(UK_LIB_PARAM_LDS)))
+endef
+
+# addlib_paramprefix $libname,$paramname(optional)
+define addlib_paramprefix =
+$(if $(2),\
+$(eval name := $(2)),\
+$(eval name := $(1)))
+$(eval $(call add_paramprefix,$(name),$(1),$(call uc,$(1))))
+$(eval EXTRA_LD_SCRIPT-$(CONFIG_LIBUKLIBPARAM) += $($(call uc,$(1))_LD_SCRIPT))
+$(eval $(call uc,$(1))_SRCS-$(CONFIG_LIBUKLIBPARAM) += $(UK_LIB_PARAM_LDS))
+$(eval $(call uc,$(1))_CLEAN-$(CONFIG_LIBUKLIBPARAM) += \
+                                               $($(call uc,$(1))_LD_SCRIPT))
+endef
 
 # addplatlib $platname,$libname
 define addplatlib =
@@ -173,6 +193,20 @@ $(if $(filter y,$(3)),$(call addplatlib,$(1),$(2)),)
 endef
 
 
+# addplatlib_paramprefix,$plat,$libname,$paramname(optional)
+define addplatlib_paramprefix =
+$(if $(3),\
+$(eval name:=$(3)),\
+$(eval name:=$(2)))
+$(eval $(call add_paramprefix,$(name),$(2)))
+$(eval $(call uc,$(1))_LD_SCRIPT-$(CONFIG_LIBUKLIBPARAM) +=\
+                                               $($(call uc,$(2))_LD_SCRIPT))
+$(eval $(call uc,$(2))_SRCS-$(CONFIG_LIBUKLIBPARAM) += \
+                                               $(UK_LIB_PARAM_LDS))
+$(eval $(call uc,$(2))_CLEAN-$(CONFIG_LIBUKLIBPARAM) +=\
+                                               $($(call uc,$(2))_LD_SCRIPT))
+endef
+
 
################################################################################
 #
 # Command calling
@@ -420,6 +454,7 @@ $(3): $(2) | prepare
        )
 
 UK_SRCS-y += $(2)
+UK_LDS-y += $(3)
 UK_DEPS-y += $(call out2dep,$(3))
 $(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call 
out2dep,$(3)))
 endef
-- 
2.7.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.