Messages in this thread | | | From | Nick Desaulniers <> | Date | Tue, 28 Jun 2022 11:45:05 -0700 | Subject | Re: [PATCH v3] gen_compile_commands: handle multiple lines per .mod file |
| |
On Mon, Jun 27, 2022 at 6:24 PM John Hubbard <jhubbard@nvidia.com> wrote: > > scripts/clang-tools/gen_compile_commands.py incorrectly assumes that > each .mod file only contains one line. That assumption was correct when > the script was originally created, but commit 9413e7640564 ("kbuild: > split the second line of *.mod into *.usyms") changed the .mod file > format so that there is one entry per line, and potentially many lines. > > The problem can be reproduced by using Kbuild to generate > compile_commands.json, like this: > > make CC=clang compile_commands.json > > In many cases, the problem might be overlooked because many subsystems > only have one line anyway. However, in some subsystems (Nouveau, with > 762 entries, is a notable example) it results in skipping most of the > subsystem. > > Fix this by fully processing each .mod file. > > Fixes: 9413e7640564 ("kbuild: split the second line of *.mod into *.usyms") > Cc: Masahiro Yamada <masahiroy@kernel.org> > Cc: Nick Desaulniers <ndesaulniers@google.com>
Thanks for the fix, John! Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com> > --- > > Link to v2: > https://lore.kernel.org/all/20220616021149.327587-1-jhubbard@nvidia.com/ > > Changes since v2: > > * Restored a blank line. > > * Rewrote the commit description. > > thanks, > John Hubbard > > > scripts/clang-tools/gen_compile_commands.py | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/scripts/clang-tools/gen_compile_commands.py b/scripts/clang-tools/gen_compile_commands.py > index 1d1bde1fd45e..47da25b3ba7d 100755 > --- a/scripts/clang-tools/gen_compile_commands.py > +++ b/scripts/clang-tools/gen_compile_commands.py > @@ -157,10 +157,10 @@ def cmdfiles_for_modorder(modorder): > if ext != '.ko': > sys.exit('{}: module path must end with .ko'.format(ko)) > mod = base + '.mod' > - # The first line of *.mod lists the objects that compose the module. > + # Read from *.mod, to get a list of objects that compose the module. > with open(mod) as m: > - for obj in m.readline().split(): > - yield to_cmdfile(obj) > + for mod_line in m: > + yield to_cmdfile(mod_line.rstrip()) > > > def process_line(root_directory, command_prefix, file_path): > -- > 2.36.1 >
-- Thanks, ~Nick Desaulniers
| |