Message ID | 20250307165335.3110476-1-kris.van.hees@oracle.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2] kbuild: exclude .rodata.(cst|str)* when building ranges | expand |
On Sat, Mar 8, 2025 at 1:54 AM Kris Van Hees <kris.van.hees@oracle.com> wrote: > > The .rodata.(cst|str)* sections are often resized during the final > linking and since these sections do not cover actual symbols there is > no need to include them in the modules.builtin.ranges data. > > When these sections were included in processing and resizing occurred, > modules were reported with ranges that extended beyond their true end, > causing subsequent symbols (in address order) to be associated with > the wrong module. > > Fixes: 5f5e7344322f ("kbuild: generate offset range data for builtin modules") > Cc: stable@vger.kernel.org > Signed-off-by: Kris Van Hees <kris.van.hees@oracle.com> > Reviewed-by: Jack Vogel <jack.vogel@oracle.com> > --- Applied to linux-kbuild. Thanks. > scripts/generate_builtin_ranges.awk | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/scripts/generate_builtin_ranges.awk b/scripts/generate_builtin_ranges.awk > index b9ec761b3bef..d4bd5c2b998c 100755 > --- a/scripts/generate_builtin_ranges.awk > +++ b/scripts/generate_builtin_ranges.awk > @@ -282,6 +282,11 @@ ARGIND == 2 && !anchor && NF == 2 && $1 ~ /^0x/ && $2 !~ /^0x/ { > # section. > # > ARGIND == 2 && sect && NF == 4 && /^ [^ \*]/ && !($1 in sect_addend) { > + # There are a few sections with constant data (without symbols) that > + # can get resized during linking, so it is best to ignore them. > + if ($1 ~ /^\.rodata\.(cst|str)[0-9]/) > + next; > + > if (!($1 in sect_base)) { > sect_base[$1] = base; > > -- > 2.45.2 >
diff --git a/scripts/generate_builtin_ranges.awk b/scripts/generate_builtin_ranges.awk index b9ec761b3bef..d4bd5c2b998c 100755 --- a/scripts/generate_builtin_ranges.awk +++ b/scripts/generate_builtin_ranges.awk @@ -282,6 +282,11 @@ ARGIND == 2 && !anchor && NF == 2 && $1 ~ /^0x/ && $2 !~ /^0x/ { # section. # ARGIND == 2 && sect && NF == 4 && /^ [^ \*]/ && !($1 in sect_addend) { + # There are a few sections with constant data (without symbols) that + # can get resized during linking, so it is best to ignore them. + if ($1 ~ /^\.rodata\.(cst|str)[0-9]/) + next; + if (!($1 in sect_base)) { sect_base[$1] = base;