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:
Jan Beulich committed 2025-10-31 08:37:57 +01:00
1 parent 80c7c67164
commit 6eede548df
1 file changed
+3 -3
+3 -3
View File
@@ -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);
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.