[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-4.21] symbols: avoid emitting "end" symbols for data items
On 10/29/25 2:34 PM, Jan Beulich wrote:
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 moving these symbols may then also have
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: d3b637fba31b ("symbols: arrange to know where functions end")
Reported-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
Thanks.
~ Oleskii
---
Furthermore at least some gcc versions emit the (read-only) data there into
.bss.symbols_* rather than the expected (but still potentially problematic)
.rodata.symbols_*.
--- a/xen/tools/symbols.c
+++ b/xen/tools/symbols.c
@@ -176,10 +176,9 @@ static int read_symbol(FILE *in, struct
*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
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);
}
|