From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E78C33D502 for ; Thu, 5 Mar 2026 22:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772749181; cv=none; b=GG2M+3qO5R/1DUo7gJ+YWCfSRdgaHCIj1jzO9khfMiRoCJ9Rqf5QDe9YQFL2xRvIJMq5Fvori284H9fCWPxsqRfwFsfT4Gs+Qa6IxvCtSLoMj4IB0WHQfu1hetOJi6d69rFMupwRTxJPI6/U9mOYSobhtZVsVggMKd1Y2M9mTBQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772749181; c=relaxed/simple; bh=r4BkxTgoKBfeSLRF+4AZrbL50z8jtJ5iUznfs4uAWhk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mEGZK3Qx19EmcJXGg1cGNHPxloE4yC0Qlt8RvD+AaUJHN4LvlldxS4UJCoZP+qKsal95xHBjmhLciCAXhCf4nKKRETu6ea22uxBsT9wfUUBTY6hhpS9OgM7kXcLlGpldx6Pddb7OcQVygKOLTgZWf7653mpAWW16y6jUWJmsiBQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=DST6+wUV; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DST6+wUV" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1275c6fc58aso16316975c88.0 for ; Thu, 05 Mar 2026 14:19:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772749179; x=1773353979; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=XwuczH7zeef+TPhZgFlCxU0vVFk4yo7TmGdzaIH3pVk=; b=DST6+wUVfTCcNcrfYbo7HMrpnxsDm/w9speSOV6F+G7xe4qkwUdU0SgcB9Lr11MIrF wR6gsEJNuv7h95fjnBU/uc7MWMpR6eTC6/bG8M7LGzd95KoYfl9Q5sMPGM1v1iiaGfN6 L7JPbudq9iQlzfYp3gRRlXgH8EDVt5EEC3/eIl4rx0/ATigeI2zz4/jsBnbUq0LtnZOM qC7r+Yvc3bseE5Hjk0IIxFWfqmRQRBQrq3/j48lQUWLbb6m1ydKMigRldAY/P3HU0zTv mwCJvd0mN2a6AVtqYASq1og4INEQN1hnQbU8DEvbD1bpCSXMlSxAPzDbxcOpHk7AGTMG G+oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772749179; x=1773353979; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XwuczH7zeef+TPhZgFlCxU0vVFk4yo7TmGdzaIH3pVk=; b=NNSBN1voncXW1QXaTwue93wAem+O4hs12difRZ63cjnY4j5bKr3kO7mfhBTo72Zogl aHa4NoWiDD0Tz8hYWFKL8vVVlEdaS97wVrsgqBGxRaNauQDlvdm2KboVFGWeegngSuH8 ToRbWMeRmwgKqf5ki+jxyj8OHAIhW+OkQ2CjOBcPWgtS7eyUF3TADJzW8W1C5+NGogaY cNn+qtwoQvh2SyyHVUveJWIXSwKFGbTFn8Jt9wgSgScCGZ2ommXpuz6Z5LgLKCLi33H8 G4jlhKOwhRHXT5IE3mPk9Aucze/6+ljNiD21uImqIShTQ9/NsOnwuIg3yRksDPuiPUym 59hg== X-Forwarded-Encrypted: i=1; AJvYcCWumhX0M95PXwnFlHAPUV9M11PZjTzWnbGqb0a3VwkxideJLcUCKIq7dE4FnV3WOiQcS47CQgXJD+NAufwOSOI7@vger.kernel.org X-Gm-Message-State: AOJu0YyvKIyn6TexmztgClbRMne63DRPJk9pvWJDPyuxdD1UDaKggJQ4 dTYZiElLhZBCYVK8DFzpWb7lwywzLYhlTXBkdcIRQ5nL/VOzCNF3EvSqI3uoyzKzdNHAI8doon0 qvfSRn4Cudw== X-Received: from dlbov3.prod.google.com ([2002:a05:7022:1183:b0:127:1508:19ae]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6ba9:b0:128:bec5:1b37 with SMTP id a92af1059eb24-128c2df7d50mr14489c88.16.1772749179209; Thu, 05 Mar 2026 14:19:39 -0800 (PST) Date: Thu, 5 Mar 2026 14:19:19 -0800 In-Reply-To: Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260305221927.3237145-1-irogers@google.com> Subject: [PATCH v2 0/8] perf libunwind multiple remote support From: Ian Rogers To: irogers@google.com Cc: 9erthalion6@gmail.com, acme@kernel.org, adrian.hunter@intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, andrew.jones@oss.qualcomm.com, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, howardchu95@gmail.com, james.clark@linaro.org, john.g.garry@oracle.com, jolsa@kernel.org, leo.yan@linux.dev, libunwind-devel@nongnu.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, mingo@redhat.com, namhyung@kernel.org, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, shimin.guo@skydio.com, tglozar@redhat.com, tmricht@linux.ibm.com, will@kernel.org, yuzhuo@google.com Content-Type: text/plain; charset="UTF-8" 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 with 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. v2: Move two fixes patches to position 1 and 2 in the series. Fix struct naming inconsistency, Andrew Jones . Fix other inconsistencies and potential non-x86 build issues. v1: https://lore.kernel.org/lkml/20260224142938.26088-1-irogers@google.com/ Ian Rogers (8): perf unwind: Refactor get_entries to allow dynamic libdw/libunwind selection perf build loongarch: Remove reference to missing file 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/feature/Makefile | 38 +- 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 | 215 ++--- 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 | 3 - .../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/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 | 29 +- tools/perf/util/maps.h | 4 +- tools/perf/util/symbol_conf.h | 15 + tools/perf/util/thread.c | 29 +- tools/perf/util/unwind-libdw.c | 2 +- tools/perf/util/unwind-libunwind-local.c | 832 ------------------ tools/perf/util/unwind-libunwind.c | 679 ++++++++++++-- tools/perf/util/unwind.c | 102 +++ tools/perf/util/unwind.h | 56 +- 51 files changed, 4536 insertions(+), 1733 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.53.0.473.g4a7958ca14-goog