diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 | 
| commit | cfca06d7963fa0909f90483b42a6d7d194d01e08 (patch) | |
| tree | 209fb2a2d68f8f277793fc8df46c753d31bc853b /lldb/source/API/SBProcess.cpp | |
| parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) | |
Notes
Diffstat (limited to 'lldb/source/API/SBProcess.cpp')
| -rw-r--r-- | lldb/source/API/SBProcess.cpp | 51 | 
1 files changed, 39 insertions, 12 deletions
| diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp index 45aaa0bd2d8a1..d7b7fd7cacadf 100644 --- a/lldb/source/API/SBProcess.cpp +++ b/lldb/source/API/SBProcess.cpp @@ -1,4 +1,4 @@ -//===-- SBProcess.cpp -------------------------------------------*- C++ -*-===// +//===-- SBProcess.cpp -----------------------------------------------------===//  //  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.  // See https://llvm.org/LICENSE.txt for license information. @@ -18,6 +18,7 @@  #include "lldb/Core/Module.h"  #include "lldb/Core/PluginManager.h"  #include "lldb/Core/StreamFile.h" +#include "lldb/Core/StructuredDataImpl.h"  #include "lldb/Target/MemoryRegionInfo.h"  #include "lldb/Target/Process.h"  #include "lldb/Target/RegisterContext.h" @@ -74,7 +75,7 @@ const SBProcess &SBProcess::operator=(const SBProcess &rhs) {  }  // Destructor -SBProcess::~SBProcess() {} +SBProcess::~SBProcess() = default;  const char *SBProcess::GetBroadcasterClassName() {    LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBProcess, @@ -270,8 +271,8 @@ size_t SBProcess::PutSTDIN(const char *src, size_t src_len) {  }  size_t SBProcess::GetSTDOUT(char *dst, size_t dst_len) const { -  LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDOUT, (char *, size_t), dst, -                           dst_len); +  LLDB_RECORD_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetSTDOUT, +                                    (char *, size_t), dst, "", dst_len);    size_t bytes_read = 0;    ProcessSP process_sp(GetSP()); @@ -284,8 +285,8 @@ size_t SBProcess::GetSTDOUT(char *dst, size_t dst_len) const {  }  size_t SBProcess::GetSTDERR(char *dst, size_t dst_len) const { -  LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDERR, (char *, size_t), dst, -                           dst_len); +  LLDB_RECORD_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetSTDERR, +                                    (char *, size_t), dst, "", dst_len);    size_t bytes_read = 0;    ProcessSP process_sp(GetSP()); @@ -298,8 +299,8 @@ size_t SBProcess::GetSTDERR(char *dst, size_t dst_len) const {  }  size_t SBProcess::GetAsyncProfileData(char *dst, size_t dst_len) const { -  LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData, -                           (char *, size_t), dst, dst_len); +  LLDB_RECORD_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData, +                                    (char *, size_t), dst, "", dst_len);    size_t bytes_read = 0;    ProcessSP process_sp(GetSP()); @@ -1010,6 +1011,30 @@ bool SBProcess::GetDescription(SBStream &description) {    return true;  } +SBStructuredData SBProcess::GetExtendedCrashInformation() { +  LLDB_RECORD_METHOD_NO_ARGS(lldb::SBStructuredData, SBProcess, +                             GetExtendedCrashInformation); +  SBStructuredData data; +  ProcessSP process_sp(GetSP()); +  if (!process_sp) +    return LLDB_RECORD_RESULT(data); + +  PlatformSP platform_sp = process_sp->GetTarget().GetPlatform(); + +  if (!platform_sp) +    return LLDB_RECORD_RESULT(data); + +  auto expected_data = +      platform_sp->FetchExtendedCrashInformation(*process_sp.get()); + +  if (!expected_data) +    return LLDB_RECORD_RESULT(data); + +  StructuredData::ObjectSP fetched_data = *expected_data; +  data.m_impl_up->SetObjectSP(fetched_data); +  return LLDB_RECORD_RESULT(data); +} +  uint32_t  SBProcess::GetNumSupportedHardwareWatchpoints(lldb::SBError &sb_error) const {    LLDB_RECORD_METHOD_CONST(uint32_t, SBProcess, @@ -1313,10 +1338,6 @@ void RegisterMethods<SBProcess>(Registry &R) {                         (lldb::tid_t, lldb::addr_t));    LLDB_REGISTER_METHOD_CONST(lldb::SBTarget, SBProcess, GetTarget, ());    LLDB_REGISTER_METHOD(size_t, SBProcess, PutSTDIN, (const char *, size_t)); -  LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetSTDOUT, (char *, size_t)); -  LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetSTDERR, (char *, size_t)); -  LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData, -                             (char *, size_t));    LLDB_REGISTER_METHOD(lldb::SBTrace, SBProcess, StartTrace,                         (lldb::SBTraceOptions &, lldb::SBError &));    LLDB_REGISTER_METHOD_CONST(void, SBProcess, ReportEventState, @@ -1389,6 +1410,8 @@ void RegisterMethods<SBProcess>(Registry &R) {    LLDB_REGISTER_METHOD(lldb::addr_t, SBProcess, ReadPointerFromMemory,                         (lldb::addr_t, lldb::SBError &));    LLDB_REGISTER_METHOD(bool, SBProcess, GetDescription, (lldb::SBStream &)); +  LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBProcess, +                       GetExtendedCrashInformation, ());    LLDB_REGISTER_METHOD_CONST(uint32_t, SBProcess,                               GetNumSupportedHardwareWatchpoints,                               (lldb::SBError &)); @@ -1416,6 +1439,10 @@ void RegisterMethods<SBProcess>(Registry &R) {    LLDB_REGISTER_METHOD(lldb::SBMemoryRegionInfoList, SBProcess,                         GetMemoryRegions, ());    LLDB_REGISTER_METHOD(lldb::SBProcessInfo, SBProcess, GetProcessInfo, ()); + +  LLDB_REGISTER_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetSTDOUT); +  LLDB_REGISTER_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetSTDERR); +  LLDB_REGISTER_CHAR_PTR_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData);  }  } | 
