[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] RFC: xen/x86: Enable --gc-sections
- To: Jason Andryuk <jason.andryuk@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
- Date: Mon, 8 Dec 2025 20:45:43 +0200
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZNPQH+QJ0ObaY4pAsuSpBbpYX+cx/PLdQrpfODRZxdM=; b=UwsX+U5/mGDUQJW4XlH+ZWltM/roR3UeffGtEo3XZtC4xMNIQhOZIwbZoNbqsOotazDX0QqktlbdDBX/eA98/46plf+Xvm17oU6eB4fVRhxB+x8cNSo7KLaIzmWa1ZJqUpjV1t07Wzki8l84fszlhwvLVm5dI9UpBJaFtQwM6QarRaGuNhiparFHLkM014cIoRWuCpfxsdlTc9HG1Kn5xwOXWYLNKUTPAlKAgCGweKrzfX5ipFVLHNFewZpIOvy21JV0XkkQ+95DSARlqsSkJ1UyKkaHwanlRr7kGGXIEDC4boc+wYXYkbRQu9fp2wegCdL+tBsBYChApvAy/OTDGw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nUw+8v+6YXvlOS18PX5zob4dS6fCnqhCg62F7uxWIz3ZOzaCTwc2bGgO1InhEz+j6bd0JrLiwa4hOXUXwi49PYeuILUiyQp2Pnm4ZiwKJifz3KxmmmZb8/zxCE3C3pNcm/Osv57ZgEc6zeujglPeuazWQqRHiqVsPl93BpZTDZ5rqYip6+a/uzZDlcNERTEutwjcFcS4MoT/M6DOEJhuuaTIvb3mtlikoJua8cnJudMV4yCLb+pcO/WPDDPAnvEPirTP/u02WuFBdPHMfC4XlwRpXewrXSS0dH9LdVT6UByflZHAH6vjHDVvTRjMncxDMdR1GqRgUmgbZqWAippm3w==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
- Cc: Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
- Delivery-date: Mon, 08 Dec 2025 18:46:06 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 06.12.25 00:28, Jason Andryuk wrote:
When linking to create xen-syms, add --gc-sections to garbage collect
unused stuff. Relies on CONFIG_CC_SPLIT_SECTIONS
We need to add KEEP() to the linker script in assorted places to retain
appropriate data - especially the arrays created therein.
Something is off though. In a test where memory_add() is unreachable,
it is still included. I'm not sure, but I am wondering if it's the
alternatives somehow keeping a reference to it.
Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
---
With --print-gc-sections on defconfig:
ld: removing unused section '.text.__bitmap_full' in file 'prelink.o'
ld: removing unused section '.text.__bitmap_xor' in file 'prelink.o'
ld: removing unused section '.text.__bitmap_set' in file 'prelink.o'
ld: removing unused section '.text.__bitmap_clear' in file 'prelink.o'
ld: removing unused section '.text.bitmap_find_free_region' in file 'prelink.o'
ld: removing unused section '.text.bitmap_release_region' in file 'prelink.o'
ld: removing unused section '.text.domain_has_ioreq_server' in file 'prelink.o'
ld: removing unused section '.text.compat_kexec_op' in file 'prelink.o'
ld: removing unused section '.text.in_atomic' in file 'prelink.o'
ld: removing unused section '.text.radix_tree_next_hole' in file 'prelink.o'
ld: removing unused section '.text.radix_tree_prev_hole' in file 'prelink.o'
ld: removing unused section '.text.radix_tree_gang_lookup_slot' in file
'prelink.o'
ld: removing unused section '.text._nrspin_trylock' in file 'prelink.o'
ld: removing unused section '.text.xen_compile_host' in file 'prelink.o'
ld: removing unused section '.text.vscnprintf' in file 'prelink.o'
ld: removing unused section '.text.wake_up_one' in file 'prelink.o'
ld: removing unused section '.text.xmem_pool_get_used_size' in file 'prelink.o'
ld: removing unused section '.text.xmem_pool_get_total_size' in file 'prelink.o'
ld: removing unused section '.text.xmem_pool_maxalloc' in file 'prelink.o'
ld: removing unused section '.text.xlat_start_info' in file 'prelink.o'
ld: removing unused section '.text.elf_sym_by_name' in file 'prelink.o'
ld: removing unused section '.text.elf_sym_by_index' in file 'prelink.o'
ld: removing unused section '.text.elf_get_ptr' in file 'prelink.o'
ld: removing unused section '.text.elf_lookup_addr' in file 'prelink.o'
ld: removing unused section '.text.serial_vuart_info' in file 'prelink.o'
ld: removing unused section '.text.pci_find_next_cap' in file 'prelink.o'
ld: removing unused section '.text.free_hvm_irq_dpci' in file 'prelink.o'
ld: removing unused section '.text.mce_barrier_init' in file 'prelink.o'
ld: removing unused section '.text.mce_barrier_dec' in file 'prelink.o'
ld: removing unused section '.text.mce_barrier' in file 'prelink.o'
ld: removing unused section '.text.apei_read_mce' in file 'prelink.o'
ld: removing unused section '.text.apei_check_mce' in file 'prelink.o'
ld: removing unused section '.text.apei_clear_mce' in file 'prelink.o'
ld: removing unused section '.text.efi_halt_system' in file 'prelink.o'
ld: removing unused section '.text.get_vvmcs_virtual_safe' in file 'prelink.o'
ld: removing unused section '.text.get_vvmcs_real_safe' in file 'prelink.o'
ld: removing unused section '.text.set_vvmcs_real' in file 'prelink.o'
ld: removing unused section '.text.set_vvmcs_virtual_safe' in file 'prelink.o'
ld: removing unused section '.text.set_vvmcs_real_safe' in file 'prelink.o'
ld: removing unused section '.text.domain_set_alloc_bitsize' in file 'prelink.o'
ld: removing unused section '.text.watchdog_enabled' in file 'prelink.o'
ld: removing unused section '.text.unset_nmi_callback' in file 'prelink.o'
ld: removing unused section '.text.sha2_256_init' in file 'prelink.o'
ld: removing unused section '.text.xxh64_copy_state' in file 'prelink.o'
ld: removing unused section '.text.xxh64' in file 'prelink.o'
ld: removing unused section '.discard' in file 'prelink.o'
ld: removing unused section '.rodata.xen_compile_host.str1.1' in file
'prelink.o'
ld: removing unused section '.rodata.elf_lookup_addr.str1.1' in file 'prelink.o'
ld: removing unused section '.rodata.apei_read_mce.str1.8' in file 'prelink.o'
ld: removing unused section '.rodata.efi_halt_system.str1.8' in file 'prelink.o'
ld: removing unused section '.rodata.play_dead.str1.1' in file 'prelink.o'
ld: removing unused section '.data.rel.ro.local.fetch_type_names' in file
'prelink.o'
---
xen/arch/x86/Makefile | 3 +++
xen/arch/x86/xen.lds.S | 38 +++++++++++++++++++-------------------
xen/include/xen/xen.lds.h | 18 +++++++++---------
3 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 300cc67407..934c79411a 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -137,18 +137,21 @@ $(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds
$(objtree)/tools/symbols $(all_symbols) --empty > $(dot-target).0.S
$(MAKE) $(build)=$(@D) $(dot-target).0.o
$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
+ --gc-sections \
$(dot-target).0.o -o $(dot-target).0
$(NM) -pa --format=sysv $(dot-target).0 \
| $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
> $(dot-target).1.S
$(MAKE) $(build)=$(@D) $(dot-target).1.o
$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
+ --gc-sections \
$(dot-target).1.o -o $(dot-target).1
$(NM) -pa --format=sysv $(dot-target).1 \
| $(objtree)/tools/symbols $(all_symbols) --sysv --sort
$(syms-warn-dup-y) \
> $(dot-target).2.S
$(MAKE) $(build)=$(@D) $(dot-target).2.o
$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
+ --gc-sections \
It should work if --gc-sections is used only here - last LD statement.
$(orphan-handling-y) $(dot-target).2.o -o $@
$(NM) -pa --format=sysv $@ \
| $(objtree)/tools/symbols --all-symbols --xensyms --sysv
--sort \
--
Best regards,
-grygorii
|