| Index: runtime/bin/dbg_connection_macos.cc
|
| diff --git a/runtime/bin/dbg_connection_macos.cc b/runtime/bin/dbg_connection_macos.cc
|
| deleted file mode 100644
|
| index dd944e091a444cfb8337fd5602c457d6f9925e0b..0000000000000000000000000000000000000000
|
| --- a/runtime/bin/dbg_connection_macos.cc
|
| +++ /dev/null
|
| @@ -1,193 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#include "platform/globals.h"
|
| -#if defined(TARGET_OS_MACOS)
|
| -
|
| -#include <errno.h> // NOLINT
|
| -#include <stdio.h> // NOLINT
|
| -#include <stdlib.h> // NOLINT
|
| -#include <string.h> // NOLINT
|
| -#include <sys/event.h> // NOLINT
|
| -#include <unistd.h> // NOLINT
|
| -
|
| -#include "bin/dartutils.h"
|
| -#include "bin/dbg_connection.h"
|
| -#include "bin/fdutils.h"
|
| -#include "bin/log.h"
|
| -#include "bin/socket.h"
|
| -#include "platform/signal_blocker.h"
|
| -#include "platform/utils.h"
|
| -
|
| -
|
| -namespace dart {
|
| -namespace bin {
|
| -
|
| -#define INVALID_FD -1
|
| -
|
| -int DebuggerConnectionImpl::kqueue_fd_ = INVALID_FD;
|
| -int DebuggerConnectionImpl::wakeup_fds_[2] = {INVALID_FD, INVALID_FD};
|
| -
|
| -
|
| -// Used by VM threads to send a message to the debugger connetion
|
| -// handler thread.
|
| -void DebuggerConnectionImpl::SendMessage(MessageType id) {
|
| - ASSERT(wakeup_fds_[1] != INVALID_FD);
|
| - struct Message msg;
|
| - msg.msg_id = id;
|
| - int result = FDUtils::WriteToBlocking(wakeup_fds_[1], &msg, sizeof(msg));
|
| - if (result != sizeof(msg)) {
|
| - if (result == -1) {
|
| - perror("Wakeup message failure: ");
|
| - }
|
| - FATAL1("Wakeup message failure. Wrote %d bytes.", result);
|
| - }
|
| -}
|
| -
|
| -
|
| -// Used by the debugger connection handler to read the messages sent
|
| -// by the VM.
|
| -bool DebuggerConnectionImpl::ReceiveMessage(Message* msg) {
|
| - int total_read = 0;
|
| - int bytes_read = 0;
|
| - int remaining = sizeof(Message);
|
| - uint8_t* buf = reinterpret_cast<uint8_t*>(msg);
|
| - while (remaining > 0) {
|
| - bytes_read =
|
| - TEMP_FAILURE_RETRY(read(wakeup_fds_[0], buf + total_read, remaining));
|
| - if ((bytes_read < 0) && (total_read == 0)) {
|
| - return false;
|
| - }
|
| - if (bytes_read > 0) {
|
| - total_read += bytes_read;
|
| - remaining -= bytes_read;
|
| - }
|
| - }
|
| - ASSERT(remaining >= 0);
|
| - return remaining == 0;
|
| -}
|
| -
|
| -
|
| -void DebuggerConnectionImpl::HandleEvent(struct kevent* event) {
|
| - intptr_t ident = event->ident;
|
| - if (ident == DebuggerConnectionHandler::listener_fd_) {
|
| - if (DebuggerConnectionHandler::IsConnected()) {
|
| - FATAL("Cannot connect to more than one debugger.\n");
|
| - }
|
| - intptr_t fd = ServerSocket::Accept(ident);
|
| - if (fd < 0) {
|
| - FATAL("Accepting new debugger connection failed.\n");
|
| - }
|
| - FDUtils::SetBlocking(fd);
|
| - DebuggerConnectionHandler::AcceptDbgConnection(fd);
|
| -
|
| - /* For now, don't poll the debugger connection.
|
| - struct kevent ev_add;
|
| - EV_SET(&ev_add, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
|
| - int status =
|
| - TEMP_FAILURE_RETRY(kevent(kqueue_fd_, &ev_add, 1, NULL, 0, NULL));
|
| - if (status == -1) {
|
| - const int kBufferSize = 1024;
|
| - char error_message[kBufferSize];
|
| - Utils::StrError(errno, error_message, kBufferSize);
|
| - FATAL1("Failed adding debugger socket to kqueue: %s\n", error_message);
|
| - }
|
| - */
|
| - } else if (ident == wakeup_fds_[0]) {
|
| - Message msg;
|
| - if (ReceiveMessage(&msg)) {
|
| - Log::Print("Received sync message id %d.\n", msg.msg_id);
|
| - }
|
| - } else {
|
| - Log::Print("unexpected: receiving debugger connection event.\n");
|
| - UNIMPLEMENTED();
|
| - }
|
| -}
|
| -
|
| -
|
| -void DebuggerConnectionImpl::Handler(uword args) {
|
| - static const int kMaxEvents = 4;
|
| - struct kevent events[kMaxEvents];
|
| -
|
| - while (1) {
|
| - // Wait indefinitely for an event.
|
| - int result = TEMP_FAILURE_RETRY(
|
| - kevent(kqueue_fd_, NULL, 0, events, kMaxEvents, NULL));
|
| - if (result == -1) {
|
| - const int kBufferSize = 1024;
|
| - char error_message[kBufferSize];
|
| - Utils::StrError(errno, error_message, kBufferSize);
|
| - FATAL1("kevent failed %s\n", error_message);
|
| - } else {
|
| - ASSERT(result <= kMaxEvents);
|
| - for (int i = 0; i < result; i++) {
|
| - HandleEvent(&events[i]);
|
| - }
|
| - }
|
| - }
|
| - Log::Print("shutting down debugger thread\n");
|
| -}
|
| -
|
| -
|
| -void DebuggerConnectionImpl::SetupPollQueue() {
|
| - int result;
|
| - result = NO_RETRY_EXPECTED(pipe(wakeup_fds_));
|
| - if (result != 0) {
|
| - FATAL1("Pipe creation failed with error %d\n", result);
|
| - }
|
| - FDUtils::SetNonBlocking(wakeup_fds_[0]);
|
| -
|
| - kqueue_fd_ = NO_RETRY_EXPECTED(kqueue());
|
| - if (kqueue_fd_ == -1) {
|
| - FATAL("Failed creating kqueue\n");
|
| - }
|
| - // Register the wakeup_fd_ with the kqueue.
|
| - struct kevent event;
|
| - EV_SET(&event, wakeup_fds_[0], EVFILT_READ, EV_ADD, 0, 0, NULL);
|
| - int status = NO_RETRY_EXPECTED(kevent(kqueue_fd_, &event, 1, NULL, 0, NULL));
|
| - if (status == -1) {
|
| - const int kBufferSize = 1024;
|
| - char error_message[kBufferSize];
|
| - Utils::StrError(errno, error_message, kBufferSize);
|
| - FATAL1("Failed adding wakeup pipe fd to kqueue: %s\n", error_message);
|
| - }
|
| -
|
| - // Register the listening socket.
|
| - EV_SET(&event, DebuggerConnectionHandler::listener_fd_,
|
| - EVFILT_READ, EV_ADD, 0, 0, NULL);
|
| - status = NO_RETRY_EXPECTED(kevent(kqueue_fd_, &event, 1, NULL, 0, NULL));
|
| - if (status == -1) {
|
| - const int kBufferSize = 1024;
|
| - char error_message[kBufferSize];
|
| - Utils::StrError(errno, error_message, kBufferSize);
|
| - FATAL1("Failed adding listener socket to kqueue: %s\n", error_message);
|
| - }
|
| -}
|
| -
|
| -
|
| -void DebuggerConnectionImpl::StartHandler(int port_number) {
|
| - ASSERT(DebuggerConnectionHandler::listener_fd_ != -1);
|
| - SetupPollQueue();
|
| - int result = Thread::Start(&DebuggerConnectionImpl::Handler, 0);
|
| - if (result != 0) {
|
| - FATAL1("Failed to start debugger connection handler thread: %d\n", result);
|
| - }
|
| -}
|
| -
|
| -
|
| -intptr_t DebuggerConnectionImpl::Send(intptr_t socket,
|
| - const char* buf,
|
| - int len) {
|
| - return TEMP_FAILURE_RETRY(write(socket, buf, len));
|
| -}
|
| -
|
| -
|
| -intptr_t DebuggerConnectionImpl::Receive(intptr_t socket, char* buf, int len) {
|
| - return TEMP_FAILURE_RETRY(read(socket, buf, len));
|
| -}
|
| -
|
| -} // namespace bin
|
| -} // namespace dart
|
| -
|
| -#endif // defined(TARGET_OS_MACOS)
|
|
|