2020-01-17 21:05:03 +08:00
|
|
|
// Copyright 2019 Google LLC
|
2019-03-19 00:21:48 +08:00
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
#ifndef SANDBOXED_API_CALL_H_
|
|
|
|
#define SANDBOXED_API_CALL_H_
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
#include "sandboxed_api/var_type.h"
|
|
|
|
|
|
|
|
namespace sapi {
|
|
|
|
namespace comms {
|
|
|
|
|
|
|
|
struct ReallocRequest {
|
2020-09-18 22:44:34 +08:00
|
|
|
uintptr_t old_addr;
|
|
|
|
size_t size;
|
2019-03-19 00:21:48 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
// Types of TAGs used with Comms channel.
|
|
|
|
// Call:
|
|
|
|
constexpr uint32_t kMsgCall = 0x101;
|
|
|
|
constexpr uint32_t kMsgAllocate = 0x102;
|
|
|
|
constexpr uint32_t kMsgFree = 0x103;
|
|
|
|
constexpr uint32_t kMsgExit = 0x104;
|
|
|
|
constexpr uint32_t kMsgSymbol = 0x105;
|
|
|
|
constexpr uint32_t kMsgSendFd = 0x106;
|
|
|
|
constexpr uint32_t kMsgRecvFd = 0x107;
|
|
|
|
constexpr uint32_t kMsgClose = 0x108;
|
|
|
|
constexpr uint32_t kMsgReallocate = 0x109;
|
2019-11-22 22:44:03 +08:00
|
|
|
constexpr uint32_t kMsgStrlen = 0x10A;
|
2019-03-19 00:21:48 +08:00
|
|
|
// Return:
|
|
|
|
constexpr uint32_t kMsgReturn = 0x201;
|
|
|
|
|
|
|
|
} // namespace comms
|
|
|
|
|
|
|
|
struct FuncCall {
|
|
|
|
// Used with HandleCallMsg:
|
|
|
|
enum {
|
|
|
|
kFuncNameMax = 128,
|
|
|
|
kArgsMax = 12,
|
|
|
|
};
|
|
|
|
|
|
|
|
// Function to be called.
|
|
|
|
char func[kFuncNameMax];
|
|
|
|
// Return type.
|
|
|
|
v::Type ret_type;
|
|
|
|
// Size of the return value (in bytes).
|
|
|
|
size_t ret_size;
|
|
|
|
// Number of input arguments.
|
|
|
|
size_t argc;
|
|
|
|
// Types of the input arguments.
|
|
|
|
v::Type arg_type[kArgsMax];
|
|
|
|
// Size (in bytes) of input arguments.
|
|
|
|
size_t arg_size[kArgsMax];
|
|
|
|
// Arguments to the call.
|
|
|
|
union {
|
|
|
|
uintptr_t arg_int;
|
|
|
|
long double arg_float;
|
|
|
|
} args[kArgsMax];
|
|
|
|
// Auxiliary type:
|
|
|
|
// For pointers: type of the data it points to,
|
|
|
|
// For others: unspecified.
|
|
|
|
v::Type aux_type[kArgsMax];
|
|
|
|
// Size of the auxiliary data (e.g. a structure the pointer points to).
|
|
|
|
size_t aux_size[kArgsMax];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct FuncRet {
|
|
|
|
// Return type:
|
2021-02-02 16:56:30 +08:00
|
|
|
v::Type ret_type;
|
2019-03-19 00:21:48 +08:00
|
|
|
// Return value.
|
|
|
|
union {
|
2021-02-02 16:56:30 +08:00
|
|
|
uintptr_t int_val;
|
2019-03-19 00:21:48 +08:00
|
|
|
long double float_val;
|
|
|
|
};
|
|
|
|
// Status of the operation: success/failure.
|
2021-02-02 16:56:30 +08:00
|
|
|
bool success;
|
2019-03-19 00:21:48 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace sapi
|
|
|
|
|
|
|
|
#endif // SANDBOXED_API_CALL_H_
|