mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
symbols: avoid emitting "end" symbols for data items
symbols-dummy.c and the generated .xen-syms.?.S may place their symbols in
different sections: Like for all C files, -fdata-sections may be in effect
there. As a result, besides these symbols moving, there may then also be
different amounts of "end" symbols inserted between them. While the
movement is likely not problematic, the change in table size is - linking
passes 2 and 3 want no address (and hence no size) changes between them.
As, at least right now, the "end" symbols are useful only for code, limit
their emission accordingly. When data symbols are emitted (i.e. when
LIVEPATCH=y), this obviously also has a positive effect on overall table
size (I'm seeing almost 600 entries going away in the build I'm looking
at).
Fixes: d3b637fba3 ("symbols: arrange to know where functions end")
Reported-by: Roger Pau Monné <roger.pau@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Tested-by: Roger Pau Monné <roger.pau@citrix.com>
Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@gmail.com>
This commit is contained in:
1 parent
80c7c67164
commit
6eede548df
1 file changed
+3
-3
+3
-3
@@ -176,10 +176,9 @@ static int read_symbol(FILE *in, struct sym_entry *s)
|
||||
*sym++ = '#';
|
||||
}
|
||||
strcpy(sym, str);
|
||||
if (sort_by_name || map_only) {
|
||||
if (sort_by_name || map_only)
|
||||
s->orig_symbol = strdup(SYMBOL_NAME(s));
|
||||
s->type = stype; /* As s->sym[0] ends mangled. */
|
||||
}
|
||||
s->type = stype; /* As s->sym[0] may end up mangled. */
|
||||
s->sym[0] = stype;
|
||||
s->typed = strcmp(type, "FUNC") == 0 ||
|
||||
strcmp(type, "OBJECT") == 0 ||
|
||||
@@ -313,6 +312,7 @@ static int compare_name_orig(const void *p1, const void *p2)
|
||||
static bool want_symbol_end(unsigned int idx)
|
||||
{
|
||||
return table[idx].size &&
|
||||
toupper(table[idx].type) == 'T' &&
|
||||
(idx + 1 == table_cnt ||
|
||||
table[idx].addr + table[idx].size < table[idx + 1].addr);
|
||||
}
|
||||
|
||||