lkml.org 
[lkml]   [2021]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 5/6] kallsyms: Remove KALLSYMS_ABSOLUTE_PERCPU
    Date
    x86-64 was the only user.

    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    ---
    init/Kconfig | 10 +-----
    kernel/kallsyms.c | 12 ++------
    scripts/kallsyms.c | 68 ++++++-----------------------------------
    scripts/link-vmlinux.sh | 4 ---
    4 files changed, 12 insertions(+), 82 deletions(-)

    diff --git a/init/Kconfig b/init/Kconfig
    index 943552dc9c19..981621f658a9 100644
    --- a/init/Kconfig
    +++ b/init/Kconfig
    @@ -1711,10 +1711,6 @@ config KALLSYMS_ALL

    Say N unless you really need all symbols.

    -config KALLSYMS_ABSOLUTE_PERCPU
    - bool
    - depends on KALLSYMS
    -
    config KALLSYMS_BASE_RELATIVE
    bool
    depends on KALLSYMS
    @@ -1722,11 +1718,7 @@ config KALLSYMS_BASE_RELATIVE
    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.
    + each containing a relative value in the range [base, base + U32_MAX].

    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
    diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
    index 3011bc33a5ba..bea1cfc5cacd 100644
    --- a/kernel/kallsyms.c
    +++ b/kernel/kallsyms.c
    @@ -152,16 +152,8 @@ static 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];
    -
    - /* ...otherwise, positive offsets are absolute values */
    - if (kallsyms_offsets[idx] >= 0)
    - return kallsyms_offsets[idx];
    -
    - /* ...and negative offsets are relative to kallsyms_relative_base - 1 */
    - return kallsyms_relative_base - 1 - kallsyms_offsets[idx];
    + /* values are unsigned offsets */
    + return kallsyms_relative_base + (u32)kallsyms_offsets[idx];
    }

    static bool cleanup_symbol_name(char *s)
    diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
    index 54ad86d13784..f6419efc2c54 100644
    --- a/scripts/kallsyms.c
    +++ b/scripts/kallsyms.c
    @@ -33,7 +33,6 @@ struct sym_entry {
    unsigned long long addr;
    unsigned int len;
    unsigned int start_pos;
    - unsigned int percpu_absolute;
    unsigned char sym[];
    };

    @@ -51,14 +50,9 @@ static struct addr_range text_ranges[] = {
    #define text_range_text (&text_ranges[0])
    #define text_range_inittext (&text_ranges[1])

    -static struct addr_range percpu_range = {
    - "__per_cpu_start", "__per_cpu_end", -1ULL, 0
    -};
    -
    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 token_profit[0x10000];
    @@ -224,7 +218,6 @@ static struct sym_entry *read_symbol(FILE *in)
    return NULL;

    check_symbol_range(name, addr, text_ranges, ARRAY_SIZE(text_ranges));
    - check_symbol_range(name, addr, &percpu_range, 1);

    /* include the type field in the symbol name, so that it gets
    * compressed together */
    @@ -241,7 +234,6 @@ static struct sym_entry *read_symbol(FILE *in)
    sym->len = len;
    sym->sym[0] = type;
    strcpy(sym_name(sym), name);
    - sym->percpu_absolute = 0;

    return sym;
    }
    @@ -379,11 +371,6 @@ static int expand_symbol(const unsigned char *data, int len, char *result)
    return total;
    }

    -static int symbol_absolute(const struct sym_entry *s)
    -{
    - return s->percpu_absolute;
    -}
    -
    static void write_src(void)
    {
    unsigned int i, k, off;
    @@ -419,28 +406,17 @@ static void write_src(void)
    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);
    - }
    + offset = table[i]->addr - relative_base;
    + overflow = (offset < 0 || offset > UINT_MAX);
    if (overflow) {
    fprintf(stderr, "kallsyms failure: "
    - "%s symbol value %#llx out of range in relative mode\n",
    - symbol_absolute(table[i]) ? "absolute" : "relative",
    + "symbol value %#llx out of range in relative mode\n",
    table[i]->addr);
    exit(EXIT_FAILURE);
    }
    printf("\t.long\t%#x\n", (int)offset);
    - } else if (!symbol_absolute(table[i])) {
    - output_address(table[i]->addr);
    } else {
    - printf("\tPTR\t%#llx\n", table[i]->addr);
    + output_address(table[i]->addr);
    }
    }
    printf("\n");
    @@ -730,36 +706,14 @@ static void sort_symbols(void)
    qsort(table, table_cnt, sizeof(table[0]), compare_symbols);
    }

    -static void make_percpus_absolute(void)
    -{
    - unsigned int i;
    -
    - for (i = 0; i < table_cnt; i++)
    - if (symbol_in_range(table[i], &percpu_range, 1)) {
    - /*
    - * Keep the 'A' override for percpu symbols to
    - * ensure consistent behavior compared to older
    - * versions of this tool.
    - */
    - table[i]->sym[0] = 'A';
    - table[i]->percpu_absolute = 1;
    - }
    -}
    -
    /* find the minimum non-absolute symbol address */
    static void record_relative_base(void)
    {
    - unsigned int i;
    -
    - for (i = 0; i < table_cnt; i++)
    - if (!symbol_absolute(table[i])) {
    - /*
    - * The table is sorted by address.
    - * Take the first non-absolute symbol value.
    - */
    - relative_base = table[i]->addr;
    - return;
    - }
    + /*
    + * The table is sorted by address.
    + * Take the first symbol value.
    + */
    + relative_base = table[0]->addr;
    }

    int main(int argc, char **argv)
    @@ -769,8 +723,6 @@ int main(int argc, char **argv)
    for (i = 1; i < argc; i++) {
    if(strcmp(argv[i], "--all-symbols") == 0)
    all_symbols = 1;
    - else if (strcmp(argv[i], "--absolute-percpu") == 0)
    - absolute_percpu = 1;
    else if (strcmp(argv[i], "--base-relative") == 0)
    base_relative = 1;
    else
    @@ -781,8 +733,6 @@ int main(int argc, char **argv)

    read_map(stdin);
    shrink_table();
    - if (absolute_percpu)
    - make_percpus_absolute();
    sort_symbols();
    if (base_relative)
    record_relative_base();
    diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
    index 5cdd9bc5c385..797b177cc181 100755
    --- a/scripts/link-vmlinux.sh
    +++ b/scripts/link-vmlinux.sh
    @@ -243,10 +243,6 @@ kallsyms()
    kallsymopt="${kallsymopt} --all-symbols"
    fi

    - if [ -n "${CONFIG_KALLSYMS_ABSOLUTE_PERCPU}" ]; then
    - kallsymopt="${kallsymopt} --absolute-percpu"
    - fi
    -
    if [ -n "${CONFIG_KALLSYMS_BASE_RELATIVE}" ]; then
    kallsymopt="${kallsymopt} --base-relative"
    fi
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-11-30 21:59    [W:2.782 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site