Commit f34ea029 authored by Masahiro Yamada's avatar Masahiro Yamada

scripts/kallsyms: set relative_base more effectively

Currently, record_relative_base() iterates over the entire table to
find the minimum address, but it is not efficient because we sort
the table anyway.

After sort_symbol(), the table is sorted by address. (kallsyms parses
the 'nm -n' output, so the data is already sorted by address, but this
commit does not rely on it.)

Move record_relative_base() after sort_symbols(), and take the first
non-absolute symbol value.
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent 5e5c4fa7
...@@ -739,11 +739,15 @@ static void record_relative_base(void) ...@@ -739,11 +739,15 @@ static void record_relative_base(void)
{ {
unsigned int i; unsigned int i;
relative_base = -1ULL;
for (i = 0; i < table_cnt; i++) for (i = 0; i < table_cnt; i++)
if (!symbol_absolute(&table[i]) && if (!symbol_absolute(&table[i])) {
table[i].addr < relative_base) /*
* The table is sorted by address.
* Take the first non-absolute symbol value.
*/
relative_base = table[i].addr; relative_base = table[i].addr;
return;
}
} }
int main(int argc, char **argv) int main(int argc, char **argv)
...@@ -767,9 +771,9 @@ int main(int argc, char **argv) ...@@ -767,9 +771,9 @@ int main(int argc, char **argv)
shrink_table(); shrink_table();
if (absolute_percpu) if (absolute_percpu)
make_percpus_absolute(); make_percpus_absolute();
sort_symbols();
if (base_relative) if (base_relative)
record_relative_base(); record_relative_base();
sort_symbols();
optimize_token_table(); optimize_token_table();
write_src(); write_src();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment