From nobody Tue Feb 10 15:44:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696583269998924.7237303982965; Fri, 6 Oct 2023 02:07:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qognf-0008Mh-DD; Fri, 06 Oct 2023 05:07:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qognN-0008AQ-4d for qemu-devel@nongnu.org; Fri, 06 Oct 2023 05:06:54 -0400 Received: from smtp1.lauterbach.com ([62.154.241.196]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qognI-0000yv-Js for qemu-devel@nongnu.org; Fri, 06 Oct 2023 05:06:52 -0400 Received: (qmail 19721 invoked by uid 484); 6 Oct 2023 09:06:35 -0000 Received: from nedpc1.intern.lauterbach.com (Authenticated_SSL:neder@[10.2.11.92]) (envelope-sender ) by smtp1.lauterbach.com (qmail-ldap-1.03) with TLS_AES_256_GCM_SHA384 encrypted SMTP for ; 6 Oct 2023 09:06:33 -0000 X-Qmail-Scanner-Diagnostics: from nedpc1.intern.lauterbach.com by smtp1.lauterbach.com (envelope-from , uid 484) with qmail-scanner-2.11 (mhr: 1.0. clamdscan: 0.99/21437. spamassassin: 3.4.0. Clear:RC:1(10.2.11.92):. Processed in 0.152078 secs); 06 Oct 2023 09:06:35 -0000 From: Nicolas Eder To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Christian.Boenig@lauterbach.com, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Nicolas Eder Subject: [PATCH v2 15/29] adapting to the qemu coding style Date: Fri, 6 Oct 2023 11:05:56 +0200 Message-Id: <20231006090610.26171-16-nicolas.eder@lauterbach.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231006090610.26171-1-nicolas.eder@lauterbach.com> References: <20231006090610.26171-1-nicolas.eder@lauterbach.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Qmail-Scanner-2.11: added fake Content-Type header Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=62.154.241.196; envelope-from=nicolas.eder@lauterbach.com; helo=smtp1.lauterbach.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1696583271998100003 Content-Type: text/plain; charset="utf-8" From: neder --- gdbstub/gdbstub.c | 2 +- include/exec/mcdstub.h | 3 +- include/mcdstub/syscalls.h | 2 +- mcdstub/mcd_shared_defines.h | 17 +- mcdstub/mcd_softmmu.c | 171 ----- mcdstub/mcd_syscalls.c | 7 +- mcdstub/mcd_tcp_server.c | 95 --- mcdstub/mcdstub.c | 1037 ++++++++++++++++------------ mcdstub/{internals.h =3D> mcdstub.h} | 102 +-- mcdstub/meson.build | 16 +- softmmu/cpus.c | 2 +- softmmu/vl.c | 4 +- target/arm/mcdstub.c | 24 +- 13 files changed, 684 insertions(+), 798 deletions(-) delete mode 100644 mcdstub/mcd_softmmu.c delete mode 100644 mcdstub/mcd_tcp_server.c rename mcdstub/{internals.h =3D> mcdstub.h} (69%) diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 2ff50757bb..349d348c7b 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -857,7 +857,7 @@ static int process_string_cmd(const char *data, =20 if (cmd->schema) { if (cmd_parse_params(&data[strlen(cmd->cmd)], - cmd->schema, params)) {=20 + cmd->schema, params)) { return -1; } } diff --git a/include/exec/mcdstub.h b/include/exec/mcdstub.h index 132f32417c..84f7c811cb 100644 --- a/include/exec/mcdstub.h +++ b/include/exec/mcdstub.h @@ -2,9 +2,8 @@ #define MCDSTUB_H =20 #define DEFAULT_MCDSTUB_PORT "1235" -#define TYPE_CHARDEV_MCD "chardev-mcd" =20 -// breakpoint defines +/* breakpoint defines */ #define MCD_BREAKPOINT_SW 0 #define MCD_BREAKPOINT_HW 1 #define MCD_WATCHPOINT_WRITE 2 diff --git a/include/mcdstub/syscalls.h b/include/mcdstub/syscalls.h index 92ae7f4e77..5547d6d29e 100644 --- a/include/mcdstub/syscalls.h +++ b/include/mcdstub/syscalls.h @@ -3,4 +3,4 @@ =20 typedef void (*gdb_syscall_complete_cb)(CPUState *cpu, uint64_t ret, int e= rr); =20 -#endif /* _SYSCALLS_H_ */ \ No newline at end of file +#endif /* _SYSCALLS_H_ */ diff --git a/mcdstub/mcd_shared_defines.h b/mcdstub/mcd_shared_defines.h index 311d24e12f..891f6477e7 100644 --- a/mcdstub/mcd_shared_defines.h +++ b/mcdstub/mcd_shared_defines.h @@ -1,9 +1,12 @@ -// this file is shared between the mcd dll and the mcd stub. it has to be = kept exectly the same! +/* + *this file is shared between the mcd dll and the mcd stub. + *it has to be kept exectly the same! + */ =20 #ifndef MCD_SHARED_DEFINES #define MCD_SHARED_DEFINES =20 -// tcp data characters +/* tcp data characters */ #define TCP_CHAR_OPEN_SERVER 'I' #define TCP_CHAR_OPEN_CORE 'i' #define TCP_CHAR_GO 'C' @@ -19,7 +22,7 @@ #define TCP_CHAR_READ_MEMORY 'm' #define TCP_CHAR_WRITE_MEMORY 'M' =20 -// tcp protocol chars +/* tcp protocol chars */ #define TCP_ACKNOWLEDGED '+' #define TCP_NOT_ACKNOWLEDGED '-' #define TCP_COMMAND_START '$' @@ -30,7 +33,7 @@ #define TCP_EXECUTION_SUCCESS "success" #define TCP_EXECUTION_ERROR "error" =20 -// tcp query arguments +/* tcp query arguments */ #define QUERY_FIRST "f" #define QUERY_CONSEQUTIVE "c" =20 @@ -43,7 +46,7 @@ #define QUERY_ARG_REG "reg" #define QUERY_ARG_STATE "state" =20 -// tcp query packet argument list +/* tcp query packet argument list */ #define TCP_ARGUMENT_NAME "name" #define TCP_ARGUMENT_DATA "data" #define TCP_ARGUMENT_ID "id" @@ -70,10 +73,10 @@ #define TCP_ARGUMENT_OPTION "option" #define TCP_ARGUMENT_ACTION "action" =20 -// for packets sent to qemu +/* for packets sent to qemu */ #define ARGUMENT_SEPARATOR ';' =20 -// core states +/* core states */ #define CORE_STATE_RUNNING "running" #define CORE_STATE_HALTED "halted" #define CORE_STATE_DEBUG "debug" diff --git a/mcdstub/mcd_softmmu.c b/mcdstub/mcd_softmmu.c deleted file mode 100644 index 52dcb182b2..0000000000 --- a/mcdstub/mcd_softmmu.c +++ /dev/null @@ -1,171 +0,0 @@ -/* -#if defined(WIN32) -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 -#endif -#include -#include -//#pragma comment(lib, "Ws2_32.lib") -#define ISVALIDSOCKET(s) ((s) !=3D INVALID_SOCKET) -#define CLOSESOCKET(s) closesocket(s) -#define GETSOCKETERRNO() (WSAGetLastError()) -#else -#include -#include -#include -#include -#include -#include -//#include -#define SOCKET int -#define ISVALIDSOCKET(s) ((s) >=3D 0) -#define CLOSESOCKET(s) close(s) -#define GETSOCKETERRNO() (errno) -#endif - -#define SA struct sockaddr - - - -#include "exec/mcdstub.h" -#include "qemu/osdep.h" -#include "qapi/error.h" -#include "qemu/error-report.h" -#include "qemu/cutils.h" -#include "gdbstub/syscalls.h" -#include "exec/hwaddr.h" -#include "exec/tb-flush.h" -#include "sysemu/cpus.h" -#include "sysemu/runstate.h" -#include "sysemu/replay.h" -#include "hw/core/cpu.h" -#include "hw/cpu/cluster.h" -#include "hw/boards.h" -#include "chardev/char.h" -#include "chardev/char-fe.h" -#include "monitor/monitor.h" -#include "internals.h" - -//here only deprecated code: - -int old_mcdserver_start(const char *device) -{ - //the device is a char array. if its "default" we use tcp with the def= ault DEFAULT_MCDSTUB_PORT. Otherwise it has to look like "tcp::" - char tcp_port[MX_INPUT_LENGTH]; - int error; - error =3D mcd_extract_tcp_port_num(device, tcp_port); - if (error !=3D 0) { - return -1; - } - int tcp_port_num =3D atoi(tcp_port); - =20 - if (!mcdserver_state.init) { - mcd_init_mcdserver_state(); - } - return mcd_open_tcp_socket(tcp_port_num); -} - -int mcd_open_tcp_socket(int tcp_port) -//soon to be deprecated (hopefully) -{ - SOCKET socked_fd, connect_fd; - struct sockaddr_in server_address, client_address; - -#if defined(WIN32) - WSADATA d; - if (WSAStartup(MAKEWORD(2, 2), &d)) { - return -1; - } - int len; -#else - unsigned int len; -#endif - - // socket create and verification - socked_fd =3D socket(AF_INET, SOCK_STREAM, 0); - if (!ISVALIDSOCKET(socked_fd)) { - return -1; - } - memset(&server_address, 0, sizeof(server_address)); - - // assign IP, PORT - server_address.sin_family =3D AF_INET; - server_address.sin_port =3D htons(tcp_port); - server_address.sin_addr.s_addr =3D htonl(INADDR_ANY); - - // Binding newly created socket to given IP and verification - if ((bind(socked_fd, (SA*)&server_address, sizeof(server_address))) !=3D = 0) { - CLOSESOCKET(socked_fd); - return -1; - } - - // Now server is ready to listen and verification - if ((listen(socked_fd, 5)) !=3D 0) { - CLOSESOCKET(socked_fd); - return -1; - } - else { - printf("TCP server listening on port %d\n", tcp_port); - } - - //accepting connection - len =3D sizeof(client_address); - connect_fd =3D accept(socked_fd, (SA*)&client_address, &len); - if (!ISVALIDSOCKET(connect_fd)) { - CLOSESOCKET(socked_fd); - return -1; - } - - //lets do the handshake - - char buff[MCD_TCP_DATALEN]; - char expected_buff[MCD_TCP_DATALEN]; - - memset(buff, 0, sizeof(buff)); - memset(expected_buff, 0, sizeof(buff)); - strcpy((char*)expected_buff, "initializing handshake"); - - // read the message from client - recv(connect_fd, buff, MCD_TCP_DATALEN, 0); -=09 - if (strcmp(buff, expected_buff)=3D=3D0) { - strcpy((char*)buff, "shaking your hand"); - send(connect_fd, buff, MCD_TCP_DATALEN, 0); - printf("handshake complete\n"); - return 0; - } - else { - CLOSESOCKET(socked_fd); - CLOSESOCKET(connect_fd); - return -1; - } -} - -int mcd_extract_tcp_port_num(const char *in_string, char *out_string) -{ - int string_length =3D strlen(in_string); - if (string_length>MX_INPUT_LENGTH+1) { - return -1; - } - - const char default_str[] =3D "default"; - - if ((string_length=3D=3Dstrlen(default_str)) && (strcmp(default_str, i= n_string)=3D=3D0)) { - strcpy((char*)out_string, DEFAULT_MCDSTUB_PORT); - return 0; - } - else if (strcmp("tcp::", in_string)=3D=3D0) { - for (int index =3D 5; index < string_length; index++) { - if (!isdigit(in_string[index])) { - return -1; - } - } - } - else { - return -1; - } - strcpy((char*)out_string, in_string+5); - return 0; -} - -*/ \ No newline at end of file diff --git a/mcdstub/mcd_syscalls.c b/mcdstub/mcd_syscalls.c index dec0af51b7..eaa6853335 100644 --- a/mcdstub/mcd_syscalls.c +++ b/mcdstub/mcd_syscalls.c @@ -3,12 +3,11 @@ #include "semihosting/semihost.h" #include "sysemu/runstate.h" #include "mcdstub/syscalls.h" -//#include "trace.h" -#include "internals.h" +#include "mcdstub.h" =20 typedef struct { char syscall_buf[256]; - //TODO: this needs to be get fixed mcd_syscall_complete_cb + /* TODO: this needs to be get fixed mcd_syscall_complete_cb */ int current_syscall_cb; } MCDSyscallState; =20 @@ -28,4 +27,4 @@ void mcd_syscall_reset(void) void mcd_disable_syscalls(void) { mcd_syscall_mode =3D MCD_SYS_DISABLED; -} \ No newline at end of file +} diff --git a/mcdstub/mcd_tcp_server.c b/mcdstub/mcd_tcp_server.c deleted file mode 100644 index 558ddcb969..0000000000 --- a/mcdstub/mcd_tcp_server.c +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include // read(), write(), close() -#include "exec/mcdstub.h" -#define MAX 80 -#define SA struct sockaddr - -// Function designed for chat between client and server. -void func(int connfd) -{ - char buff[MAX]; - int n; - // infinite loop for chat - for (;;) { - bzero(buff, MAX); - - // read the message from client and copy it in buffer - read(connfd, buff, sizeof(buff)); - // print buffer which contains the client contents - printf("From client: %s\t To client : ", buff); - bzero(buff, MAX); - n =3D 0; - // copy server message in the buffer - while ((buff[n++] =3D getchar()) !=3D '\n') - ; - - // and send that buffer to client - write(connfd, buff, sizeof(buff)); - - // if msg contains "Exit" then server exit and chat ended. - if (strncmp("exit", buff, 4) =3D=3D 0) { - printf("Server Exit...\n"); - break; - } - } -} - -// Driver function -int main() -{ - int sockfd, connfd, len; - struct sockaddr_in servaddr, cli; - - // socket create and verification - sockfd =3D socket(AF_INET, SOCK_STREAM, 0); - if (sockfd =3D=3D -1) { - printf("socket creation failed...\n"); - exit(0); - } - else - printf("Socket successfully created..\n"); - bzero(&servaddr, sizeof(servaddr)); - - // assign IP, PORT - servaddr.sin_family =3D AF_INET; - servaddr.sin_addr.s_addr =3D htonl(INADDR_ANY); - servaddr.sin_port =3D htons(DEFAULT_MCDSTUB_PORT); - - // Binding newly created socket to given IP and verification - if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) !=3D 0) { - printf("socket bind failed...\n"); - exit(0); - } - else - printf("Socket successfully binded..\n"); - - // Now server is ready to listen and verification - if ((listen(sockfd, 5)) !=3D 0) { - printf("Listen failed...\n"); - exit(0); - } - else - printf("Server listening..\n"); - len =3D sizeof(cli); - - // Accept the data packet from client and verification - connfd =3D accept(sockfd, (SA*)&cli, &len); - if (connfd < 0) { - printf("server accept failed...\n"); - exit(0); - } - else - printf("server accept the client...\n"); - - // Function for chatting between client and server - func(connfd); - - // After chatting close the socket - close(sockfd); -} diff --git a/mcdstub/mcdstub.c b/mcdstub/mcdstub.c index d65b0a54d2..9f79864af6 100644 --- a/mcdstub/mcdstub.c +++ b/mcdstub/mcdstub.c @@ -2,8 +2,6 @@ * This is the main mcdstub. */ =20 -#include "mcd_shared_defines.h" - #include "qemu/osdep.h" #include "qemu/ctype.h" #include "qemu/cutils.h" @@ -17,7 +15,6 @@ #include "sysemu/runstate.h" #include "exec/replay-core.h" #include "exec/hwaddr.h" -#include "internals.h" =20 #include "qapi/error.h" #include "exec/tb-flush.h" @@ -27,11 +24,12 @@ #include "chardev/char-fe.h" #include "monitor/monitor.h" =20 -// architecture specific stubs -#include "target/arm/mcdstub.h" +/* mcdstub header files */ +#include "mcd_shared_defines.h" +#include "mcdstub.h" =20 -// FIXME: delete the following line and check if it worked -#include "hw/core/sysemu-cpu-ops.h" +/* architecture specific stubs */ +#include "target/arm/mcdstub.h" =20 typedef struct { CharBackend chr; @@ -43,7 +41,7 @@ MCDState mcdserver_state; =20 void mcd_init_mcdserver_state(void) { - g_assert(!mcdserver_state.init); + g_assert(!mcdserver_state.init); memset(&mcdserver_state, 0, sizeof(MCDState)); mcdserver_state.init =3D true; mcdserver_state.str_buf =3D g_string_new(NULL); @@ -55,14 +53,15 @@ void mcd_init_mcdserver_state(void) * By default try to use no IRQs and no timers while single * stepping so as to make single stepping like a typical ICE HW step. */ - mcdserver_state.supported_sstep_flags =3D accel_supported_gdbstub_sste= p_flags(); + mcdserver_state.supported_sstep_flags =3D + accel_supported_gdbstub_sstep_flags(); mcdserver_state.sstep_flags =3D SSTEP_ENABLE | SSTEP_NOIRQ | SSTEP_NOT= IMER; mcdserver_state.sstep_flags &=3D mcdserver_state.supported_sstep_flags; =20 - // init query table + /* init query table */ init_query_cmds_table(mcdserver_state.mcd_query_cmds_table); =20 - // at this time the cpu hans't been started! -> set cpu_state + /* at this time the cpu hans't been started! -> set cpu_state */ mcd_cpu_state_st cpu_state =3D { .state =3D CORE_STATE_HALTED, .info_str =3D STATE_STR_INIT_HALTED, @@ -70,8 +69,9 @@ void mcd_init_mcdserver_state(void) mcdserver_state.cpu_state =3D cpu_state; } =20 -void init_query_cmds_table(MCDCmdParseEntry* mcd_query_cmds_table) { - // initalizes a list of all query commands +void init_query_cmds_table(MCDCmdParseEntry *mcd_query_cmds_table) +{ + /* initalizes a list of all query commands */ int cmd_number =3D 0; =20 MCDCmdParseEntry query_system =3D { @@ -270,7 +270,7 @@ int mcdserver_start(const char *device) return -1; } =20 - // if device =3D=3D default -> set device =3D tcp::1235 + /* if device =3D=3D default -> set device =3D tcp::1235 */ if (strcmp(device, "default") =3D=3D 0) { device =3D "tcp::1235"; } @@ -329,10 +329,12 @@ int mcd_chr_can_receive(void *opaque) void mcd_chr_receive(void *opaque, const uint8_t *buf, int size) { int i; -=09 + for (i =3D 0; i < size; i++) { mcd_read_byte(buf[i]); - if (buf[i]=3D=3D0) break; + if (buf[i] =3D=3D 0) { + break; + } } } =20 @@ -342,27 +344,30 @@ void mcd_read_byte(uint8_t ch) =20 if (mcdserver_state.last_packet->len) { if (ch =3D=3D TCP_NOT_ACKNOWLEDGED) { - // the previous packet was not akcnowledged - mcd_put_buffer(mcdserver_state.last_packet->data, mcdserver_st= ate.last_packet->len); - } - else if (ch =3D=3D TCP_ACKNOWLEDGED) { - // the previous packet was acknowledged + /* the previous packet was not akcnowledged */ + mcd_put_buffer(mcdserver_state.last_packet->data, + mcdserver_state.last_packet->len); + } else if (ch =3D=3D TCP_ACKNOWLEDGED) { + /* the previous packet was acknowledged */ } =20 if (ch =3D=3D TCP_ACKNOWLEDGED || ch =3D=3D TCP_COMMAND_START) { - // either acknowledged or a new communication starts -> discar= d previous packet + /* + * either acknowledged or a new communication starts + * -> discard previous packet + */ g_byte_array_set_size(mcdserver_state.last_packet, 0); } if (ch !=3D TCP_COMMAND_START) { - // skip to the next char + /* skip to the next char */ return; } } =20 - switch(mcdserver_state.state) { + switch (mcdserver_state.state) { case RS_IDLE: if (ch =3D=3D TCP_COMMAND_START) { - // start of command packet + /* start of command packet */ mcdserver_state.line_buf_index =3D 0; mcdserver_state.line_sum =3D 0; mcdserver_state.state =3D RS_GETLINE; @@ -370,16 +375,15 @@ void mcd_read_byte(uint8_t ch) break; case RS_GETLINE: if (ch =3D=3D TCP_COMMAND_END) { - // end of command + /* end of command */ mcdserver_state.line_buf[mcdserver_state.line_buf_index++] =3D= 0; mcdserver_state.state =3D RS_DATAEND; - } - else if (mcdserver_state.line_buf_index >=3D sizeof(mcdserver_stat= e.line_buf) - 1) { - // the input string is too long for the linebuffer! + } else if (mcdserver_state.line_buf_index >=3D + sizeof(mcdserver_state.line_buf) - 1) { + /* the input string is too long for the linebuffer! */ mcdserver_state.state =3D RS_IDLE; - } - else { - // copy the content to the line_buf + } else { + /* copy the content to the line_buf */ mcdserver_state.line_buf[mcdserver_state.line_buf_index++] =3D= ch; mcdserver_state.line_sum +=3D ch; } @@ -389,17 +393,15 @@ void mcd_read_byte(uint8_t ch) reply =3D TCP_ACKNOWLEDGED; mcd_put_buffer(&reply, 1); mcdserver_state.state =3D mcd_handle_packet(mcdserver_state.li= ne_buf); - } - else if (ch =3D=3D TCP_WAS_LAST) { + } else if (ch =3D=3D TCP_WAS_LAST) { reply =3D TCP_ACKNOWLEDGED; mcd_put_buffer(&reply, 1); mcdserver_state.state =3D mcd_handle_packet(mcdserver_state.li= ne_buf); - } - else { - // not acknowledged! + } else { + /* not acknowledged! */ reply =3D TCP_NOT_ACKNOWLEDGED; mcd_put_buffer(&reply, 1); - // waiting for package to get resent + /* waiting for package to get resent */ mcdserver_state.state =3D RS_IDLE; } break; @@ -410,7 +412,10 @@ void mcd_read_byte(uint8_t ch) =20 int mcd_handle_packet(const char *line_buf) { - // decides what function (handler) to call depending on the first char= acter in the line_buf + /* + * decides what function (handler) to call depending on + * the first character in the line_buf + */ const MCDCmdParseEntry *cmd_parser =3D NULL; =20 switch (line_buf[0]) { @@ -438,7 +443,8 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_vm_step, }; step_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_STEP, '\0' }; - strcpy(step_cmd_desc.schema, (char[2]) { ARG_SCHEMA_CORENUM, '= \0' }); + strcpy(step_cmd_desc.schema, + (char[2]) { ARG_SCHEMA_CORENUM, '\0' }); cmd_parser =3D &step_cmd_desc; } break; @@ -452,7 +458,7 @@ int mcd_handle_packet(const char *line_buf) } break; case TCP_CHAR_KILLQEMU: - // kill qemu completely + /* kill qemu completely */ error_report("QEMU: Terminated via MCDstub"); mcd_exit(0); exit(0); @@ -462,7 +468,8 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_gen_query, }; query_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_QUERY, '\0' }; - strcpy(query_cmd_desc.schema, (char[2]) { ARG_SCHEMA_STRING, '= \0' }); + strcpy(query_cmd_desc.schema, + (char[2]) { ARG_SCHEMA_STRING, '\0' }); cmd_parser =3D &query_cmd_desc; } break; @@ -472,7 +479,8 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_open_core, }; open_core_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_OPEN_CORE, '\0= ' }; - strcpy(open_core_cmd_desc.schema, (char[2]) { ARG_SCHEMA_COREN= UM, '\0' }); + strcpy(open_core_cmd_desc.schema, + (char[2]) { ARG_SCHEMA_CORENUM, '\0' }); cmd_parser =3D &open_core_cmd_desc; } break; @@ -481,7 +489,8 @@ int mcd_handle_packet(const char *line_buf) static MCDCmdParseEntry close_server_cmd_desc =3D { .handler =3D handle_close_server, }; - close_server_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_CLOSE_SERVE= R, '\0' }; + close_server_cmd_desc.cmd =3D + (char[2]) { TCP_CHAR_CLOSE_SERVER, '\0' }; cmd_parser =3D &close_server_cmd_desc; } break; @@ -491,7 +500,8 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_close_core, }; close_core_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_CLOSE_CORE, '= \0' }; - strcpy(close_core_cmd_desc.schema, (char[2]) { ARG_SCHEMA_CORE= NUM, '\0' }); + strcpy(close_core_cmd_desc.schema, + (char[2]) { ARG_SCHEMA_CORENUM, '\0' }); cmd_parser =3D &close_core_cmd_desc; } break; @@ -511,7 +521,8 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_read_register, }; read_reg_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_READ_REGISTER, = '\0' }; - strcpy(read_reg_cmd_desc.schema, (char[3]) { ARG_SCHEMA_CORENU= M, ARG_SCHEMA_UINT64_T, '\0' }); + strcpy(read_reg_cmd_desc.schema, + (char[3]) { ARG_SCHEMA_CORENUM, ARG_SCHEMA_UINT64_T, '\0' = }); cmd_parser =3D &read_reg_cmd_desc; } break; @@ -520,8 +531,11 @@ int mcd_handle_packet(const char *line_buf) static MCDCmdParseEntry write_reg_cmd_desc =3D { .handler =3D handle_write_register, }; - write_reg_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_WRITE_REGISTER= , '\0' }; - strcpy(write_reg_cmd_desc.schema, (char[5]) { ARG_SCHEMA_COREN= UM, ARG_SCHEMA_UINT64_T, ARG_SCHEMA_INT, ARG_SCHEMA_HEXDATA, '\0' }); + write_reg_cmd_desc.cmd =3D + (char[2]) { TCP_CHAR_WRITE_REGISTER, '\0' }; + strcpy(write_reg_cmd_desc.schema, + (char[5]) { ARG_SCHEMA_CORENUM, ARG_SCHEMA_UINT64_T, + ARG_SCHEMA_INT, ARG_SCHEMA_HEXDATA, '\0' }); cmd_parser =3D &write_reg_cmd_desc; } break; @@ -531,7 +545,9 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_read_memory, }; read_mem_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_READ_MEMORY, '\= 0' }; - strcpy(read_mem_cmd_desc.schema, (char[4]) { ARG_SCHEMA_CORENU= M, ARG_SCHEMA_UINT64_T, ARG_SCHEMA_INT, '\0' }); + strcpy(read_mem_cmd_desc.schema, + (char[4]) { ARG_SCHEMA_CORENUM, ARG_SCHEMA_UINT64_T, + ARG_SCHEMA_INT, '\0' }); cmd_parser =3D &read_mem_cmd_desc; } break; @@ -541,48 +557,57 @@ int mcd_handle_packet(const char *line_buf) .handler =3D handle_write_memory, }; write_mem_cmd_desc.cmd =3D (char[2]) { TCP_CHAR_WRITE_MEMORY, = '\0' }; - strcpy(write_mem_cmd_desc.schema, (char[5]) { ARG_SCHEMA_COREN= UM, ARG_SCHEMA_UINT64_T, ARG_SCHEMA_INT, ARG_SCHEMA_HEXDATA, '\0' }); + strcpy(write_mem_cmd_desc.schema, + (char[5]) { ARG_SCHEMA_CORENUM, ARG_SCHEMA_UINT64_T, + ARG_SCHEMA_INT, ARG_SCHEMA_HEXDATA, '\0' }); cmd_parser =3D &write_mem_cmd_desc; } break; default: - // command not supported + /* command not supported */ mcd_put_packet(""); break; } =20 if (cmd_parser) { - // parse commands and run the selected handler function + /* parse commands and run the selected handler function */ run_cmd_parser(line_buf, cmd_parser); } =20 return RS_IDLE; } =20 -void handle_vm_start(GArray *params, void *user_ctx) { - // TODO: add partial restart with arguments and so on +void handle_vm_start(GArray *params, void *user_ctx) +{ + /* TODO: add partial restart with arguments and so on */ mcd_vm_start(); } =20 -void handle_vm_step(GArray *params, void *user_ctx) { - // TODO: add partial restart with arguments and so on +void handle_vm_step(GArray *params, void *user_ctx) +{ + /* TODO: add partial restart with arguments and so on */ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; =20 CPUState *cpu =3D mcd_get_cpu(cpu_id); - mcd_vm_sstep(cpu); + int return_value =3D mcd_vm_sstep(cpu); + if (return_value !=3D 0) { + g_assert_not_reached(); + } } =20 =20 -void handle_vm_stop(GArray *params, void *user_ctx) { - // TODO: add partial stop with arguments and so on +void handle_vm_stop(GArray *params, void *user_ctx) +{ + /* TODO: add partial stop with arguments and so on */ mcd_vm_stop(); } =20 -void handle_gen_query(GArray *params, void *user_ctx) { +void handle_gen_query(GArray *params, void *user_ctx) +{ if (!params->len) { return; } - // iterate over all possible query functions and execute the right one + /* iterate over all possible query functions and execute the right one= */ if (process_string_cmd(NULL, get_param(params, 0)->data, mcdserver_state.mcd_query_cmds_table, ARRAY_SIZE(mcdserver_state.mcd_query_cmds_table= ))) { @@ -590,7 +615,8 @@ void handle_gen_query(GArray *params, void *user_ctx) { } } =20 -void run_cmd_parser(const char *data, const MCDCmdParseEntry *cmd) { +void run_cmd_parser(const char *data, const MCDCmdParseEntry *cmd) +{ if (!data) { return; } @@ -603,10 +629,10 @@ void run_cmd_parser(const char *data, const MCDCmdPar= seEntry *cmd) { } } =20 -uint64_t atouint64_t(const char* in) { +uint64_t atouint64_t(const char *in) +{ uint64_t res =3D 0; - for (int i =3D 0; i < strlen(in); ++i) - { + for (int i =3D 0; i < strlen(in); ++i) { const char c =3D in[i]; res *=3D 10; res +=3D c - '0'; @@ -615,33 +641,33 @@ uint64_t atouint64_t(const char* in) { return res; } =20 -int cmd_parse_params(const char *data, const char *schema, GArray *params)= { - =20 +int cmd_parse_params(const char *data, const char *schema, GArray *params) +{ + char data_buffer[64] =3D {0}; const char *remaining_data =3D data; - =20 - for (int i =3D 0; ihandler && cmd->cmd); =20 - // continue if data and command are different + /* continue if data and command are different */ if (strncmp(data, cmd->cmd, strlen(cmd->cmd))) { continue; } =20 if (strlen(cmd->schema)) { - // extract data for parameters - if (cmd_parse_params(&data[strlen(cmd->cmd)], cmd->schema, par= ams)) { + /* extract data for parameters */ + if (cmd_parse_params(&data[strlen(cmd->cmd)], cmd->schema, par= ams)) + { return -1; } } =20 - // call handler + /* call handler */ cmd->handler(params, user_ctx); return 0; } @@ -703,8 +732,9 @@ int process_string_cmd(void *user_ctx, const char *data= , const MCDCmdParseEntry return -1; } =20 -void mcd_exit(int code) { - // terminate qemu +void mcd_exit(int code) +{ + /* terminate qemu */ if (!mcdserver_state.init) { return; } @@ -712,13 +742,14 @@ void mcd_exit(int code) { qemu_chr_fe_deinit(&mcdserver_system_state.chr, true); } =20 -void mcd_chr_event(void *opaque, QEMUChrEvent event) { +void mcd_chr_event(void *opaque, QEMUChrEvent event) +{ int i; MCDState *s =3D (MCDState *) opaque; =20 switch (event) { case CHR_EVENT_OPENED: - // Start with first process attached, others detached + /* Start with first process attached, others detached */ for (i =3D 0; i < s->process_num; i++) { s->processes[i].attached =3D !i; } @@ -730,7 +761,8 @@ void mcd_chr_event(void *opaque, QEMUChrEvent event) { } } =20 -bool mcd_supports_guest_debug(void) { +bool mcd_supports_guest_debug(void) +{ const AccelOpsClass *ops =3D cpus_get_accel(); if (ops->supports_guest_debug) { return ops->supports_guest_debug(); @@ -739,15 +771,17 @@ bool mcd_supports_guest_debug(void) { } =20 #ifndef _WIN32 -void mcd_sigterm_handler(int signal) { +void mcd_sigterm_handler(int signal) +{ if (runstate_is_running()) { vm_stop(RUN_STATE_PAUSED); } } #endif =20 -void mcd_vm_state_change(void *opaque, bool running, RunState state) { - CPUState *cpu =3D mcdserver_state.c_cpu; +void mcd_vm_state_change(void *opaque, bool running, RunState state) +{ + CPUState *cpu =3D mcdserver_state.c_cpu; =20 if (mcdserver_state.state =3D=3D RS_INACTIVE) { return; @@ -755,7 +789,10 @@ void mcd_vm_state_change(void *opaque, bool running, R= unState state) { =20 if (cpu =3D=3D NULL) { if (running) { - // this is the case if qemu starts the vm before a mcd client = is connected + /* + * this is the case if qemu starts the vm + * before a mcd client is connected + */ const char *mcd_state; mcd_state =3D CORE_STATE_RUNNING; const char *info_str; @@ -798,13 +835,11 @@ void mcd_vm_state_change(void *opaque, bool running, = RunState state) { stop_str =3D STATE_STR_BREAK_UNKNOWN; } cpu->watchpoint_hit =3D NULL; - } - else if (cpu->singlestep_enabled){ - // we land here when a single step is performed + } else if (cpu->singlestep_enabled) { + /* we land here when a single step is performed */ cpu_single_step(cpu, 0); stop_str =3D STATE_STEP_PERFORMED; - } - else { + } else { trig_id =3D MCD_TRIG_TYPE_IP; stop_str =3D STATE_STR_BREAK_HW; tb_flush(cpu); @@ -816,7 +851,6 @@ void mcd_vm_state_change(void *opaque, bool running, Ru= nState state) { stop_str =3D ""; break; case RUN_STATE_WATCHDOG: - printf("runstate watchdog hit\n"); info_str =3D STATE_STR_UNKNOWN(cpu->cpu_index); mcd_state =3D CORE_STATE_UNKNOWN; stop_str =3D ""; @@ -828,30 +862,38 @@ void mcd_vm_state_change(void *opaque, bool running, = RunState state) { break; } =20 - // set state for c_cpu + /* set state for c_cpu */ mcdserver_state.cpu_state.state =3D mcd_state; mcdserver_state.cpu_state.trig_id =3D trig_id; mcdserver_state.cpu_state.stop_str =3D stop_str; mcdserver_state.cpu_state.info_str =3D info_str; } =20 -int mcd_put_packet(const char *buf) { +int mcd_put_packet(const char *buf) +{ return mcd_put_packet_binary(buf, strlen(buf), false); } =20 -void mcd_put_strbuf(void) { +void mcd_put_strbuf(void) +{ mcd_put_packet(mcdserver_state.str_buf->str); } =20 -int mcd_put_packet_binary(const char *buf, int len, bool dump) { - for(;;) { +int mcd_put_packet_binary(const char *buf, int len, bool dump) +{ + for (;;) { g_byte_array_set_size(mcdserver_state.last_packet, 0); - g_byte_array_append(mcdserver_state.last_packet, (const uint8_t *)= (char[2]) { TCP_COMMAND_START, '\0' }, 1); - g_byte_array_append(mcdserver_state.last_packet, (const uint8_t *)= buf, len); - g_byte_array_append(mcdserver_state.last_packet, (const uint8_t *)= (char[2]) { TCP_COMMAND_END, '\0' }, 1); - g_byte_array_append(mcdserver_state.last_packet, (const uint8_t *)= (char[2]) { TCP_WAS_LAST, '\0' }, 1); - - mcd_put_buffer(mcdserver_state.last_packet->data, mcdserver_state.= last_packet->len); + g_byte_array_append(mcdserver_state.last_packet, + (const uint8_t *) (char[2]) { TCP_COMMAND_START, '\0' }, 1); + g_byte_array_append(mcdserver_state.last_packet, + (const uint8_t *) buf, len); + g_byte_array_append(mcdserver_state.last_packet, + (const uint8_t *) (char[2]) { TCP_COMMAND_END, '\0' }, 1); + g_byte_array_append(mcdserver_state.last_packet, + (const uint8_t *) (char[2]) { TCP_WAS_LAST, '\0' }, 1); + + mcd_put_buffer(mcdserver_state.last_packet->data, + mcdserver_state.last_packet->len); =20 if (mcd_got_immediate_ack()) { break; @@ -860,28 +902,33 @@ int mcd_put_packet_binary(const char *buf, int len, b= ool dump) { return 0; } =20 -bool mcd_got_immediate_ack(void) { +bool mcd_got_immediate_ack(void) +{ return true; } =20 -void mcd_put_buffer(const uint8_t *buf, int len) { +void mcd_put_buffer(const uint8_t *buf, int len) +{ qemu_chr_fe_write_all(&mcdserver_system_state.chr, buf, len); } =20 -MCDProcess *mcd_get_cpu_process(CPUState *cpu) { +MCDProcess *mcd_get_cpu_process(CPUState *cpu) +{ return mcd_get_process(mcd_get_cpu_pid(cpu)); } =20 -uint32_t mcd_get_cpu_pid(CPUState *cpu) { +uint32_t mcd_get_cpu_pid(CPUState *cpu) +{ if (cpu->cluster_index =3D=3D UNASSIGNED_CLUSTER_INDEX) { - // Return the default process' PID + /* Return the default process' PID */ int index =3D mcdserver_state.process_num - 1; return mcdserver_state.processes[index].pid; } return cpu->cluster_index + 1; } =20 -MCDProcess *mcd_get_process(uint32_t pid) { +MCDProcess *mcd_get_process(uint32_t pid) +{ int i; =20 if (!pid) { @@ -898,7 +945,8 @@ MCDProcess *mcd_get_process(uint32_t pid) { return NULL; } =20 -CPUState* mcd_get_cpu(uint32_t i_cpu_index) { +CPUState *mcd_get_cpu(uint32_t i_cpu_index) +{ CPUState *cpu =3D first_cpu; =20 while (cpu) { @@ -911,7 +959,8 @@ CPUState* mcd_get_cpu(uint32_t i_cpu_index) { return cpu; } =20 -CPUState *mcd_first_attached_cpu(void) { +CPUState *mcd_first_attached_cpu(void) +{ CPUState *cpu =3D first_cpu; MCDProcess *process =3D mcd_get_cpu_process(cpu); =20 @@ -922,7 +971,8 @@ CPUState *mcd_first_attached_cpu(void) { return cpu; } =20 -CPUState *mcd_next_attached_cpu(CPUState *cpu) { +CPUState *mcd_next_attached_cpu(CPUState *cpu) +{ cpu =3D CPU_NEXT(cpu); =20 while (cpu) { @@ -936,11 +986,13 @@ CPUState *mcd_next_attached_cpu(CPUState *cpu) { return cpu; } =20 -int mcd_get_cpu_index(CPUState *cpu) { +int mcd_get_cpu_index(CPUState *cpu) +{ return cpu->cpu_index + 1; } =20 -CPUState *get_first_cpu_in_process(MCDProcess *process) { +CPUState *get_first_cpu_in_process(MCDProcess *process) +{ CPUState *cpu; =20 CPU_FOREACH(cpu) { @@ -952,7 +1004,8 @@ CPUState *get_first_cpu_in_process(MCDProcess *process= ) { return NULL; } =20 -CPUState *find_cpu(uint32_t thread_id) { +CPUState *find_cpu(uint32_t thread_id) +{ CPUState *cpu; =20 CPU_FOREACH(cpu) { @@ -965,8 +1018,9 @@ CPUState *find_cpu(uint32_t thread_id) { } =20 =20 -void parse_reg_xml(const char *xml, int size, GArray* registers) { - // iterates over the complete xml file +void parse_reg_xml(const char *xml, int size, GArray *registers) +{ + /* iterates over the complete xml file */ int i, j; int still_to_skip =3D 0; char argument[64] =3D {0}; @@ -987,108 +1041,103 @@ void parse_reg_xml(const char *xml, int size, GArr= ay* registers) { c =3D xml[i]; c_ptr =3D &c; =20 - if (still_to_skip>0) { - // skip unwanted chars - still_to_skip --; + if (still_to_skip > 0) { + /* skip unwanted chars */ + still_to_skip--; continue; } =20 - if (strncmp(&xml[i], "", 2)=3D=3D0) { - // end of register info + } else if (is_reg) { + if (strncmp(&xml[i], "/>", 2) =3D=3D 0) { + /* end of register info */ still_to_skip =3D 1; is_reg =3D false; =20 - // create empty register + /* create empty register */ mcd_reg_st my_register =3D (const struct mcd_reg_st){ 0 }; =20 - // add found attribtues - for (j =3D 0; jlen; j++) { + /* add found attribtues */ + for (j =3D 0; j < reg_data->len; j++) { attribute_j =3D g_array_index(reg_data, xml_attrib, j); =20 argument_j =3D attribute_j.argument; value_j =3D attribute_j.value; =20 - if (strcmp(argument_j, "name")=3D=3D0) { + if (strcmp(argument_j, "name") =3D=3D 0) { strcpy(my_register.name, value_j); - } - else if (strcmp(argument_j, "regnum")=3D=3D0) { + } else if (strcmp(argument_j, "regnum") =3D=3D 0) { my_register.id =3D atoi(value_j); - } - else if (strcmp(argument_j, "bitsize")=3D=3D0) { + } else if (strcmp(argument_j, "bitsize") =3D=3D 0) { my_register.bitsize =3D atoi(value_j); - } - else if (strcmp(argument_j, "type")=3D=3D0) { + } else if (strcmp(argument_j, "type") =3D=3D 0) { strcpy(my_register.type, value_j); - } - else if (strcmp(argument_j, "group")=3D=3D0) { + } else if (strcmp(argument_j, "group") =3D=3D 0) { strcpy(my_register.group, value_j); } } - // store register + /* store register */ g_array_append_vals(registers, (gconstpointer)&my_register= , 1); - // free memory + /* free memory */ g_array_free(reg_data, false); - } - else { - // store info for register + } else { + /* store info for register */ switch (c) { - case ' ': - break; - case '=3D': - is_argument =3D false; - break; - case '"': - if (is_value) { - // end of value reached - is_value =3D false; - // store arg-val combo - xml_attrib current_attribute; - strcpy(current_attribute.argument, argument); - strcpy(current_attribute.value, value); - g_array_append_vals(reg_data, (gconstpointer)&= current_attribute, 1); - memset(argument, 0, sizeof(argument)); - memset(value, 0, sizeof(value)); - } - else { - //start of value - is_value =3D true; - } - break; - default: - if (is_argument) { - strncat(argument, c_ptr, 1); - } - else if (is_value) { - strncat(value, c_ptr, 1); - } - else { - is_argument =3D true; - strncat(argument, c_ptr, 1); - } - break; + case ' ': + break; + case '=3D': + is_argument =3D false; + break; + case '"': + if (is_value) { + /* end of value reached */ + is_value =3D false; + /* store arg-val combo */ + xml_attrib current_attribute; + strcpy(current_attribute.argument, argument); + strcpy(current_attribute.value, value); + g_array_append_vals(reg_data, + (gconstpointer)¤t_attribute, 1); + memset(argument, 0, sizeof(argument)); + memset(value, 0, sizeof(value)); + } else { + /*start of value */ + is_value =3D true; + } + break; + default: + if (is_argument) { + strncat(argument, c_ptr, 1); + } else if (is_value) { + strncat(value, c_ptr, 1); + } else { + is_argument =3D true; + strncat(argument, c_ptr, 1); + } + break; } } } } } =20 -int int_cmp(gconstpointer a, gconstpointer b) { - if (*(int*)a =3D=3D *(int*)b) { +int int_cmp(gconstpointer a, gconstpointer b) +{ + int int_a =3D *(int *)a; + int int_b =3D *(int *)b; + if (int_a =3D=3D int_b) { return 0; - } - else { + } else { return 1; } } =20 -int mcd_arm_store_mem_spaces(CPUState *cpu, GArray* memspaces) { +int mcd_arm_store_mem_spaces(CPUState *cpu, GArray *memspaces) +{ int nr_address_spaces =3D cpu->num_ases; =20 mcd_mem_space_st space1 =3D { @@ -1117,7 +1166,7 @@ int mcd_arm_store_mem_spaces(CPUState *cpu, GArray* m= emspaces) { }; g_array_append_vals(memspaces, (gconstpointer)&space2, 1); =20 - if (nr_address_spaces=3D=3D2) { + if (nr_address_spaces =3D=3D 2) { mcd_mem_space_st space3 =3D { .name =3D "Secure", .id =3D 3, @@ -1143,7 +1192,7 @@ int mcd_arm_store_mem_spaces(CPUState *cpu, GArray* m= emspaces) { }; g_array_append_vals(memspaces, (gconstpointer)&space4, 1); } - // TODO: get dynamically how the per (CP15) space is called + /* TODO: get dynamically how the per (CP15) space is called */ mcd_mem_space_st space5 =3D { .name =3D "GPR Registers", .id =3D 5, @@ -1172,7 +1221,8 @@ int mcd_arm_store_mem_spaces(CPUState *cpu, GArray* m= emspaces) { return 0; } =20 -int init_resets(GArray* resets) { +int init_resets(GArray *resets) +{ mcd_reset_st system_reset =3D { .id =3D 0, .name =3D RESET_SYSTEM}; mcd_reset_st gpr_reset =3D { .id =3D 1, .name =3D RESET_GPR}; mcd_reset_st memory_reset =3D { .id =3D 2, .name =3D RESET_MEMORY}; @@ -1182,32 +1232,41 @@ int init_resets(GArray* resets) { return 0; } =20 -int init_trigger(mcd_trigger_st* trigger) { - trigger->type =3D (MCD_TRIG_TYPE_IP | MCD_TRIG_TYPE_READ | MCD_TRIG_TY= PE_WRITE | MCD_TRIG_TYPE_RW); +int init_trigger(mcd_trigger_st *trigger) +{ + trigger->type =3D (MCD_TRIG_TYPE_IP | MCD_TRIG_TYPE_READ | + MCD_TRIG_TYPE_WRITE | MCD_TRIG_TYPE_RW); trigger->option =3D (MCD_TRIG_OPT_DATA_IS_CONDITION); trigger->action =3D (MCD_TRIG_ACTION_DBG_DEBUG); trigger->nr_trigger =3D 4; return 0; } =20 -void handle_open_server(GArray *params, void *user_ctx) { - // initialize core-independent data +void handle_open_server(GArray *params, void *user_ctx) +{ + /* initialize core-independent data */ int return_value =3D 0; mcdserver_state.resets =3D g_array_new(false, true, sizeof(mcd_reset_s= t)); return_value =3D init_resets(mcdserver_state.resets); - if (return_value!=3D0) assert(0); + if (return_value !=3D 0) { + g_assert_not_reached(); + } return_value =3D init_trigger(&mcdserver_state.trigger); - if (return_value!=3D0) assert(0); + if (return_value !=3D 0) { + g_assert_not_reached(); + } =20 - mcd_put_packet(TCP_HANDSHAKE_SUCCESS);=20 + mcd_put_packet(TCP_HANDSHAKE_SUCCESS); } =20 -void handle_query_system(GArray *params, void *user_ctx) { +void handle_query_system(GArray *params, void *user_ctx) +{ mcd_put_packet(MCD_SYSTEM_NAME); } =20 -void handle_query_cores(GArray *params, void *user_ctx) { - // get first cpu +void handle_query_cores(GArray *params, void *user_ctx) +{ + /* get first cpu */ CPUState *cpu =3D mcd_first_attached_cpu(); if (!cpu) { return; @@ -1218,123 +1277,136 @@ void handle_query_cores(GArray *params, void *use= r_ctx) { =20 CPUClass *cc =3D CPU_GET_CLASS(cpu); gchar *arch =3D cc->gdb_arch_name(cpu); - =20 + int nr_cores =3D cpu->nr_cores; char device_name[] =3D DEVICE_NAME_TEMPLATE(arch); g_string_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%s.%s=3D%d.", - TCP_ARGUMENT_DEVICE, device_name, TCP_ARGUMENT_CORE, cpu_model, TC= P_ARGUMENT_AMOUNT_CORE, nr_cores); + TCP_ARGUMENT_DEVICE, device_name, TCP_ARGUMENT_CORE, cpu_model, + TCP_ARGUMENT_AMOUNT_CORE, nr_cores); mcd_put_strbuf(); g_free(arch); } =20 -int mcd_arm_parse_core_xml_file(CPUClass *cc, GArray* reggroups, GArray* r= egisters, int* current_group_id) { +int mcd_arm_parse_core_xml_file(CPUClass *cc, GArray *reggroups, + GArray *registers, int *current_group_id) +{ const char *xml_filename =3D NULL; const char *current_xml_filename =3D NULL; const char *xml_content =3D NULL; int i =3D 0; =20 - // 1. get correct file + /* 1. get correct file */ xml_filename =3D cc->gdb_core_xml_file; for (i =3D 0; ; i++) { current_xml_filename =3D xml_builtin[i][0]; - if (!current_xml_filename || (strncmp(current_xml_filename, xml_fi= lename, strlen(xml_filename)) =3D=3D 0 + if (!current_xml_filename || (strncmp(current_xml_filename, + xml_filename, strlen(xml_filename)) =3D=3D 0 && strlen(current_xml_filename) =3D=3D strlen(xml_filename))) - break; + break; } - // without gpr registers we can do nothing + /* without gpr registers we can do nothing */ if (!current_xml_filename) { return -1; } =20 - // 2. add group for gpr registers - mcd_reg_group_st gprregs =3D { .name =3D "GPR Registers", .id =3D *cur= rent_group_id }; + /* 2. add group for gpr registers */ + mcd_reg_group_st gprregs =3D { + .name =3D "GPR Registers", + .id =3D *current_group_id + }; g_array_append_vals(reggroups, (gconstpointer)&gprregs, 1); *current_group_id =3D *current_group_id + 1; =20 - // 3. parse xml + /* 3. parse xml */ xml_content =3D xml_builtin[i][1]; parse_reg_xml(xml_content, strlen(xml_content), registers); return 0; } =20 -int mcd_arm_parse_general_xml_files(CPUState *cpu, GArray* reggroups, GArr= ay* registers, int* current_group_id) { +int mcd_arm_parse_general_xml_files(CPUState *cpu, GArray *reggroups, + GArray *registers, int *current_group_id) { const char *xml_filename =3D NULL; const char *current_xml_filename =3D NULL; const char *xml_content =3D NULL; int i =3D 0; =20 - // iterate over all gdb xml files=20 + /* iterate over all gdb xml files*/ GDBRegisterState *r; for (r =3D cpu->gdb_regs; r; r =3D r->next) { xml_filename =3D r->xml; xml_content =3D NULL; =20 - // 1. get xml content + /* 1. get xml content */ xml_content =3D arm_mcd_get_dynamic_xml(cpu, xml_filename); if (xml_content) { - if (strcmp(xml_filename, "system-registers.xml")=3D=3D0) { - // these are the coprocessor register - mcd_reg_group_st corprocessorregs =3D { .name =3D "CP15 Re= gisters", .id =3D *current_group_id }; - g_array_append_vals(reggroups, (gconstpointer)&corprocesso= rregs, 1); + if (strcmp(xml_filename, "system-registers.xml") =3D=3D 0) { + /* these are the coprocessor register */ + mcd_reg_group_st corprocessorregs =3D { + .name =3D "CP15 Registers", + .id =3D *current_group_id + }; + g_array_append_vals(reggroups, + (gconstpointer)&corprocessorregs, 1); *current_group_id =3D *current_group_id + 1; - } =20 - } - else { - // its not a coprocessor xml -> it is a static xml file + } + } else { + /* its not a coprocessor xml -> it is a static xml file */ for (i =3D 0; ; i++) { current_xml_filename =3D xml_builtin[i][0]; - if (!current_xml_filename || (strncmp(current_xml_filename= , xml_filename, strlen(xml_filename)) =3D=3D 0 + if (!current_xml_filename || (strncmp(current_xml_filename, + xml_filename, strlen(xml_filename)) =3D=3D 0 && strlen(current_xml_filename) =3D=3D strlen(xml_file= name))) - break; + break; } if (current_xml_filename) { xml_content =3D xml_builtin[i][1]; - } - else { - printf("no data found for %s\n", xml_filename); + } else { continue; } } - // 2. parse xml + /* 2. parse xml */ parse_reg_xml(xml_content, strlen(xml_content), registers); } return 0; } =20 -int mcd_arm_get_additional_register_info(GArray* reggroups, GArray* regist= ers) { +int mcd_arm_get_additional_register_info(GArray *reggroups, GArray *regist= ers) +{ GList *register_numbers =3D NULL; mcd_reg_st *current_register; int i =3D 0; int id_neg_offset =3D 0; int effective_id =3D 0; =20 - // iterate over all registers + /* iterate over all registers */ for (i =3D 0; i < registers->len; i++) { current_register =3D &(g_array_index(registers, mcd_reg_st, i)); - // 1. ad the id + /* 1. ad the id */ if (current_register->id) { - // id is already in place - // NOTE: qemu doesn't emulate the FPA regs (so we are missing = the indices 16 to 24) + /* + *id is already in place + *NOTE: qemu doesn't emulate the FPA regs + *(so we are missing the indices 16 to 24) + */ int used_id =3D current_register->id; register_numbers =3D g_list_append(register_numbers, &used_id); - id_neg_offset ++; - } - else { + id_neg_offset++; + } else { effective_id =3D i - id_neg_offset; - if (g_list_find_custom(register_numbers, &effective_id, (GComp= areFunc)int_cmp)!=3DNULL) { - id_neg_offset --; + if (g_list_find_custom(register_numbers, &effective_id, + (GCompareFunc)int_cmp) !=3D NULL) { + id_neg_offset--; } current_register->id =3D i - id_neg_offset; } - // 2. add mcd_reg_group_id and mcd_mem_space_id - if (strcmp(current_register->group, "cp_regs")=3D=3D0) { - // coprocessor registers + /* 2. add mcd_reg_group_id and mcd_mem_space_id */ + if (strcmp(current_register->group, "cp_regs") =3D=3D 0) { + /* coprocessor registers */ current_register->mcd_reg_group_id =3D 2; current_register->mcd_mem_space_id =3D 6; - // TODO: get info for opcode - } - else { - // gpr register + /* TODO: get info for opcode */ + } else { + /* gpr register */ current_register->mcd_reg_group_id =3D 1; current_register->mcd_mem_space_id =3D 5; } @@ -1343,7 +1415,8 @@ int mcd_arm_get_additional_register_info(GArray* regg= roups, GArray* registers) { return 0; } =20 -void handle_open_core(GArray *params, void *user_ctx) { +void handle_open_core(GArray *params, void *user_ctx) +{ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; CPUState *cpu =3D mcd_get_cpu(cpu_id); mcdserver_state.c_cpu =3D cpu; @@ -1351,315 +1424,373 @@ void handle_open_core(GArray *params, void *user_= ctx) { gchar *arch =3D cc->gdb_arch_name(cpu); int return_value =3D 0; =20 - // prepare data strucutures - GArray* memspaces =3D g_array_new(false, true, sizeof(mcd_mem_space_st= )); - GArray* reggroups =3D g_array_new(false, true, sizeof(mcd_reg_group_st= )); - GArray* registers =3D g_array_new(false, true, sizeof(mcd_reg_st)); - =20 - if (strcmp(arch, "arm")=3D=3D0) { - // TODO: make group and memspace ids dynamic + /* prepare data strucutures */ + GArray *memspaces =3D g_array_new(false, true, sizeof(mcd_mem_space_st= )); + GArray *reggroups =3D g_array_new(false, true, sizeof(mcd_reg_group_st= )); + GArray *registers =3D g_array_new(false, true, sizeof(mcd_reg_st)); + + if (strcmp(arch, "arm") =3D=3D 0) { + /* TODO: make group and memspace ids dynamic */ int current_group_id =3D 1; - // 1. store mem spaces + /* 1. store mem spaces */ return_value =3D mcd_arm_store_mem_spaces(cpu, memspaces); - if (return_value!=3D0) assert(0); - // 2. parse core xml - return_value =3D mcd_arm_parse_core_xml_file(cc, reggroups, regist= ers, ¤t_group_id); - if (return_value!=3D0) assert(0); - // 3. parse other xmls - return_value =3D mcd_arm_parse_general_xml_files(cpu, reggroups, r= egisters, ¤t_group_id); - if (return_value!=3D0) assert(0); - // 4. add additional data the the regs from the xmls - return_value =3D mcd_arm_get_additional_register_info(reggroups, r= egisters); - if (return_value!=3D0) assert(0); - // 5. store all found data + if (return_value !=3D 0) { + g_assert_not_reached(); + } + /* 2. parse core xml */ + return_value =3D mcd_arm_parse_core_xml_file(cc, reggroups, + registers, ¤t_group_id); + if (return_value !=3D 0) { + g_assert_not_reached(); + } + /* 3. parse other xmls */ + return_value =3D mcd_arm_parse_general_xml_files(cpu, reggroups, + registers, ¤t_group_id); + if (return_value !=3D 0) { + g_assert_not_reached(); + } + /* 4. add additional data the the regs from the xmls */ + return_value =3D mcd_arm_get_additional_register_info(reggroups, + registers); + if (return_value !=3D 0) { + g_assert_not_reached(); + } + /* 5. store all found data */ if (g_list_nth(mcdserver_state.all_memspaces, cpu_id)) { - GList* memspaces_ptr =3D g_list_nth(mcdserver_state.all_memspa= ces, cpu_id); + GList *memspaces_ptr =3D + g_list_nth(mcdserver_state.all_memspaces, cpu_id); memspaces_ptr->data =3D memspaces; - } - else { - mcdserver_state.all_memspaces =3D g_list_insert(mcdserver_stat= e.all_memspaces, memspaces, cpu_id); + } else { + mcdserver_state.all_memspaces =3D + g_list_insert(mcdserver_state.all_memspaces, memspaces, cp= u_id); } if (g_list_nth(mcdserver_state.all_reggroups, cpu_id)) { - GList* reggroups_ptr =3D g_list_nth(mcdserver_state.all_reggro= ups, cpu_id); + GList *reggroups_ptr =3D + g_list_nth(mcdserver_state.all_reggroups, cpu_id); reggroups_ptr->data =3D reggroups; - } - else { - mcdserver_state.all_reggroups =3D g_list_insert(mcdserver_stat= e.all_reggroups, reggroups, cpu_id); + } else { + mcdserver_state.all_reggroups =3D + g_list_insert(mcdserver_state.all_reggroups, reggroups, cp= u_id); } if (g_list_nth(mcdserver_state.all_registers, cpu_id)) { - GList* registers_ptr =3D g_list_nth(mcdserver_state.all_regist= ers, cpu_id); + GList *registers_ptr =3D + g_list_nth(mcdserver_state.all_registers, cpu_id); registers_ptr->data =3D registers; + } else { + mcdserver_state.all_registers =3D + g_list_insert(mcdserver_state.all_registers, registers, cp= u_id); } - else { - mcdserver_state.all_registers =3D g_list_insert(mcdserver_stat= e.all_registers, registers, cpu_id); - } - } - else { - // we don't support other architectures - assert(0); + } else { + /* we don't support other architectures */ + g_assert_not_reached(); } =20 g_free(arch); } =20 -void handle_query_reset_f(GArray *params, void *user_ctx) { - // TODO: vull reset over the qemu monitor - =20 - // 1. check length +void handle_query_reset_f(GArray *params, void *user_ctx) +{ + /* TODO: vull reset over the qemu monitor */ + + /* 1. check length */ int nb_resets =3D mcdserver_state.resets->len; if (nb_resets =3D=3D 1) { - // indicates this is the last packet + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { + } else { g_string_printf(mcdserver_state.str_buf, "1!"); } - // 2. send data + /* 2. send data */ mcd_reset_st reset =3D g_array_index(mcdserver_state.resets, mcd_reset= _st, 0); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.", TC= P_ARGUMENT_NAME, reset.name, TCP_ARGUMENT_ID, reset.id); + g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.", + TCP_ARGUMENT_NAME, reset.name, TCP_ARGUMENT_ID, reset.id); mcd_put_strbuf(); } =20 -void handle_query_reset_c(GArray *params, void *user_ctx) { - // reset options are the same for every cpu! +void handle_query_reset_c(GArray *params, void *user_ctx) +{ + /* reset options are the same for every cpu! */ int query_index =3D get_param(params, 0)->query_handle; - =20 - // 1. check weather this was the last mem space + + /* 1. check weather this was the last mem space */ int nb_groups =3D mcdserver_state.resets->len; - if (query_index+1 =3D=3D nb_groups) { - // indicates this is the last packet + if (query_index + 1 =3D=3D nb_groups) { + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { - g_string_printf(mcdserver_state.str_buf, "%d!", query_index+1); + } else { + g_string_printf(mcdserver_state.str_buf, "%d!", query_index + 1); } =20 - // 2. send data - mcd_reset_st reset =3D g_array_index(mcdserver_state.resets, mcd_reset= _st, query_index); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.", TC= P_ARGUMENT_NAME, reset.name, TCP_ARGUMENT_ID, reset.id); + /* 2. send data */ + mcd_reset_st reset =3D g_array_index(mcdserver_state.resets, + mcd_reset_st, query_index); + g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.", + TCP_ARGUMENT_NAME, reset.name, TCP_ARGUMENT_ID, reset.id); mcd_put_strbuf(); } =20 -void handle_close_core(GArray *params, void *user_ctx) { - // free memory for correct core +void handle_close_core(GArray *params, void *user_ctx) +{ + /* free memory for correct core */ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; - GArray* memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); - mcdserver_state.all_memspaces =3D g_list_remove(mcdserver_state.all_me= mspaces, memspaces); + GArray *memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); + mcdserver_state.all_memspaces =3D + g_list_remove(mcdserver_state.all_memspaces, memspaces); g_array_free(memspaces, TRUE); - GArray* reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); - mcdserver_state.all_reggroups =3D g_list_remove(mcdserver_state.all_re= ggroups, reggroups); + GArray *reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); + mcdserver_state.all_reggroups =3D + g_list_remove(mcdserver_state.all_reggroups, reggroups); g_array_free(reggroups, TRUE); - GArray* registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); - mcdserver_state.all_registers =3D g_list_remove(mcdserver_state.all_re= gisters, registers); + GArray *registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); + mcdserver_state.all_registers =3D + g_list_remove(mcdserver_state.all_registers, registers); g_array_free(registers, TRUE); } =20 -void handle_close_server(GArray *params, void *user_ctx) { +void handle_close_server(GArray *params, void *user_ctx) +{ uint32_t pid =3D 1; MCDProcess *process =3D mcd_get_process(pid); =20 - // 1. free memory - // TODO: do this only if there are no processes attached anymore! + /* + * 1. free memory + * TODO: do this only if there are no processes attached anymore! + */ g_list_free(mcdserver_state.all_memspaces); g_list_free(mcdserver_state.all_reggroups); g_list_free(mcdserver_state.all_registers); g_array_free(mcdserver_state.resets, TRUE); =20 - // 2. detach + /* 2. detach */ process->attached =3D false; =20 - // 3. reset process + /* 3. reset process */ if (pid =3D=3D mcd_get_cpu_pid(mcdserver_state.c_cpu)) { mcdserver_state.c_cpu =3D mcd_first_attached_cpu(); } if (!mcdserver_state.c_cpu) { - // no more processes attached + /* no more processes attached */ mcd_disable_syscalls(); mcd_vm_start(); } } =20 -void handle_query_trigger(GArray *params, void *user_ctx) { +void handle_query_trigger(GArray *params, void *user_ctx) +{ mcd_trigger_st trigger =3D mcdserver_state.trigger; g_string_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%d.%s=3D%d.%s= =3D%d.", - TCP_ARGUMENT_AMOUNT_TRIGGER, trigger.nr_trigger, TCP_ARGUMENT_TYP= E, trigger.type, - TCP_ARGUMENT_OPTION, trigger.option, TCP_ARGUMENT_ACTION, trigger.= action); + TCP_ARGUMENT_AMOUNT_TRIGGER, trigger.nr_trigger, + TCP_ARGUMENT_TYPE, trigger.type, TCP_ARGUMENT_OPTION, trigger.opti= on, + TCP_ARGUMENT_ACTION, trigger.action); mcd_put_strbuf(); } =20 -void mcd_vm_start(void) { +void mcd_vm_start(void) +{ if (!runstate_needs_reset() && !runstate_is_running()) { vm_start(); } } =20 -int mcd_vm_sstep(CPUState *cpu) { +int mcd_vm_sstep(CPUState *cpu) +{ cpu_single_step(mcdserver_state.c_cpu, mcdserver_state.sstep_flags); mcd_vm_start(); return 0; } =20 -void mcd_vm_stop(void) { +void mcd_vm_stop(void) +{ if (runstate_is_running()) { vm_stop(RUN_STATE_DEBUG); } } =20 -void handle_query_mem_spaces_f(GArray *params, void *user_ctx) { - // 1. get correct memspaces and set the query_cpu +void handle_query_mem_spaces_f(GArray *params, void *user_ctx) +{ + /* 1. get correct memspaces and set the query_cpu */ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; mcdserver_state.query_cpu_id =3D cpu_id; - GArray* memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); + GArray *memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); =20 - // 2. check length + /* 2. check length */ int nb_groups =3D memspaces->len; if (nb_groups =3D=3D 1) { - // indicates this is the last packet + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { + } else { g_string_printf(mcdserver_state.str_buf, "1!"); } =20 - // 3. send data + /* 3. send data */ mcd_mem_space_st space =3D g_array_index(memspaces, mcd_mem_space_st, = 0); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.%s=3D= %d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%ld.%s=3D%ld.%s=3D%d.", - TCP_ARGUMENT_NAME, space.name, TCP_ARGUMENT_ID, space.id, TCP_ARGU= MENT_TYPE, space.type, - TCP_ARGUMENT_BITS_PER_MAU, space.bits_per_mau, TCP_ARGUMENT_INVARI= ANCE, space.invariance, TCP_ARGUMENT_ENDIAN, space.endian, - TCP_ARGUMENT_MIN, space.min_addr, TCP_ARGUMENT_MAX, space.max_addr, - TCP_ARGUMENT_SUPPORTED_ACCESS_OPTIONS, space.supported_access_opti= ons); + g_string_append_printf(mcdserver_state.str_buf, + "%s=3D%s.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%ld.%s=3D%ld= .%s=3D%d.", + TCP_ARGUMENT_NAME, space.name, TCP_ARGUMENT_ID, space.id, + TCP_ARGUMENT_TYPE, space.type, TCP_ARGUMENT_BITS_PER_MAU, + space.bits_per_mau, TCP_ARGUMENT_INVARIANCE, space.invariance, + TCP_ARGUMENT_ENDIAN, space.endian, TCP_ARGUMENT_MIN, space.min_add= r, + TCP_ARGUMENT_MAX, space.max_addr, TCP_ARGUMENT_SUPPORTED_ACCESS_OP= TIONS, + space.supported_access_options); mcd_put_strbuf(); } =20 -void handle_query_mem_spaces_c(GArray *params, void *user_ctx) { - // this funcitons send all mem spaces except for the first - // 1. get parameter and memspace +void handle_query_mem_spaces_c(GArray *params, void *user_ctx) +{ + /* + * this funcitons send all mem spaces except for the first + * 1. get parameter and memspace + */ int query_index =3D get_param(params, 0)->query_handle; uint32_t cpu_id =3D mcdserver_state.query_cpu_id; - GArray* memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); + GArray *memspaces =3D g_list_nth_data(mcdserver_state.all_memspaces, c= pu_id); =20 - // 2. check weather this was the last mem space + /* 2. check weather this was the last mem space */ int nb_groups =3D memspaces->len; - if (query_index+1 =3D=3D nb_groups) { - // indicates this is the last packet + if (query_index + 1 =3D=3D nb_groups) { + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { - g_string_printf(mcdserver_state.str_buf, "%d!", query_index+1); - } - - // 3. send the correct memspace - mcd_mem_space_st space =3D g_array_index(memspaces, mcd_mem_space_st, = query_index); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.%s=3D= %d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%ld.%s=3D%ld.%s=3D%d.", - TCP_ARGUMENT_NAME, space.name, TCP_ARGUMENT_ID, space.id, TCP_ARGU= MENT_TYPE, space.type, - TCP_ARGUMENT_BITS_PER_MAU, space.bits_per_mau, TCP_ARGUMENT_INVARI= ANCE, space.invariance, TCP_ARGUMENT_ENDIAN, space.endian, - TCP_ARGUMENT_MIN, space.min_addr, TCP_ARGUMENT_MAX, space.max_addr, - TCP_ARGUMENT_SUPPORTED_ACCESS_OPTIONS, space.supported_access_opti= ons); + } else { + g_string_printf(mcdserver_state.str_buf, "%d!", query_index + 1); + } + + /* 3. send the correct memspace */ + mcd_mem_space_st space =3D g_array_index(memspaces, + mcd_mem_space_st, query_index); + g_string_append_printf(mcdserver_state.str_buf, + "%s=3D%s.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%ld.%s=3D%ld= .%s=3D%d.", + TCP_ARGUMENT_NAME, space.name, TCP_ARGUMENT_ID, + space.id, TCP_ARGUMENT_TYPE, space.type, TCP_ARGUMENT_BITS_PER_MAU, + space.bits_per_mau, TCP_ARGUMENT_INVARIANCE, space.invariance, + TCP_ARGUMENT_ENDIAN, space.endian, TCP_ARGUMENT_MIN, space.min_add= r, + TCP_ARGUMENT_MAX, space.max_addr, TCP_ARGUMENT_SUPPORTED_ACCESS_OP= TIONS, + space.supported_access_options); mcd_put_strbuf(); } =20 -void handle_query_reg_groups_f(GArray *params, void *user_ctx) { - // 1. get correct reggroups and set the query_cpu +void handle_query_reg_groups_f(GArray *params, void *user_ctx) +{ + /* 1. get correct reggroups and set the query_cpu */ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; mcdserver_state.query_cpu_id =3D cpu_id; - GArray* reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); + GArray *reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); =20 - // 2. check length + /* 2. check length */ int nb_groups =3D reggroups->len; if (nb_groups =3D=3D 1) { - // indicates this is the last packet + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { + } else { g_string_printf(mcdserver_state.str_buf, "1!"); } - // 3. send data + /* 3. send data */ mcd_reg_group_st group =3D g_array_index(reggroups, mcd_reg_group_st, = 0); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.", TC= P_ARGUMENT_ID, group.id, TCP_ARGUMENT_NAME, group.name); + g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.", + TCP_ARGUMENT_ID, group.id, TCP_ARGUMENT_NAME, group.name); mcd_put_strbuf(); } =20 -void handle_query_reg_groups_c(GArray *params, void *user_ctx) { - // this funcitons send all reg groups except for the first - // 1. get parameter and memspace +void handle_query_reg_groups_c(GArray *params, void *user_ctx) +{ + /* + * this funcitons send all reg groups except for the first + * 1. get parameter and memspace + */ int query_index =3D get_param(params, 0)->query_handle; uint32_t cpu_id =3D mcdserver_state.query_cpu_id; - GArray* reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); + GArray *reggroups =3D g_list_nth_data(mcdserver_state.all_reggroups, c= pu_id); =20 - // 2. check weather this was the last reg group + /* 2. check weather this was the last reg group */ int nb_groups =3D reggroups->len; - if (query_index+1 =3D=3D nb_groups) { - // indicates this is the last packet + if (query_index + 1 =3D=3D nb_groups) { + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { - g_string_printf(mcdserver_state.str_buf, "%d!", query_index+1); + } else { + g_string_printf(mcdserver_state.str_buf, "%d!", query_index + 1); } =20 - // 3. send the correct reggroup - mcd_reg_group_st group =3D g_array_index(reggroups, mcd_reg_group_st, = query_index); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.", TC= P_ARGUMENT_ID, group.id, TCP_ARGUMENT_NAME, group.name); + /* 3. send the correct reggroup */ + mcd_reg_group_st group =3D g_array_index(reggroups, mcd_reg_group_st, + query_index); + g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.", + TCP_ARGUMENT_ID, group.id, TCP_ARGUMENT_NAME, group.name); mcd_put_strbuf(); } =20 -void handle_query_regs_f(GArray *params, void *user_ctx) { - // 1. get correct registers and set the query_cpu +void handle_query_regs_f(GArray *params, void *user_ctx) +{ + /* 1. get correct registers and set the query_cpu */ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; mcdserver_state.query_cpu_id =3D cpu_id; - GArray* registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); + GArray *registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); =20 - // 2. check length + /* 2. check length */ int nb_regs =3D registers->len; if (nb_regs =3D=3D 1) { - // indicates this is the last packet + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { + } else { g_string_printf(mcdserver_state.str_buf, "1!"); } - // 3. send data + /* 3. send data */ mcd_reg_st my_register =3D g_array_index(registers, mcd_reg_st, 0); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.%s=3D= %d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.", - TCP_ARGUMENT_ID, my_register.id, TCP_ARGUMENT_NAME, my_register.n= ame, TCP_ARGUMENT_SIZE, my_register.bitsize, - TCP_ARGUMENT_REGGROUPID, my_register.mcd_reg_group_id, TCP_ARGUMEN= T_MEMSPACEID, my_register.mcd_mem_space_id, - TCP_ARGUMENT_TYPE, my_register.mcd_reg_type, TCP_ARGUMENT_THREAD, = my_register.mcd_hw_thread_id); + g_string_append_printf(mcdserver_state.str_buf, + "%s=3D%d.%s=3D%s.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.", + TCP_ARGUMENT_ID, my_register.id, TCP_ARGUMENT_NAME, + my_register.name, TCP_ARGUMENT_SIZE, my_register.bitsize, + TCP_ARGUMENT_REGGROUPID, my_register.mcd_reg_group_id, + TCP_ARGUMENT_MEMSPACEID, my_register.mcd_mem_space_id, + TCP_ARGUMENT_TYPE, my_register.mcd_reg_type, + TCP_ARGUMENT_THREAD, my_register.mcd_hw_thread_id); mcd_put_strbuf(); } =20 -void handle_query_regs_c(GArray *params, void *user_ctx) { - // this funcitons send all regs except for the first - // 1. get parameter and registers +void handle_query_regs_c(GArray *params, void *user_ctx) +{ + /* + * this funcitons send all regs except for the first + * 1. get parameter and registers + */ int query_index =3D get_param(params, 0)->query_handle; uint32_t cpu_id =3D mcdserver_state.query_cpu_id; - GArray* registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); + GArray *registers =3D g_list_nth_data(mcdserver_state.all_registers, c= pu_id); =20 - // 2. check weather this was the last register + /* 2. check weather this was the last register */ int nb_regs =3D registers->len; - if (query_index+1 =3D=3D nb_regs) { - // indicates this is the last packet + if (query_index + 1 =3D=3D nb_regs) { + /* indicates this is the last packet */ g_string_printf(mcdserver_state.str_buf, "0!"); - } - else { - g_string_printf(mcdserver_state.str_buf, "%d!", query_index+1); + } else { + g_string_printf(mcdserver_state.str_buf, "%d!", query_index + 1); } =20 - // 3. send the correct register + /* 3. send the correct register */ mcd_reg_st my_register =3D g_array_index(registers, mcd_reg_st, query_= index); - g_string_append_printf(mcdserver_state.str_buf, "%s=3D%d.%s=3D%s.%s=3D= %d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.", - TCP_ARGUMENT_ID, my_register.id, TCP_ARGUMENT_NAME, my_register.n= ame, TCP_ARGUMENT_SIZE, my_register.bitsize, - TCP_ARGUMENT_REGGROUPID, my_register.mcd_reg_group_id, TCP_ARGUMEN= T_MEMSPACEID, my_register.mcd_mem_space_id, - TCP_ARGUMENT_TYPE, my_register.mcd_reg_type, TCP_ARGUMENT_THREAD, = my_register.mcd_hw_thread_id); + g_string_append_printf(mcdserver_state.str_buf, + "%s=3D%d.%s=3D%s.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%d.", + TCP_ARGUMENT_ID, my_register.id, TCP_ARGUMENT_NAME, + my_register.name, TCP_ARGUMENT_SIZE, my_register.bitsize, + TCP_ARGUMENT_REGGROUPID, my_register.mcd_reg_group_id, + TCP_ARGUMENT_MEMSPACEID, my_register.mcd_mem_space_id, + TCP_ARGUMENT_TYPE, my_register.mcd_reg_type, + TCP_ARGUMENT_THREAD, my_register.mcd_hw_thread_id); mcd_put_strbuf(); } =20 -void handle_reset(GArray *params, void *user_ctx) { - //int reset_id =3D get_param(params, 0)->data_int; - // TODO: implement resets +void handle_reset(GArray *params, void *user_ctx) +{ + /* + * int reset_id =3D get_param(params, 0)->data_int; + * TODO: implement resets + */ } =20 -void handle_query_state(GArray *params, void *user_ctx) { - // TODO: multicore support - // get state info +void handle_query_state(GArray *params, void *user_ctx) +{ + /* + * TODO: multicore support + * get state info + */ mcd_cpu_state_st state_info =3D mcdserver_state.cpu_state; mcd_core_event_et event =3D MCD_CORE_EVENT_NONE; if (state_info.memory_changed) { @@ -1674,42 +1805,47 @@ void handle_query_state(GArray *params, void *user_= ctx) { event =3D event | MCD_CORE_EVENT_STOPPED; state_info.target_was_stopped =3D false; } - // send data - g_string_printf(mcdserver_state.str_buf, "%s=3D%s.%s=3D%d.%s=3D%d.%s= =3D%d.%s=3D%s.%s=3D%s.", TCP_ARGUMENT_STATE, state_info.state, - TCP_ARGUMENT_EVENT, event, TCP_ARGUMENT_THREAD, 0, TCP_ARGUMENT_TR= IGGER_ID, state_info.trig_id, - TCP_ARGUMENT_STOP_STRING, state_info.stop_str, TCP_ARGUMENT_INFO_S= TRING, state_info.info_str); + /* send data */ + g_string_printf(mcdserver_state.str_buf, + "%s=3D%s.%s=3D%d.%s=3D%d.%s=3D%d.%s=3D%s.%s=3D%s.", + TCP_ARGUMENT_STATE, state_info.state, + TCP_ARGUMENT_EVENT, event, TCP_ARGUMENT_THREAD, 0, + TCP_ARGUMENT_TRIGGER_ID, state_info.trig_id, + TCP_ARGUMENT_STOP_STRING, state_info.stop_str, + TCP_ARGUMENT_INFO_STRING, state_info.info_str); mcd_put_strbuf(); } =20 -int mcd_read_register(CPUState *cpu, GByteArray *buf, int reg) { +int mcd_read_register(CPUState *cpu, GByteArray *buf, int reg) +{ CPUClass *cc =3D CPU_GET_CLASS(cpu); gchar *arch =3D cc->gdb_arch_name(cpu); - if (strcmp(arch, "arm")=3D=3D0) { + if (strcmp(arch, "arm") =3D=3D 0) { g_free(arch); return arm_mcd_read_register(cpu, buf, reg); - } - else { + } else { g_free(arch); return 0; } } =20 -int mcd_write_register(CPUState *cpu, GByteArray *buf, int reg) { +int mcd_write_register(CPUState *cpu, GByteArray *buf, int reg) +{ CPUClass *cc =3D CPU_GET_CLASS(cpu); gchar *arch =3D cc->gdb_arch_name(cpu); - if (strcmp(arch, "arm")=3D=3D0) { + if (strcmp(arch, "arm") =3D=3D 0) { g_free(arch); return arm_mcd_write_register(cpu, buf, reg); - } - else { + } else { g_free(arch); return 0; } } =20 -void mcd_memtohex(GString *buf, const uint8_t *mem, int len) { +void mcd_memtohex(GString *buf, const uint8_t *mem, int len) +{ int i, c; - for(i =3D 0; i < len; i++) { + for (i =3D 0; i < len; i++) { c =3D mem[i]; g_string_append_c(buf, tohex(c >> 4)); g_string_append_c(buf, tohex(c & 0xf)); @@ -1717,45 +1853,50 @@ void mcd_memtohex(GString *buf, const uint8_t *mem,= int len) { g_string_append_c(buf, '\0'); } =20 -void mcd_hextomem(GByteArray *mem, const char *buf, int len) { +void mcd_hextomem(GByteArray *mem, const char *buf, int len) +{ int i; =20 - for(i =3D 0; i < len; i++) { + for (i =3D 0; i < len; i++) { guint8 byte =3D fromhex(buf[0]) << 4 | fromhex(buf[1]); g_byte_array_append(mem, &byte, 1); buf +=3D 2; } } =20 -void handle_read_register(GArray *params, void *user_ctx) { +void handle_read_register(GArray *params, void *user_ctx) +{ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; uint64_t reg_num =3D get_param(params, 1)->data_int; int reg_size; =20 CPUState *cpu =3D mcd_get_cpu(cpu_id); reg_size =3D mcd_read_register(cpu, mcdserver_state.mem_buf, reg_num); - mcd_memtohex(mcdserver_state.str_buf, mcdserver_state.mem_buf->data, r= eg_size); + mcd_memtohex(mcdserver_state.str_buf, + mcdserver_state.mem_buf->data, reg_size); mcd_put_strbuf(); } =20 -void handle_write_register(GArray *params, void *user_ctx) { +void handle_write_register(GArray *params, void *user_ctx) +{ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; uint64_t reg_num =3D get_param(params, 1)->data_int; uint32_t reg_size =3D get_param(params, 2)->data_int; =20 CPUState *cpu =3D mcd_get_cpu(cpu_id); - mcd_hextomem(mcdserver_state.mem_buf, mcdserver_state.str_buf->str, re= g_size); - if (mcd_write_register(cpu, mcdserver_state.mem_buf, reg_num)=3D=3D0) { + mcd_hextomem(mcdserver_state.mem_buf, + mcdserver_state.str_buf->str, reg_size); + if (mcd_write_register(cpu, mcdserver_state.mem_buf, reg_num) =3D=3D 0= ) { mcd_put_packet(TCP_EXECUTION_ERROR); - } - else { + } else { mcd_put_packet(TCP_EXECUTION_SUCCESS); } } =20 -int mcd_read_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len) { +int mcd_read_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len) +{ CPUClass *cc; - //TODO: add physical mem cpu_physical_memory_read(addr, buf, len); + /*TODO: add physical mem cpu_physical_memory_read(addr, buf, len); */ cc =3D CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, false); @@ -1764,9 +1905,10 @@ int mcd_read_memory(CPUState *cpu, hwaddr addr, uint= 8_t *buf, int len) { return cpu_memory_rw_debug(cpu, addr, buf, len, false); } =20 -int mcd_write_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len) { +int mcd_write_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len) +{ CPUClass *cc; - //TODO: add physical mem cpu_physical_memory_read(addr, buf, len); + /*TODO: add physical mem cpu_physical_memory_read(addr, buf, len); */ cc =3D CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, true); @@ -1775,33 +1917,36 @@ int mcd_write_memory(CPUState *cpu, hwaddr addr, ui= nt8_t *buf, int len) { return cpu_memory_rw_debug(cpu, addr, buf, len, true); } =20 -void handle_read_memory(GArray *params, void *user_ctx) { +void handle_read_memory(GArray *params, void *user_ctx) +{ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; uint64_t mem_address =3D get_param(params, 1)->data_uint64_t; int len =3D get_param(params, 2)->data_int; =20 CPUState *cpu =3D mcd_get_cpu(cpu_id); g_byte_array_set_size(mcdserver_state.mem_buf, len); - if (mcd_read_memory(cpu, mem_address, mcdserver_state.mem_buf->data, m= cdserver_state.mem_buf->len)!=3D0) { + if (mcd_read_memory(cpu, mem_address, mcdserver_state.mem_buf->data, + mcdserver_state.mem_buf->len) !=3D 0) { mcd_put_packet(TCP_EXECUTION_ERROR); - } - else { - mcd_memtohex(mcdserver_state.str_buf, mcdserver_state.mem_buf->dat= a, mcdserver_state.mem_buf->len); + } else { + mcd_memtohex(mcdserver_state.str_buf, mcdserver_state.mem_buf->dat= a, + mcdserver_state.mem_buf->len); mcd_put_strbuf(); } } =20 -void handle_write_memory(GArray *params, void *user_ctx) { +void handle_write_memory(GArray *params, void *user_ctx) +{ uint32_t cpu_id =3D get_param(params, 0)->cpu_id; uint64_t mem_address =3D get_param(params, 1)->data_uint64_t; int len =3D get_param(params, 2)->data_int; =20 CPUState *cpu =3D mcd_get_cpu(cpu_id); mcd_hextomem(mcdserver_state.mem_buf, mcdserver_state.str_buf->str, le= n); - if (mcd_write_memory(cpu, mem_address, mcdserver_state.mem_buf->data, = len)!=3D0) { + if (mcd_write_memory(cpu, mem_address, + mcdserver_state.mem_buf->data, len) !=3D 0) { mcd_put_packet(TCP_EXECUTION_ERROR); - } - else { + } else { mcd_put_packet(TCP_EXECUTION_SUCCESS); } } diff --git a/mcdstub/internals.h b/mcdstub/mcdstub.h similarity index 69% rename from mcdstub/internals.h rename to mcdstub/mcdstub.h index 0afab434ce..83156dceb8 100644 --- a/mcdstub/internals.h +++ b/mcdstub/mcdstub.h @@ -4,49 +4,46 @@ #include "exec/cpu-common.h" #include "chardev/char.h" #include "hw/core/cpu.h" -// just used for the register xml files +/* just used for the register xml files */ #include "exec/gdbstub.h" =20 #define MAX_PACKET_LENGTH 1024 =20 -// trigger defines +/* trigger defines */ #define MCD_TRIG_OPT_DATA_IS_CONDITION 0x00000008 #define MCD_TRIG_ACTION_DBG_DEBUG 0x00000001 =20 typedef uint32_t mcd_trig_type_et; -// TODO: replace mcd defines with custom layer +/* TODO: replace mcd defines with custom layer */ enum { - MCD_TRIG_TYPE_UNDEFINED =3D 0x00000000, /**< Undefined trigger type. = */ - MCD_TRIG_TYPE_IP =3D 0x00000001, /**< Trigger on a changing instru= ction pointer. */ - MCD_TRIG_TYPE_READ =3D 0x00000002, /**< Trigger on a read data acces= s to a specific address or address range. */ - MCD_TRIG_TYPE_WRITE =3D 0x00000004, /**< Trigger on a write data acce= ss to a specific address or address range. */ - MCD_TRIG_TYPE_RW =3D 0x00000008, /**< Trigger on a read or a write= data access to a specific address or - address range. = */ - MCD_TRIG_TYPE_NOCYCLE =3D 0x00000010, /**< Trigger on core information = other than an IP or data compare trigger. */ - MCD_TRIG_TYPE_TRIG_BUS =3D 0x00000020, /**< Trigger on a trigger bus com= bination. */ - MCD_TRIG_TYPE_COUNTER =3D 0x00000040, /**< Trigger on an elapsed trigge= r counter. */ - MCD_TRIG_TYPE_CUSTOM =3D 0x00000080, /**< Custom trigger using standar= d format as defined by \ref mcd_trig_custom_st. */ - MCD_TRIG_TYPE_CUSTOM_LO =3D 0x00010000, /**< Begin Range: User defined tr= igger types. */ - MCD_TRIG_TYPE_CUSTOM_HI =3D 0x40000000, /**< End Range: User defined tr= igger types. */ + MCD_TRIG_TYPE_UNDEFINED =3D 0x00000000, + MCD_TRIG_TYPE_IP =3D 0x00000001, + MCD_TRIG_TYPE_READ =3D 0x00000002, + MCD_TRIG_TYPE_WRITE =3D 0x00000004, + MCD_TRIG_TYPE_RW =3D 0x00000008, + MCD_TRIG_TYPE_NOCYCLE =3D 0x00000010, + MCD_TRIG_TYPE_TRIG_BUS =3D 0x00000020, + MCD_TRIG_TYPE_COUNTER =3D 0x00000040, + MCD_TRIG_TYPE_CUSTOM =3D 0x00000080, + MCD_TRIG_TYPE_CUSTOM_LO =3D 0x00010000, + MCD_TRIG_TYPE_CUSTOM_HI =3D 0x40000000, }; =20 typedef uint32_t mcd_core_event_et; -// TODO: replace mcd defines with custom layer +/* TODO: replace mcd defines with custom layer */ enum { - MCD_CORE_EVENT_NONE =3D 0x00000000, /**< No since the last p= oll. */ - MCD_CORE_EVENT_MEMORY_CHANGE =3D 0x00000001, /**< Memory content has = changed. */ - MCD_CORE_EVENT_REGISTER_CHANGE =3D 0x00000002, /**< Register contents h= ave changed. */ - MCD_CORE_EVENT_TRACE_CHANGE =3D 0x00000004, /**< Trace contents or s= tates have changed. */ - MCD_CORE_EVENT_TRIGGER_CHANGE =3D 0x00000008, /**< Triggers or trigger= states have changed. */ - MCD_CORE_EVENT_STOPPED =3D 0x00000010, /**< Target was stopped = at least once since the last poll, - it may already be running again. */ - MCD_CORE_EVENT_CHL_PENDING =3D 0x00000020, /**< A target communicat= ion channel request from the target - is pending. */ - MCD_CORE_EVENT_CUSTOM_LO =3D 0x00010000, /**< Begin Range: User d= efined core events. */ - MCD_CORE_EVENT_CUSTOM_HI =3D 0x40000000, /**< End Range: User d= efined core events. */ + MCD_CORE_EVENT_NONE =3D 0x00000000, + MCD_CORE_EVENT_MEMORY_CHANGE =3D 0x00000001, + MCD_CORE_EVENT_REGISTER_CHANGE =3D 0x00000002, + MCD_CORE_EVENT_TRACE_CHANGE =3D 0x00000004, + MCD_CORE_EVENT_TRIGGER_CHANGE =3D 0x00000008, + MCD_CORE_EVENT_STOPPED =3D 0x00000010, + MCD_CORE_EVENT_CHL_PENDING =3D 0x00000020, + MCD_CORE_EVENT_CUSTOM_LO =3D 0x00010000, + MCD_CORE_EVENT_CUSTOM_HI =3D 0x40000000, }; =20 -// schema defines +/* schema defines */ #define ARG_SCHEMA_QRYHANDLE 'q' #define ARG_SCHEMA_STRING 's' #define ARG_SCHEMA_INT 'd' @@ -54,20 +51,20 @@ enum { #define ARG_SCHEMA_CORENUM 'c' #define ARG_SCHEMA_HEXDATA 'h' =20 -// resets +/* resets */ #define RESET_SYSTEM "full_system_reset" #define RESET_GPR "gpr_reset" #define RESET_MEMORY "memory_reset" =20 -// misc -#define QUERY_TOTAL_NUMBER 12=20 +/* misc */ +#define QUERY_TOTAL_NUMBER 12 #define CMD_SCHEMA_LENGTH 5 #define MCD_SYSTEM_NAME "qemu-system" =20 -// tcp query packet values templates +/* tcp query packet values templates */ #define DEVICE_NAME_TEMPLATE(s) "qemu-" #s "-device" =20 -// state strings +/* state strings */ #define STATE_STR_UNKNOWN(d) "cpu " #d " in unknown state" #define STATE_STR_DEBUG(d) "cpu " #d " in debug state" #define STATE_STR_RUNNING(d) "cpu " #d " running" @@ -82,7 +79,7 @@ enum { #define STATE_STR_BREAK_UNKNOWN "stopped for unknown reason" =20 typedef struct GDBRegisterState { - // needed for the used gdb functions + /* needed for the used gdb functions */ int base_reg; int num_regs; gdb_get_reg_cb get_reg; @@ -193,22 +190,22 @@ typedef struct xml_attrib { } xml_attrib; =20 typedef struct mcd_reg_st { - // xml info + /* xml info */ char name[64]; char group[64]; char type[64]; uint32_t bitsize; uint32_t id; - // mcd metadata + /* mcd metadata */ uint32_t mcd_reg_group_id; uint32_t mcd_mem_space_id; uint32_t mcd_reg_type; uint32_t mcd_hw_thread_id; - // data for op-code + /* data for op-code */ uint8_t cp; uint8_t crn; uint8_t crm; - uint8_t opc0; // <- might not be needed! + uint8_t opc0; /* <- might not be needed! */ uint8_t opc1; uint8_t opc2; } mcd_reg_st; @@ -245,9 +242,9 @@ void mcd_sigterm_handler(int signal); #endif =20 void mcd_init_mcdserver_state(void); -void init_query_cmds_table(MCDCmdParseEntry* mcd_query_cmds_table); -int init_resets(GArray* resets); -int init_trigger(mcd_trigger_st* trigger); +void init_query_cmds_table(MCDCmdParseEntry *mcd_query_cmds_table); +int init_resets(GArray *resets); +int init_trigger(mcd_trigger_st *trigger); void reset_mcdserver_state(void); void create_processes(MCDState *s); void mcd_create_default_process(MCDState *s); @@ -272,14 +269,15 @@ int mcd_handle_packet(const char *line_buf); void mcd_put_strbuf(void); void mcd_exit(int code); void run_cmd_parser(const char *data, const MCDCmdParseEntry *cmd); -int process_string_cmd(void *user_ctx, const char *data, const MCDCmdParse= Entry *cmds, int num_cmds); +int process_string_cmd(void *user_ctx, const char *data, + const MCDCmdParseEntry *cmds, int num_cmds); int cmd_parse_params(const char *data, const char *schema, GArray *params); void handle_vm_start(GArray *params, void *user_ctx); void handle_vm_step(GArray *params, void *user_ctx); void handle_vm_stop(GArray *params, void *user_ctx); void handle_gen_query(GArray *params, void *user_ctx); int mcd_get_cpu_index(CPUState *cpu); -CPUState* mcd_get_cpu(uint32_t i_cpu_index); +CPUState *mcd_get_cpu(uint32_t i_cpu_index); void handle_query_cores(GArray *params, void *user_ctx); void handle_query_system(GArray *params, void *user_ctx); CPUState *get_first_cpu_in_process(MCDProcess *process); @@ -312,20 +310,22 @@ int mcd_write_register(CPUState *cpu, GByteArray *buf= , int reg); int mcd_read_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len); int mcd_write_memory(CPUState *cpu, hwaddr addr, uint8_t *buf, int len); =20 -// arm specific functions -int mcd_arm_store_mem_spaces(CPUState *cpu, GArray* memspaces); -int mcd_arm_parse_core_xml_file(CPUClass *cc, GArray* reggroups, GArray* r= egisters, int* current_group_id); -int mcd_arm_parse_general_xml_files(CPUState *cpu, GArray* reggroups, GArr= ay* registers, int* current_group_id); -int mcd_arm_get_additional_register_info(GArray* reggroups, GArray* regist= ers); +/* arm specific functions */ +int mcd_arm_store_mem_spaces(CPUState *cpu, GArray *memspaces); +int mcd_arm_parse_core_xml_file(CPUClass *cc, GArray *reggroups, + GArray *registers, int *current_group_id); +int mcd_arm_parse_general_xml_files(CPUState *cpu, GArray* reggroups, + GArray *registers, int *current_group_id); +int mcd_arm_get_additional_register_info(GArray *reggroups, GArray *regist= ers); =20 -// sycall handling +/* sycall handling */ void mcd_syscall_reset(void); void mcd_disable_syscalls(void); =20 -// helpers +/* helpers */ int int_cmp(gconstpointer a, gconstpointer b); void mcd_memtohex(GString *buf, const uint8_t *mem, int len); void mcd_hextomem(GByteArray *mem, const char *buf, int len); -uint64_t atouint64_t(const char* in); +uint64_t atouint64_t(const char *in); =20 #endif /* MCDSTUB_INTERNALS_H */ diff --git a/mcdstub/meson.build b/mcdstub/meson.build index f17e2f3e89..ebd47b0725 100644 --- a/mcdstub/meson.build +++ b/mcdstub/meson.build @@ -7,19 +7,21 @@ # We need to build the core mcd code via a library to be able to tweak # cflags so: =20 -mcd_softmmu_ss =3D ss.source_set() +mcd_system_ss =3D ss.source_set() =20 -# We build one version of the mcdstub, because it only needs to work for s= ystem emulation -mcd_softmmu_ss.add(files('mcdstub.c')) +# We build one version of the mcdstub, +#because it only needs to work for system emulation +mcd_system_ss.add(files('mcdstub.c')) =20 -mcd_softmmu_ss =3D mcd_softmmu_ss.apply(config_host, strict: false) +mcd_system_ss =3D mcd_system_ss.apply(config_host, strict: false) =20 libmcd_softmmu =3D static_library('mcd_softmmu', - mcd_softmmu_ss.sources() + genh, - name_suffix: 'fa') + mcd_system_ss.sources() + genh, + name_suffix: 'fa', + build_by_default: have_system) =20 mcd_softmmu =3D declare_dependency(link_whole: libmcd_softmmu) -softmmu_ss.add(mcd_softmmu) +system_ss.add(mcd_softmmu) =20 # this might cause problems because we don't support user mode common_ss.add(files('mcd_syscalls.c')) diff --git a/softmmu/cpus.c b/softmmu/cpus.c index 6a1c969f3b..0848e0dbdb 100644 --- a/softmmu/cpus.c +++ b/softmmu/cpus.c @@ -306,7 +306,7 @@ void cpu_handle_guest_debug(CPUState *cpu) cpu_single_step(cpu, 0); } } else { - //gdb_set_stop_cpu(cpu); + gdb_set_stop_cpu(cpu); qemu_system_debug_request(); cpu->stopped =3D true; } diff --git a/softmmu/vl.c b/softmmu/vl.c index 2d66f612a7..085a312f9d 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2663,9 +2663,9 @@ static void qemu_machine_creation_done(void) if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) { exit(1); } - =20 + if (foreach_device_config(DEV_MCD, mcdserver_start) < 0) { - /*=20 + /* * starts the mcdserver if the mcd option was set */ exit(1); diff --git a/target/arm/mcdstub.c b/target/arm/mcdstub.c index 27e1a13b69..e4e632d3f3 100644 --- a/target/arm/mcdstub.c +++ b/target/arm/mcdstub.c @@ -8,8 +8,10 @@ =20 static inline int mcd_get_reg32(GByteArray *buf, uint32_t val) { - //TODO: move this to a separate file - // convert endianess if necessary + /* + *TODO: move this to a separate file + *convert endianess if necessary + */ uint32_t to_long =3D tswap32(val); g_byte_array_append(buf, (uint8_t *) &to_long, 4); return 4; @@ -17,7 +19,7 @@ static inline int mcd_get_reg32(GByteArray *buf, uint32_t= val) =20 static inline int mcd_get_zeroes(GByteArray *array, size_t len) { - //TODO: move this to a separate file + /*TODO: move this to a separate file */ guint oldlen =3D array->len; g_byte_array_set_size(array, oldlen + len); memset(array->data + oldlen, 0, len); @@ -43,7 +45,8 @@ const char *arm_mcd_get_dynamic_xml(CPUState *cs, const c= har *xmlname) return NULL; } =20 -int arm_mcd_read_register(CPUState *cs, GByteArray *mem_buf, int n) { +int arm_mcd_read_register(CPUState *cs, GByteArray *mem_buf, int n) +{ ARMCPU *cpu =3D ARM_CPU(cs); CPUARMState *env =3D &cpu->env; =20 @@ -52,12 +55,12 @@ int arm_mcd_read_register(CPUState *cs, GByteArray *mem= _buf, int n) { return mcd_get_reg32(mem_buf, env->regs[n]); } if (n < 24) { - // TODO: these numbers don't match mine + /* TODO: these numbers don't match mine */ return mcd_get_zeroes(mem_buf, 12); } switch (n) { case 24: - // TODO: these numbers don't match mine + /* TODO: these numbers don't match mine */ return mcd_get_reg32(mem_buf, 0); case 25: /* CPSR, or XPSR for M-profile */ @@ -67,17 +70,18 @@ int arm_mcd_read_register(CPUState *cs, GByteArray *mem= _buf, int n) { return mcd_get_reg32(mem_buf, cpsr_read(env)); } } - //TODO: add funcitons for the remaining regs (including cp_regs) + /* TODO: add funcitons for the remaining regs (including cp_regs) */ return 0; } =20 -int arm_mcd_write_register(CPUState *cs, GByteArray *mem_buf, int n) { +int arm_mcd_write_register(CPUState *cs, GByteArray *mem_buf, int n) +{ ARMCPU *cpu =3D ARM_CPU(cs); CPUARMState *env =3D &cpu->env; uint32_t tmp; =20 tmp =3D ldl_p(mem_buf); - tmp =3D *((uint32_t*)mem_buf->data); + tmp =3D *((uint32_t *)mem_buf->data); =20 /* * Mask out low bits of PC to workaround gdb bugs. @@ -122,6 +126,6 @@ int arm_mcd_write_register(CPUState *cs, GByteArray *me= m_buf, int n) { } return 4; } - //TODO: add funcitons for the remaining regs (including cp_regs) + /* TODO: add funcitons for the remaining regs (including cp_regs) */ return 0; } --=20 2.34.1