mirror of
https://github.com/intel/llvm.git
synced 2026-01-14 11:57:39 +08:00
The new test fails on x86 and arm64 public macOS bots: ``` 09:27:59 ====================================================================== 09:27:59 FAIL: test_append_frames (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that we can add frames after real stack. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 122, in test_append_frames 09:27:59 self.assertEqual(new_frame_count, original_frame_count + 1) 09:27:59 AssertionError: 5 != 6 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ====================================================================== 09:27:59 FAIL: test_applies_to_thread (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that applies_to_thread filters which threads get the provider. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 218, in test_applies_to_thread 09:27:59 self.assertEqual( 09:27:59 AssertionError: 5 != 1 : Thread with ID 1 should have 1 synthetic frame 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ====================================================================== 09:27:59 FAIL: test_prepend_frames (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that we can add frames before real stack. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 84, in test_prepend_frames 09:27:59 self.assertEqual(new_frame_count, original_frame_count + 2) 09:27:59 AssertionError: 5 != 7 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ====================================================================== 09:27:59 FAIL: test_remove_frame_provider_by_id (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that RemoveScriptedFrameProvider removes a specific provider by ID. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 272, in test_remove_frame_provider_by_id 09:27:59 self.assertEqual(thread.GetNumFrames(), 3, "Should have 3 synthetic frames") 09:27:59 AssertionError: 5 != 3 : Should have 3 synthetic frames 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ====================================================================== 09:27:59 FAIL: test_replace_all_frames (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that we can replace the entire stack. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 41, in test_replace_all_frames 09:27:59 self.assertEqual(thread.GetNumFrames(), 3, "Should have 3 synthetic frames") 09:27:59 AssertionError: 5 != 3 : Should have 3 synthetic frames 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ====================================================================== 09:27:59 FAIL: test_scripted_frame_objects (TestScriptedFrameProvider.ScriptedFrameProviderTestCase) 09:27:59 Test that provider can return ScriptedFrame objects. 09:27:59 ---------------------------------------------------------------------- 09:27:59 Traceback (most recent call last): 09:27:59 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py", line 159, in test_scripted_frame_objects 09:27:59 self.assertEqual(frame0.GetFunctionName(), "custom_scripted_frame_0") 09:27:59 AssertionError: 'thread_func(int)' != 'custom_scripted_frame_0' 09:27:59 - thread_func(int) 09:27:59 + custom_scripted_frame_0 09:27:59 09:27:59 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 09:27:59 ---------------------------------------------------------------------- 09:27:59 Ran 6 tests in 14.242s 09:27:59 09:27:59 FAILED (failures=6) ``` Reverts llvm/llvm-project#161870
156 lines
4.4 KiB
C++
156 lines
4.4 KiB
C++
//===-- ThreadSpec.cpp ----------------------------------------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Target/ThreadSpec.h"
|
|
#include "lldb/Target/Thread.h"
|
|
#include "lldb/Utility/StructuredData.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
const char *ThreadSpec::g_option_names[static_cast<uint32_t>(
|
|
ThreadSpec::OptionNames::LastOptionName)]{"Index", "ID", "Name",
|
|
"QueueName"};
|
|
|
|
ThreadSpec::ThreadSpec() : m_name(), m_queue_name() {}
|
|
|
|
std::unique_ptr<ThreadSpec> ThreadSpec::CreateFromStructuredData(
|
|
const StructuredData::Dictionary &spec_dict, Status &error) {
|
|
uint32_t index = UINT32_MAX;
|
|
lldb::tid_t tid = LLDB_INVALID_THREAD_ID;
|
|
llvm::StringRef name;
|
|
llvm::StringRef queue_name;
|
|
|
|
std::unique_ptr<ThreadSpec> thread_spec_up(new ThreadSpec());
|
|
bool success = spec_dict.GetValueForKeyAsInteger(
|
|
GetKey(OptionNames::ThreadIndex), index);
|
|
if (success)
|
|
thread_spec_up->SetIndex(index);
|
|
|
|
success =
|
|
spec_dict.GetValueForKeyAsInteger(GetKey(OptionNames::ThreadID), tid);
|
|
if (success)
|
|
thread_spec_up->SetTID(tid);
|
|
|
|
success =
|
|
spec_dict.GetValueForKeyAsString(GetKey(OptionNames::ThreadName), name);
|
|
if (success)
|
|
thread_spec_up->SetName(name);
|
|
|
|
success = spec_dict.GetValueForKeyAsString(GetKey(OptionNames::ThreadName),
|
|
queue_name);
|
|
if (success)
|
|
thread_spec_up->SetQueueName(queue_name);
|
|
|
|
return thread_spec_up;
|
|
}
|
|
|
|
StructuredData::ObjectSP ThreadSpec::SerializeToStructuredData() {
|
|
StructuredData::DictionarySP data_dict_sp(new StructuredData::Dictionary());
|
|
|
|
if (m_index != UINT32_MAX)
|
|
data_dict_sp->AddIntegerItem(GetKey(OptionNames::ThreadIndex), m_index);
|
|
if (m_tid != LLDB_INVALID_THREAD_ID)
|
|
data_dict_sp->AddIntegerItem(GetKey(OptionNames::ThreadID), m_tid);
|
|
if (!m_name.empty())
|
|
data_dict_sp->AddStringItem(GetKey(OptionNames::ThreadName), m_name);
|
|
if (!m_queue_name.empty())
|
|
data_dict_sp->AddStringItem(GetKey(OptionNames::QueueName), m_queue_name);
|
|
|
|
return data_dict_sp;
|
|
}
|
|
|
|
const char *ThreadSpec::GetName() const {
|
|
return m_name.empty() ? nullptr : m_name.c_str();
|
|
}
|
|
|
|
const char *ThreadSpec::GetQueueName() const {
|
|
return m_queue_name.empty() ? nullptr : m_queue_name.c_str();
|
|
}
|
|
|
|
bool ThreadSpec::TIDMatches(Thread &thread) const {
|
|
if (m_tid == LLDB_INVALID_THREAD_ID)
|
|
return true;
|
|
|
|
lldb::tid_t thread_id = thread.GetID();
|
|
return TIDMatches(thread_id);
|
|
}
|
|
|
|
bool ThreadSpec::IndexMatches(Thread &thread) const {
|
|
if (m_index == UINT32_MAX)
|
|
return true;
|
|
uint32_t index = thread.GetIndexID();
|
|
return IndexMatches(index);
|
|
}
|
|
|
|
bool ThreadSpec::NameMatches(Thread &thread) const {
|
|
if (m_name.empty())
|
|
return true;
|
|
|
|
const char *name = thread.GetName();
|
|
return NameMatches(name);
|
|
}
|
|
|
|
bool ThreadSpec::QueueNameMatches(Thread &thread) const {
|
|
if (m_queue_name.empty())
|
|
return true;
|
|
|
|
const char *queue_name = thread.GetQueueName();
|
|
return QueueNameMatches(queue_name);
|
|
}
|
|
|
|
bool ThreadSpec::ThreadPassesBasicTests(Thread &thread) const {
|
|
if (!HasSpecification())
|
|
return true;
|
|
|
|
if (!TIDMatches(thread))
|
|
return false;
|
|
|
|
if (!IndexMatches(thread))
|
|
return false;
|
|
|
|
if (!NameMatches(thread))
|
|
return false;
|
|
|
|
if (!QueueNameMatches(thread))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool ThreadSpec::HasSpecification() const {
|
|
return (m_index != UINT32_MAX || m_tid != LLDB_INVALID_THREAD_ID ||
|
|
!m_name.empty() || !m_queue_name.empty());
|
|
}
|
|
|
|
void ThreadSpec::GetDescription(Stream *s, lldb::DescriptionLevel level) const {
|
|
if (!HasSpecification()) {
|
|
if (level == eDescriptionLevelBrief) {
|
|
s->PutCString("thread spec: no ");
|
|
}
|
|
} else {
|
|
if (level == eDescriptionLevelBrief) {
|
|
s->PutCString("thread spec: yes ");
|
|
} else {
|
|
if (GetTID() != LLDB_INVALID_THREAD_ID)
|
|
s->Printf("tid: 0x%" PRIx64 " ", GetTID());
|
|
|
|
if (GetIndex() != UINT32_MAX)
|
|
s->Printf("index: %d ", GetIndex());
|
|
|
|
const char *name = GetName();
|
|
if (name)
|
|
s->Printf("thread name: \"%s\" ", name);
|
|
|
|
const char *queue_name = GetQueueName();
|
|
if (queue_name)
|
|
s->Printf("queue name: \"%s\" ", queue_name);
|
|
}
|
|
}
|
|
}
|