[Lldb-commits] [PATCH] D103127: lldb: Don't check for CMAKE_SYSTEM_NAME==Android.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added a comment.

In D103127#2985203 , @labath wrote:

> How exactly are you building this? CMAKE_SYSTEM_NAME is set in the official 
> android cmake toolchain file 
> (https://android.googlesource.com/platform/ndk/+/refs/heads/ndk-release-r23/build/cmake/android.toolchain.cmake#213)

I configured cmake using a script that looks like this:

  #!/bin/sh
  
  target_flags='--target=aarch64-linux-android21 
--sysroot=/path/to/android-ndk-r21-beta1/toolchains/llvm/prebuilt/linux-x86_64/sysroot
 
--gcc-toolchain=/path/to/android-ndk-r21-beta1/toolchains/llvm/prebuilt/linux-x86_64
 -mno-outline-atomics'
  
  cmake \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_C_COMPILER=`pwd`/../ra/bin/clang \
-DCMAKE_CXX_COMPILER=`pwd`/../ra/bin/clang++ \
-DLLVM_ENABLE_THREADS=OFF \
-DLLVM_CONFIG_PATH=`pwd`/../ra/bin/llvm-config \
"-DCMAKE_C_FLAGS=$target_flags" \
"-DCMAKE_CXX_FLAGS=$target_flags" \
"-DCMAKE_ASM_FLAGS=$target_flags" \
-DSANITIZER_CXX_ABI=none \
-DSANITIZER_CXX_ABI_LIBRARY=c++abi \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld -Wl,-lstdc++ -static-libstdc++ 
--rtlib=libgcc" \
-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-u__cxa_demangle \
-DANDROID=1 \
-DCOMPILER_RT_INCLUDE_TESTS=ON \
"-DCOMPILER_RT_TEST_COMPILER_CFLAGS=$target_flags" \
-DLLVM_TABLEGEN=`pwd`/../ra/bin/llvm-tblgen \
-DLLDB_TABLEGEN=`pwd`/../ra/bin/lldb-tblgen \
-DCLANG_TABLEGEN=`pwd`/../ra/bin/clang-tblgen \
-DLLVM_ENABLE_PROJECTS='clang;lldb' \
-DLLDB_ENABLE_LIBEDIT=0 \
-DLLDB_ENABLE_LIBXML2=0 \
-DLLVM_HOST_TRIPLE=aarch64-linux-android21 \
-DCMAKE_SYSTEM_NAME=Android \
-DLLVM_TARGETS_TO_BUILD='X86;AArch64' \
../../llvm

But now I'm switching to gn to build LLDB, so I don't need to worry about this 
any more.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103127/new/

https://reviews.llvm.org/D103127

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D109463: gn build: Add support for building LLDB on Linux.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc created this revision.
pcc added a reviewer: thakis.
Herald added a subscriber: emaste.
pcc requested review of this revision.
Herald added a project: LLVM.

On Linux, LLDB depends on lldb-server at runtime (is it different on
Mac?), so I created a top-level lldb target that will build both lldb
and lldb-server.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109463

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/lldb/BUILD.gn
  llvm/utils/gn/secondary/lldb/include/lldb/Host/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Initialization/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn

Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -29,13 +29,13 @@
 "//lldb/source/Plugins/Language/CPlusPlus",
   ]
 
-  #if (current_os == "android" || current_os == "linux") {
-#deps += [ "//lldb/source/Plugins/Process/Linux" ]
+  if (current_os == "android" || current_os == "linux") {
+deps += [ "//lldb/source/Plugins/Process/Linux" ]
 #} else if (current_os == "freebsd") {
 #deps += [ "//lldb/source/Plugins/Process/FreeBSD" ]
 #} else if (current_os == "netbsd") {
 #deps += [ "//lldb/source/Plugins/Process/NetBSD" ]
-  #}
+  }
 
   if (current_os == "mac") {
 deps += [ "//lldb/source/Plugins/ObjectFile/Mach-O" ]
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
@@ -0,0 +1,17 @@
+static_library("POSIX") {
+  output_name = "lldbPluginProcessPOSIX"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Reaches into Plugins/Platform/Process/Utility.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"CrashReason.cpp",
+"NativeProcessELF.cpp",
+"ProcessMessage.cpp",
+"ProcessPOSIXLog.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
@@ -0,0 +1,29 @@
+static_library("Linux") {
+  output_name = "lldbPluginProcessLinux"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Core",
+"//lldb/source/Host",
+"//lldb/source/Symbol",
+"//lldb/source/Target",
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/POSIX",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Uses source-relative includes for own headers.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"IntelPTManager.cpp",
+"NativeProcessLinux.cpp",
+"NativeRegisterContextLinux.cpp",
+"NativeRegisterContextLinux_arm.cpp",
+"NativeRegisterContextLinux_arm64.cpp",
+"NativeRegisterContextLinux_ppc64le.cpp",
+"NativeRegisterContextLinux_s390x.cpp",
+"NativeRegisterContextLinux_x86_64.cpp",
+"NativeThreadLinux.cpp",
+"SingleStepCheck.cpp",
+  ]
+}
+
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
@@ -0,0 +1,18 @@
+static_library("Linux") {
+  output_name = "lldbPluginPlatformLinux"
+  configs += [
+"//llvm/utils/gn/build:clang_code",
+"//llvm/utils/gn/build:lldb_code",
+  ]
+  deps = [
+"//lldb/source/Breakpoint",
+"//lldb/source/Core",
+"//lldb/source/Host",
+"//lldb/source/Interpreter",
+"//lldb/source/Target",
+"//lldb/source/Plugins/Platform/POSIX",
+  ]
+  # Reaches into Plugins/Platform/POSIX.
+  include_dirs = [ "//lldb/source" ]
+  sources = [ "PlatformLinux.cpp" ]
+}
Index: llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
@@ -10,4 +10,6 @@
 "//llvm/lib/Support",
   ]
   sources = [ "ObjectFileJIT.cpp" ]
+  # For Utility/UuidCompatibility.h.
+  include_dirs = [ "//lldb/source" ]
 }
Index: llvm/utils/gn/secondary/lldb/source/Plugins/BUILD.gn
=

[Lldb-commits] [PATCH] D109464: gn build: Add support for building lldb-server on Android.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc created this revision.
pcc added a reviewer: thakis.
Herald added a subscriber: danielkiss.
pcc requested review of this revision.
Herald added a project: LLVM.

The cross-compiled lldb-server targets are added to the top-level
lldb target if Android cross compilation is enabled.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109464

Files:
  llvm/utils/gn/build/libs/xml/enable.gni
  llvm/utils/gn/secondary/lldb/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/BUILD.gn
