1//===---- RemoteTargetMessage.h - LLI out-of-process message protocol -----===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Definition of the LLIMessageType enum which is used for communication with a
11// child process for remote execution.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLI_REMOTETARGETMESSAGE_H
16#define LLI_REMOTETARGETMESSAGE_H
17
18namespace llvm {
19
20// LLI messages from parent-to-child or vice versa follow an exceedingly simple
21// protocol where the first four bytes represent the message type, the next
22// four bytes represent the size of data for the command and following bytes
23// represent the actual data.
24//
25// The protocol is not intended to be robust, secure or fault-tolerant.  It is
26// only here for testing purposes and is therefore intended to be the simplest
27// implementation that will work.  It is assumed that the parent and child
28// share characteristics like endianness.
29
30enum LLIMessageType {
31  LLI_Error = -1,
32  LLI_ChildActive = 0,        // Data = not used
33  LLI_AllocateSpace,          // Data = struct { uint_32t Align, uint_32t Size }
34  LLI_AllocationResult,       // Data = uint64_t AllocAddress (in Child memory space)
35  LLI_LoadCodeSection,        // Data = uint32_t Addr, followed by section contests
36  LLI_LoadDataSection,        // Data = uint32_t Addr, followed by section contents
37  LLI_LoadComplete,           // Data = not used
38  LLI_Execute,                // Data = Address of function to execute
39  LLI_ExecutionResult,        // Data = uint64_t Result
40  LLI_Terminate               // Data = not used
41};
42
43} // end namespace llvm
44
45#endif
46