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

[xen staging-4.21] symbols: don't use symbols-dummy



commit 97593f78ea1b702fdbad5a2b44baf457078c9538
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Jan 29 13:35:28 2026 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jan 29 13:35:28 2026 +0100

    symbols: don't use symbols-dummy
    
    symbols/x86: don't use symbols-dummy
    
    In particular when linking with lld, which converts hidden symbols to
    local ones, the ELF symbol table can change in unhelpful ways between the
    first two linking passes, resulting in the .rodata contributions to change
    between the 2nd and 3rd pass. That, however, renders our embedded symbol
    table pretty much unusable; the recently introduced self-test may then
    also fail. (Another difference between compiling a C file and assembling
    the generated ones is that - with -fdata-sections in use - the .rodata
    contributions move between passes 1 and 2, when we'd prefer them not to.)
    
    Make tools/symbols capable of producing an "empty" assembly file, such
    that unwanted differences between passes 1 and 2 go away when then using
    the corresponding objects in place of common/symbols-dummy.o.
    
    Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reported-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    
    symbols/arm: don't use symbols-dummy
    
    In particular when linking with lld, which converts hidden symbols to
    local ones, the ELF symbol table can change in unhelpful ways between the
    first two linking passes, resulting in the .rodata contributions to change
    between the 2nd and 3rd pass. That, however, renders our embedded symbol
    table pretty much unusable; the recently introduced self-test may then
    also fail. (Another difference between compiling a C file and assembling
    the generated ones is that - with -fdata-sections in use - the .rodata
    contributions move between passes 1 and 2, when we'd prefer them not to.)
    
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Julien Grall <jgrall@xxxxxxxxxx>
    master commit: 92f3beb62750f9b1f14d0e4693e793355a99c185
    master date: 2025-11-26 12:10:00 +0100
    master commit: d88873d01f4ec638daf722e332e2cab9f8ab3019
    master date: 2025-12-08 15:29:12 +0100
---
 xen/arch/arm/Makefile | 4 +++-
 xen/arch/x86/Makefile | 8 ++++++--
 xen/tools/symbols.c   | 5 ++++-
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 11c6b6b06d..7494a0f926 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -85,8 +85,10 @@ ifeq ($(CONFIG_ARM_64),y)
 endif
 
 $(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 $< \
-           $(objtree)/common/symbols-dummy.o -o $(dot-target).0
+             $(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
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 6fe6cddea4..9d07a0a0d6 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -134,8 +134,10 @@ $(TARGET): $(TARGET)-syms $(efi-y) $(obj)/boot/mkelf32
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 
 $(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) \
-           $(objtree)/common/symbols-dummy.o -o $(dot-target).0
+             $(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
@@ -206,9 +208,11 @@ $(TARGET).efi: $(objtree)/prelink.o $(note_file) 
$(obj)/efi.lds $(obj)/efi/reloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
        $(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug 
info from $(@F)"
 endif
+       $(objtree)/tools/symbols $(all_symbols) --empty > $(dot-target).0s.S
+       $(MAKE) $(build)=$(@D) .$(@F).0s.o
        $(foreach base, $(VIRT_BASE) $(ALT_BASE), \
                  $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds $< 
$(relocs-dummy) \
-                       $(objtree)/common/symbols-dummy.o $(note_file_option) \
+                       $(dot-target).0s.o $(note_file_option) \
                        -o $(dot-target).$(base).0 &&) :
        $(MKRELOC) $(foreach base,$(VIRT_BASE) 
$(ALT_BASE),$(dot-target).$(base).0) \
                > $(dot-target).1r.S
diff --git a/xen/tools/symbols.c b/xen/tools/symbols.c
index 7685866b97..0af8a1e91c 100644
--- a/xen/tools/symbols.c
+++ b/xen/tools/symbols.c
@@ -675,7 +675,10 @@ int main(int argc, char **argv)
                                warn_dup = true;
                        else if (strcmp(argv[i], "--error-dup") == 0)
                                warn_dup = error_dup = true;
-                       else if (strcmp(argv[i], "--xensyms") == 0)
+                       else if (strcmp(argv[i], "--empty") == 0) {
+                               write_src();
+                               return 0;
+                       } else if (strcmp(argv[i], "--xensyms") == 0)
                                map_only = true;
                        else
                                usage();
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.21



 


Rackspace

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