Skip to content

Commit

Permalink
[libc] Restrict access to the RPC Process internals
Browse files Browse the repository at this point in the history
This patch changes the `Process` struct to only provide the functions
expected to be visible by the interface. So, now we only export the
open, reset, and size query functions. This prevents users of the
interface from messing with the internals of the process, so now the
only existing failure mode is mismatched send and recieve calls.

Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D150703
  • Loading branch information
jhuber6 committed May 17, 2023
1 parent 66da9ec commit 155191e
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions libc/src/__support/RPC/rpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ template <bool Invert> struct Process {
LIBC_INLINE Process &operator=(Process &&) = default;
LIBC_INLINE ~Process() = default;

template <bool T> friend struct Port;

protected:
uint64_t port_count;
uint32_t lane_size;
cpp::Atomic<uint32_t> *inbox;
Expand All @@ -105,6 +108,7 @@ template <bool Invert> struct Process {

cpp::Atomic<uint32_t> lock[DEFAULT_PORT_COUNT] = {0};

public:
/// Initialize the communication channels.
LIBC_INLINE void reset(uint64_t port_count, uint32_t lane_size,
void *buffer) {
Expand All @@ -131,6 +135,7 @@ template <bool Invert> struct Process {
return buffer_offset(port_count) + buffer_bytes(port_count, lane_size);
}

protected:
/// The length of the packet is flexible because the server needs to look up
/// the lane size at runtime. This helper indexes at the proper offset.
LIBC_INLINE Packet &get_packet(uint64_t index) {
Expand Down

0 comments on commit 155191e

Please sign in to comment.