@@ -1,6 +1,19 @@
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
+
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 group("lldb") {
   deps = [ "tools/driver:lldb" ]
   if (current_os == "linux") {
 deps += [ "tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+deps += [ "tools/lldb-server($toolchain)" ]
+  }
 }
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/BUILD.gn
@@ -1,6 +1,19 @@
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
+
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 group("lldb") {
   deps = [ "tools/driver:lldb" ]
   if (current_os == "linux") {
 deps += [ "tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+deps += [ "tools/lldb-server($toolchain)" ]
+  }
 }
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D109463: gn build: Add support for building LLDB on Linux.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: llvm/utils/gn/secondary/BUILD.gn:15
 "//lld/test",
+"//lldb",
 "//llvm/test",

thakis wrote:
> Does this build fine on windows?
> 
> Generally this only depends on the test targets which in turn depend on the 
> binaries, so probably should only have the old/test dep in this file anyways.
You're right, this needs to avoid the dependency on lldb on Windows targets.

The problem with only depending on `//lldb/test` is that nothing else refers to 
`//lldb`, so `ninja lldb` wouldn't also build `lldb-server`. Maybe it would be 
better to add `lldb-server` to the `data_deps` of `//lldb/tools/driver:lldb` 
instead then.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109463/new/

https://reviews.llvm.org/D109463

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D109463: gn build: Add support for building LLDB on Linux.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc updated this revision to Diff 371464.
pcc added a comment.

Move to data_deps


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109463/new/

https://reviews.llvm.org/D109463

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/lldb/include/lldb/Host/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Initialization/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn

Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -29,13 +29,13 @@
 "//lldb/source/Plugins/Language/CPlusPlus",
   ]
 
-  #if (current_os == "android" || current_os == "linux") {
-#deps += [ "//lldb/source/Plugins/Process/Linux" ]
+  if (current_os == "android" || current_os == "linux") {
+deps += [ "//lldb/source/Plugins/Process/Linux" ]
 #} else if (current_os == "freebsd") {
 #deps += [ "//lldb/source/Plugins/Process/FreeBSD" ]
 #} else if (current_os == "netbsd") {
 #deps += [ "//lldb/source/Plugins/Process/NetBSD" ]
-  #}
+  }
 
   if (current_os == "mac") {
 deps += [ "//lldb/source/Plugins/ObjectFile/Mach-O" ]
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -7,7 +7,7 @@
   args = [ "-gen-opt-parser-defs" ]
 }
 
-if (host_os == "mac") {
+if (current_os == "mac") {
   write_cmake_config("write_info_plist") {
 input = "lldb-Info.plist.in"
 output = "$target_gen_dir/lldb-Info.plist"
@@ -25,12 +25,16 @@
 "//llvm/lib/Support",
 "//llvm/utils/gn/build/libs/xar",
   ]
-  if (host_os == "mac") {
+  if (current_os == "mac") {
 deps += [ ":write_info_plist" ]
 plist = get_target_outputs(":write_info_plist")
 ldflags = [ "-Wl,-sectcreate,__TEXT,__info_plist," +
 rebase_path(plist[0], root_out_dir) ]
   }
+  data_deps = []
+  if (current_os == "linux") {
+data_deps += [ "//lldb/tools/lldb-server" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
@@ -0,0 +1,17 @@
+static_library("POSIX") {
+  output_name = "lldbPluginProcessPOSIX"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Reaches into Plugins/Platform/Process/Utility.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"CrashReason.cpp",
+"NativeProcessELF.cpp",
+"ProcessMessage.cpp",
+"ProcessPOSIXLog.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
@@ -0,0 +1,29 @@
+static_library("Linux") {
+  output_name = "lldbPluginProcessLinux"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Core",
+"//lldb/source/Host",
+"//lldb/source/Symbol",
+"//lldb/source/Target",
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/POSIX",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Uses source-relative includes for own headers.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"IntelPTManager.cpp",
+"NativeProcessLinux.cpp",
+"NativeRegisterContextLinux.cpp",
+"NativeRegisterContextLinux_arm.cpp",
+"NativeRegisterContextLinux_arm64.cpp",
+"NativeRegisterContextLinux_ppc64le.cpp",
+"NativeRegisterContextLinux_s390x.cpp",
+"NativeRegisterContextLinux_x86_64.cpp",
+"NativeThreadLinux.cpp",
+"SingleStepCheck.cpp",
+  ]
+}
+
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
@@ -0,0 +1,18 @@
+static_library("Linux") {
+  output_name = "lldbPluginPlatformLinux"
+  configs += [
+"//llvm/utils/gn/build:clang_code",
+"//llvm/utils/gn/build:lldb_code",
+  ]
+  deps = [
+"//lldb/source/Breakpoint",
+"//lldb/source/Core",
+

[Lldb-commits] [PATCH] D109464: gn build: Add support for building lldb-server on Android.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc updated this revision to Diff 371465.
pcc added a comment.

Move to data_deps


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109464/new/

https://reviews.llvm.org/D109464

Files:
  llvm/utils/gn/build/libs/xml/enable.gni
  llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -1,4 +1,5 @@
 import("//llvm/utils/TableGen/tablegen.gni")
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
 import("//llvm/utils/gn/build/write_cmake_config.gni")
 import("//llvm/version.gni")
 
@@ -15,6 +16,14 @@
   }
 }
 
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 executable("lldb") {
   configs += [ "//llvm/utils/gn/build:lldb_code" ]
   deps = [
@@ -35,6 +44,9 @@
   if (current_os == "linux") {
 data_deps += [ "//lldb/tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+data_deps += [ "//lldb/tools/lldb-server($toolchain)" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -1,4 +1,5 @@
 import("//llvm/utils/TableGen/tablegen.gni")
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
 import("//llvm/utils/gn/build/write_cmake_config.gni")
 import("//llvm/version.gni")
 
@@ -15,6 +16,14 @@
   }
 }
 
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 executable("lldb") {
   configs += [ "//llvm/utils/gn/build:lldb_code" ]
   deps = [
@@ -35,6 +44,9 @@
   if (current_os == "linux") {
 data_deps += [ "//lldb/tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+data_deps += [ "//lldb/tools/lldb-server($toolchain)" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D109463: gn build: Add support for building LLDB on Linux.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: llvm/utils/gn/secondary/BUILD.gn:15
 "//lld/test",
+"//lldb",
 "//llvm/test",

thakis wrote:
> pcc wrote:
> > thakis wrote:
> > > Does this build fine on windows?
> > > 
> > > Generally this only depends on the test targets which in turn depend on 
> > > the binaries, so probably should only have the old/test dep in this file 
> > > anyways.
> > You're right, this needs to avoid the dependency on lldb on Windows targets.
> > 
> > The problem with only depending on `//lldb/test` is that nothing else 
> > refers to `//lldb`, so `ninja lldb` wouldn't also build `lldb-server`. 
> > Maybe it would be better to add `lldb-server` to the `data_deps` of 
> > `//lldb/tools/driver:lldb` instead then.
> I guess `//lldb/test` could depend on `//:lldb` instead of 
> `//lldb/tools/driver`?
> 
> We currently don't use data_deps anywhere else. (I have 
> https://github.com/nico/llvm-project/commit/7246393c6bbc270044641415ffb0db93ffee3e29
>  on a branch, but uploads with static links take so long that it isn't really 
> worth it. Maybe I should revisit that with `-fno-semantic-interposition`…)
And then `//:lldb` would depend on lldb and the various lldb-servers? I suppose 
that could work.

It seems like clang's existing dependency on e.g. clang-offload-bundler, which 
is the sort of dependency we want here, is currently added via deps, and I see 
that your change moves that to data_deps. For executable->executable 
dependencies I suppose that deps means the same thing as data_deps (test 
isolation aside) but to be consistent with what's in clang maybe we should just 
stick to what I have here except with s/data_deps/deps/g.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109463/new/

https://reviews.llvm.org/D109463

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D109463: gn build: Add support for building LLDB on Linux.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG9449f441fc9b: gn build: Add support for building LLDB on 
Linux. (authored by pcc).

Changed prior to commit:
  https://reviews.llvm.org/D109463?vs=371464&id=371490#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109463/new/

https://reviews.llvm.org/D109463

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/lldb/include/lldb/Host/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Initialization/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/ObjectFile/JIT/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
  llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn

Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -29,13 +29,13 @@
 "//lldb/source/Plugins/Language/CPlusPlus",
   ]
 
-  #if (current_os == "android" || current_os == "linux") {
-#deps += [ "//lldb/source/Plugins/Process/Linux" ]
+  if (current_os == "android" || current_os == "linux") {
+deps += [ "//lldb/source/Plugins/Process/Linux" ]
 #} else if (current_os == "freebsd") {
 #deps += [ "//lldb/source/Plugins/Process/FreeBSD" ]
 #} else if (current_os == "netbsd") {
 #deps += [ "//lldb/source/Plugins/Process/NetBSD" ]
-  #}
+  }
 
   if (current_os == "mac") {
 deps += [ "//lldb/source/Plugins/ObjectFile/Mach-O" ]
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -7,7 +7,7 @@
   args = [ "-gen-opt-parser-defs" ]
 }
 
-if (host_os == "mac") {
+if (current_os == "mac") {
   write_cmake_config("write_info_plist") {
 input = "lldb-Info.plist.in"
 output = "$target_gen_dir/lldb-Info.plist"
@@ -25,12 +25,15 @@
 "//llvm/lib/Support",
 "//llvm/utils/gn/build/libs/xar",
   ]
-  if (host_os == "mac") {
+  if (current_os == "mac") {
 deps += [ ":write_info_plist" ]
 plist = get_target_outputs(":write_info_plist")
 ldflags = [ "-Wl,-sectcreate,__TEXT,__info_plist," +
 rebase_path(plist[0], root_out_dir) ]
   }
+  if (current_os == "linux") {
+deps += [ "//lldb/tools/lldb-server" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/POSIX/BUILD.gn
@@ -0,0 +1,17 @@
+static_library("POSIX") {
+  output_name = "lldbPluginProcessPOSIX"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Reaches into Plugins/Platform/Process/Utility.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"CrashReason.cpp",
+"NativeProcessELF.cpp",
+"ProcessMessage.cpp",
+"ProcessPOSIXLog.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Process/Linux/BUILD.gn
@@ -0,0 +1,29 @@
+static_library("Linux") {
+  output_name = "lldbPluginProcessLinux"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+"//lldb/source/Core",
+"//lldb/source/Host",
+"//lldb/source/Symbol",
+"//lldb/source/Target",
+"//lldb/source/Utility",
+"//lldb/source/Plugins/Process/POSIX",
+"//lldb/source/Plugins/Process/Utility",
+"//llvm/lib/Support",
+  ]
+  # Uses source-relative includes for own headers.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+"IntelPTManager.cpp",
+"NativeProcessLinux.cpp",
+"NativeRegisterContextLinux.cpp",
+"NativeRegisterContextLinux_arm.cpp",
+"NativeRegisterContextLinux_arm64.cpp",
+"NativeRegisterContextLinux_ppc64le.cpp",
+"NativeRegisterContextLinux_s390x.cpp",
+"NativeRegisterContextLinux_x86_64.cpp",
+"NativeThreadLinux.cpp",
+"SingleStepCheck.cpp",
+  ]
+}
+
Index: llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/lldb/source/Plugins/Platform/Linux/BUILD.gn
@@ -0,0 +1,18 @@
+static_library("Linux") {
+  output_

[Lldb-commits] [PATCH] D109464: gn build: Add support for building lldb-server on Android.

2021-09-08 Thread Peter Collingbourne via Phabricator via lldb-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG883e93cb280e: gn build: Add support for building lldb-server 
on Android. (authored by pcc).

Changed prior to commit:
  https://reviews.llvm.org/D109464?vs=371465&id=371491#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109464/new/

https://reviews.llvm.org/D109464

Files:
  llvm/utils/gn/build/libs/xml/enable.gni
  llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
  llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -1,4 +1,5 @@
 import("//llvm/utils/TableGen/tablegen.gni")
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
 import("//llvm/utils/gn/build/write_cmake_config.gni")
 import("//llvm/version.gni")
 
@@ -15,6 +16,14 @@
   }
 }
 
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 executable("lldb") {
   configs += [ "//llvm/utils/gn/build:lldb_code" ]
   deps = [
@@ -34,6 +43,9 @@
   if (current_os == "linux") {
 deps += [ "//lldb/tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+deps += [ "//lldb/tools/lldb-server($toolchain)" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }


Index: llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/target.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("LLGSOptions") {
@@ -57,4 +58,8 @@
 "lldb-platform.cpp",
 "lldb-server.cpp",
   ]
+
+  if (current_os == "android") {
+output_dir = "$root_build_dir/runtimes_ndk_cxx/$crt_current_target_arch"
+  }
 }
Index: llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
===
--- llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
+++ llvm/utils/gn/secondary/lldb/tools/driver/BUILD.gn
@@ -1,4 +1,5 @@
 import("//llvm/utils/TableGen/tablegen.gni")
+import("//llvm/utils/gn/build/toolchain/compiler.gni")
 import("//llvm/utils/gn/build/write_cmake_config.gni")
 import("//llvm/version.gni")
 
@@ -15,6 +16,14 @@
   }
 }
 
+supported_toolchains = []
+if (android_ndk_path != "") {
+  supported_toolchains += [
+"//llvm/utils/gn/build/toolchain:stage2_android_aarch64",
+"//llvm/utils/gn/build/toolchain:stage2_android_arm",
+  ]
+}
+
 executable("lldb") {
   configs += [ "//llvm/utils/gn/build:lldb_code" ]
   deps = [
@@ -34,6 +43,9 @@
   if (current_os == "linux") {
 deps += [ "//lldb/tools/lldb-server" ]
   }
+  foreach (toolchain, supported_toolchains) {
+deps += [ "//lldb/tools/lldb-server($toolchain)" ]
+  }
 
   sources = [
 "Driver.cpp",
Index: llvm/utils/gn/build/libs/xml/enable.gni
===
--- llvm/utils/gn/build/libs/xml/enable.gni
+++ llvm/utils/gn/build/libs/xml/enable.gni
@@ -1,4 +1,4 @@
 declare_args() {
   # Whether to include code that links against libxml2.
-  llvm_enable_libxml2 = host_os != "win"
+  llvm_enable_libxml2 = current_os != "win" && current_os != "android"
 }
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D103127: lldb: Don't check for CMAKE_SYSTEM_NAME==Android.

2021-05-25 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc created this revision.
pcc added reviewers: JDevlieghere, labath.
Herald added subscribers: danielkiss, krytarowski, mgorny.
pcc requested review of this revision.
Herald added a project: LLDB.

CMAKE_SYSTEM_NAME seems to be unreliable for detecting whether the
target is Android. At least on my machine it always turns out to
have the value Linux when targeting Android. Even explicitly passing
-DCMAKE_SYSTEM_NAME=Android to CMake doesn't seem to help. It seems
that CMake is overriding the value that I pass in with a value that
it computed somehow.

To avoid relying on whichever fragile mechanism is used to detect
Android targets, let's just compile the Android source files
unconditionally and use the preprocessor to exclude their contents
on non-Android platforms.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D103127

Files:
  lldb/source/Host/CMakeLists.txt
  lldb/source/Host/android/HostInfoAndroid.cpp
  lldb/source/Host/android/LibcGlue.cpp


Index: lldb/source/Host/android/LibcGlue.cpp
===
--- lldb/source/Host/android/LibcGlue.cpp
+++ lldb/source/Host/android/LibcGlue.cpp
@@ -8,6 +8,8 @@
 
 // This files adds functions missing from libc on earlier versions of Android
 
+#if defined(__ANDROID__)
+
 #include 
 
 #include 
@@ -26,3 +28,5 @@
 int posix_openpt(int flags) { return open("/dev/ptmx", flags); }
 
 #endif
+
+#endif // __ANDROID__
Index: lldb/source/Host/android/HostInfoAndroid.cpp
===
--- lldb/source/Host/android/HostInfoAndroid.cpp
+++ lldb/source/Host/android/HostInfoAndroid.cpp
@@ -6,6 +6,8 @@
 //
 
//===--===//
 
+#if defined(__ANDROID__)
+
 #include "lldb/Host/android/HostInfoAndroid.h"
 #include "lldb/Host/FileSystem.h"
 #include "lldb/Host/linux/HostInfoLinux.h"
@@ -92,3 +94,5 @@
 
   return FileSystem::Instance().Exists(file_spec);
 }
+
+#endif // __ANDROID__
Index: lldb/source/Host/CMakeLists.txt
===
--- lldb/source/Host/CMakeLists.txt
+++ lldb/source/Host/CMakeLists.txt
@@ -106,12 +106,10 @@
   linux/LibcGlue.cpp
   linux/Support.cpp
   )
-if (CMAKE_SYSTEM_NAME MATCHES "Android")
-  add_host_subdirectory(android
-android/HostInfoAndroid.cpp
-android/LibcGlue.cpp
-)
-endif()
+add_host_subdirectory(android
+  android/HostInfoAndroid.cpp
+  android/LibcGlue.cpp
+  )
   elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
 add_host_subdirectory(freebsd
   freebsd/Host.cpp


Index: lldb/source/Host/android/LibcGlue.cpp
===
--- lldb/source/Host/android/LibcGlue.cpp
+++ lldb/source/Host/android/LibcGlue.cpp
@@ -8,6 +8,8 @@
 
 // This files adds functions missing from libc on earlier versions of Android
 
+#if defined(__ANDROID__)
+
 #include 
 
 #include 
@@ -26,3 +28,5 @@
 int posix_openpt(int flags) { return open("/dev/ptmx", flags); }
 
 #endif
+
+#endif // __ANDROID__
Index: lldb/source/Host/android/HostInfoAndroid.cpp
===
--- lldb/source/Host/android/HostInfoAndroid.cpp
+++ lldb/source/Host/android/HostInfoAndroid.cpp
@@ -6,6 +6,8 @@
 //
 //===--===//
 
+#if defined(__ANDROID__)
+
 #include "lldb/Host/android/HostInfoAndroid.h"
 #include "lldb/Host/FileSystem.h"
 #include "lldb/Host/linux/HostInfoLinux.h"
@@ -92,3 +94,5 @@
 
   return FileSystem::Instance().Exists(file_spec);
 }
+
+#endif // __ANDROID__
Index: lldb/source/Host/CMakeLists.txt
===
--- lldb/source/Host/CMakeLists.txt
+++ lldb/source/Host/CMakeLists.txt
@@ -106,12 +106,10 @@
   linux/LibcGlue.cpp
   linux/Support.cpp
   )
-if (CMAKE_SYSTEM_NAME MATCHES "Android")
-  add_host_subdirectory(android
-android/HostInfoAndroid.cpp
-android/LibcGlue.cpp
-)
-endif()
+add_host_subdirectory(android
+  android/HostInfoAndroid.cpp
+  android/LibcGlue.cpp
+  )
   elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
 add_host_subdirectory(freebsd
   freebsd/Host.cpp
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D95602: [lldb][AArch64] Add MTE memory tag reading to lldb

2021-05-25 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: 
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp:633
+
+  if (SendPacketAndWaitForResponse(packet.GetString(), response) !=
+  PacketResult::Success ||




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95602/new/

https://reviews.llvm.org/D95602

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D95601: [lldb][AArch64] Add memory tag reading to lldb-server

2021-05-25 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: 
lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp:15
 
 #include "lldb/Host/common/NativeProcessProtocol.h"
 #include "lldb/Utility/DataBufferHeap.h"




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95601/new/

https://reviews.llvm.org/D95601

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D103626: [lldb][AArch64] Remove non address bits from memory read arguments

2021-06-16 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added a comment.

In D103626#2796554 , @DavidSpickett 
wrote:

> The side effect here is that you do "memory read " and you see 
> untagged addresses for the lines. It's not really that confusing but maybe 
> something we should make a general decision about.
>
> Same thing applies to the previous "memory region" patch.
>
>   (lldb) p ptr1
>   (char *) $1 = 0x344dfcb0 ""
>   (lldb) memory read ptr1
>   0xfcb0: f0 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00  
> ..@.
>   0xfcc0: e0 fc ff ff ff ff 00 00 54 f0 e7 f7 ff ff 00 00  
> T...
>   (lldb) memory region ptr1
>   [0xfffdf000-0x0001) rw- [stack]
>
> Personally it doesn't bother me, but then again I know what all the upper 
> bits are doing anyway.

In Android tombstones we display the memory tag inline with the address, e.g.

  memory near x8 ([anon:scudo:primary]):
  0079fd11a1d0    
  0079fd11a1e0 84e400020402 37ecb699a1b3  .7..
  0f79fd11a1f0    
  0f79fd11a200    
  0079fd11a210    
  0079fd11a220    
  0079fd11a230    
  0079fd11a240    
  0079fd11a250    
  0079fd11a260    
  0079fd11a270    
  0079fd11a280    
  0079fd11a290    
  0079fd11a2a0    
  0079fd11a2b0    
  0079fd11a2c0    

Maybe this is something worth considering for LLDB memory dumps?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103626/new/

https://reviews.llvm.org/D103626

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D105178: [lldb][AArch64] Annotate synchronous tag faults

2021-07-12 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added a comment.

> Programs must enable the tagged address ABI to
> receive these signals and are also opting into the
> presence of these tag bits.

This is actually independent of the tagged address ABI. For siginfo data 
structures read via `ptrace(PTRACE_GETSIGINFO)` we will always have the tag in 
`si_addr` provided that the kernel is new enough. It's only the signal delivery 
via `sigaction` where the user program needs to opt in (via 
`SA_EXPOSE_TAGBITS`), and that is again independent of the tagged address ABI.




Comment at: lldb/test/API/linux/aarch64/mte_tag_faults/main.c:38
+  // Tag ptr with 10
+  char *tagged_buf = __arm_mte_create_random_tag(buf, 1 << 9);
+  // Set first allocation tag to 10

This seems like a bit of a roundabout way to set the address tag to 10. Why not 
just set it directly? i.e.
```
char *tagged_buf = buf + (10ULL << 56);
```
Or wrap that in a function to make things more self documenting. Then you don't 
need to set the inclusion mask in the prctl call.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105178/new/

https://reviews.llvm.org/D105178

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93438: ObjectFileELF: Test whether reloc_header is non-null instead of asserting.

2021-02-11 Thread Peter Collingbourne via Phabricator via lldb-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc314f5ede824: ObjectFileELF: Test whether reloc_header is 
non-null instead of asserting. (authored by pcc).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93438/new/

https://reviews.llvm.org/D93438

Files:
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
  lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml

Index: lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml
===
--- /dev/null
+++ lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml
@@ -0,0 +1,148 @@
+# RUN: yaml2obj %s -o %t
+# RUN: lldb-test symbols %t | FileCheck %s
+
+# CHECK: _DYNAMIC
+# CHECK: _start
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:ELFDATA2LSB
+  Type:ET_DYN
+  Machine: EM_X86_64
+  Entry:   0x1000
+ProgramHeaders:
+  - Type:PT_PHDR
+Flags:   [ PF_R ]
+VAddr:   0x40
+Align:   0x8
+  - Type:PT_LOAD
+Flags:   [ PF_R ]
+FirstSec:.dynsym
+LastSec: .dynstr
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_X, PF_R ]
+FirstSec:.text
+LastSec: .text
+VAddr:   0x1000
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x2000
+Align:   0x1000
+  - Type:PT_DYNAMIC
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .dynamic
+VAddr:   0x2000
+Align:   0x8
+  - Type:PT_GNU_RELRO
+Flags:   [ PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x2000
+  - Type:PT_GNU_STACK
+Flags:   [ PF_W, PF_R ]
+Align:   0x0
+Sections:
+  - Name:.dynsym
+Type:SHT_DYNSYM
+Flags:   [ SHF_ALLOC ]
+Address: 0x1C8
+Link:.dynstr
+AddressAlign:0x8
+EntSize: 0x18
+  - Name:.gnu.hash
+Type:SHT_GNU_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x1F8
+Link:.dynsym
+AddressAlign:0x8
+Header:
+  SymNdx:  0x1
+  Shift2:  0x6
+BloomFilter: [ 0x40100 ]
+HashBuckets: [ 0x1 ]
+HashValues:  [ 0xEDDB6233 ]
+  - Name:.hash
+Type:SHT_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x218
+Link:.dynsym
+AddressAlign:0x4
+Bucket:  [ 1, 0 ]
+Chain:   [ 0, 0 ]
+  - Name:.dynstr
+Type:SHT_STRTAB
+Flags:   [ SHF_ALLOC ]
+Address: 0x230
+AddressAlign:0x1
+  - Name:.text
+Type:SHT_PROGBITS
+Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
+Address: 0x1000
+AddressAlign:0x1
+Offset:  0x1000
+Content: C3
+  - Name:.data
+Type:SHT_PROGBITS
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x2000
+AddressAlign:0x1
+Offset:  0x2000
+  - Name:.dynamic
+Type:SHT_DYNAMIC
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x2000
+Link:.dynstr
+AddressAlign:0x8
+Entries:
+  - Tag: DT_SYMTAB
+Value:   0x1C8
+  - Tag: DT_SYMENT
+Value:   0x18
+  - Tag: DT_STRTAB
+Value:   0x230
+  - Tag: DT_STRSZ
+Value:   0x8
+  - Tag: DT_GNU_HASH
+Value:   0x1F8
+  - Tag: DT_HASH
+Value:   0x218
+  - Tag: DT_JMPREL
+Value:   0x0
+  - Tag: DT_PLTRELSZ
+Value:   0x0
+  - Tag: DT_NULL
+Value:   0x0
+  - Name:.bss
+Type:SHT_NOBITS
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x3000
+AddressAlign:0x1
+  - Name:.comment
+Type:SHT_PROGBITS
+Flags:   [ SHF_MERGE, SHF_STRINGS ]
+AddressAlign:0x1
+EntSize: 0x1
+Content: 4C696E6B65723A204C4C4420372E302E3000
+Symbols:
+  - Name:_DYNAMIC
+Section: .dynamic
+Value:   0x2000
+Other:   [ STV_HIDDEN ]
+  - Name:_start
+Type:STT_FUNC
+Section: .text
+Binding: STB_GLOBAL
+Value:   0x1000
+DynamicSymbols:
+  - Name:_st

[Lldb-commits] [PATCH] D98529: [lldb] Strip pointer authentication codes from aarch64 pc.

2021-03-17 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added a comment.

In D98529#2631946 , @DavidSpickett 
wrote:

> TCR_ELx begins at 1 (see `D13.2.123 TCR_EL1, Translation Control Register 
> (EL1)` in the armarm) and covers EL0 and 1. Looking at the pseudocode access 
> to this is undefined at EL0.
>
> So the OS would have to provide you some other way to read that, I know this 
> is missing on Linux at the moment. A user setting might be good for us 
> supporting Linux too. (though I realise your immediate concern is MacOS)

On Linux you can query the NT_ARM_PAC_MASK regset and examine the insn_mask 
field of the result.

Note that this is a mask rather than the number of bits as this also allows 
reflecting whether TBI{,D}0 was set at execution time. I would suggest using a 
mask in any persisted storage format.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D98529/new/

https://reviews.llvm.org/D98529

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D98886: Pass pointer authentication code mask from minidump and use to strip pac from pc.

2021-03-30 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: lldb/include/lldb/Target/Process.h:79
   void SetExtraStartupCommands(const Args &args);
+  uint64_t GetPointerAuthenticationAddressMask() const;
+  void SetPointerAuthenticationAddressMask(const uint64_t mask);

omjavaid wrote:
> This function name is too specific to AArch64 architecture. IMO, we should 
> have information on significant address bits rather than PAuth mask. This is 
> because we have to cover for the top byte in case of AArch64 Top Byte Ignore 
> feature as well as any other memory management features.
> 
> From user process perspective we should figure out how many bits of the 
> process memory address are significant for addressing while the others store 
> extra information like PAC, Tags or any information inserted by software in 
> top byte.
> 
> I propose to add a new variable (may be call it address_bits_in_use) in 
> process class which is populated by default equal to process address width in 
> our case 64 bit. In case a we choose to update address_bits_in_use we may do 
> it on when process is created or through set method during execution as well.
I don't think we want to clear the top byte if TBI is enabled. This is because 
the top byte may contain a pointer tag that is necessary in order to access the 
pointer with MTE. That is exactly what a mask would let us do. The top byte of 
the mask is clear when TBI is enabled so that the pointer tag is left unchanged.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D98886/new/

https://reviews.llvm.org/D98886

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D100515: [lldb] Add GetCodeAddressMask and GetDataAddressMask to Process

2021-04-15 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: lldb/source/Target/Process.cpp:5569-5570
+
+  if (m_code_address_mask == 0)
+return -1; // All bits are used for addressing.
+

Is this part correct? (Same below.) In D100521 you have
```
  if (pc & pac_sign_extension)
return pc | mask;
  return pc & (~mask);
```
So it looks like this would cause the pc to be set to 0 (or -1)?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100515/new/

https://reviews.llvm.org/D100515

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D100515: [lldb] Add GetCodeAddressMask and GetDataAddressMask to Process

2021-04-16 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: lldb/source/Target/Process.cpp:5569-5570
+
+  if (m_code_address_mask == 0)
+return -1; // All bits are used for addressing.
+

JDevlieghere wrote:
> jasonmolenda wrote:
> > pcc wrote:
> > > Is this part correct? (Same below.) In D100521 you have
> > > ```
> > >   if (pc & pac_sign_extension)
> > > return pc | mask;
> > >   return pc & (~mask);
> > > ```
> > > So it looks like this would cause the pc to be set to 0 (or -1)?
> > I get confused so I like to do this by hand quickly to make sure I 
> > understand.
> > 
> > given mask of 111 and addr of xxx1011 where 'x' are PAC bits,
> > 
> > b55 == 1: m | a == 011
> > b55 == 0: ~m & a == 0001011
> > 
> > given mask of 111, low address 0001011 and high address 011,
> > 
> > b55 == 1: m & ha == ha
> > b55 == 0: ~m | la == la
> > 
> > am I  not thinking of something that could unify these?  I can confuse 
> > myself so easily with these things.
> > 
> > We could also detect a mask of -1 and just return the original address in 
> > FixCodeAddress/FixDataAddress, right.  That would be very simple.
> I've added checking for -1 in D100521
With a mask of 111 isn't it

b55 == 1: m | ha == 111
b55 == 0: ~m & la == 000

I think you can just remove lines 5569-5570 here as well as lines 819-820 from 
D100521.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100515/new/

https://reviews.llvm.org/D100515

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D100515: [lldb] Add GetCodeAddressMask and GetDataAddressMask to Process

2021-04-16 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: lldb/source/Target/Process.cpp:5569-5570
+
+  if (m_code_address_mask == 0)
+return -1; // All bits are used for addressing.
+

jasonmolenda wrote:
> pcc wrote:
> > JDevlieghere wrote:
> > > jasonmolenda wrote:
> > > > pcc wrote:
> > > > > Is this part correct? (Same below.) In D100521 you have
> > > > > ```
> > > > >   if (pc & pac_sign_extension)
> > > > > return pc | mask;
> > > > >   return pc & (~mask);
> > > > > ```
> > > > > So it looks like this would cause the pc to be set to 0 (or -1)?
> > > > I get confused so I like to do this by hand quickly to make sure I 
> > > > understand.
> > > > 
> > > > given mask of 111 and addr of xxx1011 where 'x' are PAC bits,
> > > > 
> > > > b55 == 1: m | a == 011
> > > > b55 == 0: ~m & a == 0001011
> > > > 
> > > > given mask of 111, low address 0001011 and high address 011,
> > > > 
> > > > b55 == 1: m & ha == ha
> > > > b55 == 0: ~m | la == la
> > > > 
> > > > am I  not thinking of something that could unify these?  I can confuse 
> > > > myself so easily with these things.
> > > > 
> > > > We could also detect a mask of -1 and just return the original address 
> > > > in FixCodeAddress/FixDataAddress, right.  That would be very simple.
> > > I've added checking for -1 in D100521
> > With a mask of 111 isn't it
> > 
> > b55 == 1: m | ha == 111
> > b55 == 0: ~m & la == 000
> > 
> > I think you can just remove lines 5569-5570 here as well as lines 819-820 
> > from D100521.
> urk.  my caveat that I often confuse myself with these has been proven true. 
> :) 
> 
> So you're suggesting the default, uninitialized, mask is 0.  If we have that, 
> then
> 
> mask 0, low address 0001011, high address 011
> b55 == 1: m | ha == 011
> b55 == 0: ~m & la == 0001011
> 
> In the mask, any bit set to 0 is passed through as-is.  Any bit set to 1 is 
> going to be cleared or set in these FixAddress methods.  I see.
Yes, exactly.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100515/new/

https://reviews.llvm.org/D100515

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93438: ObjectFileELF: Test whether reloc_header is non-null instead of asserting.

2020-12-16 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc created this revision.
pcc added a reviewer: labath.
Herald added a subscriber: emaste.
Herald added a reviewer: espindola.
pcc requested review of this revision.
Herald added a subscriber: MaskRay.
Herald added a project: LLDB.

It is possible for the GetSectionHeaderByIndex lookup to fail because
the previous FindSectionContainingFileAddress lookup found a segment
instead of a section. This is possible if the binary does not have
a PLT (which means that lld will in some circumstances set DT_JMPREL
to 0, which is typically an address that is part of the ELF headers
and not in a section) and may also be possible if the section headers
have been stripped. To handle this possibility, replace the assert
with an if.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D93438

Files:
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp


Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2758,14 +2758,14 @@
 user_id_t reloc_id = reloc_section->GetID();
 const ELFSectionHeaderInfo *reloc_header =
 GetSectionHeaderByIndex(reloc_id);
-assert(reloc_header);
+if (reloc_header) {
+  if (m_symtab_up == nullptr)
+m_symtab_up =
+std::make_unique(reloc_section->GetObjectFile());
 
-if (m_symtab_up == nullptr)
-  m_symtab_up =
-  std::make_unique(reloc_section->GetObjectFile());
-
-ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
-   reloc_id);
+  ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
+ reloc_id);
+}
   }
 }
 


Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2758,14 +2758,14 @@
 user_id_t reloc_id = reloc_section->GetID();
 const ELFSectionHeaderInfo *reloc_header =
 GetSectionHeaderByIndex(reloc_id);
-assert(reloc_header);
+if (reloc_header) {
+  if (m_symtab_up == nullptr)
+m_symtab_up =
+std::make_unique(reloc_section->GetObjectFile());
 
-if (m_symtab_up == nullptr)
-  m_symtab_up =
-  std::make_unique(reloc_section->GetObjectFile());
-
-ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
-   reloc_id);
+  ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
+ reloc_id);
+}
   }
 }
 
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93438: ObjectFileELF: Test whether reloc_header is non-null instead of asserting.

2020-12-17 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc updated this revision to Diff 312608.
pcc added a comment.

Add test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93438/new/

https://reviews.llvm.org/D93438

Files:
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
  lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml

Index: lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml
===
--- /dev/null
+++ lldb/test/Shell/ObjectFile/ELF/null-jmprel.yaml
@@ -0,0 +1,148 @@
+# RUN: yaml2obj %s -o %t
+# RUN: lldb-test symbols %t | FileCheck %s
+
+# CHECK: _DYNAMIC
+# CHECK: _start
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:ELFDATA2LSB
+  Type:ET_DYN
+  Machine: EM_X86_64
+  Entry:   0x1000
+ProgramHeaders:
+  - Type:PT_PHDR
+Flags:   [ PF_R ]
+VAddr:   0x40
+Align:   0x8
+  - Type:PT_LOAD
+Flags:   [ PF_R ]
+FirstSec:.dynsym
+LastSec: .dynstr
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_X, PF_R ]
+FirstSec:.text
+LastSec: .text
+VAddr:   0x1000
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x2000
+Align:   0x1000
+  - Type:PT_DYNAMIC
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .dynamic
+VAddr:   0x2000
+Align:   0x8
+  - Type:PT_GNU_RELRO
+Flags:   [ PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x2000
+  - Type:PT_GNU_STACK
+Flags:   [ PF_W, PF_R ]
+Align:   0x0
+Sections:
+  - Name:.dynsym
+Type:SHT_DYNSYM
+Flags:   [ SHF_ALLOC ]
+Address: 0x1C8
+Link:.dynstr
+AddressAlign:0x8
+EntSize: 0x18
+  - Name:.gnu.hash
+Type:SHT_GNU_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x1F8
+Link:.dynsym
+AddressAlign:0x8
+Header:
+  SymNdx:  0x1
+  Shift2:  0x6
+BloomFilter: [ 0x40100 ]
+HashBuckets: [ 0x1 ]
+HashValues:  [ 0xEDDB6233 ]
+  - Name:.hash
+Type:SHT_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x218
+Link:.dynsym
+AddressAlign:0x4
+Bucket:  [ 1, 0 ]
+Chain:   [ 0, 0 ]
+  - Name:.dynstr
+Type:SHT_STRTAB
+Flags:   [ SHF_ALLOC ]
+Address: 0x230
+AddressAlign:0x1
+  - Name:.text
+Type:SHT_PROGBITS
+Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
+Address: 0x1000
+AddressAlign:0x1
+Offset:  0x1000
+Content: C3
+  - Name:.data
+Type:SHT_PROGBITS
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x2000
+AddressAlign:0x1
+Offset:  0x2000
+  - Name:.dynamic
+Type:SHT_DYNAMIC
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x2000
+Link:.dynstr
+AddressAlign:0x8
+Entries:
+  - Tag: DT_SYMTAB
+Value:   0x1C8
+  - Tag: DT_SYMENT
+Value:   0x18
+  - Tag: DT_STRTAB
+Value:   0x230
+  - Tag: DT_STRSZ
+Value:   0x8
+  - Tag: DT_GNU_HASH
+Value:   0x1F8
+  - Tag: DT_HASH
+Value:   0x218
+  - Tag: DT_JMPREL
+Value:   0x0
+  - Tag: DT_PLTRELSZ
+Value:   0x0
+  - Tag: DT_NULL
+Value:   0x0
+  - Name:.bss
+Type:SHT_NOBITS
+Flags:   [ SHF_WRITE, SHF_ALLOC ]
+Address: 0x3000
+AddressAlign:0x1
+  - Name:.comment
+Type:SHT_PROGBITS
+Flags:   [ SHF_MERGE, SHF_STRINGS ]
+AddressAlign:0x1
+EntSize: 0x1
+Content: 4C696E6B65723A204C4C4420372E302E3000
+Symbols:
+  - Name:_DYNAMIC
+Section: .dynamic
+Value:   0x2000
+Other:   [ STV_HIDDEN ]
+  - Name:_start
+Type:STT_FUNC
+Section: .text
+Binding: STB_GLOBAL
+Value:   0x1000
+DynamicSymbols:
+  - Name:_start
+Type:STT_FUNC
+Section: .text
+Binding: STB_GLOBAL
+Value:   0x1000
+...
Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileEL

[Lldb-commits] [PATCH] D93495: CrashReason: Add MTE tag check faults to the list of crash reasons.

2020-12-17 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc created this revision.
pcc added a reviewer: labath.
Herald added a subscriber: emaste.
pcc requested review of this revision.
Herald added a project: LLDB.

As of Linux 5.10, the kernel may report either of the two following
crash reasons:

- SEGV_MTEAERR: async MTE tag check fault
- SEGV_MTESERR: sync MTE tag check fault

Teach LLDB about them.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D93495

Files:
  lldb/source/Plugins/Process/POSIX/CrashReason.cpp
  lldb/source/Plugins/Process/POSIX/CrashReason.h


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,16 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +176,12 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +262,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,16 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +176,12 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +262,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93495: CrashReason: Add MTE tag check faults to the list of crash reasons.

2020-12-21 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc updated this revision to Diff 313190.
pcc added a comment.

Show fault address for SEGV_MTESERR


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93495/new/

https://reviews.llvm.org/D93495

Files:
  lldb/source/Plugins/Process/POSIX/CrashReason.cpp
  lldb/source/Plugins/Process/POSIX/CrashReason.h


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,16 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +176,13 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+AppendFaultAddr(str, fault_addr);
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +263,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,16 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +176,13 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+AppendFaultAddr(str, fault_addr);
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +263,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93495: CrashReason: Add MTE tag check faults to the list of crash reasons.

2020-12-21 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added a comment.

In D93495#2462581 , @DavidSpickett 
wrote:

> I assume that the signal displays without tag bits just like any other SEGV?
>
> I was thinking about testing but I don't see any tests for specific signals 
> so it would only be needed if your change to add the tag bits to siginfo has 
> gone in.
> (I have been following it from a distance but not sure of the status)

With 5.10 the tag bits don't appear but with the latest version of my patch 
series, which is due to land in 5.11, the tag bits will appear in si_addr in 
the siginfo retrieved via ptrace(PTRACE_GETSIGINFO) and therefore will appear 
in the fault address displayed by the debugger. The tag bits are only hidden 
from signal handlers, and then only if SA_EXPOSE_TAGBITS is clear, so they will 
be exposed to ptrace no matter whether the debuggee has SA_EXPOSE_TAGBITS clear 
or set in its signal handler. Note that the tag bits will be exposed for all 
faults with a fault address, not just SEGV_MTESERR (though with SEGV_MTESERR we 
only get the low nibble of the tag due to hardware limitations).

I verified all of this behavior in FVP and also noticed that I didn't add a 
line of code here that makes the fault address visible in the sync tag check 
fault case so I've now added it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93495/new/

https://reviews.llvm.org/D93495

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93495: CrashReason: Add MTE tag check faults to the list of crash reasons.

2020-12-29 Thread Peter Collingbourne via Phabricator via lldb-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7e5a187de313: CrashReason: Add MTE tag check faults to the 
list of crash reasons. (authored by pcc).
Herald added a subscriber: krytarowski.

Changed prior to commit:
  https://reviews.llvm.org/D93495?vs=313190&id=314027#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93495/new/

https://reviews.llvm.org/D93495

Files:
  lldb/source/Plugins/Process/POSIX/CrashReason.cpp
  lldb/source/Plugins/Process/POSIX/CrashReason.h


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,18 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifdef __linux__
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
+#endif // __linux__
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +178,13 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+AppendFaultAddr(str, fault_addr);
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +265,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:


Index: lldb/source/Plugins/Process/POSIX/CrashReason.h
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.h
+++ lldb/source/Plugins/Process/POSIX/CrashReason.h
@@ -22,6 +22,8 @@
   eInvalidAddress,
   ePrivilegedAddress,
   eBoundViolation,
+  eAsyncTagCheckFault,
+  eSyncTagCheckFault,
 
   // SIGILL crash reasons.
   eIllegalOpcode,
Index: lldb/source/Plugins/Process/POSIX/CrashReason.cpp
===
--- lldb/source/Plugins/Process/POSIX/CrashReason.cpp
+++ lldb/source/Plugins/Process/POSIX/CrashReason.cpp
@@ -58,6 +58,18 @@
 #endif
   case SEGV_BNDERR:
 return CrashReason::eBoundViolation;
+#ifdef __linux__
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif
+  case SEGV_MTEAERR:
+return CrashReason::eAsyncTagCheckFault;
+#ifndef SEGV_MTESERR
+#define SEGV_MTESERR 9
+#endif
+  case SEGV_MTESERR:
+return CrashReason::eSyncTagCheckFault;
+#endif // __linux__
   }
 
   return CrashReason::eInvalidCrashReason;
@@ -166,6 +178,13 @@
   case CrashReason::eBoundViolation:
 str = "signal SIGSEGV: bound violation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "signal SIGSEGV: async tag check fault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "signal SIGSEGV: sync tag check fault";
+AppendFaultAddr(str, fault_addr);
+break;
   case CrashReason::eIllegalOpcode:
 str = "signal SIGILL: illegal instruction";
 break;
@@ -246,6 +265,12 @@
   case CrashReason::eBoundViolation:
 str = "eBoundViolation";
 break;
+  case CrashReason::eAsyncTagCheckFault:
+str = "eAsyncTagCheckFault";
+break;
+  case CrashReason::eSyncTagCheckFault:
+str = "eSyncTagCheckFault";
+break;
 
   // SIGILL crash reasons.
   case CrashReason::eIllegalOpcode:
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D93495: CrashReason: Add MTE tag check faults to the list of crash reasons.

2020-12-29 Thread Peter Collingbourne via Phabricator via lldb-commits
pcc added inline comments.



Comment at: lldb/source/Plugins/Process/POSIX/CrashReason.cpp:62
+#ifndef SEGV_MTEAERR
+#define SEGV_MTEAERR 8
+#endif

emaste wrote:
> emaste wrote:
> > This should perhaps include an `#ifdef LINUX`(sp?) somehow, since 8 and 9 
> > are not necessarily MTEAERR / MTESERR on all POSIXy systems (although that 
> > said I'm planning to reserve 8 and 9 on FreeBSD to match).
> (https://reviews.freebsd.org/D27785)
Makes sense, done.

For now I left SEGV_BNDERR as is, although it doesn't appear that any of 
FreeBSD, OpenBSD, NetBSD, illumos or XNU have defined anything besides 
SEGV_MAPERR and SEGV_ACCERR so it might be good to put SEGV_BNDERR under the 
#ifdef as well.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93495/new/

https://reviews.llvm.org/D93495

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits