|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] symbols: explicitly specify source file name for symtab
On Mon, May 11, 2026 at 12:00:03PM +0200, Jan Beulich wrote:
> If there are any local symbols in an object file, GNU ld will create an
> STT_FILE symbol derived from the object file name if there is none in the
> incoming symbol table. The object file name, however, varies between
> linking passes. As a result, symbol name compression can yield different
> results if any of those local symbols need retaining (Arm [and RISC-V]
> mapping symbols are omitted, for example). If that difference in
> compression would yield a difference in the sizes of symbol_names[] or
> symbols_token_table[], the compare-symbol-tables sanity check will fail.
>
> Fixes: d37d63d4b548 ("symbols: prefix static symbols with their source file
> names")
> Reported-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> ---
> The observed problem was with a stub generated as Arm64 erratum 843419
> workaround. Such stubs' symbols (imo wrongly) are associated with the last
> input object, rather than the input object they belong to. Also for other
> kinds of stubs, afaict. See
> https://sourceware.org/bugzilla/show_bug.cgi?id=34140.
>
> As per the above, having a Fixes: tag here is questionable.
>
> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -200,7 +200,8 @@ $(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
> + $(objtree)/tools/symbols $(all_symbols) --source-name=$(@F).S --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) \
> @@ -210,6 +211,7 @@ endif
> > $(dot-target).1r.S
> $(NM) -pa --format=sysv $(dot-target).$(VIRT_BASE).0 \
> | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
> + --source-name=$(@F).S \
> > $(dot-target).1s.S
> $(MAKE) $(build)=$(@D) .$(@F).1r.o .$(@F).1s.o
> $(foreach base, $(VIRT_BASE) $(ALT_BASE), \
> @@ -220,6 +222,7 @@ endif
> > $(dot-target).2r.S
> $(NM) -pa --format=sysv $(dot-target).$(VIRT_BASE).1 \
> | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
> + --source-name=$(@F).S \
> > $(dot-target).2s.S
Wouldn't it be more accurate to use $(dot-target) as the source name?
Maybe $(notdir $(dot-target)).S?
I see the default is already set to the target filename for other
arches, so not a big deal IMO.
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |