mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
kallsyms: get rid of code for absolute kallsyms
Commit cf8e865810
("arch: Remove Itanium (IA-64) architecture")
removed the last use of the absolute kallsyms.
Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Arnd 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: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
7efcb39e0d
commit
64e166099b
18
init/Kconfig
18
init/Kconfig
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
extern const unsigned long kallsyms_addresses[];
|
||||
extern const int kallsyms_offsets[];
|
||||
extern const u8 kallsyms_names[];
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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,54 +490,43 @@ 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");
|
||||
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
|
||||
* non-relocatable fixed offsets that will be fixed
|
||||
* up at runtime.
|
||||
*/
|
||||
/*
|
||||
* Use the offset relative to the lowest value
|
||||
* encountered of all relative symbols, and emit
|
||||
* non-relocatable fixed offsets that will be fixed
|
||||
* up at runtime.
|
||||
*/
|
||||
|
||||
long long offset;
|
||||
int overflow;
|
||||
long long offset;
|
||||
int overflow;
|
||||
|
||||
if (!absolute_percpu) {
|
||||
offset = table[i]->addr - relative_base;
|
||||
overflow = (offset < 0 || offset > UINT_MAX);
|
||||
} else if (symbol_absolute(table[i])) {
|
||||
offset = table[i]->addr;
|
||||
overflow = (offset < 0 || offset > INT_MAX);
|
||||
} else {
|
||||
offset = relative_base - table[i]->addr - 1;
|
||||
overflow = (offset < INT_MIN || offset >= 0);
|
||||
}
|
||||
if (overflow) {
|
||||
fprintf(stderr, "kallsyms failure: "
|
||||
"%s symbol value %#llx out of range in relative mode\n",
|
||||
symbol_absolute(table[i]) ? "absolute" : "relative",
|
||||
table[i]->addr);
|
||||
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);
|
||||
if (!absolute_percpu) {
|
||||
offset = table[i]->addr - relative_base;
|
||||
overflow = (offset < 0 || offset > UINT_MAX);
|
||||
} else if (symbol_absolute(table[i])) {
|
||||
offset = table[i]->addr;
|
||||
overflow = (offset < 0 || offset > INT_MAX);
|
||||
} else {
|
||||
printf("\tPTR\t%#llx\n", table[i]->addr);
|
||||
offset = relative_base - table[i]->addr - 1;
|
||||
overflow = (offset < INT_MIN || offset >= 0);
|
||||
}
|
||||
if (overflow) {
|
||||
fprintf(stderr, "kallsyms failure: "
|
||||
"%s symbol value %#llx out of range in relative mode\n",
|
||||
symbol_absolute(table[i]) ? "absolute" : "relative",
|
||||
table[i]->addr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
printf("\t.long\t%#x /* %s */\n", (int)offset, table[i]->sym);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
if (base_relative) {
|
||||
output_label("kallsyms_relative_base");
|
||||
output_address(relative_base);
|
||||
printf("\n");
|
||||
}
|
||||
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, <o_clang, 1},
|
||||
{},
|
||||
};
|
||||
@ -841,8 +828,7 @@ int main(int argc, char **argv)
|
||||
if (absolute_percpu)
|
||||
make_percpus_absolute();
|
||||
sort_symbols();
|
||||
if (base_relative)
|
||||
record_relative_base();
|
||||
record_relative_base();
|
||||
optimize_token_table();
|
||||
write_src();
|
||||
|
||||
|
@ -156,10 +156,6 @@ kallsyms()
|
||||
kallsymopt="${kallsymopt} --absolute-percpu"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_KALLSYMS_BASE_RELATIVE; then
|
||||
kallsymopt="${kallsymopt} --base-relative"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_LTO_CLANG; then
|
||||
kallsymopt="${kallsymopt} --lto-clang"
|
||||
fi
|
||||
|
@ -26,7 +26,6 @@ static bool is_ignored_symbol(const char *name, char type)
|
||||
* when --all-symbols is specified so exclude them to get a
|
||||
* stable symbol list.
|
||||
*/
|
||||
"kallsyms_addresses",
|
||||
"kallsyms_offsets",
|
||||
"kallsyms_relative_base",
|
||||
"kallsyms_num_syms",
|
||||
|
Loading…
Reference in New Issue
Block a user