mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
symbols: Generate an xen-sym.map
You could construct _most_ of the names of the functions by doing 'nm --defined' but unfortunatly you do not get the <file> prefix that is added on in Xen . For example: $ cat xen-syms.symbols |grep do_domain_pause 0xffff82d080104920 t domain.c#do_domain_pause $ nm --defined xen-syms|grep do_domain_pause ffff82d080104920 t do_domain_pause This is normally not an issue, but if one is doing livepatching and wants during build-time verify that the symbols the livepatch payloads will patch do correspond to the one the hypervisor has built - this helps a lot. Note that during runtime one can do: [root@localhost xen]# cat /proc/xen/xensyms |grep do_domain_pause ffff82d080104920 t domain.c#do_domain_pause But one may not want to build and verify a livepatch on the same host. Reviewed-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
ed32327715
commit
6ea24e53f1
5 files changed
+26
-3
No files matched your search
@@ -273,6 +273,7 @@ tools/flask/policy/policy.conf
|
||||
tools/flask/policy/xenpolicy-*
|
||||
xen/xen
|
||||
xen/xen-syms
|
||||
xen/xen-syms.map
|
||||
xen/xen.*
|
||||
unmodified_drivers/linux-2.6/.tmp_versions
|
||||
unmodified_drivers/linux-2.6/*.cmd
|
||||
|
||||
+5
-1
@@ -62,10 +62,12 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX)
|
||||
ln -f -s $(T)-$(XEN_FULLVERSION)$(Z) $(D)$(BOOT_DIR)/$(T)$(Z)
|
||||
[ -d "$(D)$(DEBUG_DIR)" ] || $(INSTALL_DIR) $(D)$(DEBUG_DIR)
|
||||
$(INSTALL_DATA) $(TARGET)-syms $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION)
|
||||
$(INSTALL_DATA) $(TARGET)-syms.map $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION).map
|
||||
$(INSTALL_DATA) $(KCONFIG_CONFIG) $(D)$(BOOT_DIR)/$(T)-$(XEN_FULLVERSION).config
|
||||
if [ -r $(TARGET).efi -a -n '$(EFI_DIR)' ]; then \
|
||||
[ -d $(D)$(EFI_DIR) ] || $(INSTALL_DIR) $(D)$(EFI_DIR); \
|
||||
$(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_DIR)/$(T)-$(XEN_FULLVERSION).efi; \
|
||||
$(INSTALL_DATA) $(TARGET)-efi.map $(D)$(DEBUG_DIR)/$(T)-$(XEN_FULLVERSION).efi.map \
|
||||
ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).$(XEN_SUBVERSION).efi; \
|
||||
ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi; \
|
||||
ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T).efi; \
|
||||
@@ -91,8 +93,10 @@ _uninstall:
|
||||
rm -f $(D)$(BOOT_DIR)/$(T)-$(XEN_VERSION)$(Z)
|
||||
rm -f $(D)$(BOOT_DIR)/$(T)$(Z)
|
||||
rm -f $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION)
|
||||
rm -f $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION).map
|
||||
rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_FULLVERSION).efi
|
||||
rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).$(XEN_SUBVERSION).efi
|
||||
rm -f $(D)$(DEBUG_DIR)/$(T)-$(XEN_FULLVERSION).efi.map
|
||||
rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi
|
||||
rm -f $(D)$(EFI_DIR)/$(T).efi
|
||||
rm -f $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi
|
||||
@@ -112,7 +116,7 @@ _clean: delete-unfresh-files
|
||||
$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) clean
|
||||
$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean
|
||||
find . \( -name "*.o" -o -name ".*.d" \) -exec rm -f {} \;
|
||||
rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET)-syms *~ core
|
||||
rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
|
||||
rm -f include/asm-*/asm-offsets.h
|
||||
rm -f .banner
|
||||
|
||||
|
||||
@@ -102,6 +102,9 @@ $(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o
|
||||
$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
|
||||
$(LD) $(LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
|
||||
$(@D)/.$(@F).1.o -o $@
|
||||
$(NM) -pa --format=sysv $(@D)/$(@F) \
|
||||
| $(BASEDIR)/tools/symbols --xensyms --sysv --sort \
|
||||
>$(@D)/$(@F).map
|
||||
rm -f $(@D)/.$(@F).[0-9]*
|
||||
|
||||
asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
|
||||
|
||||
@@ -139,6 +139,9 @@ $(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o
|
||||
$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
|
||||
$(LD) $(LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
|
||||
$(@D)/.$(@F).1.o -o $@
|
||||
$(NM) -pa --format=sysv $(@D)/$(@F) \
|
||||
| $(BASEDIR)/tools/symbols --xensyms --sysv --sort \
|
||||
>$(@D)/$(@F).map
|
||||
rm -f $(@D)/.$(@F).[0-9]*
|
||||
|
||||
note.o: $(TARGET)-syms
|
||||
@@ -189,7 +192,9 @@ $(TARGET).efi: prelink-efi.o $(note_file) efi.lds efi/relocs-dummy.o $(BASEDIR)/
|
||||
$(guard) $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
|
||||
$(guard) $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
|
||||
$(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file) -o $@
|
||||
if $(guard) false; then rm -f $@; echo 'EFI support disabled'; fi
|
||||
if $(guard) false; then rm -f $@; echo 'EFI support disabled'; \
|
||||
else $(NM) -pa --format=sysv $(@D)/$(@F) \
|
||||
| $(BASEDIR)/tools/symbols --xensyms --sysv --sort >$(@D)/$(@F).map; fi
|
||||
rm -f $(@D)/.$(@F).[0-9]*
|
||||
|
||||
efi/boot.init.o efi/runtime.o efi/compat.o efi/buildid.o: $(BASEDIR)/arch/x86/efi/built_in.o
|
||||
|
||||
+11
-1
@@ -52,6 +52,7 @@ static unsigned int table_size, table_cnt;
|
||||
static unsigned long long _stext, _etext, _sinittext, _einittext, _sextratext, _eextratext;
|
||||
static int all_symbols = 0;
|
||||
static int sort_by_name = 0;
|
||||
static int map_only = 0;
|
||||
static char symbol_prefix_char = '\0';
|
||||
static enum { fmt_bsd, fmt_sysv } input_format;
|
||||
static int compare_name(const void *p1, const void *p2);
|
||||
@@ -181,7 +182,7 @@ static int read_symbol(FILE *in, struct sym_entry *s)
|
||||
*sym++ = '#';
|
||||
}
|
||||
strcpy(sym, str);
|
||||
if (sort_by_name) {
|
||||
if (sort_by_name || map_only) {
|
||||
s->orig_symbol = strdup(SYMBOL_NAME(s));
|
||||
s->type = stype; /* As s->sym[0] ends mangled. */
|
||||
}
|
||||
@@ -307,6 +308,13 @@ static void write_src(void)
|
||||
unsigned int *markers;
|
||||
char buf[KSYM_NAME_LEN+1];
|
||||
|
||||
if (map_only) {
|
||||
for (i = 0; i < table_cnt; i++)
|
||||
printf("%#llx %c %s\n", table[i].addr, table[i].type,
|
||||
table[i].orig_symbol);
|
||||
|
||||
return;
|
||||
}
|
||||
printf("#include <xen/config.h>\n");
|
||||
printf("#include <asm/types.h>\n");
|
||||
printf("#if BITS_PER_LONG == 64 && !defined(SYMBOLS_ORIGIN)\n");
|
||||
@@ -609,6 +617,8 @@ int main(int argc, char **argv)
|
||||
sort_by_name = 1;
|
||||
else if (strcmp(argv[i], "--warn-dup") == 0)
|
||||
warn_dup = true;
|
||||
else if (strcmp(argv[i], "--xensyms") == 0)
|
||||
map_only = true;
|
||||
else
|
||||
usage();
|
||||
}
|
||||
|
||||