From: Joseph Huber Date: Tue, 16 May 2023 18:39:28 +0000 (-0500) Subject: [libc] Restrict access to the RPC Process internals X-Git-Tag: upstream/17.0.6~8076 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=155191e9fdaee0d12f536a485909c460387d0db8;p=platform%2Fupstream%2Fllvm.git [libc] Restrict access to the RPC Process internals 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 --- diff --git a/libc/src/__support/RPC/rpc.h b/libc/src/__support/RPC/rpc.h index a73c540..8be4116 100644 --- a/libc/src/__support/RPC/rpc.h +++ b/libc/src/__support/RPC/rpc.h @@ -97,6 +97,9 @@ template struct Process { LIBC_INLINE Process &operator=(Process &&) = default; LIBC_INLINE ~Process() = default; + template friend struct Port; + +protected: uint64_t port_count; uint32_t lane_size; cpp::Atomic *inbox; @@ -105,6 +108,7 @@ template struct Process { cpp::Atomic lock[DEFAULT_PORT_COUNT] = {0}; +public: /// Initialize the communication channels. LIBC_INLINE void reset(uint64_t port_count, uint32_t lane_size, void *buffer) { @@ -131,6 +135,7 @@ template 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) {