Re: [PATCH] perf tools: Fixup end address of modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 18, 2024 at 2:04 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
>
> In machine__create_module(), it reads /proc/modules to get a list of
> modules in the system.  The file shows the start address (of text) and
> the size of the module so it uses the info to reconstruct system memory
> maps for symbol resolution.
>
> But module memory consists of multiple segments and they can be
> scaterred.  Currently perf tools assume they are contiguous and see some

nit: s/scaterred/scattered/

> overlaps.  This can confuse the tool when it finds a map containing a
> given address.
>
> As we mostly care about the function symbols in the text segment, it can
> fixup the size or end address of modules when there's an overlap.  We
> can use maps__fixup_end() which updates the end address using the start
> address of the next map.
>
> Ideally it should be able to track other segments (like data/rodata),
> but that would require some changes in /proc/modules IMHO.
>
> Reported-by: Blake Jones <blakejones@xxxxxxxxxx>
> Cc: Luis Chamberlain <mcgrof@xxxxxxxxxx>
> Cc: Petr Pavlu <petr.pavlu@xxxxxxxx>
> Cc: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
> Cc: Daniel Gomez <da.gomez@xxxxxxxxxxx>
> Cc: linux-modules@xxxxxxxxxxxxxxx
> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>

Acked-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
>  tools/perf/util/machine.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
> index 27d5345d2b307a97..8bb34689e3ceeec4 100644
> --- a/tools/perf/util/machine.c
> +++ b/tools/perf/util/machine.c
> @@ -1468,6 +1468,8 @@ static int machine__create_modules(struct machine *machine)
>         if (modules__parse(modules, machine, machine__create_module))
>                 return -1;
>
> +       maps__fixup_end(machine__kernel_maps(machine));
> +
>         if (!machine__set_modules_path(machine))
>                 return 0;
>
> --
> 2.47.1.613.gc27f4b7a9f-goog
>





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux