diff agent/src/os/win32/Message.hpp @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children c18cbe5936b8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/agent/src/os/win32/Message.hpp	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2000-2001 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+#ifndef _MESSAGE_
+#define _MESSAGE_
+
+// These are the commands sent from the server to the child processes
+// over the child processes' stdin pipes. A subset of the commands
+// understood by the overall system, these require responses from the
+// child process. Having a data structure rather than sending text
+// simplifies parsing on the child side. The child replies by sending
+// back fully-formatted replies which are copied by the server process
+// to the clients' sockets.
+
+struct PeekArg {
+  DWORD address;
+  DWORD numBytes;
+};
+
+// NOTE: when sending a PokeArg to the child process, we handle the
+// buffer specially
+struct PokeArg {
+  DWORD address;
+  DWORD numBytes;
+  void* data;
+};
+
+// Used for continueevent
+struct BoolArg {
+  bool val;
+};
+
+// Used for duphandle, closehandle, and getcontext
+struct HandleArg {
+  HANDLE handle;
+};
+
+// Used for setcontext
+const int NUM_REGS_IN_CONTEXT = 22;
+struct SetContextArg {
+  HANDLE handle;
+  DWORD  Eax;
+  DWORD  Ebx;
+  DWORD  Ecx;
+  DWORD  Edx;
+  DWORD  Esi;
+  DWORD  Edi;
+  DWORD  Ebp;
+  DWORD  Esp;
+  DWORD  Eip;
+  DWORD  Ds;
+  DWORD  Es;
+  DWORD  Fs;
+  DWORD  Gs;
+  DWORD  Cs;
+  DWORD  Ss;
+  DWORD  EFlags;
+  DWORD  Dr0;
+  DWORD  Dr1;
+  DWORD  Dr2;
+  DWORD  Dr3;
+  DWORD  Dr6;
+  DWORD  Dr7;
+};
+
+// Used for selectorentry
+struct SelectorEntryArg {
+  HANDLE handle;
+  DWORD  selector;
+};
+
+struct Message {
+  typedef enum {
+    ATTACH,
+    DETACH,
+    LIBINFO,
+    PEEK,
+    POKE,
+    THREADLIST,
+    DUPHANDLE,
+    CLOSEHANDLE,
+    GETCONTEXT,
+    SETCONTEXT,
+    SELECTORENTRY,
+    SUSPEND,
+    RESUME,
+    POLLEVENT,
+    CONTINUEEVENT
+  } Type;
+
+  Type type;
+  union {
+    PeekArg          peekArg;
+    PokeArg          pokeArg;
+    BoolArg          boolArg;
+    HandleArg        handleArg;
+    SetContextArg    setContextArg;
+    SelectorEntryArg selectorArg;
+  };
+};
+
+#endif  // #defined _MESSAGE_