mirror of
https://github.com/intel/llvm.git
synced 2026-01-14 11:57:39 +08:00
Summary: The changes consist of new packets for trace manipulation and trace collection. The new packets are also documented. The packets are capable of providing custom trace specific parameters to start tracing and also retrieve such configuration from the server. Reviewers: clayborg, lldb-commits, tberghammer, labath, zturner Reviewed By: clayborg, labath Subscribers: krytarowski, lldb-commits Differential Revision: https://reviews.llvm.org/D32585 llvm-svn: 303972
201 lines
6.2 KiB
C++
201 lines
6.2 KiB
C++
//===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef utility_StringExtractorGDBRemote_h_
|
|
#define utility_StringExtractorGDBRemote_h_
|
|
|
|
#include "lldb/Utility/StringExtractor.h"
|
|
#include "llvm/ADT/StringRef.h" // for StringRef
|
|
|
|
#include <string>
|
|
|
|
#include <stddef.h> // for size_t
|
|
#include <stdint.h> // for uint8_t
|
|
|
|
class StringExtractorGDBRemote : public StringExtractor {
|
|
public:
|
|
typedef bool (*ResponseValidatorCallback)(
|
|
void *baton, const StringExtractorGDBRemote &response);
|
|
|
|
StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {}
|
|
|
|
StringExtractorGDBRemote(llvm::StringRef str)
|
|
: StringExtractor(str), m_validator(nullptr) {}
|
|
|
|
StringExtractorGDBRemote(const char *cstr)
|
|
: StringExtractor(cstr), m_validator(nullptr) {}
|
|
|
|
StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs)
|
|
: StringExtractor(rhs), m_validator(rhs.m_validator) {}
|
|
|
|
virtual ~StringExtractorGDBRemote() {}
|
|
|
|
bool ValidateResponse() const;
|
|
|
|
void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
|
|
|
|
void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
|
|
|
|
void SetResponseValidatorToOKErrorNotSupported();
|
|
|
|
void SetResponseValidatorToASCIIHexBytes();
|
|
|
|
void SetResponseValidatorToJSON();
|
|
|
|
enum ServerPacketType {
|
|
eServerPacketType_nack = 0,
|
|
eServerPacketType_ack,
|
|
eServerPacketType_invalid,
|
|
eServerPacketType_unimplemented,
|
|
eServerPacketType_interrupt, // CTRL+c packet or "\x03"
|
|
eServerPacketType_A, // Program arguments packet
|
|
eServerPacketType_qfProcessInfo,
|
|
eServerPacketType_qsProcessInfo,
|
|
eServerPacketType_qC,
|
|
eServerPacketType_qEcho,
|
|
eServerPacketType_qGroupName,
|
|
eServerPacketType_qHostInfo,
|
|
eServerPacketType_qLaunchGDBServer,
|
|
eServerPacketType_qQueryGDBServer,
|
|
eServerPacketType_qKillSpawnedProcess,
|
|
eServerPacketType_qLaunchSuccess,
|
|
eServerPacketType_qModuleInfo,
|
|
eServerPacketType_qProcessInfoPID,
|
|
eServerPacketType_qSpeedTest,
|
|
eServerPacketType_qUserName,
|
|
eServerPacketType_qGetWorkingDir,
|
|
eServerPacketType_qFileLoadAddress,
|
|
eServerPacketType_QEnvironment,
|
|
eServerPacketType_QLaunchArch,
|
|
eServerPacketType_QSetDisableASLR,
|
|
eServerPacketType_QSetDetachOnError,
|
|
eServerPacketType_QSetSTDIN,
|
|
eServerPacketType_QSetSTDOUT,
|
|
eServerPacketType_QSetSTDERR,
|
|
eServerPacketType_QSetWorkingDir,
|
|
eServerPacketType_QStartNoAckMode,
|
|
eServerPacketType_qPlatform_shell,
|
|
eServerPacketType_qPlatform_mkdir,
|
|
eServerPacketType_qPlatform_chmod,
|
|
eServerPacketType_vFile_open,
|
|
eServerPacketType_vFile_close,
|
|
eServerPacketType_vFile_pread,
|
|
eServerPacketType_vFile_pwrite,
|
|
eServerPacketType_vFile_size,
|
|
eServerPacketType_vFile_mode,
|
|
eServerPacketType_vFile_exists,
|
|
eServerPacketType_vFile_md5,
|
|
eServerPacketType_vFile_stat,
|
|
eServerPacketType_vFile_symlink,
|
|
eServerPacketType_vFile_unlink,
|
|
// debug server packages
|
|
eServerPacketType_QEnvironmentHexEncoded,
|
|
eServerPacketType_QListThreadsInStopReply,
|
|
eServerPacketType_QPassSignals,
|
|
eServerPacketType_QRestoreRegisterState,
|
|
eServerPacketType_QSaveRegisterState,
|
|
eServerPacketType_QSetLogging,
|
|
eServerPacketType_QSetMaxPacketSize,
|
|
eServerPacketType_QSetMaxPayloadSize,
|
|
eServerPacketType_QSetEnableAsyncProfiling,
|
|
eServerPacketType_QSyncThreadState,
|
|
eServerPacketType_QThreadSuffixSupported,
|
|
|
|
eServerPacketType_jThreadsInfo,
|
|
eServerPacketType_qsThreadInfo,
|
|
eServerPacketType_qfThreadInfo,
|
|
eServerPacketType_qGetPid,
|
|
eServerPacketType_qGetProfileData,
|
|
eServerPacketType_qGDBServerVersion,
|
|
eServerPacketType_qMemoryRegionInfo,
|
|
eServerPacketType_qMemoryRegionInfoSupported,
|
|
eServerPacketType_qProcessInfo,
|
|
eServerPacketType_qRcmd,
|
|
eServerPacketType_qRegisterInfo,
|
|
eServerPacketType_qShlibInfoAddr,
|
|
eServerPacketType_qStepPacketSupported,
|
|
eServerPacketType_qSupported,
|
|
eServerPacketType_qSyncThreadStateSupported,
|
|
eServerPacketType_qThreadExtraInfo,
|
|
eServerPacketType_qThreadStopInfo,
|
|
eServerPacketType_qVAttachOrWaitSupported,
|
|
eServerPacketType_qWatchpointSupportInfo,
|
|
eServerPacketType_qWatchpointSupportInfoSupported,
|
|
eServerPacketType_qXfer_auxv_read,
|
|
|
|
eServerPacketType_jSignalsInfo,
|
|
eServerPacketType_jModulesInfo,
|
|
|
|
eServerPacketType_vAttach,
|
|
eServerPacketType_vAttachWait,
|
|
eServerPacketType_vAttachOrWait,
|
|
eServerPacketType_vAttachName,
|
|
eServerPacketType_vCont,
|
|
eServerPacketType_vCont_actions, // vCont?
|
|
|
|
eServerPacketType_stop_reason, // '?'
|
|
|
|
eServerPacketType_c,
|
|
eServerPacketType_C,
|
|
eServerPacketType_D,
|
|
eServerPacketType_g,
|
|
eServerPacketType_G,
|
|
eServerPacketType_H,
|
|
eServerPacketType_I, // stdin notification
|
|
eServerPacketType_k,
|
|
eServerPacketType_m,
|
|
eServerPacketType_M,
|
|
eServerPacketType_p,
|
|
eServerPacketType_P,
|
|
eServerPacketType_s,
|
|
eServerPacketType_S,
|
|
eServerPacketType_T,
|
|
eServerPacketType_x,
|
|
eServerPacketType_X,
|
|
eServerPacketType_Z,
|
|
eServerPacketType_z,
|
|
|
|
eServerPacketType__M,
|
|
eServerPacketType__m,
|
|
eServerPacketType_notify, // '%' notification
|
|
|
|
eServerPacketType_jTraceStart,
|
|
eServerPacketType_jTraceBufferRead,
|
|
eServerPacketType_jTraceMetaRead,
|
|
eServerPacketType_jTraceStop,
|
|
eServerPacketType_jTraceConfigRead,
|
|
};
|
|
|
|
ServerPacketType GetServerPacketType() const;
|
|
|
|
enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
|
|
|
|
ResponseType GetResponseType() const;
|
|
|
|
bool IsOKResponse() const;
|
|
|
|
bool IsUnsupportedResponse() const;
|
|
|
|
bool IsNormalResponse() const;
|
|
|
|
bool IsErrorResponse() const;
|
|
|
|
// Returns zero if the packet isn't a EXX packet where XX are two hex
|
|
// digits. Otherwise the error encoded in XX is returned.
|
|
uint8_t GetError();
|
|
|
|
size_t GetEscapedBinaryData(std::string &str);
|
|
|
|
protected:
|
|
ResponseValidatorCallback m_validator;
|
|
void *m_validator_baton;
|
|
};
|
|
|
|
#endif // utility_StringExtractorGDBRemote_h_
|