116d11e26SJoseph Huber //===-- GPU implementation of system --------------------------------------===// 216d11e26SJoseph Huber // 316d11e26SJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 416d11e26SJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 516d11e26SJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 616d11e26SJoseph Huber // 716d11e26SJoseph Huber //===----------------------------------------------------------------------===// 816d11e26SJoseph Huber 916d11e26SJoseph Huber #include "src/__support/RPC/rpc_client.h" 1016d11e26SJoseph Huber #include "src/__support/common.h" 1116d11e26SJoseph Huber #include "src/__support/macros/config.h" 1216d11e26SJoseph Huber #include "src/string/string_utils.h" 1316d11e26SJoseph Huber 1416d11e26SJoseph Huber #include "src/stdlib/system.h" 1516d11e26SJoseph Huber 1616d11e26SJoseph Huber namespace LIBC_NAMESPACE_DECL { 1716d11e26SJoseph Huber 1816d11e26SJoseph Huber LLVM_LIBC_FUNCTION(int, system, (const char *command)) { 1916d11e26SJoseph Huber int ret; 20*a6ef0debSJoseph Huber rpc::Client::Port port = rpc::client.open<LIBC_SYSTEM>(); 2116d11e26SJoseph Huber port.send_n(command, internal::string_length(command) + 1); 22be0c67c9SJoseph Huber port.recv([&](rpc::Buffer *buffer, uint32_t) { 23be0c67c9SJoseph Huber ret = static_cast<int>(buffer->data[0]); 24be0c67c9SJoseph Huber }); 2516d11e26SJoseph Huber port.close(); 2616d11e26SJoseph Huber 2716d11e26SJoseph Huber return ret; 2816d11e26SJoseph Huber } 2916d11e26SJoseph Huber 3016d11e26SJoseph Huber } // namespace LIBC_NAMESPACE_DECL 31