Commit 64e16609 authored by Jann Horn's avatar Jann Horn Committed by Masahiro Yamada
Browse files

kallsyms: get rid of code for absolute kallsyms



Commit cf8e8658 ("arch: Remove Itanium (IA-64) architecture")
removed the last use of the absolute kallsyms.

Signed-off-by: default avatarJann Horn <jannh@google.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/all/20240221202655.2423854-1-jannh@google.com/


[masahiroy@kernel.org: rebase the code and reword the commit description]
Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent 7efcb39e
Loading
Loading
Loading
Loading
+0 −18
Original line number Diff line number Diff line
@@ -1789,24 +1789,6 @@ config KALLSYMS_ABSOLUTE_PERCPU
	depends on KALLSYMS
	default X86_64 && SMP

config KALLSYMS_BASE_RELATIVE
	bool
	depends on KALLSYMS
	default y
	help
	  Instead of emitting them as absolute values in the native word size,
	  emit the symbol references in the kallsyms table as 32-bit entries,
	  each containing a relative value in the range [base, base + U32_MAX]
	  or, when KALLSYMS_ABSOLUTE_PERCPU is in effect, each containing either
	  an absolute value in the range [0, S32_MAX] or a relative value in the
	  range [base, base + S32_MAX], where base is the lowest relative symbol
	  address encountered in the image.

	  On 64-bit builds, this reduces the size of the address table by 50%,
	  but more importantly, it results in entries whose values are build
	  time constants, and no relocation pass is required at runtime to fix
	  up the entries based on the runtime load address of the kernel.

# end of the "standard kernel features (expert users)" menu

config ARCH_HAS_MEMBARRIER_CALLBACKS
+1 −4
Original line number Diff line number Diff line
@@ -148,9 +148,6 @@ static unsigned int get_symbol_offset(unsigned long pos)

unsigned long kallsyms_sym_address(int idx)
{
	if (!IS_ENABLED(CONFIG_KALLSYMS_BASE_RELATIVE))
		return kallsyms_addresses[idx];

	/* values are unsigned offsets if --absolute-percpu is not in effect */
	if (!IS_ENABLED(CONFIG_KALLSYMS_ABSOLUTE_PERCPU))
		return kallsyms_relative_base + (u32)kallsyms_offsets[idx];
@@ -325,7 +322,7 @@ static unsigned long get_symbol_pos(unsigned long addr,
	unsigned long symbol_start = 0, symbol_end = 0;
	unsigned long i, low, high, mid;

	/* Do a binary search on the sorted kallsyms_addresses array. */
	/* Do a binary search on the sorted kallsyms_offsets array. */
	low = 0;
	high = kallsyms_num_syms;

+0 −1
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@

#include <linux/types.h>

extern const unsigned long kallsyms_addresses[];
extern const int kallsyms_offsets[];
extern const u8 kallsyms_names[];

+0 −4
Original line number Diff line number Diff line
@@ -216,12 +216,8 @@ static int __init crash_save_vmcoreinfo_init(void)
	VMCOREINFO_SYMBOL(kallsyms_num_syms);
	VMCOREINFO_SYMBOL(kallsyms_token_table);
	VMCOREINFO_SYMBOL(kallsyms_token_index);
#ifdef CONFIG_KALLSYMS_BASE_RELATIVE
	VMCOREINFO_SYMBOL(kallsyms_offsets);
	VMCOREINFO_SYMBOL(kallsyms_relative_base);
#else
	VMCOREINFO_SYMBOL(kallsyms_addresses);
#endif /* CONFIG_KALLSYMS_BASE_RELATIVE */
#endif /* CONFIG_KALLSYMS */

	arch_crash_save_vmcoreinfo();
+32 −46
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
 * of the GNU General Public License, incorporated herein by reference.
 *
 * Usage: kallsyms [--all-symbols] [--absolute-percpu]
 *                         [--base-relative] [--lto-clang] in.map > out.S
 *                         [--lto-clang] in.map > out.S
 *
 *      Table compression uses all the unused char codes on the symbols and
 *  maps these to the most used substrings (tokens). For instance, it might
@@ -63,7 +63,6 @@ static struct sym_entry **table;
static unsigned int table_size, table_cnt;
static int all_symbols;
static int absolute_percpu;
static int base_relative;
static int lto_clang;

static int token_profit[0x10000];
@@ -76,7 +75,7 @@ static unsigned char best_table_len[256];
static void usage(void)
{
	fprintf(stderr, "Usage: kallsyms [--all-symbols] [--absolute-percpu] "
			"[--base-relative] [--lto-clang] in.map > out.S\n");
			"[--lto-clang] in.map > out.S\n");
	exit(1);
}

@@ -491,13 +490,9 @@ static void write_src(void)
		printf("\t.short\t%d\n", best_idx[i]);
	printf("\n");

	if (!base_relative)
		output_label("kallsyms_addresses");
	else
	output_label("kallsyms_offsets");

	for (i = 0; i < table_cnt; i++) {
		if (base_relative) {
		/*
		 * Use the offset relative to the lowest value
		 * encountered of all relative symbols, and emit
@@ -526,19 +521,12 @@ static void write_src(void)
			exit(EXIT_FAILURE);
		}
		printf("\t.long\t%#x	/* %s */\n", (int)offset, table[i]->sym);
		} else if (!symbol_absolute(table[i])) {
			output_address(table[i]->addr);
		} else {
			printf("\tPTR\t%#llx\n", table[i]->addr);
		}
	}
	printf("\n");

	if (base_relative) {
	output_label("kallsyms_relative_base");
	output_address(relative_base);
	printf("\n");
	}

	if (lto_clang)
		for (i = 0; i < table_cnt; i++)
@@ -820,7 +808,6 @@ int main(int argc, char **argv)
		static const struct option long_options[] = {
			{"all-symbols",     no_argument, &all_symbols,     1},
			{"absolute-percpu", no_argument, &absolute_percpu, 1},
			{"base-relative",   no_argument, &base_relative,   1},
			{"lto-clang",       no_argument, &lto_clang,       1},
			{},
		};
@@ -841,7 +828,6 @@ int main(int argc, char **argv)
	if (absolute_percpu)
		make_percpus_absolute();
	sort_symbols();
	if (base_relative)
	record_relative_base();
	optimize_token_table();
	write_src();
Loading