diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2022-08-08 17:02:58 -0400 |
---|---|---|
committer | Suren Baghdasaryan <surenb@google.com> | 2024-03-05 14:46:34 +0000 |
commit | 963c8368f3543eaf6d6d39be9dbb14ea760b92cc (patch) | |
tree | 2419be75bbd3283e03c0ccbedca47b9b3e55c91d | |
parent | 8db54916b55f991f09fb1f01900970504ba9989b (diff) |
scripts/kallysms: Always include __start and __stop symbols
These symbols are used to denote section boundaries: by always including
them we can unify loading sections from modules with loading built-in
sections, which leads to some significant cleanup.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
-rw-r--r-- | scripts/kallsyms.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 653b92f6d4c8..47978efe4797 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -204,6 +204,11 @@ static int symbol_in_range(const struct sym_entry *s, return 0; } +static bool string_starts_with(const char *s, const char *prefix) +{ + return strncmp(s, prefix, strlen(prefix)) == 0; +} + static int symbol_valid(const struct sym_entry *s) { const char *name = sym_name(s); @@ -211,6 +216,14 @@ static int symbol_valid(const struct sym_entry *s) /* if --all-symbols is not specified, then symbols outside the text * and inittext sections are discarded */ if (!all_symbols) { + /* + * Symbols starting with __start and __stop are used to denote + * section boundaries, and should always be included: + */ + if (string_starts_with(name, "__start_") || + string_starts_with(name, "__stop_")) + return 1; + if (symbol_in_range(s, text_ranges, ARRAY_SIZE(text_ranges)) == 0) return 0; |