[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 1/2] build: Use GCC for linking
Hello Simon, On 05/14/2018 03:29 PM, Simon Kuenzer wrote: Hi Sharan, On 14.05.2018 14:12, Sharan Santhanam wrote:Hello Simon, Please find the review comments below: On 05/11/2018 04:24 PM, Simon Kuenzer wrote:Instead of using `ld` directly, `gcc` is used for linking. `gcc` is going to call `ld` but provides further optimizations options that could be used for building images later (e.g., LTO).* The gcc wiki suggests this: https://gcc.gnu.org/wiki/LinkTimeOptimizationFAQ#ar.2C_nm_and_ranlib"If you try to build bigger projects with -flto you have to make sure that you use a version of binutils that supports gcc's liblto_plugin. Since version 4.9 gcc produces slim object files that only contain the intermediate representation. In order to handle archives of these objects you have to use the gcc wrappers: gcc-ar, gcc-nm and gcc-ranlib. (The next version of binutils will support automatic loading of the liblto_plugin.) "If we using the changing ld to gcc, we should also use the rest of the binutils utility as suggested.Thanks for pointing this out. I agree, we should use also the rest of the build tools. I am going to prepare a v2 where I replace nm with gcc-nm, and ar with gcc-ar. We are not using ranlib for now.* The following gcc documentation list the possible optimization options.https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.htmlThe -flto and -fwhole-program option are incompatible. There are also other compiler optimization option used in combination with -flto. Do we consider those option as a part of this patch or do we support those options.I think this comment is related to patch 2/2 that introduces LTO, right? I intended to introduce initial LTO support as a trial first (default is off) and I am expecting to have patches later that provide more configuration options if needed. Yes, they are more related to LTO and I should have added this question with LTO part of the patch. I agree, it might be wise to split it out for now and introduce the LTO option first and then we can expand on it. The intention of the question was more to clarify on the way forward. Signed-off-by: Simon Kuenzer<simon.kuenzer@xxxxxxxxx> --- Makefile | 2 +- Makefile.uk | 8 ++++---- plat/kvm/Linker.uk | 8 ++++---- plat/linuxu/Linker.uk | 2 +- plat/xen/Linker.uk | 16 ++++++++-------- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index b177bff..23ebe21 100644 --- a/Makefile +++ b/Makefile @@ -387,7 +387,7 @@ CROSS_COMPILE := $(CROSS_COMPILE:"%"=%) include $(UK_BASE)/arch/$(UK_ARCH)/Compiler.uk # Make variables (CC, etc...) -LD := $(CROSS_COMPILE)ld +LD := $(CROSS_COMPILE)gcc CC := $(CROSS_COMPILE)gcc CPP := $(CC) CXX := $(CPP) diff --git a/Makefile.uk b/Makefile.uk index 5855b40..c540ada 100644 --- a/Makefile.uk +++ b/Makefile.uk@@ -20,8 +20,8 @@ CXXINCLUDES += -nostdinc -nostdlib -I$(UK_BASE)/include# Set the text and data sections to be readable and writable. Also, # do not page-align the data segment. If the output format supports # Unix style magic numbers, mark the output as OMAGIC. -LIBLDFLAGS += --omagic -r -LDFLAGS += --omagic +LIBLDFLAGS += -nostdinc -nostdlib -Wl,--omagic -Wl,-r +LDFLAGS += -nostdinc -nostdlib -Wl,--omagic -Wl,--build-id=noneCFLAGS-$(OPTIMIZE_NONE) += -O0 -fno-optimize-sibling-calls -fno-tree-vectorize CXXFLAGS-$(OPTIMIZE_NONE) += -O0 -fno-optimize-sibling-calls -fno-tree-vectorize@@ -32,12 +32,12 @@ CXXFLAGS-$(OPTIMIZE_SIZE) += -OsCFLAGS-$(OPTIMIZE_DEADELIM) += -fdata-sections -ffunction-sections CXXFLAGS-$(OPTIMIZE_DEADELIM) += -fdata-sections -ffunction-sections-LDFLAGS-$(OPTIMIZE_DEADELIM) += --gc-sections +LDFLAGS-$(OPTIMIZE_DEADELIM) += -Wl,--gc-sections ifneq ($(DEBUG_SYMBOLS),y) CFLAGS += -g0 CXXFLAGS += -g0 -LDFLAGS-y += --strip-debug +LDFLAGS-y += -Wl,--strip-debug else CFLAGS-$(DEBUG_SYMBOLS_LVL1) += -g1 CXXFLAGS-$(DEBUG_SYMBOLS_LVL1) += -g1 diff --git a/plat/kvm/Linker.uk b/plat/kvm/Linker.uk index 7957b7a..a91a786 100644 --- a/plat/kvm/Linker.uk +++ b/plat/kvm/Linker.uk @@ -1,6 +1,6 @@ ifeq (x86_64,$(UK_ARCH)) -KVM_LDSCRIPT := $(UK_BASE)/plat/kvm/x86/link64.ld -KVM_LDFLAGS-y += -m elf_x86_64 +KVM_LDSCRIPT := -Wl,-T,$(UK_BASE)/plat/kvm/x86/link64.ld +KVM_LDFLAGS-y += -Wl,-m,elf_x86_64 endif ## @@ -10,12 +10,12 @@ KVM_IMAGE := $(BUILD_DIR)/$(UK_NAME)_kvm-$(UK_ARCH) $(KVM_IMAGE): $(KVM_LINK) $(KVM_LINK-y) $(UK_LINK) $(UK_LINK-y) $(call build_cmd,LD,,$@.ld.o,\- $(LD) $(LIBLDFLAGS) $(LIBLDFLAGS-y) $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) $^ -o $@.ld.o) + $(LD) -r $(LIBLDFLAGS) $(LIBLDFLAGS-y) $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) $^ -o $@.ld.o)$(call build_cmd,OBJCOPY,,$@.o,\$(OBJCOPY) -w -G kvmos_* -G _libkvmplat_entry $@.ld.o $@.o)ifeq (x86_64,$(UK_ARCH)) $(call build_cmd,LD,,$@,\- $(LD) $(LDFLAGS) $(LDFLAGS-y) $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) -T $(KVM_LDSCRIPT) $@.o -o $@) + $(LD) $(LDFLAGS) $(LDFLAGS-y) $(KVM_LDFLAGS) $(KVM_LDFLAGS-y) $(KVM_LDSCRIPT) $@.o -o $@)ifeq ($(OPTIMIZE_DBGFILE),y) $(call build_cmd,OBJCOPY,,$@.dbg,\ $(OBJCOPY) --only-keep-debug $@ $@.dbg) diff --git a/plat/linuxu/Linker.uk b/plat/linuxu/Linker.uk index 16a5b15..d50401f 100644 --- a/plat/linuxu/Linker.uk +++ b/plat/linuxu/Linker.uk @@ -1,4 +1,4 @@ -LINUXU_LDFLAGS-y += -e_liblinuxuplat_start +LINUXU_LDFLAGS-y += -Wl,-e,_liblinuxuplat_start ## ## Link image diff --git a/plat/xen/Linker.uk b/plat/xen/Linker.uk index c0851c3..3890196 100644 --- a/plat/xen/Linker.uk +++ b/plat/xen/Linker.uk @@ -1,16 +1,16 @@ ifeq (x86_64,$(UK_ARCH)) -XEN_LDSCRIPT := $(UK_BASE)/plat/xen/x86/link64.ld -XEN_LDFLAGS-y += -m elf_x86_64 +XEN_LDSCRIPT := -Wl,-T,$(UK_BASE)/plat/xen/x86/link64.ld +XEN_LDFLAGS-y += -Wl,-m,elf_x86_64 endif ifeq (x86_32,$(UK_ARCH)) -XEN_LDSCRIPT := $(UK_BASE)/plat/xen/x86/link32.ld -XEN_LDFLAGS-y += -m elf_x86_32 +XEN_LDSCRIPT := -Wl,-T,$(UK_BASE)/plat/xen/x86/link32.ld +XEN_LDFLAGS-y += -Wl,-m,elf_x86_32 endif ifeq (arm_64,$(UK_ARCH)) -XEN_LDSCRIPT := $(UK_BASE)/plat/xen/arm/link64.ld +XEN_LDSCRIPT := -Wl,-T,$(UK_BASE)/plat/xen/arm/link64.ld endif ifeq (arm,$(UK_ARCH)) -XEN_LDSCRIPT := $(UK_BASE)/plat/xen/arm/link32.ld +XEN_LDSCRIPT := -Wl,-T,$(UK_BASE)/plat/xen/arm/link32.ld endif ##@@ -25,7 +25,7 @@ $(XEN_IMAGE): $(XEN_LINK) $(XEN_LINK-y) $(UK_LINK) $(UK_LINK-y) $(OBJCOPY) -w -G xenos_* -G _libxenplat_start $@.ld.o $@.o)ifeq (arm,$(UK_ARCH)) $(call build_cmd,LD,,$@.elf,\- $(LD) $(LDFLAGS) $(LDFLAGS-y) $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) -T $(XEN_LDSCRIPT) $@.o -o $@.elf) + $(LD) $(LDFLAGS) $(LDFLAGS-y) $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) $(XEN_LDSCRIPT) $@.o -o $@.elf)ifeq ($(OPTIMIZE_DBGFILE),y) $(call build_cmd,OBJCOPY,,$@.dbg,\ $(OBJCOPY) --only-keep-debug $@.elf $@.dbg) @@ -44,7 +44,7 @@ endif $(GZIP) -f -9 -c $@ >$@.gz) else $(call build_cmd,LD,,$@,\- $(LD) $(LDFLAGS) $(LDFLAGS-y) $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) -T $(XEN_LDSCRIPT) $@.o -o $@) + $(LD) $(LDFLAGS) $(LDFLAGS-y) $(XEN_LDFLAGS) $(XEN_LDFLAGS-y) $(XEN_LDSCRIPT) $@.o -o $@)ifeq ($(OPTIMIZE_DBGFILE),y) $(call build_cmd,OBJCOPY,,$@.dbg,\ $(OBJCOPY) --only-keep-debug $@ $@.dbg)The rest of the code looks fine. Thanks & Regards Sharan SanthanamThanks, Simon _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |