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

Re: [Minios-devel] [UNIKRAFT PATCH v3 3/8] build: Introduce default linker script variable



Hi Sharan,

I have one comment inline.

-- Felipe

On 12.08.19, 16:04, "Minios-devel on behalf of Sharan Santhanam" 
<minios-devel-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of 
Sharan.Santhanam@xxxxxxxxx> wrote:

    Each platform may define `UK_PLAT_PLATNAME_DEF_LDS`. This variable will
    be used by Unikraft build system to different default linker script
    from additional linker script and automatically generate rules to link
    the final application image. If the platform does not introduce this
    variable, then all the linker script would be defined as extra linker
    scripts.
    
    Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
    ---
     doc/guides/developers-platform.rst | 16 +++++++++++-----
     plat/kvm/Makefile.uk               | 13 ++++++++++++-
     plat/xen/Makefile.uk               | 12 ++++++++++++
     support/build/Makefile.rules       |  5 +++--
     4 files changed, 38 insertions(+), 8 deletions(-)
    
    diff --git a/doc/guides/developers-platform.rst 
b/doc/guides/developers-platform.rst
    index c39fbb29..be72b1a9 100644
    --- a/doc/guides/developers-platform.rst
    +++ b/doc/guides/developers-platform.rst
    @@ -15,23 +15,29 @@ treated as libraries in Unikraft but there are a few 
differences:
     
     3. You need to provide a linker script and name the file ``Linker.uk``.
     
    -4. You need to place all platform files in the Unikraft repo under
    +4. The default linker script for a platform is provided using the
    +   ``UK_PLAT_PLATNAME_DEF_LDS`` variable in the Makefile.uk of the platform
    +   library. The default linker script is also added as a source file to the
    +   platform library to be built. If the default linker script is not 
provided,
    +   then Unikraft would rely on the linker script provided by the tool 
chain.

It's not entirely clear what the "script provided by the tool chain" means, 
perhaps you could be more specific?

    +
    +5. You need to place all platform files in the Unikraft repo under
        ``plat/platname/``.
     
    -5. A platform have to implement interfaces defined in ``include/uk/plat``
    +6. A platform have to implement interfaces defined in ``include/uk/plat``
        (this is analogue to architectures that have to implement interfaces in
        ``include/uk/arch``)
     
    -6. They do not use any external source files, i.e., all source code is
    +7. They do not use any external source files, i.e., all source code is
        within the Unikraft tree.
     
    -7. They must not have dependencies on external libraries, i.e., the
    +8. They must not have dependencies on external libraries, i.e., the
        Unikraft repo must be able to be built on its own. Remember that
        for such builds, ``libnolibc`` has to be sufficient ``libc`` replacement
        to compile, link, and execute internal libraries. This means that nolibc
        has to be extended from time to time.
     
    -8. All changes/additions to ``include/uk/plat`` and ``include/uk/arch``
    +9. All changes/additions to ``include/uk/plat`` and ``include/uk/arch``
        have to be completely independent of any library (internal and 
external).
        They do not include any header provided by any library and never 
conflict
        with any library. Most of the times this is challenging for defining 
data
    diff --git a/plat/kvm/Makefile.uk b/plat/kvm/Makefile.uk
    index 7d0c6965..f52bd4ec 100644
    --- a/plat/kvm/Makefile.uk
    +++ b/plat/kvm/Makefile.uk
    @@ -24,6 +24,17 @@ LIBKVMPLAT_ASFLAGS             += -DKVMPLAT
     LIBKVMPLAT_CFLAGS              += -DKVMPLAT
     LIBKVMPLAT_CXXFLAGS            += -DKVMPLAT
     
    +##
    +## Default Linker script
    +ifeq ($(CONFIG_ARCH_X86_64),y)
    +UK_PLAT_KVM_DEF_LDS            := 
$(CONFIG_UK_BASE)/plat/kvm/x86/link64.lds.S
    +else
    +ifeq ($(CONFIG_ARCH_ARM_64),y)
    +UK_PLAT_KVM_DEF_LDS            := 
$(CONFIG_UK_BASE)/plat/kvm/arm/link64.lds.S
    +endif
    +endif
    +
    +
     ##
     ## Architecture library definitions for x86_64
     ##
    @@ -81,7 +92,7 @@ LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/irq.c
     LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/io.c
     LIBKVMPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
     LIBKVMPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/memory.c|common
    -LIBKVMPLAT_SRCS-y              += $(KVM_LDSCRIPT_SRC-y)
    +LIBKVMPLAT_SRCS-y              += $(UK_PLAT_KVM_DEF_LDS)
     
     ##
     ## PCI library definitions
    diff --git a/plat/xen/Makefile.uk b/plat/xen/Makefile.uk
    index 69b10efc..3f185256 100644
    --- a/plat/xen/Makefile.uk
    +++ b/plat/xen/Makefile.uk
    @@ -18,6 +18,16 @@ LIBXENPLAT_ASFLAGS-y     += -DXENPLAT 
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFAC
     LIBXENPLAT_CFLAGS-y      += -DXENPLAT 
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
     LIBXENPLAT_CXXFLAGS-y    += -DXENPLAT 
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
     
    +##
    +## Default Linker script
    +ifeq ($(CONFIG_ARCH_X86_64),y)
    +UK_PLAT_XEN_DEF_LDS            := 
$(CONFIG_UK_BASE)/plat/xen/x86/link64.lds.S
    +else
    +ifeq ($(CONFIG_ARCH_ARM_32),y)
    +UK_PLAT_XEN_DEF_LDS            := 
$(CONFIG_UK_BASE)/plat/xen/arm/link32.lds.S
    +endif
    +endif
    +
     ##
     ## Platform library definitions
     ##
    @@ -25,6 +35,8 @@ LIBXENPLAT_ASINCLUDES-y        += 
-I$(LIBXENPLAT_BASE)/include
     LIBXENPLAT_ASINCLUDES-y        += -I$(UK_PLAT_COMMON_BASE)/include
     LIBXENPLAT_CINCLUDES-y         += -I$(LIBXENPLAT_BASE)/include
     LIBXENPLAT_CINCLUDES-y         += -I$(UK_PLAT_COMMON_BASE)/include
    +
    +LIBXENPLAT_SRCS-y              += $(UK_PLAT_XEN_DEF_LDS)
     LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/hypervisor.c
     LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/memory.c
     LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/io.c
    diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
    index 29e0ce93..3147f4cc 100644
    --- a/support/build/Makefile.rules
    +++ b/support/build/Makefile.rules
    @@ -137,8 +137,9 @@ endef
     # Register a platform to the build system
     define addplat =
     UK_PLATS += $(1)
    -$(eval UK_PLAT_$(call uc,$(1))_BASE   := $(_IMPORT_BASE))
    -$(eval UK_PLAT_$(call uc,$(1))_LINKER := $(_IMPORT_BASE)/Linker.uk)
    +$(eval UK_PLAT_$(call uc,$(1))_BASE    := $(_IMPORT_BASE))
    +$(eval UK_PLAT_$(call uc,$(1))_LINKER  := $(_IMPORT_BASE)/Linker.uk)
    +$(eval UK_PLAT_$(call uc,$(1))_DEF_LDS :=)
     endef
     
     # addplat_s $platname,$switch
    -- 
    2.20.1
    
    
    _______________________________________________
    Minios-devel mailing list
    Minios-devel@xxxxxxxxxxxxxxxxxxxx
    https://lists.xenproject.org/mailman/listinfo/minios-devel

_______________________________________________
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®.