|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/2] 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>
---
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
+ $(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;
+ } else if (strcmp(argv[i], "--xensyms") == 0)
map_only = true;
else
usage();
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |