[PATCH v5 0/7] perf libunwind multiple remote support

Ian Rogers posted 7 patches 3 weeks, 6 days ago
tools/build/Makefile.feature                  |  12 +-
tools/build/feature/Makefile                  |  46 +-
tools/build/feature/test-libunwind-aarch64.c  |  27 -
tools/build/feature/test-libunwind-arm.c      |  28 -
.../test-libunwind-debug-frame-aarch64.c      |  17 -
.../feature/test-libunwind-debug-frame-arm.c  |  17 -
.../feature/test-libunwind-debug-frame.c      |   1 -
tools/build/feature/test-libunwind-x86.c      |  28 -
tools/build/feature/test-libunwind-x86_64.c   |  28 -
tools/build/feature/test-libunwind.c          |   1 -
tools/perf/Makefile.config                    | 226 +++--
tools/perf/arch/arm/util/Build                |   2 -
tools/perf/arch/arm/util/unwind-libunwind.c   |  50 --
tools/perf/arch/arm64/util/Build              |   1 -
tools/perf/arch/arm64/util/unwind-libunwind.c |  17 -
tools/perf/arch/loongarch/util/Build          |   2 -
.../arch/loongarch/util/unwind-libunwind.c    |  82 --
tools/perf/arch/mips/Build                    |   1 -
tools/perf/arch/mips/util/Build               |   1 -
tools/perf/arch/mips/util/unwind-libunwind.c  |  22 -
tools/perf/arch/powerpc/util/Build            |   1 -
.../perf/arch/powerpc/util/unwind-libunwind.c |  92 --
tools/perf/arch/x86/util/Build                |   3 -
tools/perf/arch/x86/util/unwind-libunwind.c   | 115 ---
tools/perf/builtin-inject.c                   |   4 +
tools/perf/builtin-report.c                   |   4 +
tools/perf/builtin-script.c                   |   4 +
tools/perf/util/Build                         |   5 +-
tools/perf/util/config.c                      |   4 +
tools/perf/util/libunwind-arch/Build          |  11 +
.../perf/util/libunwind-arch/libunwind-arch.c | 319 +++++++
.../perf/util/libunwind-arch/libunwind-arch.h | 296 +++++++
.../perf/util/libunwind-arch/libunwind-arm.c  | 290 ++++++
.../util/libunwind-arch/libunwind-arm64.c     | 289 ++++++
.../perf/util/libunwind-arch/libunwind-i386.c | 312 +++++++
.../util/libunwind-arch/libunwind-loongarch.c | 297 +++++++
.../perf/util/libunwind-arch/libunwind-mips.c | 299 +++++++
.../util/libunwind-arch/libunwind-ppc32.c     | 301 +++++++
.../util/libunwind-arch/libunwind-ppc64.c     | 303 +++++++
.../util/libunwind-arch/libunwind-riscv.c     | 297 +++++++
.../perf/util/libunwind-arch/libunwind-s390.c | 299 +++++++
.../util/libunwind-arch/libunwind-x86_64.c    | 320 +++++++
tools/perf/util/libunwind/arm64.c             |  40 -
tools/perf/util/libunwind/x86_32.c            |  41 -
tools/perf/util/maps.c                        |  34 +-
tools/perf/util/maps.h                        |   4 +-
tools/perf/util/symbol_conf.h                 |  10 +
tools/perf/util/thread.c                      |  32 +-
tools/perf/util/unwind-libdw.c                |  20 +-
tools/perf/util/unwind-libunwind-local.c      | 831 ------------------
tools/perf/util/unwind-libunwind.c            | 699 +++++++++++++--
tools/perf/util/unwind.c                      | 104 +++
tools/perf/util/unwind.h                      |  73 +-
53 files changed, 4623 insertions(+), 1739 deletions(-)
delete mode 100644 tools/build/feature/test-libunwind-aarch64.c
delete mode 100644 tools/build/feature/test-libunwind-arm.c
delete mode 100644 tools/build/feature/test-libunwind-debug-frame-aarch64.c
delete mode 100644 tools/build/feature/test-libunwind-debug-frame-arm.c
delete mode 100644 tools/build/feature/test-libunwind-x86.c
delete mode 100644 tools/build/feature/test-libunwind-x86_64.c
delete mode 100644 tools/perf/arch/arm/util/unwind-libunwind.c
delete mode 100644 tools/perf/arch/arm64/util/unwind-libunwind.c
delete mode 100644 tools/perf/arch/loongarch/util/unwind-libunwind.c
delete mode 100644 tools/perf/arch/mips/Build
delete mode 100644 tools/perf/arch/mips/util/Build
delete mode 100644 tools/perf/arch/mips/util/unwind-libunwind.c
delete mode 100644 tools/perf/arch/powerpc/util/unwind-libunwind.c
delete mode 100644 tools/perf/arch/x86/util/unwind-libunwind.c
create mode 100644 tools/perf/util/libunwind-arch/Build
create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.h
create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm64.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-i386.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-loongarch.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-mips.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc32.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc64.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-riscv.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-s390.c
create mode 100644 tools/perf/util/libunwind-arch/libunwind-x86_64.c
delete mode 100644 tools/perf/util/libunwind/arm64.c
delete mode 100644 tools/perf/util/libunwind/x86_32.c
delete mode 100644 tools/perf/util/unwind-libunwind-local.c
create mode 100644 tools/perf/util/unwind.c
[PATCH v5 0/7] perf libunwind multiple remote support
Posted by Ian Rogers 3 weeks, 6 days ago
Fix the libunwind build for when libdw and libunwind are feature
detected, currently failing with a duplicate symbol.

Refactor the libunwind support so that whenever a remote target is
available, perf functions using the ELF machine can use that remote
target regardless of what the host/local machine is. Migrate existing
libunwind supported architectures like powerpc, arm64 and loongarch so
that they can work in a cross-architecture way. Add support for
RISC-V. Make the code more regular in function names, etc. and avoid
including a C-file. This increases the lines of code. It is similar in
style to the unwind-libdw implementation. It is hoped that the more
uniform nature of the code will help with refactoring the perf
registers for SIMD/APX support.

Aside from local host testing these patches are under tested, in part
as I'm failing to see how to build libunwind with support for multiple
remote targets. Please could I get help in testing.

v5: Rebase dropping merged loong arch fix patch. Fixes to Sashiko
    review feedback:
    - Patch 1: Hooked unwind__configure() into perf_default_config().
      Standardized unwinder return contracts (>0 success, 0 fallback,
      <0 fatal).  Fixed UNWIND_STYLE_UNKNOWN fallback and added
      memset() to clear config array on override.
    - Patch 2: Dynamically populated FILES list in
      tools/build/feature/Makefile using LIBUNWIND_ARCHS. Added
      libunwind cases to FEATURE_TESTS_EXTRA in
      tools/build/Makefile.feature for proper FEATURE-DUMP caching.
    - Patch 3: Restored core -lunwind linkage to
      FEATURE_CHECK_LDFLAGS.  Restored NO_LIBUNWIND fallback
      validation, corrected EXTLIBS evaluation ordering for
      BIONIC/Android compatibility, and restored static linking
      multiple definition flags.
    - Patch 4: Fixed out-of-bounds array read bugs (>= ARRAY_SIZE) in
      libunwind-i386.c and libunwind-x86_64.c. Fixed constant typos
      across LoongArch, PowerPC, and s390x.
    - Patch 5: Added early EM_NONE and ops validation checks to
      prevent warnings and NULL dereferences. Checked return value of
      unwind__prepare_access() in maps__copy_from(). Corrected
      architecture binding in thread__insert_map() by calculating
      e_machine after map insertion.
    - Patch 6: Aligned all remote architecture accessors to match
      5-argument generic declarations (removing trailing
      sizeof(unw_word_t)). Prevented frame discard on stack depth
      limit by returning 0 instead of -1 in unwind_step(). Fixed
      32-bit big-endian register corruption by replacing memcpy() with
      conditional type-casted assignment. Fixed max_stack == 1
      fallback trigger. Fixed .debug_frame layout union corruption by
      changing di.u.rti to di.u.ti across all DWARF find wrappers.
    - Patch 7: Applied the same corrections (5-argument accessors,
      u.ti union accessors, 0 return on max_ips) to the newly
      introduced libunwind-riscv.c.

v4: Rebase, in particular the zalloc->calloc change conflicted.
https://lore.kernel.org/linux-perf-users/20260413024805.1316480-1-irogers@google.com/

v3: Minor whitespace clean up and warn when a dynamic choice of libdw
    or libunwind is selected for unwinding and support is missing (Arnaldo).
https://lore.kernel.org/lkml/20260404054032.1538095-1-irogers@google.com/

v2: Move two fixes patches to position 1 and 2 in the series. Fix
    struct naming inconsistency, Andrew Jones
    <andrew.jones@oss.qualcomm.com>. Fix other inconsistencies and
    potential non-x86 build issues.
https://lore.kernel.org/lkml/20260305221927.3237145-1-irogers@google.com/

v1: https://lore.kernel.org/lkml/20260224142938.26088-1-irogers@google.com/

Ian Rogers (7):
  perf unwind: Refactor get_entries to allow dynamic libdw/libunwind
    selection
  tools build: Deduplicate test-libunwind for different architectures
  perf build: Be more programmatic when setting up libunwind variables
  perf unwind-libunwind: Make libunwind register reading cross platform
  perf unwind-libunwind: Move flush/finish access out of local
  perf unwind-libunwind: Remove libunwind-local
  perf unwind-libunwind: Add RISC-V libunwind support

 tools/build/Makefile.feature                  |  12 +-
 tools/build/feature/Makefile                  |  46 +-
 tools/build/feature/test-libunwind-aarch64.c  |  27 -
 tools/build/feature/test-libunwind-arm.c      |  28 -
 .../test-libunwind-debug-frame-aarch64.c      |  17 -
 .../feature/test-libunwind-debug-frame-arm.c  |  17 -
 .../feature/test-libunwind-debug-frame.c      |   1 -
 tools/build/feature/test-libunwind-x86.c      |  28 -
 tools/build/feature/test-libunwind-x86_64.c   |  28 -
 tools/build/feature/test-libunwind.c          |   1 -
 tools/perf/Makefile.config                    | 226 +++--
 tools/perf/arch/arm/util/Build                |   2 -
 tools/perf/arch/arm/util/unwind-libunwind.c   |  50 --
 tools/perf/arch/arm64/util/Build              |   1 -
 tools/perf/arch/arm64/util/unwind-libunwind.c |  17 -
 tools/perf/arch/loongarch/util/Build          |   2 -
 .../arch/loongarch/util/unwind-libunwind.c    |  82 --
 tools/perf/arch/mips/Build                    |   1 -
 tools/perf/arch/mips/util/Build               |   1 -
 tools/perf/arch/mips/util/unwind-libunwind.c  |  22 -
 tools/perf/arch/powerpc/util/Build            |   1 -
 .../perf/arch/powerpc/util/unwind-libunwind.c |  92 --
 tools/perf/arch/x86/util/Build                |   3 -
 tools/perf/arch/x86/util/unwind-libunwind.c   | 115 ---
 tools/perf/builtin-inject.c                   |   4 +
 tools/perf/builtin-report.c                   |   4 +
 tools/perf/builtin-script.c                   |   4 +
 tools/perf/util/Build                         |   5 +-
 tools/perf/util/config.c                      |   4 +
 tools/perf/util/libunwind-arch/Build          |  11 +
 .../perf/util/libunwind-arch/libunwind-arch.c | 319 +++++++
 .../perf/util/libunwind-arch/libunwind-arch.h | 296 +++++++
 .../perf/util/libunwind-arch/libunwind-arm.c  | 290 ++++++
 .../util/libunwind-arch/libunwind-arm64.c     | 289 ++++++
 .../perf/util/libunwind-arch/libunwind-i386.c | 312 +++++++
 .../util/libunwind-arch/libunwind-loongarch.c | 297 +++++++
 .../perf/util/libunwind-arch/libunwind-mips.c | 299 +++++++
 .../util/libunwind-arch/libunwind-ppc32.c     | 301 +++++++
 .../util/libunwind-arch/libunwind-ppc64.c     | 303 +++++++
 .../util/libunwind-arch/libunwind-riscv.c     | 297 +++++++
 .../perf/util/libunwind-arch/libunwind-s390.c | 299 +++++++
 .../util/libunwind-arch/libunwind-x86_64.c    | 320 +++++++
 tools/perf/util/libunwind/arm64.c             |  40 -
 tools/perf/util/libunwind/x86_32.c            |  41 -
 tools/perf/util/maps.c                        |  34 +-
 tools/perf/util/maps.h                        |   4 +-
 tools/perf/util/symbol_conf.h                 |  10 +
 tools/perf/util/thread.c                      |  32 +-
 tools/perf/util/unwind-libdw.c                |  20 +-
 tools/perf/util/unwind-libunwind-local.c      | 831 ------------------
 tools/perf/util/unwind-libunwind.c            | 699 +++++++++++++--
 tools/perf/util/unwind.c                      | 104 +++
 tools/perf/util/unwind.h                      |  73 +-
 53 files changed, 4623 insertions(+), 1739 deletions(-)
 delete mode 100644 tools/build/feature/test-libunwind-aarch64.c
 delete mode 100644 tools/build/feature/test-libunwind-arm.c
 delete mode 100644 tools/build/feature/test-libunwind-debug-frame-aarch64.c
 delete mode 100644 tools/build/feature/test-libunwind-debug-frame-arm.c
 delete mode 100644 tools/build/feature/test-libunwind-x86.c
 delete mode 100644 tools/build/feature/test-libunwind-x86_64.c
 delete mode 100644 tools/perf/arch/arm/util/unwind-libunwind.c
 delete mode 100644 tools/perf/arch/arm64/util/unwind-libunwind.c
 delete mode 100644 tools/perf/arch/loongarch/util/unwind-libunwind.c
 delete mode 100644 tools/perf/arch/mips/Build
 delete mode 100644 tools/perf/arch/mips/util/Build
 delete mode 100644 tools/perf/arch/mips/util/unwind-libunwind.c
 delete mode 100644 tools/perf/arch/powerpc/util/unwind-libunwind.c
 delete mode 100644 tools/perf/arch/x86/util/unwind-libunwind.c
 create mode 100644 tools/perf/util/libunwind-arch/Build
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.h
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm64.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-i386.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-loongarch.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-mips.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc32.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc64.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-riscv.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-s390.c
 create mode 100644 tools/perf/util/libunwind-arch/libunwind-x86_64.c
 delete mode 100644 tools/perf/util/libunwind/arm64.c
 delete mode 100644 tools/perf/util/libunwind/x86_32.c
 delete mode 100644 tools/perf/util/unwind-libunwind-local.c
 create mode 100644 tools/perf/util/unwind.c

-- 
2.54.0.563.g4f69b47b94-goog
Re: [PATCH v5 0/7] perf libunwind multiple remote support
Posted by Ian Rogers 3 weeks, 5 days ago
On Wed, May 13, 2026 at 4:32 PM Ian Rogers <irogers@google.com> wrote:
>
> Fix the libunwind build for when libdw and libunwind are feature
> detected, currently failing with a duplicate symbol.
>
> Refactor the libunwind support so that whenever a remote target is
> available, perf functions using the ELF machine can use that remote
> target regardless of what the host/local machine is. Migrate existing
> libunwind supported architectures like powerpc, arm64 and loongarch so
> that they can work in a cross-architecture way. Add support for
> RISC-V. Make the code more regular in function names, etc. and avoid
> including a C-file. This increases the lines of code. It is similar in
> style to the unwind-libdw implementation. It is hoped that the more
> uniform nature of the code will help with refactoring the perf
> registers for SIMD/APX support.
>
> Aside from local host testing these patches are under tested, in part
> as I'm failing to see how to build libunwind with support for multiple
> remote targets. Please could I get help in testing.

So the patches failed to apply in Sashiko:
https://sashiko.dev/#/patchset/20260513233151.572332-1-irogers%40google.com
The baseline logs show perf-tools-next was at commit 8c8f20936143
("perf build: Remove NO_GTK2 build test") which is 6 patches
out-of-date compared to the current tip these patches are against. I
ran Sashiko locally, so I don't expect a huge amount from the reviews.
Currently Sashiko is catching up with a backlog because its tokens
have a lower priority and there was high load earlier in the week.
Anyway, I could repost the patches for Sashiko review but given the
backlog I think that would just create noise at the moment. Hopefully
I can get human review so we can move forward with merging these
improvements.

Thanks,
Ian

> v5: Rebase dropping merged loong arch fix patch. Fixes to Sashiko
>     review feedback:
>     - Patch 1: Hooked unwind__configure() into perf_default_config().
>       Standardized unwinder return contracts (>0 success, 0 fallback,
>       <0 fatal).  Fixed UNWIND_STYLE_UNKNOWN fallback and added
>       memset() to clear config array on override.
>     - Patch 2: Dynamically populated FILES list in
>       tools/build/feature/Makefile using LIBUNWIND_ARCHS. Added
>       libunwind cases to FEATURE_TESTS_EXTRA in
>       tools/build/Makefile.feature for proper FEATURE-DUMP caching.
>     - Patch 3: Restored core -lunwind linkage to
>       FEATURE_CHECK_LDFLAGS.  Restored NO_LIBUNWIND fallback
>       validation, corrected EXTLIBS evaluation ordering for
>       BIONIC/Android compatibility, and restored static linking
>       multiple definition flags.
>     - Patch 4: Fixed out-of-bounds array read bugs (>= ARRAY_SIZE) in
>       libunwind-i386.c and libunwind-x86_64.c. Fixed constant typos
>       across LoongArch, PowerPC, and s390x.
>     - Patch 5: Added early EM_NONE and ops validation checks to
>       prevent warnings and NULL dereferences. Checked return value of
>       unwind__prepare_access() in maps__copy_from(). Corrected
>       architecture binding in thread__insert_map() by calculating
>       e_machine after map insertion.
>     - Patch 6: Aligned all remote architecture accessors to match
>       5-argument generic declarations (removing trailing
>       sizeof(unw_word_t)). Prevented frame discard on stack depth
>       limit by returning 0 instead of -1 in unwind_step(). Fixed
>       32-bit big-endian register corruption by replacing memcpy() with
>       conditional type-casted assignment. Fixed max_stack == 1
>       fallback trigger. Fixed .debug_frame layout union corruption by
>       changing di.u.rti to di.u.ti across all DWARF find wrappers.
>     - Patch 7: Applied the same corrections (5-argument accessors,
>       u.ti union accessors, 0 return on max_ips) to the newly
>       introduced libunwind-riscv.c.
>
> v4: Rebase, in particular the zalloc->calloc change conflicted.
> https://lore.kernel.org/linux-perf-users/20260413024805.1316480-1-irogers@google.com/
>
> v3: Minor whitespace clean up and warn when a dynamic choice of libdw
>     or libunwind is selected for unwinding and support is missing (Arnaldo).
> https://lore.kernel.org/lkml/20260404054032.1538095-1-irogers@google.com/
>
> v2: Move two fixes patches to position 1 and 2 in the series. Fix
>     struct naming inconsistency, Andrew Jones
>     <andrew.jones@oss.qualcomm.com>. Fix other inconsistencies and
>     potential non-x86 build issues.
> https://lore.kernel.org/lkml/20260305221927.3237145-1-irogers@google.com/
>
> v1: https://lore.kernel.org/lkml/20260224142938.26088-1-irogers@google.com/
>
> Ian Rogers (7):
>   perf unwind: Refactor get_entries to allow dynamic libdw/libunwind
>     selection
>   tools build: Deduplicate test-libunwind for different architectures
>   perf build: Be more programmatic when setting up libunwind variables
>   perf unwind-libunwind: Make libunwind register reading cross platform
>   perf unwind-libunwind: Move flush/finish access out of local
>   perf unwind-libunwind: Remove libunwind-local
>   perf unwind-libunwind: Add RISC-V libunwind support
>
>  tools/build/Makefile.feature                  |  12 +-
>  tools/build/feature/Makefile                  |  46 +-
>  tools/build/feature/test-libunwind-aarch64.c  |  27 -
>  tools/build/feature/test-libunwind-arm.c      |  28 -
>  .../test-libunwind-debug-frame-aarch64.c      |  17 -
>  .../feature/test-libunwind-debug-frame-arm.c  |  17 -
>  .../feature/test-libunwind-debug-frame.c      |   1 -
>  tools/build/feature/test-libunwind-x86.c      |  28 -
>  tools/build/feature/test-libunwind-x86_64.c   |  28 -
>  tools/build/feature/test-libunwind.c          |   1 -
>  tools/perf/Makefile.config                    | 226 +++--
>  tools/perf/arch/arm/util/Build                |   2 -
>  tools/perf/arch/arm/util/unwind-libunwind.c   |  50 --
>  tools/perf/arch/arm64/util/Build              |   1 -
>  tools/perf/arch/arm64/util/unwind-libunwind.c |  17 -
>  tools/perf/arch/loongarch/util/Build          |   2 -
>  .../arch/loongarch/util/unwind-libunwind.c    |  82 --
>  tools/perf/arch/mips/Build                    |   1 -
>  tools/perf/arch/mips/util/Build               |   1 -
>  tools/perf/arch/mips/util/unwind-libunwind.c  |  22 -
>  tools/perf/arch/powerpc/util/Build            |   1 -
>  .../perf/arch/powerpc/util/unwind-libunwind.c |  92 --
>  tools/perf/arch/x86/util/Build                |   3 -
>  tools/perf/arch/x86/util/unwind-libunwind.c   | 115 ---
>  tools/perf/builtin-inject.c                   |   4 +
>  tools/perf/builtin-report.c                   |   4 +
>  tools/perf/builtin-script.c                   |   4 +
>  tools/perf/util/Build                         |   5 +-
>  tools/perf/util/config.c                      |   4 +
>  tools/perf/util/libunwind-arch/Build          |  11 +
>  .../perf/util/libunwind-arch/libunwind-arch.c | 319 +++++++
>  .../perf/util/libunwind-arch/libunwind-arch.h | 296 +++++++
>  .../perf/util/libunwind-arch/libunwind-arm.c  | 290 ++++++
>  .../util/libunwind-arch/libunwind-arm64.c     | 289 ++++++
>  .../perf/util/libunwind-arch/libunwind-i386.c | 312 +++++++
>  .../util/libunwind-arch/libunwind-loongarch.c | 297 +++++++
>  .../perf/util/libunwind-arch/libunwind-mips.c | 299 +++++++
>  .../util/libunwind-arch/libunwind-ppc32.c     | 301 +++++++
>  .../util/libunwind-arch/libunwind-ppc64.c     | 303 +++++++
>  .../util/libunwind-arch/libunwind-riscv.c     | 297 +++++++
>  .../perf/util/libunwind-arch/libunwind-s390.c | 299 +++++++
>  .../util/libunwind-arch/libunwind-x86_64.c    | 320 +++++++
>  tools/perf/util/libunwind/arm64.c             |  40 -
>  tools/perf/util/libunwind/x86_32.c            |  41 -
>  tools/perf/util/maps.c                        |  34 +-
>  tools/perf/util/maps.h                        |   4 +-
>  tools/perf/util/symbol_conf.h                 |  10 +
>  tools/perf/util/thread.c                      |  32 +-
>  tools/perf/util/unwind-libdw.c                |  20 +-
>  tools/perf/util/unwind-libunwind-local.c      | 831 ------------------
>  tools/perf/util/unwind-libunwind.c            | 699 +++++++++++++--
>  tools/perf/util/unwind.c                      | 104 +++
>  tools/perf/util/unwind.h                      |  73 +-
>  53 files changed, 4623 insertions(+), 1739 deletions(-)
>  delete mode 100644 tools/build/feature/test-libunwind-aarch64.c
>  delete mode 100644 tools/build/feature/test-libunwind-arm.c
>  delete mode 100644 tools/build/feature/test-libunwind-debug-frame-aarch64.c
>  delete mode 100644 tools/build/feature/test-libunwind-debug-frame-arm.c
>  delete mode 100644 tools/build/feature/test-libunwind-x86.c
>  delete mode 100644 tools/build/feature/test-libunwind-x86_64.c
>  delete mode 100644 tools/perf/arch/arm/util/unwind-libunwind.c
>  delete mode 100644 tools/perf/arch/arm64/util/unwind-libunwind.c
>  delete mode 100644 tools/perf/arch/loongarch/util/unwind-libunwind.c
>  delete mode 100644 tools/perf/arch/mips/Build
>  delete mode 100644 tools/perf/arch/mips/util/Build
>  delete mode 100644 tools/perf/arch/mips/util/unwind-libunwind.c
>  delete mode 100644 tools/perf/arch/powerpc/util/unwind-libunwind.c
>  delete mode 100644 tools/perf/arch/x86/util/unwind-libunwind.c
>  create mode 100644 tools/perf/util/libunwind-arch/Build
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-arch.h
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-arm64.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-i386.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-loongarch.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-mips.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc32.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-ppc64.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-riscv.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-s390.c
>  create mode 100644 tools/perf/util/libunwind-arch/libunwind-x86_64.c
>  delete mode 100644 tools/perf/util/libunwind/arm64.c
>  delete mode 100644 tools/perf/util/libunwind/x86_32.c
>  delete mode 100644 tools/perf/util/unwind-libunwind-local.c
>  create mode 100644 tools/perf/util/unwind.c
>
> --
> 2.54.0.563.g4f69b47b94-goog
>
Re: [PATCH v5 0/7] perf libunwind multiple remote support
Posted by Arnaldo Carvalho de Melo 3 weeks, 5 days ago
On Thu, May 14, 2026 at 09:51:09AM -0700, Ian Rogers wrote:
> On Wed, May 13, 2026 at 4:32 PM Ian Rogers <irogers@google.com> wrote:
> > Fix the libunwind build for when libdw and libunwind are feature
> > detected, currently failing with a duplicate symbol.
> >
> > Refactor the libunwind support so that whenever a remote target is
> > available, perf functions using the ELF machine can use that remote
> > target regardless of what the host/local machine is. Migrate existing
> > libunwind supported architectures like powerpc, arm64 and loongarch so
> > that they can work in a cross-architecture way. Add support for
> > RISC-V. Make the code more regular in function names, etc. and avoid
> > including a C-file. This increases the lines of code. It is similar in
> > style to the unwind-libdw implementation. It is hoped that the more
> > uniform nature of the code will help with refactoring the perf
> > registers for SIMD/APX support.
> >
> > Aside from local host testing these patches are under tested, in part
> > as I'm failing to see how to build libunwind with support for multiple
> > remote targets. Please could I get help in testing.
> 
> So the patches failed to apply in Sashiko:
> https://sashiko.dev/#/patchset/20260513233151.572332-1-irogers%40google.com
> The baseline logs show perf-tools-next was at commit 8c8f20936143
> ("perf build: Remove NO_GTK2 build test") which is 6 patches
> out-of-date compared to the current tip these patches are against. I
> ran Sashiko locally, so I don't expect a huge amount from the reviews.
> Currently Sashiko is catching up with a backlog because its tokens
> have a lower priority and there was high load earlier in the week.
> Anyway, I could repost the patches for Sashiko review but given the
> backlog I think that would just create noise at the moment. Hopefully
> I can get human review so we can move forward with merging these
> improvements.

Trying to apply it now, will also run sashiko locally.

- Arnaldo
Re: [PATCH v5 0/7] perf libunwind multiple remote support
Posted by Arnaldo Carvalho de Melo 3 weeks, 5 days ago
On Thu, May 14, 2026 at 09:01:18PM -0300, Arnaldo Carvalho de Melo wrote:
> On Thu, May 14, 2026 at 09:51:09AM -0700, Ian Rogers wrote:
> > On Wed, May 13, 2026 at 4:32 PM Ian Rogers <irogers@google.com> wrote:
> > > Fix the libunwind build for when libdw and libunwind are feature
> > > detected, currently failing with a duplicate symbol.
> > >
> > > Refactor the libunwind support so that whenever a remote target is
> > > available, perf functions using the ELF machine can use that remote
> > > target regardless of what the host/local machine is. Migrate existing
> > > libunwind supported architectures like powerpc, arm64 and loongarch so
> > > that they can work in a cross-architecture way. Add support for
> > > RISC-V. Make the code more regular in function names, etc. and avoid
> > > including a C-file. This increases the lines of code. It is similar in
> > > style to the unwind-libdw implementation. It is hoped that the more
> > > uniform nature of the code will help with refactoring the perf
> > > registers for SIMD/APX support.
> > >
> > > Aside from local host testing these patches are under tested, in part
> > > as I'm failing to see how to build libunwind with support for multiple
> > > remote targets. Please could I get help in testing.
> > 
> > So the patches failed to apply in Sashiko:
> > https://sashiko.dev/#/patchset/20260513233151.572332-1-irogers%40google.com
> > The baseline logs show perf-tools-next was at commit 8c8f20936143
> > ("perf build: Remove NO_GTK2 build test") which is 6 patches
> > out-of-date compared to the current tip these patches are against. I
> > ran Sashiko locally, so I don't expect a huge amount from the reviews.
> > Currently Sashiko is catching up with a backlog because its tokens
> > have a lower priority and there was high load earlier in the week.
> > Anyway, I could repost the patches for Sashiko review but given the
> > backlog I think that would just create noise at the moment. Hopefully
> > I can get human review so we can move forward with merging these
> > improvements.
> 
> Trying to apply it now, will also run sashiko locally.

Its in perf-tools-next tmp.perf-tools-next,

Running build tests now and will let sashiko running locally, probably
will push out tomorrow morning if nothing major is reported.

To make progress I think we can go on addressing some Sashiko reviews
with followup series otherwise it drags for a long time.

- Arnaldo