]> Git Repo - linux.git/commitdiff
kallsyms: get rid of code for absolute kallsyms
authorJann Horn <[email protected]>
Wed, 21 Feb 2024 20:26:53 +0000 (21:26 +0100)
committerMasahiro Yamada <[email protected]>
Sat, 20 Jul 2024 07:33:21 +0000 (16:33 +0900)
Commit cf8e8658100d ("arch: Remove Itanium (IA-64) architecture")
removed the last use of the absolute kallsyms.

Signed-off-by: Jann Horn <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
Link: https://lore.kernel.org/all/[email protected]/
[[email protected]: rebase the code and reword the commit description]
Signed-off-by: Masahiro Yamada <[email protected]>
init/Kconfig
kernel/kallsyms.c
kernel/kallsyms_internal.h
kernel/vmcore_info.c
scripts/kallsyms.c
scripts/link-vmlinux.sh
tools/perf/tests/vmlinux-kallsyms.c

index febdea2afc3be3ffeeb2029386ea931f364dec1c..8e21ce38dee6284c42bf41d330f9ea3c4aed4030 100644 (file)
@@ -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
index 98b9622d372e42fb29f390f3b8617d1d1b8c2616..fb2c77368d187eda2a3a9083f3cb4c11f2b78ebb 100644 (file)
@@ -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;
 
index 925f2ab22639a194a2d0900c4d1984a8361999be..9633782f8250090281a68c14605f3ab414e31f1e 100644 (file)
@@ -4,7 +4,6 @@
 
 #include <linux/types.h>
 
-extern const unsigned long kallsyms_addresses[];
 extern const int kallsyms_offsets[];
 extern const u8 kallsyms_names[];
 
index 1d5eadd9dd61cde1162e810425dfc1814b116eeb..8b4f8cc2e0ec0c4de3303bf5ca11b2a158d88056 100644 (file)
@@ -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();
index fa53b5eef5530db5ba3ef09becb7102045e41ee4..55a423519f2e5c243e17f9643cdb6454443a4724 100644 (file)
@@ -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;
-
-                       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);
+               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 {
-                       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, &lto_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();
 
index c64158a04f82d0018507c35bbcb6219a12ab5cf1..f7b2503cdba95610e210de1da71fa5f56d03600a 100755 (executable)
@@ -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
index e30fd55f8e51d0fdfcb462dce1830a42c1244008..cd3b480d20bd690a6c777fafc7a85b89526f5a47 100644 (file)
@@ -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",
This page took 0.088701 seconds and 4 git commands to generate.