27    : gdb_server_(gdb_server),
 
   31      debugger_initial_suspension_(true),
 
   33      current_isolate_(nullptr) {
 
 
   40      "PacketSize=1000;vContSupported-;qXfer:libraries:read+;wasm+;";
 
   46      "name:pc;alt-name:pc;bitsize:64;offset:0;encoding:uint;format:hex;set:" 
   47      "General Purpose Registers;gcc:16;dwarf:16;generic:pc;";
 
   52      "pid:1;ppid:1;uid:1;gid:1;euid:1;egid:1;name:6c6c6462;triple:" +
 
   53      Mem2Hex(
"wasm32-unknown-unknown-wasm") + 
";ptrsize:4;";
 
   58  snprintf(buff, 
sizeof(buff), 
"QC%x", 
kThreadId);
 
 
   68                            const std::vector<wasm_addr_t>& call_frames) {
 
 
   72                         const std::vector<wasm_addr_t>& call_frames) {
 
 
   76                         const std::vector<wasm_addr_t>& call_frames) {
 
   82  if (isWaitingForSuspension) {
 
 
  319      uint32_t length = 
static_cast<uint32_t
>(len);
 
  390      uint64_t breakpoint_type;
 
  391      uint64_t breakpoint_address;
 
  392      uint64_t breakpoint_kind;
 
  394      if (!pkt_in->
GetNumberSep(&breakpoint_type, 0) || breakpoint_type != 0 ||
 
  401      wasm_addr_t wasm_breakpoint_addr(breakpoint_address);
 
  403                                      wasm_breakpoint_addr.
Offset())) {
 
  417      uint64_t breakpoint_type;
 
  418      uint64_t breakpoint_address;
 
  419      uint64_t breakpoint_kind;
 
  420      if (!pkt_in->
GetNumberSep(&breakpoint_type, 0) || breakpoint_type != 0 ||
 
  427      wasm_addr_t wasm_breakpoint_addr(breakpoint_address);
 
  429                                         wasm_breakpoint_addr.
Offset())) {
 
  448    pkt_out->
AddWord8(
static_cast<uint8_t
>(err));
 
 
  464  if (!strcmp(str, 
"fThreadInfo") || !strcmp(str, 
"sThreadInfo")) {
 
  486  std::string tmp = 
"Xfer:libraries:read";
 
  487  if (!strncmp(str, tmp.data(), tmp.length())) {
 
  488    std::vector<GdbServer::WasmModuleInfo> modules =
 
  490    std::string 
result(
"l<library-list>");
 
  491    for (
const auto& module : modules) {
 
  493      char address_string[32];
 
  494      snprintf(address_string, 
sizeof(address_string), 
"%" PRIu64,
 
  495               static_cast<uint64_t
>(address));
 
  496      result += 
"<library name=\"";
 
  497      result += 
module.module_name;
 
  498      result += 
"\"><section address=\"";
 
  500      result += 
"\"/></library>";
 
  502    result += 
"</library-list>";
 
  511  std::vector<std::string> toks = 
StringSplit(str, 
":;");
 
  512  if (toks[0] == 
"WasmCallStack") {
 
  514    std::vector<uint64_t> buffer;
 
  516      buffer.push_back(
pc);
 
  519                      static_cast<uint32_t
>(
sizeof(uint64_t) * buffer.size()));
 
  526  if (toks[0] == 
"WasmGlobal") {
 
  527    if (toks.size() == 3) {
 
  528      uint32_t frame_index =
 
  529          static_cast<uint32_t
>(strtol(toks[1].
data(), 
nullptr, 10));
 
  531          static_cast<uint32_t
>(strtol(toks[2].
data(), 
nullptr, 10));
 
  547  if (toks[0] == 
"WasmLocal") {
 
  548    if (toks.size() == 3) {
 
  549      uint32_t frame_index =
 
  550          static_cast<uint32_t
>(strtol(toks[1].
data(), 
nullptr, 10));
 
  552          static_cast<uint32_t
>(strtol(toks[2].
data(), 
nullptr, 10));
 
  568  if (toks[0] == 
"WasmStackValue") {
 
  569    if (toks.size() == 3) {
 
  570      uint32_t frame_index =
 
  571          static_cast<uint32_t
>(strtol(toks[1].
data(), 
nullptr, 10));
 
  573          static_cast<uint32_t
>(strtol(toks[2].
data(), 
nullptr, 10));
 
  589  if (toks[0] == 
"WasmMem") {
 
  590    if (toks.size() == 4) {
 
  591      uint32_t module_id = strtoul(toks[1].
data(), 
nullptr, 10);
 
  592      uint32_t address = strtoul(toks[2].
data(), 
nullptr, 16);
 
  593      uint32_t length = strtoul(toks[3].
data(), 
nullptr, 16);
 
  613  if (toks[0] == 
"WasmData") {
 
  614    if (toks.size() == 4) {
 
  615      uint32_t module_id = strtoul(toks[1].
data(), 
nullptr, 10);
 
  616      uint32_t address = strtoul(toks[2].
data(), 
nullptr, 16);
 
  617      uint32_t length = strtoul(toks[3].
data(), 
nullptr, 16);
 
 
  657  snprintf(buff, 
sizeof(buff), 
"thread-pcs:%" PRIx64 
";",
 
 
  671                       std::vector<wasm_addr_t> call_frames, 
Isolate* isolate) {
 
  675          call_frames.size() > 0 && isolate != 
nullptr) ||
 
  677          call_frames.size() == 0 && isolate == 
nullptr));
 
 
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
bool WaitFor(const TimeDelta &rel_time) V8_WARN_UNUSED_RESULT
static constexpr TimeDelta FromMilliseconds(int64_t milliseconds)
bool GetWasmLocal(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
bool AddBreakpoint(uint32_t wasm_module_id, uint32_t offset)
uint32_t GetWasmModuleBytes(wasm_addr_t address, uint8_t *buffer, uint32_t size)
uint32_t GetWasmData(uint32_t module_id, uint32_t offset, uint8_t *buffer, uint32_t size)
bool HasModuleListChanged() const
std::vector< WasmModuleInfo > GetLoadedModules(bool clear_module_list_changed_flag=false)
bool GetWasmStackValue(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
std::vector< wasm_addr_t > GetWasmCallStack() const
void QuitMessageLoopOnPause()
uint32_t GetWasmMemory(uint32_t module_id, uint32_t offset, uint8_t *buffer, uint32_t size)
bool GetWasmGlobal(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
bool RemoveBreakpoint(uint32_t wasm_module_id, uint32_t offset)
bool GetRawChar(char *ch)
const char * GetPayload() const
bool GetSequence(int32_t *seq) const
void AddWord8(uint8_t val)
void AddNumberSep(uint64_t val, char sep)
void AddBlock(const void *ptr, uint32_t len)
bool GetNumberSep(uint64_t *val, char *sep)
void AddString(const char *str)
void SetSequence(int32_t seq)
bool SendPacket(Packet *packet, bool expect_ack=true)
void WaitForDebugStubEvent()
bool GetPacket(Packet *packet)
std::vector< wasm_addr_t > call_frames_
const std::vector< wasm_addr_t > GetCallStack() const
Target(GdbServer *gdb_server)
void OnSuspended(Isolate *isolate, int signal, const std::vector< wasm_addr_t > &call_frames)
QueryPropertyMap query_properties_
ErrorCode ProcessQueryPacket(const Packet *pkt_in, Packet *pkt_out)
void SetStatus(Status status, int8_t signal=0, std::vector< wasm_addr_t > call_frames_={}, Isolate *isolate=nullptr)
ProcessPacketResult ProcessPacket(Packet *pkt_in, Packet *pkt_out)
v8::base::Semaphore semaphore_
void SetStopReply(Packet *pkt_out) const
void OnException(Isolate *isolate, const std::vector< wasm_addr_t > &call_frames)
bool IsTerminated() const
void InitQueryPropertyMap()
Isolate * current_isolate_
wasm_addr_t GetCurrentPc() const
bool debugger_initial_suspension_
std::atomic< int8_t > cur_signal_
std::atomic< Status > status_
void OnProgramBreak(Isolate *isolate, const std::vector< wasm_addr_t > &call_frames)
static const int kBufSize
uint32_t ModuleId() const
#define TRACE_GDB_REMOTE(...)
ZoneVector< RpoNumber > & result
std::string Mem2Hex(const uint8_t *mem, size_t count)
static const int kThreadId
static const int kSigTrace
std::vector< std::string > StringSplit(const string &instr, const char *delim)
static const int kSigSegv
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)