Messages in this thread Patch in this message | | | From | Brian Gerst <> | Subject | [PATCH 2/3] x86/relocs: Make absolute percpu relocations conditional | Date | Sat, 13 Nov 2021 07:40:34 -0500 |
| |
Signed-off-by: Brian Gerst <brgerst@gmail.com> --- arch/x86/Kconfig | 4 ++++ arch/x86/boot/compressed/Makefile | 3 ++- arch/x86/tools/relocs.c | 4 ++-- arch/x86/tools/relocs.h | 4 ++-- arch/x86/tools/relocs_common.c | 11 ++++++++--- init/Kconfig | 1 - 6 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 8268910e09cd..832a6626df72 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -402,6 +402,10 @@ config STACKPROTECTOR_FIXED depends on X86_64 && STACKPROTECTOR default y if !$(cc-option,-mstack-protector-guard-reg=gs) +config X86_ABSOLUTE_PERCPU + def_bool X86_64 && SMP + select KALLSYMS_ABSOLUTE_PERCPU + menu "Processor type and features" config SMP diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile index 431bf7f846c3..ff493f262f2a 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile @@ -112,8 +112,9 @@ $(obj)/vmlinux.bin: vmlinux FORCE targets += $(patsubst $(obj)/%,%,$(vmlinux-objs-y)) vmlinux.bin.all vmlinux.relocs CMD_RELOCS = arch/x86/tools/relocs +relocs-flags-$(CONFIG_X86_ABSOLUTE_PERCPU) += --absolute-percpu quiet_cmd_relocs = RELOCS $@ - cmd_relocs = $(CMD_RELOCS) $< > $@;$(CMD_RELOCS) --abs-relocs $< + cmd_relocs = $(CMD_RELOCS) $(relocs-flags-y) $< > $@;$(CMD_RELOCS) --abs-relocs $< $(obj)/vmlinux.relocs: vmlinux FORCE $(call if_changed,relocs) diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 3f5d39768287..bad375444cee 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -1166,7 +1166,7 @@ static void print_reloc_info(void) void process(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info) + int show_reloc_info, int absolute_percpu) { regex_init(use_real_mode); read_ehdr(fp); @@ -1174,7 +1174,7 @@ void process(FILE *fp, int use_real_mode, int as_text, read_strtabs(fp); read_symtabs(fp); read_relocs(fp); - if (ELF_BITS == 64) + if (ELF_BITS == 64 && absolute_percpu) percpu_init(); if (show_absolute_syms) { print_absolute_symbols(); diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 4c49c82446eb..dcf323f6102f 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -32,8 +32,8 @@ enum symtype { void process_32(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info); + int show_reloc_info, int absolute_percpu); void process_64(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info); + int show_reloc_info, int absolute_percpu); #endif /* RELOCS_H */ diff --git a/arch/x86/tools/relocs_common.c b/arch/x86/tools/relocs_common.c index 6634352a20bc..aa5fdea1e87a 100644 --- a/arch/x86/tools/relocs_common.c +++ b/arch/x86/tools/relocs_common.c @@ -19,7 +19,7 @@ static void usage(void) int main(int argc, char **argv) { int show_absolute_syms, show_absolute_relocs, show_reloc_info; - int as_text, use_real_mode; + int as_text, use_real_mode, absolute_percpu; const char *fname; FILE *fp; int i; @@ -30,6 +30,7 @@ int main(int argc, char **argv) show_reloc_info = 0; as_text = 0; use_real_mode = 0; + absolute_percpu = 0; fname = NULL; for (i = 1; i < argc; i++) { char *arg = argv[i]; @@ -54,6 +55,10 @@ int main(int argc, char **argv) use_real_mode = 1; continue; } + if (strcmp(arg, "--absolute-percpu") == 0) { + absolute_percpu = 1; + continue; + } } else if (!fname) { fname = arg; @@ -75,11 +80,11 @@ int main(int argc, char **argv) if (e_ident[EI_CLASS] == ELFCLASS64) process_64(fp, use_real_mode, as_text, show_absolute_syms, show_absolute_relocs, - show_reloc_info); + show_reloc_info, absolute_percpu); else process_32(fp, use_real_mode, as_text, show_absolute_syms, show_absolute_relocs, - show_reloc_info); + show_reloc_info, absolute_percpu); fclose(fp); return 0; } diff --git a/init/Kconfig b/init/Kconfig index 11f8a845f259..f8da0e5b7663 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1716,7 +1716,6 @@ config KALLSYMS_ALL config KALLSYMS_ABSOLUTE_PERCPU bool depends on KALLSYMS - default X86_64 && SMP config KALLSYMS_BASE_RELATIVE bool -- 2.31.1
| |