summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c
new file mode 100644
index 000000000..1bdb3d2ce
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/libraries/debug-engine/packets.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2021 Ant Group. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+#include "bh_platform.h"
+#include "packets.h"
+#include "gdbserver.h"
+
+void
+write_data_raw(WASMGDBServer *gdbserver, const uint8 *data, ssize_t len)
+{
+ ssize_t nwritten;
+
+ nwritten = os_socket_send(gdbserver->socket_fd, data, len);
+ if (nwritten < 0) {
+ LOG_ERROR("Write error\n");
+ exit(-2);
+ }
+}
+
+void
+write_hex(WASMGDBServer *gdbserver, unsigned long hex)
+{
+ char buf[32];
+ size_t len;
+
+ len = snprintf(buf, sizeof(buf) - 1, "%02lx", hex);
+ write_data_raw(gdbserver, (uint8 *)buf, len);
+}
+
+void
+write_packet_bytes(WASMGDBServer *gdbserver, const uint8 *data,
+ size_t num_bytes)
+{
+ uint8 checksum;
+ size_t i;
+
+ write_data_raw(gdbserver, (uint8 *)"$", 1);
+ for (i = 0, checksum = 0; i < num_bytes; ++i)
+ checksum += data[i];
+ write_data_raw(gdbserver, (uint8 *)data, num_bytes);
+ write_data_raw(gdbserver, (uint8 *)"#", 1);
+ write_hex(gdbserver, checksum);
+}
+
+void
+write_packet(WASMGDBServer *gdbserver, const char *data)
+{
+ LOG_VERBOSE("send replay:%s", data);
+ write_packet_bytes(gdbserver, (const uint8 *)data, strlen(data));
+}
+
+void
+write_binary_packet(WASMGDBServer *gdbserver, const char *pfx,
+ const uint8 *data, ssize_t num_bytes)
+{
+ uint8 *buf;
+ ssize_t pfx_num_chars = strlen(pfx);
+ ssize_t buf_num_bytes = 0, total_size;
+ int32 i;
+
+ total_size = 2 * num_bytes + pfx_num_chars;
+ buf = wasm_runtime_malloc(total_size);
+ if (!buf) {
+ LOG_ERROR("Failed to allocate memory for binary packet");
+ return;
+ }
+
+ memset(buf, 0, total_size);
+ memcpy(buf, pfx, pfx_num_chars);
+ buf_num_bytes += pfx_num_chars;
+
+ for (i = 0; i < num_bytes; ++i) {
+ uint8 b = data[i];
+ switch (b) {
+ case '#':
+ case '$':
+ case '}':
+ case '*':
+ buf[buf_num_bytes++] = '}';
+ buf[buf_num_bytes++] = b ^ 0x20;
+ break;
+ default:
+ buf[buf_num_bytes++] = b;
+ break;
+ }
+ }
+ write_packet_bytes(gdbserver, buf, buf_num_bytes);
+ wasm_runtime_free(buf);
+}