From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: linux-kbuild@vger.kernel.org
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH v2 03/16] scripts/kallsyms: shrink table before sorting it
Date: Sun, 24 Nov 2019 01:04:31 +0900 [thread overview]
Message-ID: <20191123160444.11251-4-yamada.masahiro@socionext.com> (raw)
In-Reply-To: <20191123160444.11251-1-yamada.masahiro@socionext.com>
Currently, build_initial_tok_table() trims unused symbols, which is
called after sort_symbol().
It is not efficient to sort the huge table that contains unused entries.
Shrink the table before sorting it.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
Changes in v2:
- New patch
scripts/kallsyms.c | 49 +++++++++++++++++++++++++++-------------------
1 file changed, 29 insertions(+), 20 deletions(-)
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 79641874d860..de986eda41a6 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -268,6 +268,30 @@ static int symbol_valid(struct sym_entry *s)
return 1;
}
+/* remove all the invalid symbols from the table */
+static void shrink_table(void)
+{
+ unsigned int i, pos;
+
+ pos = 0;
+ for (i = 0; i < table_cnt; i++) {
+ if (symbol_valid(&table[i])) {
+ if (pos != i)
+ table[pos] = table[i];
+ pos++;
+ } else {
+ free(table[i].sym);
+ }
+ }
+ table_cnt = pos;
+
+ /* When valid symbol is not registered, exit to error */
+ if (!table_cnt) {
+ fprintf(stderr, "No valid symbol.\n");
+ exit(1);
+ }
+}
+
static void read_map(FILE *in)
{
while (!feof(in)) {
@@ -475,23 +499,13 @@ static void forget_symbol(unsigned char *symbol, int len)
token_profit[ symbol[i] + (symbol[i + 1] << 8) ]--;
}
-/* remove all the invalid symbols from the table and do the initial token count */
+/* do the initial token count */
static void build_initial_tok_table(void)
{
- unsigned int i, pos;
+ unsigned int i;
- pos = 0;
- for (i = 0; i < table_cnt; i++) {
- if ( symbol_valid(&table[i]) ) {
- if (pos != i)
- table[pos] = table[i];
- learn_symbol(table[pos].sym, table[pos].len);
- pos++;
- } else {
- free(table[i].sym);
- }
- }
- table_cnt = pos;
+ for (i = 0; i < table_cnt; i++)
+ learn_symbol(table[i].sym, table[i].len);
}
static void *find_token(unsigned char *str, int len, unsigned char *token)
@@ -614,12 +628,6 @@ static void optimize_token_table(void)
insert_real_symbols_in_table();
- /* When valid symbol is not registered, exit to error */
- if (!table_cnt) {
- fprintf(stderr, "No valid symbol.\n");
- exit(1);
- }
-
optimize_result();
}
@@ -756,6 +764,7 @@ int main(int argc, char **argv)
usage();
read_map(stdin);
+ shrink_table();
if (absolute_percpu)
make_percpus_absolute();
if (base_relative)
--
2.17.1
next prev parent reply other threads:[~2019-11-23 16:05 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-23 16:04 [PATCH v2 00/16] scripts/kallsyms: various cleanups and optimizations Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 01/16] scripts/kallsyms: remove unneeded #ifndef ARRAY_SIZE Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 02/16] scripts/kallsyms: fix definitely-lost memory leak Masahiro Yamada
2019-11-23 16:04 ` Masahiro Yamada [this message]
2019-12-07 22:19 ` [PATCH v2 03/16] scripts/kallsyms: shrink table before sorting it Olof Johansson
2019-11-23 16:04 ` [PATCH v2 04/16] scripts/kallsyms: set relative_base more effectively Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 05/16] scripts/kallsyms: remove redundant is_arm_mapping_symbol() Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 06/16] scripts/kallsyms: remove unneeded length check for prefix matching Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 07/16] scripts/kallsyms: add sym_name() to mitigate cast ugliness Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 08/16] scripts/kallsyms: replace prefix_underscores_count() with strspn() Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 09/16] scripts/kallsyms: make find_token() return (unsigned char *) Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 10/16] scripts/kallsyms: add const qualifiers where possible Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 11/16] scripts/kallsyms: skip ignored symbols very early Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 12/16] scripts/kallsyms: move more patterns to the ignored_prefixes array Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 13/16] scripts/kallsyms: move ignored symbol types to is_ignored_symbol() Masahiro Yamada
2020-07-20 1:46 ` Finn Thain
2020-07-20 5:34 ` Masahiro Yamada
2020-07-21 4:00 ` Finn Thain
2019-11-23 16:04 ` [PATCH v2 14/16] scripts/kallsyms: make check_symbol_range() void function Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 15/16] scripts/kallsyms: put check_symbol_range() calls close together Masahiro Yamada
2019-11-23 16:04 ` [PATCH v2 16/16] scripts/kallsyms: remove redundant initializers Masahiro Yamada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191123160444.11251-4-yamada.masahiro@socionext.com \
--to=yamada.masahiro@socionext.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).