[Lldb-commits] [lldb] [lldb] Improve identification of Dlang mangled names (PR #93881)
labath wrote: > Fix is #94196. > > There isn't anything to log really, the function just didn't have a symbol on > Windows. AIUI, symtabs just aren't a thing on windows. You either have debug info, or you have the exported symbols (aka .dynsym). There's no inbetween state. https://github.com/llvm/llvm-project/pull/93881 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Reapply [lldb][DWARF] Delay struct/class/union definition DIE searching when parsing declaration DIEs. (PR #92328)
ZequanWu wrote: > You can repro this by running ./bin/lldb-dotest -p > TestConstStaticIntegralMember.py --dwarf-version 5 > > Could you take a look @ZequanWu ? It should be fixed by the following. We just need to skip the declaration DIEs that are struct/class/union. This failure you see is caused by skipping a declaration `DW_TAG_variable`. ``` diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp index 56717bab1ecd..6330470b970e 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp @@ -87,7 +87,8 @@ bool DebugNamesDWARFIndex::ProcessEntry( return true; // Clang erroneously emits index entries for declaration DIEs in case when the // definition is in a type unit (llvm.org/pr77696). Weed those out. - if (die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0)) + if (die.IsStructUnionOrClass() && + die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0)) return true; return callback(die); } ``` Can you (or anyone with commit access) commit above fix for me? I somehow cannot pull/push from git. https://github.com/llvm/llvm-project/pull/92328 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/clayborg approved this pull request. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/94026 >From 72844ebd5cf8f74f6db5d1c52d1f557ca942dbee Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 31 May 2024 12:21:28 -0700 Subject: [PATCH 1/5] [lldb] Support reading DW_OP_piece from file address We received a bug report where someone was trying to print a global variable without a process. This would succeed in a debug build but fail in a on optimized build. We traced the issue back to the location being described by a DW_OP_addr + DW_OP_piece. The issue is that the DWARF expression evaluator only support reading pieces from a load address. There's no reason it cannot do the same for a file address, and indeed, that solves the problem. I unsuccessfully tried to craft a test case to illustrate the original example, using a global struct and trying to trick the compiler into breaking it apart with SROA. Instead I wrote a unit test that uses a mock target to read memory from. rdar://127435923 --- lldb/include/lldb/Target/Target.h | 8 +-- lldb/source/Expression/DWARFExpression.cpp| 57 +++--- .../Expression/DWARFExpressionTest.cpp| 60 +++ 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 7ad9f33586054..792a4caa76e2d 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1077,9 +1077,9 @@ class Target : public std::enable_shared_from_this, // section, then read from the file cache // 2 - if there is a process, then read from memory // 3 - if there is no process, then read from the file cache - size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, -Status &error, bool force_live_memory = false, -lldb::addr_t *load_addr_ptr = nullptr); + virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, +Status &error, bool force_live_memory = false, +lldb::addr_t *load_addr_ptr = nullptr); size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory = false); @@ -1615,7 +1615,7 @@ class Target : public std::enable_shared_from_this, TargetStats &GetStatistics() { return m_stats; } -private: +protected: /// Construct with optional file and arch. /// /// This member is private. Clients must use diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index c061fd1140fff..326be0d683804 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -2123,23 +2123,22 @@ bool DWARFExpression::Evaluate( const Value::ValueType curr_piece_source_value_type = curr_piece_source_value.GetValueType(); + Scalar &scalar = curr_piece_source_value.GetScalar(); + const lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); switch (curr_piece_source_value_type) { case Value::ValueType::Invalid: return false; case Value::ValueType::LoadAddress: if (process) { if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { -lldb::addr_t load_addr = -curr_piece_source_value.GetScalar().ULongLong( -LLDB_INVALID_ADDRESS); -if (process->ReadMemory( -load_addr, curr_piece.GetBuffer().GetBytes(), -piece_byte_size, error) != piece_byte_size) { +if (process->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +piece_byte_size, +error) != piece_byte_size) { if (error_ptr) error_ptr->SetErrorStringWithFormat( "failed to read memory DW_OP_piece(%" PRIu64 -") from 0x%" PRIx64, -piece_byte_size, load_addr); +") from load address 0x%" PRIx64, +piece_byte_size, addr); return false; } } else { @@ -2153,26 +2152,42 @@ bool DWARFExpression::Evaluate( } break; - case Value::ValueType::FileAddress: - case Value::ValueType::HostAddress: -if (error_ptr) { - lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong( - LLDB_INVALID_ADDRESS); + case Value::ValueType::FileAddress: { +if (target) { + if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { +if (target->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/clayborg approved this pull request. LGTM, just one optional comment, see inlined comment. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -1077,9 +1077,9 @@ class Target : public std::enable_shared_from_this, // section, then read from the file cache // 2 - if there is a process, then read from memory // 3 - if there is no process, then read from the file cache - size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, -Status &error, bool force_live_memory = false, -lldb::addr_t *load_addr_ptr = nullptr); + virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, clayborg wrote: Might be nice to comment that this is virtual for mock testing only. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/clayborg edited https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/94026 >From 72844ebd5cf8f74f6db5d1c52d1f557ca942dbee Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 31 May 2024 12:21:28 -0700 Subject: [PATCH 1/4] [lldb] Support reading DW_OP_piece from file address We received a bug report where someone was trying to print a global variable without a process. This would succeed in a debug build but fail in a on optimized build. We traced the issue back to the location being described by a DW_OP_addr + DW_OP_piece. The issue is that the DWARF expression evaluator only support reading pieces from a load address. There's no reason it cannot do the same for a file address, and indeed, that solves the problem. I unsuccessfully tried to craft a test case to illustrate the original example, using a global struct and trying to trick the compiler into breaking it apart with SROA. Instead I wrote a unit test that uses a mock target to read memory from. rdar://127435923 --- lldb/include/lldb/Target/Target.h | 8 +-- lldb/source/Expression/DWARFExpression.cpp| 57 +++--- .../Expression/DWARFExpressionTest.cpp| 60 +++ 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 7ad9f33586054..792a4caa76e2d 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1077,9 +1077,9 @@ class Target : public std::enable_shared_from_this, // section, then read from the file cache // 2 - if there is a process, then read from memory // 3 - if there is no process, then read from the file cache - size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, -Status &error, bool force_live_memory = false, -lldb::addr_t *load_addr_ptr = nullptr); + virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, +Status &error, bool force_live_memory = false, +lldb::addr_t *load_addr_ptr = nullptr); size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory = false); @@ -1615,7 +1615,7 @@ class Target : public std::enable_shared_from_this, TargetStats &GetStatistics() { return m_stats; } -private: +protected: /// Construct with optional file and arch. /// /// This member is private. Clients must use diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index c061fd1140fff..326be0d683804 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -2123,23 +2123,22 @@ bool DWARFExpression::Evaluate( const Value::ValueType curr_piece_source_value_type = curr_piece_source_value.GetValueType(); + Scalar &scalar = curr_piece_source_value.GetScalar(); + const lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); switch (curr_piece_source_value_type) { case Value::ValueType::Invalid: return false; case Value::ValueType::LoadAddress: if (process) { if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { -lldb::addr_t load_addr = -curr_piece_source_value.GetScalar().ULongLong( -LLDB_INVALID_ADDRESS); -if (process->ReadMemory( -load_addr, curr_piece.GetBuffer().GetBytes(), -piece_byte_size, error) != piece_byte_size) { +if (process->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +piece_byte_size, +error) != piece_byte_size) { if (error_ptr) error_ptr->SetErrorStringWithFormat( "failed to read memory DW_OP_piece(%" PRIu64 -") from 0x%" PRIx64, -piece_byte_size, load_addr); +") from load address 0x%" PRIx64, +piece_byte_size, addr); return false; } } else { @@ -2153,26 +2152,42 @@ bool DWARFExpression::Evaluate( } break; - case Value::ValueType::FileAddress: - case Value::ValueType::HostAddress: -if (error_ptr) { - lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong( - LLDB_INVALID_ADDRESS); + case Value::ValueType::FileAddress: { +if (target) { + if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { +if (target->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +
[Lldb-commits] [clang] [lldb] [llvm] Remove some `try_compile` CMake checks for compiler flags (PR #92953)
cjappl wrote: Thanks for your help! You were correct that cc was pointing to gcc. This is fixed when I updated my machine to use my known clang as the default compiler. For future archeologists, this meant (from [this answer](https://askubuntu.com/questions/1198087/how-to-set-clang-9-as-the-default-c-compiler-on-ubuntu-19-10)) ``` sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 60 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 60 ``` https://github.com/llvm/llvm-project/pull/92953 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Improve performance of .debug_names lookups when DW_IDX_parent attributes are used (PR #91808)
clayborg wrote: This fix was committed as part of: commit 51dd4eaaa29683c16151f5168e7f8645acbd6e6c Author: Zequan Wu Date: Tue May 28 11:49:07 2024 -0400 Reapply [lldb][DWARF] Delay struct/class/union definition DIE searching when parsing declaration DIEs. (#92328) This reapplies https://github.com/llvm/llvm-project/commit/9a7262c2601874e5aa64c5db19746770212d4b44 (#90663) and added https://github.com/llvm/llvm-project/pull/91808 as a fix. It was causing tests on macos to fail because `SymbolFileDWARF::GetForwardDeclCompilerTypeToDIE` returned the map owned by this symol file. When there were two symbol files, two different maps were created for caching from compiler type to DIE even if they are for the same module. The solution is to do the same as `SymbolFileDWARF::GetUniqueDWARFASTTypeMap`: inquery SymbolFileDWARFDebugMap first to get the shared underlying SymbolFile so the map is shared among multiple SymbolFileDWARF. https://github.com/llvm/llvm-project/pull/91808 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Improve performance of .debug_names lookups when DW_IDX_parent attributes are used (PR #91808)
https://github.com/clayborg closed https://github.com/llvm/llvm-project/pull/91808 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Always load Application Specific Backtrace Thread images (PR #94259)
https://github.com/JDevlieghere approved this pull request. LGTM. Can we test the new behavior? https://github.com/llvm/llvm-project/pull/94259 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [lldb] [llvm] Remove some `try_compile` CMake checks for compiler flags (PR #92953)
Endilll wrote: Yes, some try_compile checks where replaced with a check for `CMAKE_CXX_COMPILER_ID`, so it's crucial for it to reflect the reality. https://github.com/llvm/llvm-project/pull/92953 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Use packaging module instead of pkg_resources (PR #93712)
JDevlieghere wrote: Thanks for checking @mysterymath. Based on your response it sounds like we have a path forward for the Fuchsia. Please let me know when it's safe to land this. I'll add `packaging` to `requirements.txt` that was added in #94220. https://github.com/llvm/llvm-project/pull/93712 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [lldb] [llvm] Remove some `try_compile` CMake checks for compiler flags (PR #92953)
MaskRay wrote: > Hi @Endilll > > I did a git bisect that pointed to this change as the one blocking my > compilation on an Ubuntu docker image with clang 14.0 > > The error I see: > > ``` > CMake Error at > /test_radsan/llvm-project/compiler-rt/cmake/Modules/CheckSectionExists.cmake:72 > (message): > cc: error: unrecognized command-line option > '-Wcovered-switch-default'; did you mean > '-Wno-switch-default'? > > cc: error: unrecognized command-line option > '-Wstring-conversion'; did you mean > '-Wsign-conversion'? > > Call Stack (most recent call first): > /test_radsan/llvm-project/compiler-rt/lib/builtins/CMakeLists.txt:923 > (check_section_exists) > ``` > > My compiler info, printed from CMake: > > ``` > CMAKE_CXX_COMPILER_VERSION: 14.0.0 > CMAKE_CXX_COMPILER_ID: Clang > ``` > > More info from the command line: > > ``` > $ clang --version > Ubuntu clang version 14.0.0-1ubuntu1.1 > Target: aarch64-unknown-linux-gnu > Thread model: posix > InstalledDir: /usr/bin > $ uname -a > Linux 18728bf50582 6.5.11-linuxkit #1 SMP PREEMPT Mon Dec 4 11:30:00 UTC > 2023 aarch64 aarch64 aarch64 GNU/Linux > $ cmake --version > cmake version 3.22.1 > ``` > > Let me know what other information may be helpful, or if this is user error. > It seems from your godbolt links above, clang 5.0 and higher should work, so > I'm surprised that 14.0 is dying in this environment `unrecognized command-line option` is from GCC. Your build environment might conflate GCC with Clang (`CMAKE_CXX_COMPILER_ID: Clang`). ``` % gcc -Wx -c a.c gcc: error: unrecognized command-line option ‘-Wx’ % clang -Wx -c a.c warning: unknown warning option '-Wx' [-Wunknown-warning-option] 1 warning generated. ``` https://github.com/llvm/llvm-project/pull/92953 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to True/False (PR #94039)
@@ -39,7 +39,7 @@ def check_simulator_ostype(self, sdk, platform_name, arch=platform.machine()): for device in devices: if "availability" in device and device["availability"] != "(available)": continue -if "isAvailable" in device and device["isAvailable"] != True: +if "isAvailable" in device and device["isAvailable"] is not True: JDevlieghere wrote: Can this be simplified to `if "isAvailable" in device and not device["isAvailable"]:`? https://github.com/llvm/llvm-project/pull/94039 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Create stackframes for non-crashed threads (PR #94262)
https://github.com/JDevlieghere approved this pull request. LGTM but can we test this? https://github.com/llvm/llvm-project/pull/94262 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [lldb] [llvm] Remove some `try_compile` CMake checks for compiler flags (PR #92953)
cjappl wrote: Hi @Endilll I did a git bisect that pointed to this change as the one blocking my compilation on an Ubuntu docker image with clang 14.0 The error I see: ``` CMake Error at /test_radsan/llvm-project/compiler-rt/cmake/Modules/CheckSectionExists.cmake:72 (message): cc: error: unrecognized command-line option '-Wcovered-switch-default'; did you mean '-Wno-switch-default'? cc: error: unrecognized command-line option '-Wstring-conversion'; did you mean '-Wsign-conversion'? Call Stack (most recent call first): /test_radsan/llvm-project/compiler-rt/lib/builtins/CMakeLists.txt:923 (check_section_exists) ``` My compiler info, printed from CMake: ``` CMAKE_CXX_COMPILER_VERSION: 14.0.0 CMAKE_CXX_COMPILER_ID: Clang ``` More info from the command line: ``` $ clang --version Ubuntu clang version 14.0.0-1ubuntu1.1 Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/bin $ uname -a Linux 18728bf50582 6.5.11-linuxkit #1 SMP PREEMPT Mon Dec 4 11:30:00 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux $ cmake --version cmake version 3.22.1 ``` Let me know what other information may be helpful, or if this is user error. It seems from your godbolt links above, clang 5.0 and higher should work, so I'm surprised that 14.0 is dying in this environment https://github.com/llvm/llvm-project/pull/92953 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Re-merge `A few updates around "transcript"` (#92843) (PR #94067)
https://github.com/clayborg closed https://github.com/llvm/llvm-project/pull/94067 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] c2d061d - Re-merge `A few updates around "transcript"` (#92843) (#94067)
Author: royitaqi Date: 2024-06-03T13:52:03-07:00 New Revision: c2d061da7e17e61d4a0efad261e5280793c1b7ce URL: https://github.com/llvm/llvm-project/commit/c2d061da7e17e61d4a0efad261e5280793c1b7ce DIFF: https://github.com/llvm/llvm-project/commit/c2d061da7e17e61d4a0efad261e5280793c1b7ce.diff LOG: Re-merge `A few updates around "transcript"` (#92843) (#94067) Problematic PR: https://github.com/llvm/llvm-project/pull/92843 Reverted by: https://github.com/llvm/llvm-project/pull/94088 The first PR added a test which fails in Linux builds (see the last few comments there). This PR contains all the changes in the first PR, plus the fix to the said test. - Co-authored-by: Roy Shi Added: Modified: lldb/include/lldb/API/SBCommandInterpreter.h lldb/include/lldb/Interpreter/CommandInterpreter.h lldb/include/lldb/Target/Statistics.h lldb/source/Commands/CommandObjectStats.cpp lldb/source/Commands/Options.td lldb/source/Interpreter/CommandInterpreter.cpp lldb/source/Target/Statistics.cpp lldb/test/API/commands/statistics/basic/TestStats.py lldb/test/API/python_api/interpreter/TestCommandInterpreterAPI.py Removed: diff --git a/lldb/include/lldb/API/SBCommandInterpreter.h b/lldb/include/lldb/API/SBCommandInterpreter.h index 8ac36344b3a79..639309aa32bfc 100644 --- a/lldb/include/lldb/API/SBCommandInterpreter.h +++ b/lldb/include/lldb/API/SBCommandInterpreter.h @@ -320,10 +320,17 @@ class SBCommandInterpreter { /// Returns a list of handled commands, output and error. Each element in /// the list is a dictionary with the following keys/values: - /// - "command" (string): The command that was executed. + /// - "command" (string): The command that was given by the user. + /// - "commandName" (string): The name of the executed command. + /// - "commandArguments" (string): The arguments of the executed command. /// - "output" (string): The output of the command. Empty ("") if no output. /// - "error" (string): The error of the command. Empty ("") if no error. - /// - "seconds" (float): The time it took to execute the command. + /// - "durationInSeconds" (float): The time it took to execute the command. + /// - "timestampInEpochSeconds" (int): The timestamp when the command is + /// executed. + /// + /// Turn on settings `interpreter.save-transcript` for LLDB to populate + /// this list. Otherwise this list is empty. SBStructuredData GetTranscript(); protected: diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h index ccc30cf4f1a82..8863523b2e31f 100644 --- a/lldb/include/lldb/Interpreter/CommandInterpreter.h +++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h @@ -776,10 +776,14 @@ class CommandInterpreter : public Broadcaster, /// Contains a list of handled commands and their details. Each element in /// the list is a dictionary with the following keys/values: - /// - "command" (string): The command that was executed. + /// - "command" (string): The command that was given by the user. + /// - "commandName" (string): The name of the executed command. + /// - "commandArguments" (string): The arguments of the executed command. /// - "output" (string): The output of the command. Empty ("") if no output. /// - "error" (string): The error of the command. Empty ("") if no error. - /// - "seconds" (float): The time it took to execute the command. + /// - "durationInSeconds" (float): The time it took to execute the command. + /// - "timestampInEpochSeconds" (int): The timestamp when the command is + /// executed. /// /// Turn on settings `interpreter.save-transcript` for LLDB to populate /// this list. Otherwise this list is empty. diff --git a/lldb/include/lldb/Target/Statistics.h b/lldb/include/lldb/Target/Statistics.h index c4f17b503a1f9..c04d529290fff 100644 --- a/lldb/include/lldb/Target/Statistics.h +++ b/lldb/include/lldb/Target/Statistics.h @@ -133,6 +133,7 @@ struct ConstStringStats { struct StatisticsOptions { bool summary_only = false; bool load_all_debug_info = false; + bool include_transcript = false; }; /// A class that represents statistics for a since lldb_private::Target. diff --git a/lldb/source/Commands/CommandObjectStats.cpp b/lldb/source/Commands/CommandObjectStats.cpp index a92bb5d1165ee..1935b0fdfadfb 100644 --- a/lldb/source/Commands/CommandObjectStats.cpp +++ b/lldb/source/Commands/CommandObjectStats.cpp @@ -81,6 +81,9 @@ class CommandObjectStatsDump : public CommandObjectParsed { case 'f': m_stats_options.load_all_debug_info = true; break; + case 't': +m_stats_options.include_transcript = true; +break; default: llvm_unreachable("Unimplemented option"); } diff --git a/lldb/source/Commands/Options.td b/lldb/source/Commands/Options.td index
[Lldb-commits] [lldb] Re-merge `A few updates around "transcript"` (#92843) (PR #94067)
https://github.com/clayborg approved this pull request. https://github.com/llvm/llvm-project/pull/94067 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/94026 >From 72844ebd5cf8f74f6db5d1c52d1f557ca942dbee Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 31 May 2024 12:21:28 -0700 Subject: [PATCH 1/3] [lldb] Support reading DW_OP_piece from file address We received a bug report where someone was trying to print a global variable without a process. This would succeed in a debug build but fail in a on optimized build. We traced the issue back to the location being described by a DW_OP_addr + DW_OP_piece. The issue is that the DWARF expression evaluator only support reading pieces from a load address. There's no reason it cannot do the same for a file address, and indeed, that solves the problem. I unsuccessfully tried to craft a test case to illustrate the original example, using a global struct and trying to trick the compiler into breaking it apart with SROA. Instead I wrote a unit test that uses a mock target to read memory from. rdar://127435923 --- lldb/include/lldb/Target/Target.h | 8 +-- lldb/source/Expression/DWARFExpression.cpp| 57 +++--- .../Expression/DWARFExpressionTest.cpp| 60 +++ 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 7ad9f33586054..792a4caa76e2d 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1077,9 +1077,9 @@ class Target : public std::enable_shared_from_this, // section, then read from the file cache // 2 - if there is a process, then read from memory // 3 - if there is no process, then read from the file cache - size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, -Status &error, bool force_live_memory = false, -lldb::addr_t *load_addr_ptr = nullptr); + virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, +Status &error, bool force_live_memory = false, +lldb::addr_t *load_addr_ptr = nullptr); size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory = false); @@ -1615,7 +1615,7 @@ class Target : public std::enable_shared_from_this, TargetStats &GetStatistics() { return m_stats; } -private: +protected: /// Construct with optional file and arch. /// /// This member is private. Clients must use diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index c061fd1140fff..326be0d683804 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -2123,23 +2123,22 @@ bool DWARFExpression::Evaluate( const Value::ValueType curr_piece_source_value_type = curr_piece_source_value.GetValueType(); + Scalar &scalar = curr_piece_source_value.GetScalar(); + const lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); switch (curr_piece_source_value_type) { case Value::ValueType::Invalid: return false; case Value::ValueType::LoadAddress: if (process) { if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { -lldb::addr_t load_addr = -curr_piece_source_value.GetScalar().ULongLong( -LLDB_INVALID_ADDRESS); -if (process->ReadMemory( -load_addr, curr_piece.GetBuffer().GetBytes(), -piece_byte_size, error) != piece_byte_size) { +if (process->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +piece_byte_size, +error) != piece_byte_size) { if (error_ptr) error_ptr->SetErrorStringWithFormat( "failed to read memory DW_OP_piece(%" PRIu64 -") from 0x%" PRIx64, -piece_byte_size, load_addr); +") from load address 0x%" PRIx64, +piece_byte_size, addr); return false; } } else { @@ -2153,26 +2152,42 @@ bool DWARFExpression::Evaluate( } break; - case Value::ValueType::FileAddress: - case Value::ValueType::HostAddress: -if (error_ptr) { - lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong( - LLDB_INVALID_ADDRESS); + case Value::ValueType::FileAddress: { +if (target) { + if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { +if (target->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +
[Lldb-commits] [lldb] [lldb] Adds additional fields to ProcessInfo (PR #91544)
feg208 wrote: @clayborg This pr is ready for re-review https://github.com/llvm/llvm-project/pull/91544 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -768,3 +768,63 @@ TEST(DWARFExpression, ExtensionsDWO) { testExpressionVendorExtensions(dwo_module_sp, *dwo_dwarf_unit); } + +TEST_F(DWARFExpressionMockProcessTest, DW_OP_piece_file_addr) { + struct MockTarget : Target { labath wrote: The code I linked to ([this one](https://github.com/llvm/llvm-project/blob/main/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h#L73)) shows one way to do it. Basically, you implement the real function in terms on some other interface -- one which is easier to mock -- and then you mock *that*. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix formatter tests for clang version 15 (PR #93710)
Michael137 wrote: What platform was this failing on for you? We have a matrix bot for macOS that runs these tests on older Clang versions. https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-matrix/ I probably wrote these checks when clang was on 16.0 to fix the matrix bot (which only had 15.0 back then) https://github.com/llvm/llvm-project/pull/93710 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Reapply [lldb][DWARF] Delay struct/class/union definition DIE searching when parsing declaration DIEs. (PR #92328)
Michael137 wrote: Sorry for the late ping, but the LLDB matrix bot failure has gone unnoticed for a bit. This patch caused following test to fail for DWARFv5: ``` FAIL: test_inline_static_members_dsym (TestConstStaticIntegralMember.TestCase) -- Traceback (most recent call last): File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/packages/Python/lldbsuite/test/lldbtest.py", line 1756, in test_method return attrvalue(self) File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py", line 132, in test_inline_static_members self.check_global_var("A::int_val", "const int", "1") File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py", line 118, in check_global_var self.assertGreaterEqual(len(var_list), 1) AssertionError: 0 not greater than or equal to 1 Config=x86_64-/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/lldb-build/bin/clang == FAIL: test_shadowed_static_inline_members_dsym (TestConstStaticIntegralMember.TestCase) Tests that the expression evaluator and SBAPI can both -- Traceback (most recent call last): File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/packages/Python/lldbsuite/test/lldbtest.py", line 1756, in test_method return attrvalue(self) File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py", line 184, in test_shadowed_static_inline_members self.check_global_var("ns::Foo::mem", "const int", "10") File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/llvm-project/lldb/test/API/lang/cpp/const_static_integral_member/TestConstStaticIntegralMember.py", line 118, in check_global_var self.assertGreaterEqual(len(var_list), 1) AssertionError: 0 not greater than or equal to 1 Config=x86_64-/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-matrix/lldb-build/bin/clang -- Ran 18 tests in 13.171s FAILED (failures=2, skipped=6, expected failures=4) ``` https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-matrix/321/execution/node/79/log/ You can repro this by running `./bin/lldb-dotest -p TestConstStaticIntegralMember.py --dwarf-version 5` https://github.com/llvm/llvm-project/pull/92328 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -768,3 +768,63 @@ TEST(DWARFExpression, ExtensionsDWO) { testExpressionVendorExtensions(dwo_module_sp, *dwo_dwarf_unit); } + +TEST_F(DWARFExpressionMockProcessTest, DW_OP_piece_file_addr) { + struct MockTarget : Target { JDevlieghere wrote: Very cool, thanks for the suggestion. I had to tweak it a little bit since this is using an out parameter for the bugger. I couldn't find a declarative way to do that, but if you know of one I'd love to learn more about it. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/94026 >From 72844ebd5cf8f74f6db5d1c52d1f557ca942dbee Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 31 May 2024 12:21:28 -0700 Subject: [PATCH 1/2] [lldb] Support reading DW_OP_piece from file address We received a bug report where someone was trying to print a global variable without a process. This would succeed in a debug build but fail in a on optimized build. We traced the issue back to the location being described by a DW_OP_addr + DW_OP_piece. The issue is that the DWARF expression evaluator only support reading pieces from a load address. There's no reason it cannot do the same for a file address, and indeed, that solves the problem. I unsuccessfully tried to craft a test case to illustrate the original example, using a global struct and trying to trick the compiler into breaking it apart with SROA. Instead I wrote a unit test that uses a mock target to read memory from. rdar://127435923 --- lldb/include/lldb/Target/Target.h | 8 +-- lldb/source/Expression/DWARFExpression.cpp| 57 +++--- .../Expression/DWARFExpressionTest.cpp| 60 +++ 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 7ad9f33586054..792a4caa76e2d 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1077,9 +1077,9 @@ class Target : public std::enable_shared_from_this, // section, then read from the file cache // 2 - if there is a process, then read from memory // 3 - if there is no process, then read from the file cache - size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, -Status &error, bool force_live_memory = false, -lldb::addr_t *load_addr_ptr = nullptr); + virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, +Status &error, bool force_live_memory = false, +lldb::addr_t *load_addr_ptr = nullptr); size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory = false); @@ -1615,7 +1615,7 @@ class Target : public std::enable_shared_from_this, TargetStats &GetStatistics() { return m_stats; } -private: +protected: /// Construct with optional file and arch. /// /// This member is private. Clients must use diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index c061fd1140fff..326be0d683804 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -2123,23 +2123,22 @@ bool DWARFExpression::Evaluate( const Value::ValueType curr_piece_source_value_type = curr_piece_source_value.GetValueType(); + Scalar &scalar = curr_piece_source_value.GetScalar(); + const lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); switch (curr_piece_source_value_type) { case Value::ValueType::Invalid: return false; case Value::ValueType::LoadAddress: if (process) { if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { -lldb::addr_t load_addr = -curr_piece_source_value.GetScalar().ULongLong( -LLDB_INVALID_ADDRESS); -if (process->ReadMemory( -load_addr, curr_piece.GetBuffer().GetBytes(), -piece_byte_size, error) != piece_byte_size) { +if (process->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +piece_byte_size, +error) != piece_byte_size) { if (error_ptr) error_ptr->SetErrorStringWithFormat( "failed to read memory DW_OP_piece(%" PRIu64 -") from 0x%" PRIx64, -piece_byte_size, load_addr); +") from load address 0x%" PRIx64, +piece_byte_size, addr); return false; } } else { @@ -2153,26 +2152,42 @@ bool DWARFExpression::Evaluate( } break; - case Value::ValueType::FileAddress: - case Value::ValueType::HostAddress: -if (error_ptr) { - lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong( - LLDB_INVALID_ADDRESS); + case Value::ValueType::FileAddress: { +if (target) { + if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { +if (target->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), +
[Lldb-commits] [lldb] Re-merge `A few updates around "transcript"` (#92843) (PR #94067)
https://github.com/royitaqi edited https://github.com/llvm/llvm-project/pull/94067 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Re-merge `A few updates around "transcript"` (#92843) (PR #94067)
https://github.com/royitaqi edited https://github.com/llvm/llvm-project/pull/94067 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Re-merge `A few updates around "transcript"` #92843 (PR #94067)
https://github.com/royitaqi edited https://github.com/llvm/llvm-project/pull/94067 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Create stackframes for non-crashed threads (PR #94262)
https://github.com/medismailben edited https://github.com/llvm/llvm-project/pull/94262 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Create stackframes for non-crashed threads (PR #94262)
https://github.com/medismailben updated https://github.com/llvm/llvm-project/pull/94262 >From ec250e197e73b5743566db884152bea9c17dd4b9 Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani Date: Mon, 3 Jun 2024 10:28:43 -0700 Subject: [PATCH] [lldb/crashlog] Create stackframes for non-crashed threads By default, the crashlog script only loads images for the crashed thread as well as the application specific thread. Prior to using SymbolFileJSON and ObjectFileJSON, it didn't make sense to create stackframes for the non-crashed threads however now, we should still create stackframes for non-crashed threads. This should also let the user pull the images after the process is launched, using `add-dsym`. rdar://129171513 Signed-off-by: Med Ismail Bennani --- lldb/examples/python/crashlog_scripted_process.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index 26c5c37b7371d..9fc4b09efbd4e 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -147,9 +147,6 @@ def resolve_stackframes(thread, addr_mask, target): return frames def create_stackframes(self): -if not (self.originating_process.options.load_all_images or self.has_crashed): -return None - if not self.backing_thread or not len(self.backing_thread.frames): return None ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix formatter tests for clang version 15 (PR #93710)
https://github.com/clayborg commented: My main question is how did you determine the clang-14 being the right version to check against here? Which clang-14 or clang-15 did you use? The public release branches from upstream? https://github.com/llvm/llvm-project/pull/93710 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett closed https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 0232e2b - [lldb] Add Python requirements.txt for test suite (#94220)
Author: David Spickett Date: 2024-06-03T18:25:05+01:00 New Revision: 0232e2b15b8d3b2653f069a5683ccd29a5d29caf URL: https://github.com/llvm/llvm-project/commit/0232e2b15b8d3b2653f069a5683ccd29a5d29caf DIFF: https://github.com/llvm/llvm-project/commit/0232e2b15b8d3b2653f069a5683ccd29a5d29caf.diff LOG: [lldb] Add Python requirements.txt for test suite (#94220) This means that CI won't have to hardcode these. Added: lldb/test/requirements.txt Modified: Removed: diff --git a/lldb/test/requirements.txt b/lldb/test/requirements.txt new file mode 100644 index 0..83fbe6a5e1b97 --- /dev/null +++ b/lldb/test/requirements.txt @@ -0,0 +1,6 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil>=5.9.4 +# Pexpect tests are known not to work on Windows, so are disabled. +# See llvm.org/pr22274. +pexpect>=4.9.0; sys_platform != 'win32' ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Create stackframes for non-crashed threads (PR #94262)
llvmbot wrote: @llvm/pr-subscribers-lldb Author: Med Ismail Bennani (medismailben) Changes By default, the crashlog script only loads images for the crashed thread as well as the application specific thread. Prior to using SymbolFileJSON and ObjectFileJSON, it didn't make sense to create stackframes for the non-crashed threads however now, we should still create stackframes for non-crashed threads. This should also let the user pull the images after the process is launched, using `add-dsym`. --- Full diff: https://github.com/llvm/llvm-project/pull/94262.diff 1 Files Affected: - (modified) lldb/examples/python/crashlog_scripted_process.py (-3) ``diff diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index 26c5c37b7371d..9fc4b09efbd4e 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -147,9 +147,6 @@ def resolve_stackframes(thread, addr_mask, target): return frames def create_stackframes(self): -if not (self.originating_process.options.load_all_images or self.has_crashed): -return None - if not self.backing_thread or not len(self.backing_thread.frames): return None `` https://github.com/llvm/llvm-project/pull/94262 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Create stackframes for non-crashed threads (PR #94262)
https://github.com/medismailben created https://github.com/llvm/llvm-project/pull/94262 By default, the crashlog script only loads images for the crashed thread as well as the application specific thread. Prior to using SymbolFileJSON and ObjectFileJSON, it didn't make sense to create stackframes for the non-crashed threads however now, we should still create stackframes for non-crashed threads. This should also let the user pull the images after the process is launched, using `add-dsym`. >From 8a60c6526184511ce347e9975bcb4c10b04ba40f Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani Date: Sat, 25 May 2024 13:28:46 -0700 Subject: [PATCH] [lldb/crashlog] Create stackframes for non-crashed threads By default, the crashlog script only loads images for the crashed thread as well as the application specific thread. Prior to using SymbolFileJSON and ObjectFileJSON, it didn't make sense to create stackframes for the non-crashed threads however now, we should still create stackframes for non-crashed threads. This should also let the user pull the images after the process is launched, using `add-dsym`. Signed-off-by: Med Ismail Bennani --- lldb/examples/python/crashlog_scripted_process.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index 26c5c37b7371d..9fc4b09efbd4e 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -147,9 +147,6 @@ def resolve_stackframes(thread, addr_mask, target): return frames def create_stackframes(self): -if not (self.originating_process.options.load_all_images or self.has_crashed): -return None - if not self.backing_thread or not len(self.backing_thread.frames): return None ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Always load Application Specific Backtrace Thread images (PR #94259)
llvmbot wrote: @llvm/pr-subscribers-lldb Author: Med Ismail Bennani (medismailben) Changes This patch changes the crashlog image loading default behaviour to not only load images from the crashed thread but also for the application specific backtrace thread. This patch also move the Application Specific Backtrace / Last Exception Backtrace tag from the thread queue field to the thread name. rdar://128276576 --- Full diff: https://github.com/llvm/llvm-project/pull/94259.diff 2 Files Affected: - (modified) lldb/examples/python/crashlog.py (+6-4) - (modified) lldb/examples/python/crashlog_scripted_process.py (+1-4) ``diff diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index 641b2e64d53b1..6d5a1a74818de 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -545,9 +545,9 @@ def load_images(self, options, loaded_images=None): for image in self.images: image.resolve = True elif options.crashed_only: +images_to_load = [] for thread in self.threads: -if thread.did_crash(): -images_to_load = [] +if thread.did_crash() or thread.app_specific_backtrace: for ident in thread.idents: for image in self.find_images_with_identifier(ident): image.resolve = True @@ -858,7 +858,7 @@ def parse_app_specific_backtraces(self, json_app_specific_bts): thread = self.crashlog.Thread( len(self.crashlog.threads), True, self.crashlog.process_arch ) -thread.queue = "Application Specific Backtrace" +thread.name = "Application Specific Backtrace" if self.parse_asi_backtrace(thread, json_app_specific_bts[0]): self.crashlog.threads.append(thread) else: @@ -868,7 +868,7 @@ def parse_last_exception_backtraces(self, json_last_exc_bts): thread = self.crashlog.Thread( len(self.crashlog.threads), True, self.crashlog.process_arch ) -thread.queue = "Last Exception Backtrace" +thread.name = "Last Exception Backtrace" self.parse_frames(thread, json_last_exc_bts) self.crashlog.threads.append(thread) @@ -1168,11 +1168,13 @@ def parse_normal(self, line): self.thread = self.crashlog.Thread( idx, True, self.crashlog.process_arch ) +self.thread.name = "Application Specific Backtrace" elif line.startswith("Last Exception Backtrace:"): # iOS self.parse_mode = self.CrashLogParseMode.THREAD self.app_specific_backtrace = True idx = 1 self.thread = self.crashlog.Thread(idx, True, self.crashlog.process_arch) +self.thread.name = "Last Exception Backtrace" self.crashlog.info_lines.append(line.strip()) def parse_thread(self, line): diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index 26c5c37b7371d..4bc816e333a69 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -165,10 +165,7 @@ def __init__(self, process, args, crashlog_thread): self.backing_thread = crashlog_thread self.idx = self.backing_thread.index self.tid = self.backing_thread.id -if self.backing_thread.app_specific_backtrace: -self.name = "Application Specific Backtrace" -else: -self.name = self.backing_thread.name +self.name = self.backing_thread.name self.queue = self.backing_thread.queue self.has_crashed = self.originating_process.crashed_thread_idx == self.idx self.create_stackframes() `` https://github.com/llvm/llvm-project/pull/94259 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb/crashlog] Always load Application Specific Backtrace Thread images (PR #94259)
https://github.com/medismailben created https://github.com/llvm/llvm-project/pull/94259 This patch changes the crashlog image loading default behaviour to not only load images from the crashed thread but also for the application specific backtrace thread. This patch also move the Application Specific Backtrace / Last Exception Backtrace tag from the thread queue field to the thread name. rdar://128276576 >From f5e231b2fa730cb0b673a0915ae418b302038184 Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani Date: Sat, 25 May 2024 13:19:03 -0700 Subject: [PATCH] [lldb/crashlog] Always load Application Specific Backtrace Thread images This patch changes the crashlog image loading default behaviour to not only load images from the crashed thread but also for the application specific backtrace thread. This patch also move the Application Specific Backtrace / Last Exception Backtrace tag from the thread queue field to the thread name. rdar://128276576 Signed-off-by: Med Ismail Bennani --- lldb/examples/python/crashlog.py | 10 ++ lldb/examples/python/crashlog_scripted_process.py | 5 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index 641b2e64d53b1..6d5a1a74818de 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -545,9 +545,9 @@ def load_images(self, options, loaded_images=None): for image in self.images: image.resolve = True elif options.crashed_only: +images_to_load = [] for thread in self.threads: -if thread.did_crash(): -images_to_load = [] +if thread.did_crash() or thread.app_specific_backtrace: for ident in thread.idents: for image in self.find_images_with_identifier(ident): image.resolve = True @@ -858,7 +858,7 @@ def parse_app_specific_backtraces(self, json_app_specific_bts): thread = self.crashlog.Thread( len(self.crashlog.threads), True, self.crashlog.process_arch ) -thread.queue = "Application Specific Backtrace" +thread.name = "Application Specific Backtrace" if self.parse_asi_backtrace(thread, json_app_specific_bts[0]): self.crashlog.threads.append(thread) else: @@ -868,7 +868,7 @@ def parse_last_exception_backtraces(self, json_last_exc_bts): thread = self.crashlog.Thread( len(self.crashlog.threads), True, self.crashlog.process_arch ) -thread.queue = "Last Exception Backtrace" +thread.name = "Last Exception Backtrace" self.parse_frames(thread, json_last_exc_bts) self.crashlog.threads.append(thread) @@ -1168,11 +1168,13 @@ def parse_normal(self, line): self.thread = self.crashlog.Thread( idx, True, self.crashlog.process_arch ) +self.thread.name = "Application Specific Backtrace" elif line.startswith("Last Exception Backtrace:"): # iOS self.parse_mode = self.CrashLogParseMode.THREAD self.app_specific_backtrace = True idx = 1 self.thread = self.crashlog.Thread(idx, True, self.crashlog.process_arch) +self.thread.name = "Last Exception Backtrace" self.crashlog.info_lines.append(line.strip()) def parse_thread(self, line): diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index 26c5c37b7371d..4bc816e333a69 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -165,10 +165,7 @@ def __init__(self, process, args, crashlog_thread): self.backing_thread = crashlog_thread self.idx = self.backing_thread.index self.tid = self.backing_thread.id -if self.backing_thread.app_specific_backtrace: -self.name = "Application Specific Backtrace" -else: -self.name = self.backing_thread.name +self.name = self.backing_thread.name self.queue = self.backing_thread.queue self.has_crashed = self.originating_process.crashed_thread_idx == self.idx self.create_stackframes() ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/medismailben approved this pull request. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/JDevlieghere approved this pull request. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add documentation for the max_children argument (PR #94192)
https://github.com/jimingham approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/94192 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] aad7874 - [lldb][test][NFC] TestBreakpointSetRestart.py: split up assertion to determine which check specifically fails in CI
Author: Michael Buch Date: 2024-06-03T17:04:16+01:00 New Revision: aad7874000faed77836e2bbd5c72af8776636f89 URL: https://github.com/llvm/llvm-project/commit/aad7874000faed77836e2bbd5c72af8776636f89 DIFF: https://github.com/llvm/llvm-project/commit/aad7874000faed77836e2bbd5c72af8776636f89.diff LOG: [lldb][test][NFC] TestBreakpointSetRestart.py: split up assertion to determine which check specifically fails in CI This test consistently fails on the public macOS ASAN CI (and isn't reproducible locally): ``` FAIL: test_breakpoint_set_restart_dwarf (TestBreakpointSetRestart.BreakpointSetRestart) -- Traceback (most recent call last): File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/packages/Python/lldbsuite/test/lldbtest.py", line 1756, in test_method return attrvalue(self) File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/packages/Python/lldbsuite/test/decorators.py", line 150, in wrapper return func(*args, **kwargs) File "/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py", line 36, in test_breakpoint_set_restart self.assertTrue(bp.IsValid() and bp.GetNumLocations() == 1, VALID_BREAKPOINT) AssertionError: False is not true : Got a valid breakpoint ``` >From this error we're not quite sure what about the breakpoint here is the problem. This patch splits up the assertion to narrow down the issue. Added: Modified: lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py Removed: diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py b/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py index 3347f57f32869..dac6a8f06c221 100644 --- a/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py +++ b/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py @@ -33,7 +33,8 @@ def test_breakpoint_set_restart(self): bp = target.BreakpointCreateBySourceRegex( self.BREAKPOINT_TEXT, lldb.SBFileSpec("main.cpp") ) -self.assertTrue(bp.IsValid() and bp.GetNumLocations() == 1, VALID_BREAKPOINT) +self.assertTrue(bp.IsValid(), VALID_BREAKPOINT) +self.assertEqual(bp.GetNumLocations(), 1, VALID_BREAKPOINT) while self.dbg.GetListener().WaitForEvent(2, event): if lldb.SBProcess.GetStateFromEvent( ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
https://github.com/slydiman converted_to_draft https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
dzhidzhoev wrote: > > * LLDB_PLATFORM_URL > > Is that an environment variable or a cmake variable? I don't see a single > instance of that string in the entire lldb source tree. Are you sure that's > not some downstream feature? > > * LLDB_PLATFORM_URL > > Is that an environment variable or a cmake variable? I don't see a single > instance of that string in the entire lldb source tree. Are you sure that's > not some downstream feature? Sorry for the confusion, the PR for the remote run of Shell tests is coming soon. This PR will be relevant after that. https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Disable find-module.test in case of a remote target (PR #94165)
https://github.com/slydiman converted_to_draft https://github.com/llvm/llvm-project/pull/94165 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Add --make argument to dotest.py (PR #93883)
https://github.com/dzhidzhoev closed https://github.com/llvm/llvm-project/pull/93883 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 6b7b05b - [lldb][test] Add --make argument to dotest.py (#93883)
Author: Vladislav Dzhidzhoev Date: 2024-06-03T17:30:10+02:00 New Revision: 6b7b05b55926f1fecae34312a89c4271def7aa3a URL: https://github.com/llvm/llvm-project/commit/6b7b05b55926f1fecae34312a89c4271def7aa3a DIFF: https://github.com/llvm/llvm-project/commit/6b7b05b55926f1fecae34312a89c4271def7aa3a.diff LOG: [lldb][test] Add --make argument to dotest.py (#93883) This argument allows to specify the path to make which is used by LLDB API tests to compile test programs. It might come in handy for setting up cross-platform remote runs of API tests on Windows host. It can be used to override the make path of LLDB API tests using `LLDB_TEST_USER_ARGS` argument: ``` cmake ... -DLLDB_TEST_USER_ARGS="...;--make;C:\\Path\\to\\make.exe;..." ... ``` Added: Modified: lldb/packages/Python/lldbsuite/test/builders/builder.py lldb/packages/Python/lldbsuite/test/configuration.py lldb/packages/Python/lldbsuite/test/dotest.py lldb/packages/Python/lldbsuite/test/dotest_args.py Removed: diff --git a/lldb/packages/Python/lldbsuite/test/builders/builder.py b/lldb/packages/Python/lldbsuite/test/builders/builder.py index 21ea3530e24fc..4ea9a86c1d5fc 100644 --- a/lldb/packages/Python/lldbsuite/test/builders/builder.py +++ b/lldb/packages/Python/lldbsuite/test/builders/builder.py @@ -40,11 +40,6 @@ def getMake(self, test_subdir, test_name): """Returns the invocation for GNU make. The first argument is a tuple of the relative path to the testcase and its filename stem.""" -if platform.system() == "FreeBSD" or platform.system() == "NetBSD": -make = "gmake" -else: -make = "make" - # Construct the base make invocation. lldb_test = os.environ["LLDB_TEST"] if not ( @@ -62,7 +57,7 @@ def getMake(self, test_subdir, test_name): if not os.path.isfile(makefile): makefile = os.path.join(build_dir, "Makefile") return [ -make, +configuration.make_path, "VPATH=" + src_dir, "-C", build_dir, diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py index dbd4a2d72a15d..27eef040497d1 100644 --- a/lldb/packages/Python/lldbsuite/test/configuration.py +++ b/lldb/packages/Python/lldbsuite/test/configuration.py @@ -43,6 +43,7 @@ compiler = None dsymutil = None sdkroot = None +make_path = None # The overriden dwarf verison. dwarf_version = 0 diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py index 70bc1d85091bc..06acfb2f0756c 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -266,6 +266,13 @@ def parseOptionsAndInitTestdirs(): configuration.compiler = candidate break +if args.make: +configuration.make_path = args.make +elif platform_system == "FreeBSD" or platform_system == "NetBSD": +configuration.make_path = "gmake" +else: +configuration.make_path = "make" + if args.dsymutil: configuration.dsymutil = args.dsymutil elif platform_system == "Darwin": diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py index e385954f8cc03..a80428ebec589 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest_args.py +++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py @@ -96,6 +96,12 @@ def create_parser(): ), ) +group.add_argument( +"--make", +metavar="make", +dest="make", +help=textwrap.dedent("Specify which make to use."), +) group.add_argument( "--dsymutil", metavar="dsymutil", ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Add --make argument to dotest.py (PR #93883)
https://github.com/dzhidzhoev updated https://github.com/llvm/llvm-project/pull/93883 >From 6b7b05b55926f1fecae34312a89c4271def7aa3a Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev Date: Sat, 13 Apr 2024 23:55:25 + Subject: [PATCH] [lldb][test] Add --make argument to dotest.py (#93883) This argument allows to specify the path to make which is used by LLDB API tests to compile test programs. It might come in handy for setting up cross-platform remote runs of API tests on Windows host. It can be used to override the make path of LLDB API tests using `LLDB_TEST_USER_ARGS` argument: ``` cmake ... -DLLDB_TEST_USER_ARGS="...;--make;C:\\Path\\to\\make.exe;..." ... ``` --- lldb/packages/Python/lldbsuite/test/builders/builder.py | 7 +-- lldb/packages/Python/lldbsuite/test/configuration.py| 1 + lldb/packages/Python/lldbsuite/test/dotest.py | 7 +++ lldb/packages/Python/lldbsuite/test/dotest_args.py | 6 ++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/builders/builder.py b/lldb/packages/Python/lldbsuite/test/builders/builder.py index 21ea3530e24fc..4ea9a86c1d5fc 100644 --- a/lldb/packages/Python/lldbsuite/test/builders/builder.py +++ b/lldb/packages/Python/lldbsuite/test/builders/builder.py @@ -40,11 +40,6 @@ def getMake(self, test_subdir, test_name): """Returns the invocation for GNU make. The first argument is a tuple of the relative path to the testcase and its filename stem.""" -if platform.system() == "FreeBSD" or platform.system() == "NetBSD": -make = "gmake" -else: -make = "make" - # Construct the base make invocation. lldb_test = os.environ["LLDB_TEST"] if not ( @@ -62,7 +57,7 @@ def getMake(self, test_subdir, test_name): if not os.path.isfile(makefile): makefile = os.path.join(build_dir, "Makefile") return [ -make, +configuration.make_path, "VPATH=" + src_dir, "-C", build_dir, diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py index dbd4a2d72a15d..27eef040497d1 100644 --- a/lldb/packages/Python/lldbsuite/test/configuration.py +++ b/lldb/packages/Python/lldbsuite/test/configuration.py @@ -43,6 +43,7 @@ compiler = None dsymutil = None sdkroot = None +make_path = None # The overriden dwarf verison. dwarf_version = 0 diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py index 70bc1d85091bc..06acfb2f0756c 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -266,6 +266,13 @@ def parseOptionsAndInitTestdirs(): configuration.compiler = candidate break +if args.make: +configuration.make_path = args.make +elif platform_system == "FreeBSD" or platform_system == "NetBSD": +configuration.make_path = "gmake" +else: +configuration.make_path = "make" + if args.dsymutil: configuration.dsymutil = args.dsymutil elif platform_system == "Darwin": diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py index e385954f8cc03..a80428ebec589 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest_args.py +++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py @@ -96,6 +96,12 @@ def create_parser(): ), ) +group.add_argument( +"--make", +metavar="make", +dest="make", +help=textwrap.dedent("Specify which make to use."), +) group.add_argument( "--dsymutil", metavar="dsymutil", ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Improve identification of Dlang mangled names (PR #93881)
DavidSpickett wrote: Fix is https://github.com/llvm/llvm-project/pull/94196. There isn't anything to log really, the function just didn't have a symbol on Windows. https://github.com/llvm/llvm-project/pull/93881 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Improve identification of Dlang mangled names (PR #93881)
kastiglione wrote: @DavidSpickett thanks, is there a link to a log? I'm curious. https://github.com/llvm/llvm-project/pull/93881 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] Add a test for evicting unreachable modules from the global module cache (PR #74894)
Michael137 wrote: Note I'm also seeing some flakiness on the public macOS buildbots: https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-matrix/322/execution/node/69/log/ https://github.com/llvm/llvm-project/pull/74894 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
DavidSpickett wrote: I was wrong, you can do conditionals - https://peps.python.org/pep-0508/. pexpect now not installed on Windows. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett edited https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett updated https://github.com/llvm/llvm-project/pull/94220 >From e5a6eca78496e6f5ac67613f1f8368cf24ea1521 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:39:16 + Subject: [PATCH 1/4] [lldb] Add Python requirements.txt for test suite This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. --- lldb/requirements.txt | 7 +++ 1 file changed, 7 insertions(+) create mode 100644 lldb/requirements.txt diff --git a/lldb/requirements.txt b/lldb/requirements.txt new file mode 100644 index 0..645004bd3f57c --- /dev/null +++ b/lldb/requirements.txt @@ -0,0 +1,7 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil +# pexpect is only required on Linux, can be installed on Windows but pexpect +# tests are automatically skipped there because they are known not to work +# (llvm.org/pr22274). +pexpect >From c8bf4bf83e263ea48260c2f737868bd304b48e1f Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:51:22 + Subject: [PATCH 2/4] move to test folder --- lldb/{ => test}/requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lldb/{ => test}/requirements.txt (100%) diff --git a/lldb/requirements.txt b/lldb/test/requirements.txt similarity index 100% rename from lldb/requirements.txt rename to lldb/test/requirements.txt >From b4c4f0b948970f14c9615df83bbb56befced1d5b Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 14:02:52 + Subject: [PATCH 3/4] Add minimum versions --- lldb/test/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/test/requirements.txt b/lldb/test/requirements.txt index 645004bd3f57c..677d7cef3d571 100644 --- a/lldb/test/requirements.txt +++ b/lldb/test/requirements.txt @@ -1,7 +1,7 @@ # These Python packages are required to be able to run the LLDB test suite. -psutil +psutil>=5.9.4 # pexpect is only required on Linux, can be installed on Windows but pexpect # tests are automatically skipped there because they are known not to work # (llvm.org/pr22274). -pexpect +pexpect>=4.9.0 >From 3a0970fc822f74352e540efc9ffc0550415f7f66 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 14:17:38 + Subject: [PATCH 4/4] no pexpect on windows --- lldb/test/requirements.txt | 7 +++ 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lldb/test/requirements.txt b/lldb/test/requirements.txt index 677d7cef3d571..83fbe6a5e1b97 100644 --- a/lldb/test/requirements.txt +++ b/lldb/test/requirements.txt @@ -1,7 +1,6 @@ # These Python packages are required to be able to run the LLDB test suite. psutil>=5.9.4 -# pexpect is only required on Linux, can be installed on Windows but pexpect -# tests are automatically skipped there because they are known not to work -# (llvm.org/pr22274). -pexpect>=4.9.0 +# Pexpect tests are known not to work on Windows, so are disabled. +# See llvm.org/pr22274. +pexpect>=4.9.0; sys_platform != 'win32' ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
DavidSpickett wrote: Anecdotal evidence - last time I updated these I just installed the most recent and nothing broke. So we're probably fine with minimums, especially as this will be checked regularly by the CI job. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/Endilll approved this pull request. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
DavidSpickett wrote: Added minimum versions. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett updated https://github.com/llvm/llvm-project/pull/94220 >From e5a6eca78496e6f5ac67613f1f8368cf24ea1521 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:39:16 + Subject: [PATCH 1/3] [lldb] Add Python requirements.txt for test suite This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. --- lldb/requirements.txt | 7 +++ 1 file changed, 7 insertions(+) create mode 100644 lldb/requirements.txt diff --git a/lldb/requirements.txt b/lldb/requirements.txt new file mode 100644 index 0..645004bd3f57c --- /dev/null +++ b/lldb/requirements.txt @@ -0,0 +1,7 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil +# pexpect is only required on Linux, can be installed on Windows but pexpect +# tests are automatically skipped there because they are known not to work +# (llvm.org/pr22274). +pexpect >From c8bf4bf83e263ea48260c2f737868bd304b48e1f Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:51:22 + Subject: [PATCH 2/3] move to test folder --- lldb/{ => test}/requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lldb/{ => test}/requirements.txt (100%) diff --git a/lldb/requirements.txt b/lldb/test/requirements.txt similarity index 100% rename from lldb/requirements.txt rename to lldb/test/requirements.txt >From b4c4f0b948970f14c9615df83bbb56befced1d5b Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 14:02:52 + Subject: [PATCH 3/3] Add minimum versions --- lldb/test/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/test/requirements.txt b/lldb/test/requirements.txt index 645004bd3f57c..677d7cef3d571 100644 --- a/lldb/test/requirements.txt +++ b/lldb/test/requirements.txt @@ -1,7 +1,7 @@ # These Python packages are required to be able to run the LLDB test suite. -psutil +psutil>=5.9.4 # pexpect is only required on Linux, can be installed on Windows but pexpect # tests are automatically skipped there because they are known not to work # (llvm.org/pr22274). -pexpect +pexpect>=4.9.0 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
Endilll wrote: > I've not been able to find what versioning scheme these 2 packages use, so > I'm not sure what versions to put here if any. > > Currently Linaro has: psutil==5.9.4 on Windows psutil == 5.9.8 on Linux > pexpect==4.9.0 on Linux > > I don't think it needs to be `==`, but maybe pinning to a version that won't > break API? If the projects have such a thing of course. > > This is initially for Github CI, so we could just use the Linux versions. I think you can list them as minimal required versions for now. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
DavidSpickett wrote: There is an option `args.lldb_platform_url` for `dotest.py`, maybe it's that? https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett updated https://github.com/llvm/llvm-project/pull/94220 >From e5a6eca78496e6f5ac67613f1f8368cf24ea1521 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:39:16 + Subject: [PATCH 1/2] [lldb] Add Python requirements.txt for test suite This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. --- lldb/requirements.txt | 7 +++ 1 file changed, 7 insertions(+) create mode 100644 lldb/requirements.txt diff --git a/lldb/requirements.txt b/lldb/requirements.txt new file mode 100644 index 0..645004bd3f57c --- /dev/null +++ b/lldb/requirements.txt @@ -0,0 +1,7 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil +# pexpect is only required on Linux, can be installed on Windows but pexpect +# tests are automatically skipped there because they are known not to work +# (llvm.org/pr22274). +pexpect >From c8bf4bf83e263ea48260c2f737868bd304b48e1f Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:51:22 + Subject: [PATCH 2/2] move to test folder --- lldb/{ => test}/requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lldb/{ => test}/requirements.txt (100%) diff --git a/lldb/requirements.txt b/lldb/test/requirements.txt similarity index 100% rename from lldb/requirements.txt rename to lldb/test/requirements.txt ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
DavidSpickett wrote: Example from MLIR: https://github.com/llvm/llvm-project/blob/a58dd0e948040b75266b2ee02292a16ed7b2afd5/mlir/python/requirements.txt#L1-L3 https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
DavidSpickett wrote: I've not been able to find what versioning scheme these 2 packages use, so I'm not sure what versions to put here if any. Currently Linaro has: psutil==5.9.4 on Windows psutil == 5.9.8 on Linux pexpect==4.9.0 on Linux I don't think it needs to be `==`, but maybe pinning to a version that won't break API? If the projects have such a thing of course. This is initially for Github CI, so we could just use the Linux versions. https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
llvmbot wrote: @llvm/pr-subscribers-lldb Author: David Spickett (DavidSpickett) Changes This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. --- Full diff: https://github.com/llvm/llvm-project/pull/94220.diff 1 Files Affected: - (added) lldb/requirements.txt (+7) ``diff diff --git a/lldb/requirements.txt b/lldb/requirements.txt new file mode 100644 index 0..645004bd3f57c --- /dev/null +++ b/lldb/requirements.txt @@ -0,0 +1,7 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil +# pexpect is only required on Linux, can be installed on Windows but pexpect +# tests are automatically skipped there because they are known not to work +# (llvm.org/pr22274). +pexpect `` https://github.com/llvm/llvm-project/pull/94220 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Add Python requirements.txt for test suite (PR #94220)
https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/94220 This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. >From e5a6eca78496e6f5ac67613f1f8368cf24ea1521 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 13:39:16 + Subject: [PATCH] [lldb] Add Python requirements.txt for test suite This means that CI won't have to hardcode these. We can't do conditional installs here by platform so pexpect is listed normally. If it's installed on Windows that's fine, we just won't use it. --- lldb/requirements.txt | 7 +++ 1 file changed, 7 insertions(+) create mode 100644 lldb/requirements.txt diff --git a/lldb/requirements.txt b/lldb/requirements.txt new file mode 100644 index 0..645004bd3f57c --- /dev/null +++ b/lldb/requirements.txt @@ -0,0 +1,7 @@ +# These Python packages are required to be able to run the LLDB test suite. + +psutil +# pexpect is only required on Linux, can be installed on Windows but pexpect +# tests are automatically skipped there because they are known not to work +# (llvm.org/pr22274). +pexpect ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
labath wrote: > * LLDB_PLATFORM_URL Is that an environment variable or a cmake variable? I don't see a single instance of that string in the entire lldb source tree. Are you sure that's not some downstream feature? https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
slydiman wrote: Note `EchoCommandsQuiet.out` expects that `TestEchoCommands.test.tmp.file` will be ``` start done ``` But in case of a remote target it will be something like ``` start Platform: remote-linux Connected: no Platform: remote-linux Triple: aarch64-unknown-linux-gnu OS Version: 5.10.192 (5.10.192-tegra) Hostname: jetson-orin-1795 Connected: yes WorkingDir: /home/ubuntu Kernel: #1 SMP PREEMPT Mon Feb 19 20:19:53 PST 2024 done ``` https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
slydiman wrote: > How can I configure my build to run this sort of thing? The simplest way is to use the same arch target, e. g. x86_64 Linux host and x86_64 Linux target. You do not need a cross compiler in this case. To run Shell tests with a remote target it is necesasry - define LLVM_TARGET_TRIPLE=x86_64-unknown-linux-gnu - define LLDB_PLATFORM_URL=connect://:1234 - run lldv-server on the target `sudo //lldb-server p --listen '*:1234' --server --log-channels 'lldb all' --min-gdbserver-port 1240 --max-gdbserver-port 1250` - run `cmake --build . --target check-lldb-shell` from a build dir https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Add --make argument to dotest.py (PR #93883)
https://github.com/dzhidzhoev updated https://github.com/llvm/llvm-project/pull/93883 >From 610481d82eae3423911f4cd5cac3c45a15904e57 Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev Date: Sat, 13 Apr 2024 23:55:25 + Subject: [PATCH] [lldb][test] Add --make argument to dotest.py (#93883) This argument allows to specify the path to make which is used by LLDB API tests to compile test programs. It might come in handy for setting up cross-platform remote runs of API tests on Windows host. It can be used to override the make path of LLDB API tests using `LLDB_TEST_USER_ARGS` argument: ``` cmake ... -DLLDB_TEST_USER_ARGS="...;--make;C:\\Path\\to\\make.exe;..." ... ``` --- lldb/packages/Python/lldbsuite/test/builders/builder.py | 7 +-- lldb/packages/Python/lldbsuite/test/configuration.py| 1 + lldb/packages/Python/lldbsuite/test/dotest.py | 7 +++ lldb/packages/Python/lldbsuite/test/dotest_args.py | 6 ++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/builders/builder.py b/lldb/packages/Python/lldbsuite/test/builders/builder.py index 21ea3530e24fc..4ea9a86c1d5fc 100644 --- a/lldb/packages/Python/lldbsuite/test/builders/builder.py +++ b/lldb/packages/Python/lldbsuite/test/builders/builder.py @@ -40,11 +40,6 @@ def getMake(self, test_subdir, test_name): """Returns the invocation for GNU make. The first argument is a tuple of the relative path to the testcase and its filename stem.""" -if platform.system() == "FreeBSD" or platform.system() == "NetBSD": -make = "gmake" -else: -make = "make" - # Construct the base make invocation. lldb_test = os.environ["LLDB_TEST"] if not ( @@ -62,7 +57,7 @@ def getMake(self, test_subdir, test_name): if not os.path.isfile(makefile): makefile = os.path.join(build_dir, "Makefile") return [ -make, +configuration.make_path, "VPATH=" + src_dir, "-C", build_dir, diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py index dbd4a2d72a15d..27eef040497d1 100644 --- a/lldb/packages/Python/lldbsuite/test/configuration.py +++ b/lldb/packages/Python/lldbsuite/test/configuration.py @@ -43,6 +43,7 @@ compiler = None dsymutil = None sdkroot = None +make_path = None # The overriden dwarf verison. dwarf_version = 0 diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py index 70bc1d85091bc..06acfb2f0756c 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -266,6 +266,13 @@ def parseOptionsAndInitTestdirs(): configuration.compiler = candidate break +if args.make: +configuration.make_path = args.make +elif platform_system == "FreeBSD" or platform_system == "NetBSD": +configuration.make_path = "gmake" +else: +configuration.make_path = "make" + if args.dsymutil: configuration.dsymutil = args.dsymutil elif platform_system == "Darwin": diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py index e385954f8cc03..a80428ebec589 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest_args.py +++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py @@ -96,6 +96,12 @@ def create_parser(): ), ) +group.add_argument( +"--make", +metavar="make", +dest="make", +help=textwrap.dedent("Specify which make to use."), +) group.add_argument( "--dsymutil", metavar="dsymutil", ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to None (PR #94017)
https://github.com/DavidSpickett approved this pull request. Changes LGTM. https://github.com/llvm/llvm-project/pull/94017 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to True/False (PR #94039)
https://github.com/DavidSpickett approved this pull request. This LGTM, can be merged once the private email is fixed. https://github.com/llvm/llvm-project/pull/94039 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix invalid escape sequences (PR #94034)
DavidSpickett wrote: The formatter is failing, but I would prefer to keep this change purely addressing the lint warning. Certainly you can update this to reorder the "fr"/"rf" but ignore the rest of its complaints. Whoever merges this (probably me) can push a reformatting change directly afterwards. https://github.com/llvm/llvm-project/pull/94034 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to True/False (PR #94039)
github-actions[bot] wrote: ⚠️ We detected that you are using a GitHub private e-mail address to contribute to the repo. Please turn off [Keep my email addresses private](https://github.com/settings/emails) setting in your account. See [LLVM Discourse](https://discourse.llvm.org/t/hidden-emails-on-github-should-we-do-something-about-it) for more information. https://github.com/llvm/llvm-project/pull/94039 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix invalid escape sequences (PR #94034)
github-actions[bot] wrote: :warning: Python code formatter, darker found issues in your code. :warning: You can test this locally with the following command: ``bash darker --check --diff -r fc21387b6510ee44520f2f17fb671f1265a9055f...5c7ba6c7d95cced5d8acc609a40a6b8307bc7fed lldb/examples/python/crashlog.py lldb/examples/python/delta.py lldb/examples/python/gdbremote.py lldb/examples/python/jump.py lldb/examples/python/performance.py lldb/examples/python/symbolication.py lldb/packages/Python/lldbsuite/test/lldbpexpect.py lldb/packages/Python/lldbsuite/test/test_runner/process_control.py lldb/test/API/commands/command/backticks/TestBackticksInAlias.py lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py lldb/test/API/commands/expression/test/TestExprs.py lldb/test/API/commands/gui/expand-threads-tree/TestGuiExpandThreadsTree.py lldb/test/API/commands/help/TestHelp.py lldb/test/API/commands/process/launch-with-shellexpand/TestLaunchWithShellExpand.py lldb/test/API/commands/register/register/TestRegistersUnavailable.py lldb/test/API/commands/settings/TestSettings.py lldb/test/API/commands/target/basic/TestTargetCommand.py lldb/test/API/commands/target/dump-separate-debug-info/dwo/TestDumpDwo.py lldb/test/API/commands/target/dump-separate-debug-info/oso/TestDumpOso.py lldb/test/API/commands/trace/TestTraceDumpInfo.py lldb/test/API/commands/trace/TestTraceEvents.py lldb/test/API/commands/trace/TestTraceStartStop.py lldb/test/API/commands/trace/TestTraceTSC.py lldb/test/API/driver/quit_speed/TestQuitWithProcess.py lldb/test/API/functionalities/breakpoint/breakpoint_by_line_and_column/TestBreakpointByLineAndColumn.py lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py lldb/test/API/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py lldb/test/API/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py lldb/test/API/functionalities/data-formatter/data-formatter-skip-summary/TestDataFormatterSkipSummary.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/unordered/TestDataFormatterGenericUnordered.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/atomic/TestLibCxxAtomic.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py lldb/test/API/functionalities/memory-region/TestMemoryRegion.py lldb/test/API/functionalities/target_var/TestTargetVar.py lldb/test/API/iohandler/completion/TestIOHandlerCompletion.py lldb/test/API/lang/c/function_types/TestFunctionTypes.py lldb/test/API/lang/c/register_variables/TestRegisterVariables.py lldb/test/API/lang/c/set_values/TestSetValues.py lldb/test/API/lang/c/strings/TestCStrings.py lldb/test/API/lang/c/tls_globals/TestTlsGlobals.py lldb/test/API/lang/cpp/char1632_t/TestChar1632T.py lldb/test/API/lang/cpp/class_static/TestStaticVariables.py lldb/test/API/lang/cpp/class_types/TestClassTypes.py lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py lldb/test/API/lang/cpp/namespace/TestNamespace.py lldb/test/API/lang/cpp/signed_types/TestSignedTypes.py lldb/test/API/lang/cpp/unsigned_types/TestUnsignedTypes.py lldb/test/API/lang/mixed/TestMixedLanguages.py lldb/test/API/lang/objc/foundation/TestObjCMethods.py lldb/test/API/lang/objc/foundation/TestObjCMethodsNSArray.py lldb/test/API/lang/objc/foundation/TestObjCMethodsNSError.py lldb/test/API/lang/objc/foundation/TestObjCMethodsString.py lldb/test/API/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py lldb/test/API/lang/objcxx/objc-builtin-types/TestObjCBuiltinTypes.py lldb/test/API/linux/aarch64/mte_core_file/TestAArch64LinuxMTEMemoryTagCoreFile.py lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py lldb/test/API/linux/aarch64/mte_tag_faults/TestAArch64LinuxMTEMemoryTagFaults.py lldb/test/API/linux/aarch64/tagged_memory_region/TestAArch64LinuxTaggedMemoryRegion.py lldb/test/API/macosx/add-dsym/TestAddDsymDownload.py lldb/test/API/macosx/lc-note/firmware-corefile/TestFirmwareCorefiles.py lldb/test/API/macosx/lc-note/kern-ver-str/TestKernVerStrLCNOTE.py lldb/test/API/macosx/lc-note/multiple-binary-corefile/TestMultipleBinaryCorefile.py lldb/test/API/macosx/simulator/TestSimulatorPlatform.py lldb/test/API/macosx/skinny-corefile/TestSkinnyCorefile.py lldb/test/API/python_api/target-arch-from-module/TestTargetArchFromModule.py lldb/test/API/source-manager/TestSourceManager.py lldb/test/API/tools/lldb-server/TestGdbRemoteModuleInfo.py lldb/test/API/tools/lldb-server/TestPtyServer.py lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py lldb/test/API/types/AbstractBase.py ll
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to None (PR #94017)
DavidSpickett wrote: I approved the workflows on this and your other changes. > We detected that you are using a GitHub private e-mail address to contribute > to the repo Please address this and then we can get this merged. https://github.com/llvm/llvm-project/pull/94017 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to None (PR #94017)
https://github.com/DavidSpickett edited https://github.com/llvm/llvm-project/pull/94017 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix invalid escape sequences (PR #94034)
github-actions[bot] wrote: ⚠️ We detected that you are using a GitHub private e-mail address to contribute to the repo. Please turn off [Keep my email addresses private](https://github.com/settings/emails) setting in your account. See [LLVM Discourse](https://discourse.llvm.org/t/hidden-emails-on-github-should-we-do-something-about-it) for more information. https://github.com/llvm/llvm-project/pull/94034 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix comparison to True/False (PR #94039)
https://github.com/DavidSpickett edited https://github.com/llvm/llvm-project/pull/94039 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix(lldb/**.py): fix invalid escape sequences (PR #94034)
https://github.com/DavidSpickett edited https://github.com/llvm/llvm-project/pull/94034 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] fix(lldb/**.py): fix comparison to None (PR #94017)
github-actions[bot] wrote: ⚠️ We detected that you are using a GitHub private e-mail address to contribute to the repo. Please turn off [Keep my email addresses private](https://github.com/settings/emails) setting in your account. See [LLVM Discourse](https://discourse.llvm.org/t/hidden-emails-on-github-should-we-do-something-about-it) for more information. https://github.com/llvm/llvm-project/pull/94017 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] d00731c - [lldb] s/assertEquals/assertEqual in TestDAP_variables_children
Author: Pavel Labath Date: 2024-06-03T11:23:51+02:00 New Revision: d00731cb7fcc91047531069e029964a39935a5bb URL: https://github.com/llvm/llvm-project/commit/d00731cb7fcc91047531069e029964a39935a5bb DIFF: https://github.com/llvm/llvm-project/commit/d00731cb7fcc91047531069e029964a39935a5bb.diff LOG: [lldb] s/assertEquals/assertEqual in TestDAP_variables_children Added: Modified: lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py Removed: diff --git a/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py b/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py index 54fb318289aec..805e88ddf8f70 100644 --- a/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py +++ b/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py @@ -31,7 +31,7 @@ def test_get_num_children(self): indexed = next(filter(lambda x: x["name"] == "indexed", local_vars)) not_indexed = next(filter(lambda x: x["name"] == "not_indexed", local_vars)) self.assertIn("indexedVariables", indexed) -self.assertEquals(indexed["indexedVariables"], 1) +self.assertEqual(indexed["indexedVariables"], 1) self.assertNotIn("indexedVariables", not_indexed) self.assertIn( ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix D lang mangling test on Windows (PR #94196)
https://github.com/DavidSpickett closed https://github.com/llvm/llvm-project/pull/94196 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 6abf361 - [lldb][test] Fix D lang mangling test on Windows (#94196)
Author: David Spickett Date: 2024-06-03T10:18:39+01:00 New Revision: 6abf361953e9c5d019a72fd83765498d269eb080 URL: https://github.com/llvm/llvm-project/commit/6abf361953e9c5d019a72fd83765498d269eb080 DIFF: https://github.com/llvm/llvm-project/commit/6abf361953e9c5d019a72fd83765498d269eb080.diff LOG: [lldb][test] Fix D lang mangling test on Windows (#94196) On Windows the function does not have a symbol associated with it: Function: id = {0x01c9}, name = "_Dfunction", range = [0x000140001000-0x000140001004) LineEntry: <...> Whereas it does on Linux: Function: id = {0x0023}, name = "_Dfunction", range = [0x0734-0x0738) LineEntry: <...> Symbol: id = {0x0058}, range = [0x0734-0x0738), name="_Dfunction" This means that frame.symbol is not valid on Windows. However, frame.function is valid and it also has a "mangled" attribute. So I've updated the test to check the symbol if we've got it, and the function always. In both cases we check that mangled is empty (meaning it has not been treated as mangled) and that the display name matches the original symbol name. Added: Modified: lldb/test/API/lang/c/non-mangled/TestCNonMangled.py Removed: diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index b10a3d6da30a1..6f7ef247b063a 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -1,10 +1,8 @@ import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.lldbtest import * -from lldbsuite.test.decorators import skipIfWindows class TestCase(TestBase): -@skipIfWindows def test_functions_having_dlang_mangling_prefix(self): """ Ensure C functions with a '_D' prefix alone are not mistakenly treated @@ -13,5 +11,14 @@ def test_functions_having_dlang_mangling_prefix(self): """ self.build() _, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "_Dfunction") -symbol = thread.frame[0].symbol -self.assertEqual(symbol.GetDisplayName(), "_Dfunction") +frame = thread.frame[0] + +symbol = frame.symbol +# On Windows the function does not have an associated symbol. +if symbol.IsValid(): +self.assertFalse(symbol.mangled) +self.assertEqual(symbol.GetDisplayName(), "_Dfunction") + +function = frame.function +self.assertFalse(function.mangled) +self.assertEqual(function.GetDisplayName(), "_Dfunction") ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix D lang mangling test on Windows (PR #94196)
https://github.com/DavidSpickett updated https://github.com/llvm/llvm-project/pull/94196 >From f45103937007bbc42fe56dc172fcbee9c37a2f34 Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 09:04:01 + Subject: [PATCH 1/2] [lldb][test] Fix D lang mangling test on Windows On Windows the function does not have a symbol associated with it: Function: id = {0x01c9}, name = "_Dfunction", range = [0x000140001000-0x000140001004) LineEntry: <...> Whereas it does on Linux: Function: id = {0x0023}, name = "_Dfunction", range = [0x0734-0x0738) LineEntry: <...> Symbol: id = {0x0058}, range = [0x0734-0x0738), name="_Dfunction" This means that frame.symbol is not valid on Windows. However, frame.function is valid and it also has a "mangled" attribute. So I've updated the test to check the symbol if we've got it, and the function always. In both cases we check that mangled is empty (meaning it has not been treated as mangled) and that the display name matches the original symbol name. --- lldb/test/API/lang/c/non-mangled/TestCNonMangled.py | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index b10a3d6da30a1..78602d1b2a33c 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -13,5 +13,14 @@ def test_functions_having_dlang_mangling_prefix(self): """ self.build() _, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "_Dfunction") -symbol = thread.frame[0].symbol -self.assertEqual(symbol.GetDisplayName(), "_Dfunction") +frame = thread.frame[0] + +symbol = frame.symbol +# On Windows the function does not have an associated symbol. +if symbol.IsValid(): +self.assertFalse(symbol.mangled) +self.assertEqual(symbol.GetDisplayName(), "_Dfunction") + +function = frame.function +self.assertFalse(function.mangled) +self.assertEqual(function.GetDisplayName(), "_Dfunction") >From 7157428f89a31cbe2bb06849f2578b370352b00c Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 09:17:27 + Subject: [PATCH 2/2] Remove Windows skip --- lldb/test/API/lang/c/non-mangled/TestCNonMangled.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index 78602d1b2a33c..6f7ef247b063a 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -1,10 +1,8 @@ import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.lldbtest import * -from lldbsuite.test.decorators import skipIfWindows class TestCase(TestBase): -@skipIfWindows def test_functions_having_dlang_mangling_prefix(self): """ Ensure C functions with a '_D' prefix alone are not mistakenly treated ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 770b6c7 - [lldb][test] Add missing import in D lang mangling test
Author: David Spickett Date: 2024-06-03T09:16:49Z New Revision: 770b6c792472e1ff87e8598728d37c516861218e URL: https://github.com/llvm/llvm-project/commit/770b6c792472e1ff87e8598728d37c516861218e DIFF: https://github.com/llvm/llvm-project/commit/770b6c792472e1ff87e8598728d37c516861218e.diff LOG: [lldb][test] Add missing import in D lang mangling test Added: Modified: lldb/test/API/lang/c/non-mangled/TestCNonMangled.py Removed: diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index c35d8a9bb9163..b10a3d6da30a1 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -1,5 +1,6 @@ import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.lldbtest import * +from lldbsuite.test.decorators import skipIfWindows class TestCase(TestBase): ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix D lang mangling test on Windows (PR #94196)
https://github.com/Michael137 approved this pull request. https://github.com/llvm/llvm-project/pull/94196 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [lldb] [clang][Modules] Move `ASTSourceDescriptor` into its own file (PR #67930)
https://github.com/cor3ntin closed https://github.com/llvm/llvm-project/pull/67930 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 8918d35 - [clang][Modules] Move `ASTSourceDescriptor` into its own file (#67930)
Author: David Stone Date: 2024-06-03T11:09:13+02:00 New Revision: 8918d35dbde126c95350b674a2bb102692d90260 URL: https://github.com/llvm/llvm-project/commit/8918d35dbde126c95350b674a2bb102692d90260 DIFF: https://github.com/llvm/llvm-project/commit/8918d35dbde126c95350b674a2bb102692d90260.diff LOG: [clang][Modules] Move `ASTSourceDescriptor` into its own file (#67930) Added: clang/include/clang/Basic/ASTSourceDescriptor.h clang/lib/Basic/ASTSourceDescriptor.cpp Modified: clang/include/clang/Basic/Module.h clang/lib/AST/ExternalASTSource.cpp clang/lib/Basic/CMakeLists.txt clang/lib/Basic/Module.cpp clang/lib/CodeGen/CGDebugInfo.h clang/lib/Serialization/ASTReader.cpp lldb/source/Plugins/ExpressionParser/Clang/ASTUtils.h lldb/source/Plugins/ExpressionParser/Clang/ClangExternalASTSourceCallbacks.cpp lldb/source/Plugins/ExpressionParser/Clang/ClangExternalASTSourceCallbacks.h Removed: diff --git a/clang/include/clang/Basic/ASTSourceDescriptor.h b/clang/include/clang/Basic/ASTSourceDescriptor.h new file mode 100644 index 0..175e0551db765 --- /dev/null +++ b/clang/include/clang/Basic/ASTSourceDescriptor.h @@ -0,0 +1,52 @@ +//===- ASTSourceDescriptor.h -*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// +// +/// \file +/// Defines the clang::ASTSourceDescriptor class, which abstracts clang modules +/// and precompiled header files +// +//===--===// + +#ifndef LLVM_CLANG_BASIC_ASTSOURCEDESCRIPTOR_H +#define LLVM_CLANG_BASIC_ASTSOURCEDESCRIPTOR_H + +#include "clang/Basic/Module.h" +#include "llvm/ADT/StringRef.h" +#include +#include + +namespace clang { + +/// Abstracts clang modules and precompiled header files and holds +/// everything needed to generate debug info for an imported module +/// or PCH. +class ASTSourceDescriptor { + StringRef PCHModuleName; + StringRef Path; + StringRef ASTFile; + ASTFileSignature Signature; + Module *ClangModule = nullptr; + +public: + ASTSourceDescriptor() = default; + ASTSourceDescriptor(StringRef Name, StringRef Path, StringRef ASTFile, + ASTFileSignature Signature) + : PCHModuleName(std::move(Name)), Path(std::move(Path)), +ASTFile(std::move(ASTFile)), Signature(Signature) {} + ASTSourceDescriptor(Module &M); + + std::string getModuleName() const; + StringRef getPath() const { return Path; } + StringRef getASTFile() const { return ASTFile; } + ASTFileSignature getSignature() const { return Signature; } + Module *getModuleOrNull() const { return ClangModule; } +}; + +} // namespace clang + +#endif // LLVM_CLANG_BASIC_ASTSOURCEDESCRIPTOR_H diff --git a/clang/include/clang/Basic/Module.h b/clang/include/clang/Basic/Module.h index 2d62d05cd9190..e86f4303d732b 100644 --- a/clang/include/clang/Basic/Module.h +++ b/clang/include/clang/Basic/Module.h @@ -868,32 +868,6 @@ class VisibleModuleSet { unsigned Generation = 0; }; -/// Abstracts clang modules and precompiled header files and holds -/// everything needed to generate debug info for an imported module -/// or PCH. -class ASTSourceDescriptor { - StringRef PCHModuleName; - StringRef Path; - StringRef ASTFile; - ASTFileSignature Signature; - Module *ClangModule = nullptr; - -public: - ASTSourceDescriptor() = default; - ASTSourceDescriptor(StringRef Name, StringRef Path, StringRef ASTFile, - ASTFileSignature Signature) - : PCHModuleName(std::move(Name)), Path(std::move(Path)), -ASTFile(std::move(ASTFile)), Signature(Signature) {} - ASTSourceDescriptor(Module &M); - - std::string getModuleName() const; - StringRef getPath() const { return Path; } - StringRef getASTFile() const { return ASTFile; } - ASTFileSignature getSignature() const { return Signature; } - Module *getModuleOrNull() const { return ClangModule; } -}; - - } // namespace clang #endif // LLVM_CLANG_BASIC_MODULE_H diff --git a/clang/lib/AST/ExternalASTSource.cpp b/clang/lib/AST/ExternalASTSource.cpp index e96a474968511..a5b6f80bde694 100644 --- a/clang/lib/AST/ExternalASTSource.cpp +++ b/clang/lib/AST/ExternalASTSource.cpp @@ -15,10 +15,10 @@ #include "clang/AST/ExternalASTSource.h" #include "clang/AST/ASTContext.h" #include "clang/AST/DeclarationName.h" +#include "clang/Basic/ASTSourceDescriptor.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/LLVM.h" -#include "clang/Basic/Module.h" #include "clang/Basic/SourceManager.h" #include "llvm/Support/ErrorHandling.h" #include diff --git a/clang/lib
[Lldb-commits] [lldb] [lldb][test] Fix D lang mangling test on Windows (PR #94196)
llvmbot wrote: @llvm/pr-subscribers-lldb Author: David Spickett (DavidSpickett) Changes On Windows the function does not have a symbol associated with it: Function: id = {0x01c9}, name = "_Dfunction", range = [0x000140001000-0x000140001004) LineEntry: <...> Whereas it does on Linux: Function: id = {0x0023}, name = "_Dfunction", range = [0x0734-0x0738) LineEntry: <...> Symbol: id = {0x0058}, range = [0x0734-0x0738), name="_Dfunction" This means that frame.symbol is not valid on Windows. However, frame.function is valid and it also has a "mangled" attribute. So I've updated the test to check the symbol if we've got it, and the function always. In both cases we check that mangled is empty (meaning it has not been treated as mangled) and that the display name matches the original symbol name. --- Full diff: https://github.com/llvm/llvm-project/pull/94196.diff 1 Files Affected: - (modified) lldb/test/API/lang/c/non-mangled/TestCNonMangled.py (+11-2) ``diff diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index c35d8a9bb9163..c16a1185acb97 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -12,5 +12,14 @@ def test_functions_having_dlang_mangling_prefix(self): """ self.build() _, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "_Dfunction") -symbol = thread.frame[0].symbol -self.assertEqual(symbol.GetDisplayName(), "_Dfunction") +frame = thread.frame[0] + +symbol = frame.symbol +# On Windows the function does not have an associated symbol. +if symbol.IsValid(): +self.assertFalse(symbol.mangled) +self.assertEqual(symbol.GetDisplayName(), "_Dfunction") + +function = frame.function +self.assertFalse(function.mangled) +self.assertEqual(function.GetDisplayName(), "_Dfunction") `` https://github.com/llvm/llvm-project/pull/94196 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Fixed TestEchoCommands.test running on a remote target (PR #94127)
labath wrote: I'd like to try this myself. How can I configure my build to run this sort of thing? https://github.com/llvm/llvm-project/pull/94127 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb][test] Fix D lang mangling test on Windows (PR #94196)
https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/94196 On Windows the function does not have a symbol associated with it: Function: id = {0x01c9}, name = "_Dfunction", range = [0x000140001000-0x000140001004) LineEntry: <...> Whereas it does on Linux: Function: id = {0x0023}, name = "_Dfunction", range = [0x0734-0x0738) LineEntry: <...> Symbol: id = {0x0058}, range = [0x0734-0x0738), name="_Dfunction" This means that frame.symbol is not valid on Windows. However, frame.function is valid and it also has a "mangled" attribute. So I've updated the test to check the symbol if we've got it, and the function always. In both cases we check that mangled is empty (meaning it has not been treated as mangled) and that the display name matches the original symbol name. >From 5a3b6909601f742828d02357998be1c1338613ed Mon Sep 17 00:00:00 2001 From: David Spickett Date: Mon, 3 Jun 2024 09:04:01 + Subject: [PATCH] [lldb][test] Fix D lang mangling test on Windows On Windows the function does not have a symbol associated with it: Function: id = {0x01c9}, name = "_Dfunction", range = [0x000140001000-0x000140001004) LineEntry: <...> Whereas it does on Linux: Function: id = {0x0023}, name = "_Dfunction", range = [0x0734-0x0738) LineEntry: <...> Symbol: id = {0x0058}, range = [0x0734-0x0738), name="_Dfunction" This means that frame.symbol is not valid on Windows. However, frame.function is valid and it also has a "mangled" attribute. So I've updated the test to check the symbol if we've got it, and the function always. In both cases we check that mangled is empty (meaning it has not been treated as mangled) and that the display name matches the original symbol name. --- lldb/test/API/lang/c/non-mangled/TestCNonMangled.py | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index c35d8a9bb9163..c16a1185acb97 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -12,5 +12,14 @@ def test_functions_having_dlang_mangling_prefix(self): """ self.build() _, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "_Dfunction") -symbol = thread.frame[0].symbol -self.assertEqual(symbol.GetDisplayName(), "_Dfunction") +frame = thread.frame[0] + +symbol = frame.symbol +# On Windows the function does not have an associated symbol. +if symbol.IsValid(): +self.assertFalse(symbol.mangled) +self.assertEqual(symbol.GetDisplayName(), "_Dfunction") + +function = frame.function +self.assertFalse(function.mangled) +self.assertEqual(function.GetDisplayName(), "_Dfunction") ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Use packaging module instead of pkg_resources (PR #93712)
labath wrote: > > That said, using a package designed (AIUI) for python versions for parsing > > versions of gcc/clang does strike me as somewhat... unusual, even if it > > does work, so _**maybe**_ there is case to be made for writing something > > custom (I'm not sure if we really need anything more elaborate than > > `tuple([int(part) for part in version.split(".")])`) > > Agreed. The first time I took a stab at this, that was the first thing I > tried, but I quickly discovered that we had at least one tool (I think it was > Python itself?) that contained alphabetical characters (something like > `1.2.3rc` or `1.2.3.dev`) and I didn't feel like dealing with all the > possible edge cases. Ah yes, I guess *one* of the versions we are parsing is the version of python itself.. > We have other packages the test suite relies on (pexpect, psutil, etc) so it > seemed reasonable, but if folks feel strongly about it we can maintain our > own "version parsing". While I don't think we should be adding deps willy-nilly, I don't think this one is more problematic than others in that they are all available through common package management systems. OTOH, it has two things going against it: - it's a hard dep breaking the ability to run any test (whereas e.g. pexpect would only break pexpect-based tests) - it should be relatively easy to replace This does not constitute an endorsement of one direction of the other, I'm just thinking out loud. https://github.com/llvm/llvm-project/pull/93712 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 09c0607 - [lldb][test] Skip D lang mangling test on Windows
Author: David Spickett Date: 2024-06-03T09:02:06Z New Revision: 09c0607919c958c1a816acd58cc6c6585aec51a6 URL: https://github.com/llvm/llvm-project/commit/09c0607919c958c1a816acd58cc6c6585aec51a6 DIFF: https://github.com/llvm/llvm-project/commit/09c0607919c958c1a816acd58cc6c6585aec51a6.diff LOG: [lldb][test] Skip D lang mangling test on Windows While the fix is reviewed. Added: Modified: lldb/test/API/lang/c/non-mangled/TestCNonMangled.py Removed: diff --git a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py index aae2f05263fcd..c35d8a9bb9163 100644 --- a/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py +++ b/lldb/test/API/lang/c/non-mangled/TestCNonMangled.py @@ -3,6 +3,7 @@ class TestCase(TestBase): +@skipIfWindows def test_functions_having_dlang_mangling_prefix(self): """ Ensure C functions with a '_D' prefix alone are not mistakenly treated ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/labath commented: Can't say I'm thrilled by the addition of a random virtual method, but I don't want to stand in the way. I'll just note that there is an alternative - in the form of writing a minimal real target in assembly. In fact, I think `test/Shell/SymbolFile/DWARF/x86/DW_OP_piece-struct.s` has all of the boilerplate, so all you'd need is to replace `DW_OP_stack_value` with `DW_OP_addr`. https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
https://github.com/labath edited https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -768,3 +768,63 @@ TEST(DWARFExpression, ExtensionsDWO) { testExpressionVendorExtensions(dwo_module_sp, *dwo_dwarf_unit); } + +TEST_F(DWARFExpressionMockProcessTest, DW_OP_piece_file_addr) { + struct MockTarget : Target { labath wrote: You could consider using gmock with [this kind](https://github.com/llvm/llvm-project/blob/main/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h#L73) of a pattern that would enable you to write `EXPECT_CALL(target, ReadMemory(0x40, 1)).WillOnce(Return(ByMove(std::vector{0x11})));` https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -2153,26 +2152,42 @@ bool DWARFExpression::Evaluate( } break; - case Value::ValueType::FileAddress: - case Value::ValueType::HostAddress: -if (error_ptr) { - lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong( - LLDB_INVALID_ADDRESS); + case Value::ValueType::FileAddress: { labath wrote: I'm wondering if it would be possible to use a single implementation for these two. Target::ReadMemory will call Process::ReadMemory if it was a process available (and the `force_live_memory` precisely so that one can require this behavior). https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Support reading DW_OP_piece from file address (PR #94026)
@@ -768,3 +768,63 @@ TEST(DWARFExpression, ExtensionsDWO) { testExpressionVendorExtensions(dwo_module_sp, *dwo_dwarf_unit); } + +TEST_F(DWARFExpressionMockProcessTest, DW_OP_piece_file_addr) { + struct MockTarget : Target { +MockTarget(Debugger &debugger, const ArchSpec &target_arch, + const lldb::PlatformSP &platform_sp) +: Target(debugger, target_arch, platform_sp, true) {} + +size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, + Status &error, bool force_live_memory = false, + lldb::addr_t *load_addr_ptr = nullptr) override { + // We expected to be called in a very specific way. + assert(dst_len == 1); + assert(addr.GetOffset() == 0x40 || addr.GetOffset() == 0x50); + + if (addr.GetOffset() == 0x40) +((uint8_t *)dst)[0] = 0x11; + + if (addr.GetOffset() == 0x50) +((uint8_t *)dst)[0] = 0x22; + + return 1; +} + }; + + // Set up a mock process. + ArchSpec arch("i386-pc-linux"); + Platform::SetHostPlatform( + platform_linux::PlatformLinux::CreateInstance(true, &arch)); + lldb::DebuggerSP debugger_sp = Debugger::CreateInstance(); + ASSERT_TRUE(debugger_sp); + lldb::PlatformSP platform_sp; + lldb::TargetSP target_sp = + std::make_shared(*debugger_sp, arch, platform_sp); + ASSERT_TRUE(target_sp); + ASSERT_TRUE(target_sp->GetArchitecture().IsValid()); + + ExecutionContext exe_ctx(target_sp, false); + + uint8_t expr[] = {DW_OP_addr, 0x40, 0x0, 0x0, 0x0, DW_OP_piece, 1, +DW_OP_addr, 0x50, 0x0, 0x0, 0x0, DW_OP_piece, 1}; + DataExtractor extractor(expr, sizeof(expr), lldb::eByteOrderLittle, + /*addr_size*/ 4); + Value result; + Status status; + ASSERT_TRUE(DWARFExpression::Evaluate( + &exe_ctx, /*reg_ctx*/ nullptr, /*module_sp*/ {}, extractor, + /*unit*/ nullptr, lldb::eRegisterKindLLDB, + /*initial_value_ptr*/ nullptr, + /*object_address_ptr*/ nullptr, result, &status)) + << status.ToError(); + + ASSERT_EQ(result.GetValueType(), Value::ValueType::HostAddress); + + DataBufferHeap &buf = result.GetBuffer(); + ASSERT_EQ(buf.GetByteSize(), 2U); + + const uint8_t *bytes = buf.GetBytes(); + EXPECT_EQ(bytes[0], 0x11); + EXPECT_EQ(bytes[1], 0x22); labath wrote: `ASSERT_THAT(result.GetBuffer().GetData(), testing::ElementsAre(0x11, 0x22));` (or something along those lines, may need some massaging to compile) https://github.com/llvm/llvm-project/pull/94026 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits