diff --git a/jerry-core/debugger/debugger.c b/jerry-core/debugger/debugger.c index be5513a38..3f9ed5b44 100644 --- a/jerry-core/debugger/debugger.c +++ b/jerry-core/debugger/debugger.c @@ -39,7 +39,7 @@ typedef struct */ JERRY_STATIC_ASSERT (JERRY_DEBUGGER_MESSAGES_OUT_MAX_COUNT == 28 && JERRY_DEBUGGER_MESSAGES_IN_MAX_COUNT == 19 - && JERRY_DEBUGGER_VERSION == 5, + && JERRY_DEBUGGER_VERSION == 6, debugger_version_correlates_to_message_type_count); /** @@ -880,10 +880,18 @@ jerry_debugger_send_configuration (uint8_t max_message_size) /**< maximum messag endian_data.uint16_value = 1; configuration_p->type = JERRY_DEBUGGER_CONFIGURATION; + configuration_p->configuration = 0; + + if (endian_data.uint8_value[0] == 1) + { + configuration_p->configuration |= (uint8_t) JERRY_DEBUGGER_LITTLE_ENDIAN; + } + + uint32_t version = JERRY_DEBUGGER_VERSION; + memcpy (configuration_p->version, &version, sizeof (uint32_t)); + configuration_p->max_message_size = max_message_size; configuration_p->cpointer_size = sizeof (jmem_cpointer_t); - configuration_p->little_endian = (endian_data.uint8_value[0] == 1); - configuration_p->version = JERRY_DEBUGGER_VERSION; return jerry_debugger_send (sizeof (jerry_debugger_send_configuration_t)); } /* jerry_debugger_send_configuration */ diff --git a/jerry-core/debugger/debugger.h b/jerry-core/debugger/debugger.h index ff5a37aa5..5b1db9848 100644 --- a/jerry-core/debugger/debugger.h +++ b/jerry-core/debugger/debugger.h @@ -26,7 +26,7 @@ /** * JerryScript debugger protocol version. */ -#define JERRY_DEBUGGER_VERSION (5) +#define JERRY_DEBUGGER_VERSION (6) /** * Frequency of calling jerry_debugger_receive() by the VM. @@ -191,6 +191,14 @@ typedef enum JERRY_DEBUGGER_MESSAGES_IN_MAX_COUNT, /**< number of different type of input messages */ } jerry_debugger_header_type_t; +/** + * Debugger option flags. + */ +typedef enum +{ + JERRY_DEBUGGER_LITTLE_ENDIAN = 1u << 0, /**< little endian */ +} jerry_debugger_configuration_flags_t; + /** * Subtypes of eval. */ @@ -250,10 +258,10 @@ typedef struct typedef struct { uint8_t type; /**< type of the message */ + uint8_t configuration; /**< configuration option bits */ + uint8_t version[sizeof (uint32_t)]; /**< debugger version */ uint8_t max_message_size; /**< maximum incoming message size */ uint8_t cpointer_size; /**< size of compressed pointers */ - uint8_t little_endian; /**< little endian machine */ - uint8_t version; /**< debugger version */ } jerry_debugger_send_configuration_t; /** diff --git a/jerry-debugger/jerry_client_ws.py b/jerry-debugger/jerry_client_ws.py index ff24e8487..246e3762f 100644 --- a/jerry-debugger/jerry_client_ws.py +++ b/jerry-debugger/jerry_client_ws.py @@ -24,7 +24,7 @@ import struct import sys # Expected debugger protocol version. -JERRY_DEBUGGER_VERSION = 5 +JERRY_DEBUGGER_VERSION = 6 # Messages sent by the server to client. JERRY_DEBUGGER_CONFIGURATION = 1 @@ -55,6 +55,9 @@ JERRY_DEBUGGER_WAIT_FOR_SOURCE = 25 JERRY_DEBUGGER_OUTPUT_RESULT = 26 JERRY_DEBUGGER_OUTPUT_RESULT_END = 27 +# Debugger option flags +JERRY_DEBUGGER_LITTLE_ENDIAN = 0x1 + # Subtypes of eval JERRY_DEBUGGER_EVAL_EVAL = "\0" JERRY_DEBUGGER_EVAL_THROW = "\1" @@ -308,14 +311,14 @@ class JerryDebugger(object): else: result = b"" - len_expected = 7 + len_expected = 10 # Network configurations, which has the following struct: # header [2] - opcode[1], size[1] # type [1] + # configuration [1] + # version [4] # max_message_size [1] # cpointer_size [1] - # little_endian [1] - # version [1] while len(result) < len_expected: result += self.client_socket.recv(1024) @@ -324,21 +327,15 @@ class JerryDebugger(object): expected = struct.pack("BBB", WEBSOCKET_BINARY_FRAME | WEBSOCKET_FIN_BIT, - 5, + 8, JERRY_DEBUGGER_CONFIGURATION) if result[0:3] != expected: raise Exception("Unexpected configuration") - self.max_message_size = ord(result[3]) - self.cp_size = ord(result[4]) - self.little_endian = ord(result[5]) - self.version = ord(result[6]) - - if self.version != JERRY_DEBUGGER_VERSION: - raise Exception("Incorrect debugger version from target: %d expected: %d" % - (self.version, JERRY_DEBUGGER_VERSION)) - + self.little_endian = ord(result[3]) & JERRY_DEBUGGER_LITTLE_ENDIAN + self.max_message_size = ord(result[8]) + self.cp_size = ord(result[9]) if self.little_endian: self.byte_order = "<" @@ -354,6 +351,11 @@ class JerryDebugger(object): self.idx_format = "I" + self.version = struct.unpack(self.byte_order + self.idx_format, result[4:8])[0] + if self.version != JERRY_DEBUGGER_VERSION: + raise Exception("Incorrect debugger version from target: %d expected: %d" % + (self.version, JERRY_DEBUGGER_VERSION)) + logging.debug("Compressed pointer size: %d", self.cp_size) if len_result > len_expected: