Skip to content

Commit

Permalink
Increase the debugger version field size from 1 byte to 4 byte (jerry…
Browse files Browse the repository at this point in the history
…script-project#2513)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
  • Loading branch information
zherczeg authored and LaszloLango committed Sep 20, 2018
1 parent df69e1e commit 35fbcd1
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 20 deletions.
14 changes: 11 additions & 3 deletions jerry-core/debugger/debugger.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/**
Expand Down Expand Up @@ -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 */
Expand Down
14 changes: 11 additions & 3 deletions jerry-core/debugger/debugger.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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;

/**
Expand Down
30 changes: 16 additions & 14 deletions jerry-debugger/jerry_client_ws.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
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
Expand Down Expand Up @@ -55,6 +55,9 @@
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"
Expand Down Expand Up @@ -308,14 +311,14 @@ def __init__(self, address):
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)
Expand All @@ -324,21 +327,15 @@ def __init__(self, address):

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 = "<"
Expand All @@ -354,6 +351,11 @@ def __init__(self, address):

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:
Expand Down

0 comments on commit 35fbcd1

Please sign in to comment.