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

Re: [PATCH 2/2] symbols/x86: don't use symbols-dummy


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Tue, 25 Nov 2025 18:36:39 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.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=DMvcnfOcb3XPxgNPmv0cQwNPmIQWCCW2y59Uf+UEUf0=; b=qoaDUs79AGgxoen2V5B9REHasAtWeCX8wO4oqtIyG7kNd3uSbQG5lJzMOY90zGVUZu9nokvdzzj9Xf0bkXvhXIBLh0uRpP+BWAOZqS7bc3SJH9vFnSTcimaojux4WdtZZvHPFbhDem8WSEYYBNFiz/kZEw943xXNatTyKP1b0XTBFhH6SUu8tqtbo7yKO31qsQA/eG+6O35yUvzEg0vXUgEJunNyO9rv1jW+f2vuXRqM4hQCG4sNQo/UH6h35mx7rfnZuEVchWdXOM4AEXC0rh3KkxsExnPxYTMz0uw3jhzbHqxggQZz87LGyFh+CCMPmE5u7OoSfkMZdipK+L7KhQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aHpHCuGesAGsgBEp2Hd3ezRi1wSJPeIFTV812djGHP39flNtBpOuRRVhqz8RlDlK4Bech1v3zSn26OnfLDWnaQOoAumTy3cKdAbguI8DCpK7H9MoqsygCbEjZ8IMVsts82mKTfjV7yAng/dG021W4PNHNZZroU1XIXwr9CgbBi+pOuO3p9GvM1XuWI1PIDOMpEtnavAB7shfC60zIDd0CiIZDuTbBv0F4ZZa1vcut+2i1AXWTKkdgM6SBcedz57FNHahFz6d6tZcl+1twqCeU/Q1sSp5Qz93CgAektz8BjaFl5bJgXqovfyG7qHaOa9cY4vQ4BDXfKOeN9/z7TaRog==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>
  • Delivery-date: Tue, 25 Nov 2025 17:36:54 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Tue, Nov 25, 2025 at 03:14:27PM +0100, Jan Beulich wrote:
> 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>

LGTM, not sure whether you want to extend to other arches in this
same patch, or simply guard the build of symbols-dummy.o for non-x86
arches.

> ---
> May want mirroring to other arch-es.
> 
> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -134,8 +134,10 @@ $(TARGET): $(TARGET)-syms $(efi-y) $(obj
>  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

It would be good if we could now stop building symbols-dummy.o as part
of extra-y.  Maybe you could guard it with ifneq ($(CONFIG_X86),y) in
the Makefile?

Or otherwise remove this from all arches thus removing
common/symbols-dummy.c.

> +           $(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
> @@ -207,9 +209,11 @@ $(TARGET).efi: $(objtree)/prelink.o $(no
>  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
> --- a/xen/tools/symbols.c
> +++ b/xen/tools/symbols.c
> @@ -672,7 +672,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;

Oh, that was easier than I was expecting for symbols to generate a
working empty assembly file.

Thanks, Roger.



 


Rackspace

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