Skip to content

Commit 624541c

Browse files
committed
add jerry_debugger transport APIs
This patch adds the transport interfaces for the debugger and allows it to be ported to different platforms. JerryScript-DCO-1.0-Signed-off-by: Jimmy Huang [email protected]
1 parent bb0b959 commit 624541c

File tree

15 files changed

+188
-94
lines changed

15 files changed

+188
-94
lines changed

jerry-core/api/jerry-debugger.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,18 @@ jerry_debugger_stop_at_breakpoint (bool enable_stop_at_breakpoint) /**< enable/d
9393
* Debugger server initialization. Must be called after jerry_init.
9494
*/
9595
void
96-
jerry_debugger_init (uint16_t port) /**< server port number */
96+
jerry_debugger_init (jerry_debugger_transport_t *transport_p) /**< transport */
9797
{
9898
#ifdef JERRY_DEBUGGER
99-
JERRY_CONTEXT (debugger_port) = port;
100-
jerry_debugger_accept_connection ();
99+
JERRY_CONTEXT (debugger_transport_p) = transport_p;
100+
JERRY_ASSERT (JERRY_CONTEXT (debugger_transport_p) != NULL);
101+
JERRY_ASSERT (JERRY_CONTEXT (debugger_transport_p)->accept != NULL);
102+
JERRY_ASSERT (JERRY_CONTEXT (debugger_transport_p)->send != NULL);
103+
JERRY_ASSERT (JERRY_CONTEXT (debugger_transport_p)->receive != NULL);
104+
JERRY_ASSERT (JERRY_CONTEXT (debugger_transport_p)->close != NULL);
105+
JERRY_CONTEXT (debugger_transport_p)->accept (transport_p);
101106
#else /* !JERRY_DEBUGGER */
102-
JERRY_UNUSED (port);
107+
JERRY_UNUSED (transport_p);
103108
#endif /* JERRY_DEBUGGER */
104109
} /* jerry_debugger_init */
105110

@@ -131,7 +136,7 @@ jerry_debugger_wait_for_client_source (jerry_debugger_wait_for_source_callback_t
131136

132137
while (true)
133138
{
134-
if (jerry_debugger_receive (&client_source_data_p))
139+
if (JERRY_CONTEXT (debugger_transport_p)->receive (&client_source_data_p))
135140
{
136141
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED))
137142
{

jerry-core/api/jerry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ jerry_cleanup (void)
206206
#ifdef JERRY_DEBUGGER
207207
if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED)
208208
{
209-
jerry_debugger_close_connection ();
209+
JERRY_CONTEXT (debugger_transport_p)->close ();
210210
}
211211
#endif /* JERRY_DEBUGGER */
212212

jerry-core/debugger/debugger.c

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ jerry_debugger_send_backtrace (uint8_t *recv_buffer_p) /**< pointer to the recei
104104

105105
if (current_frame >= JERRY_DEBUGGER_SEND_MAX (jerry_debugger_frame_t))
106106
{
107-
if (!jerry_debugger_send (sizeof (jerry_debugger_send_backtrace_t)))
107+
if (!JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_backtrace_t)))
108108
{
109109
return;
110110
}
@@ -129,7 +129,7 @@ jerry_debugger_send_backtrace (uint8_t *recv_buffer_p) /**< pointer to the recei
129129

130130
backtrace_p->type = JERRY_DEBUGGER_BACKTRACE_END;
131131

132-
jerry_debugger_send (sizeof (jerry_debugger_send_type_t) + message_size);
132+
JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_type_t) + message_size);
133133
} /* jerry_debugger_send_backtrace */
134134

135135
/**
@@ -232,7 +232,7 @@ jerry_debugger_sleep (void)
232232
if (message_size != sizeof (type)) \
233233
{ \
234234
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n"); \
235-
jerry_debugger_close_connection (); \
235+
JERRY_CONTEXT (debugger_transport_p)->close (); \
236236
return false; \
237237
}
238238

@@ -255,7 +255,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
255255
&& !(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_BREAKPOINT_MODE))
256256
{
257257
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Message requires breakpoint mode\n");
258-
jerry_debugger_close_connection ();
258+
JERRY_CONTEXT (debugger_transport_p)->close ();
259259
return false;
260260
}
261261

@@ -271,7 +271,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
271271
{
272272
jmem_heap_free_block (uint8_data_p, uint8_data_p->uint8_size + sizeof (jerry_debugger_uint8_data_t));
273273
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Unexpected message\n");
274-
jerry_debugger_close_connection ();
274+
JERRY_CONTEXT (debugger_transport_p)->close ();
275275
return false;
276276
}
277277

@@ -281,7 +281,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
281281
{
282282
jmem_heap_free_block (uint8_data_p, uint8_data_p->uint8_size + sizeof (jerry_debugger_uint8_data_t));
283283
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
284-
jerry_debugger_close_connection ();
284+
JERRY_CONTEXT (debugger_transport_p)->close ();
285285
return false;
286286
}
287287

@@ -293,7 +293,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
293293
{
294294
jmem_heap_free_block (uint8_data_p, uint8_data_p->uint8_size + sizeof (jerry_debugger_uint8_data_t));
295295
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
296-
jerry_debugger_close_connection ();
296+
JERRY_CONTEXT (debugger_transport_p)->close ();
297297
return false;
298298
}
299299

@@ -348,7 +348,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
348348
if (byte_code_free_cp != JERRY_CONTEXT (debugger_byte_code_free_tail))
349349
{
350350
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid byte code free order\n");
351-
jerry_debugger_close_connection ();
351+
JERRY_CONTEXT (debugger_transport_p)->close ();
352352
return false;
353353
}
354354

@@ -509,7 +509,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
509509
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_PARSER_WAIT_MODE))
510510
{
511511
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Not in parser wait mode\n");
512-
jerry_debugger_close_connection ();
512+
JERRY_CONTEXT (debugger_transport_p)->close ();
513513
return false;
514514
}
515515

@@ -523,7 +523,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
523523
if (message_size < sizeof (jerry_debugger_receive_eval_first_t) + 1)
524524
{
525525
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
526-
jerry_debugger_close_connection ();
526+
JERRY_CONTEXT (debugger_transport_p)->close ();
527527
return false;
528528
}
529529

@@ -538,7 +538,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
538538
if (eval_size != message_size - sizeof (jerry_debugger_receive_eval_first_t))
539539
{
540540
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
541-
jerry_debugger_close_connection ();
541+
JERRY_CONTEXT (debugger_transport_p)->close ();
542542
return false;
543543
}
544544
bool ret_val = jerry_debugger_send_eval_or_throw ((lit_utf8_byte_t *) (eval_first_p + 1), eval_size, &is_eval);
@@ -574,14 +574,14 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
574574
if (message_size <= sizeof (jerry_debugger_receive_client_source_first_t))
575575
{
576576
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
577-
jerry_debugger_close_connection ();
577+
JERRY_CONTEXT (debugger_transport_p)->close ();
578578
return false;
579579
}
580580

581581
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CLIENT_SOURCE_MODE))
582582
{
583583
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Not in client source mode\n");
584-
jerry_debugger_close_connection ();
584+
JERRY_CONTEXT (debugger_transport_p)->close ();
585585
return false;
586586
}
587587

@@ -594,7 +594,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
594594
&& client_source_size != message_size - sizeof (jerry_debugger_receive_client_source_first_t))
595595
{
596596
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Invalid message size\n");
597-
jerry_debugger_close_connection ();
597+
JERRY_CONTEXT (debugger_transport_p)->close ();
598598
return false;
599599
}
600600

@@ -631,7 +631,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
631631
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CLIENT_SOURCE_MODE))
632632
{
633633
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Not in client source mode\n");
634-
jerry_debugger_close_connection ();
634+
JERRY_CONTEXT (debugger_transport_p)->close ();
635635
return false;
636636
}
637637

@@ -649,7 +649,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
649649
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CLIENT_SOURCE_MODE))
650650
{
651651
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Not in client source mode\n");
652-
jerry_debugger_close_connection ();
652+
JERRY_CONTEXT (debugger_transport_p)->close ();
653653
return false;
654654
}
655655

@@ -665,7 +665,7 @@ jerry_debugger_process_message (uint8_t *recv_buffer_p, /**< pointer to the rece
665665
default:
666666
{
667667
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Unexpected message.");
668-
jerry_debugger_close_connection ();
668+
JERRY_CONTEXT (debugger_transport_p)->close ();
669669
return false;
670670
}
671671
}
@@ -694,7 +694,7 @@ jerry_debugger_breakpoint_hit (uint8_t message_type) /**< message type */
694694
uint32_t offset = (uint32_t) (frame_ctx_p->byte_code_p - (uint8_t *) frame_ctx_p->bytecode_header_p);
695695
memcpy (breakpoint_hit_p->offset, &offset, sizeof (uint32_t));
696696

697-
if (!jerry_debugger_send (sizeof (jerry_debugger_send_breakpoint_hit_t)))
697+
if (!JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_breakpoint_hit_t)))
698698
{
699699
return;
700700
}
@@ -703,7 +703,7 @@ jerry_debugger_breakpoint_hit (uint8_t message_type) /**< message type */
703703

704704
jerry_debugger_uint8_data_t *uint8_data = NULL;
705705

706-
while (!jerry_debugger_receive (&uint8_data))
706+
while (!JERRY_CONTEXT (debugger_transport_p)->receive (&uint8_data))
707707
{
708708
jerry_debugger_sleep ();
709709
}
@@ -731,7 +731,7 @@ jerry_debugger_send_type (jerry_debugger_header_type_t type) /**< message type *
731731

732732
message_type_p->type = (uint8_t) type;
733733

734-
jerry_debugger_send (sizeof (jerry_debugger_send_type_t));
734+
JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_type_t));
735735
} /* jerry_debugger_send_type */
736736

737737

@@ -761,7 +761,7 @@ jerry_debugger_send_configuration (uint8_t max_message_size) /**< maximum messag
761761
configuration_p->little_endian = (endian_data.uint8_value[0] == 1);
762762
configuration_p->version = JERRY_DEBUGGER_VERSION;
763763

764-
return jerry_debugger_send (sizeof (jerry_debugger_send_configuration_t));
764+
return JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_configuration_t));
765765
} /* jerry_debugger_send_configuration */
766766

767767
/**
@@ -779,7 +779,7 @@ jerry_debugger_send_data (jerry_debugger_header_type_t type, /**< message type *
779779
message_type_p->type = type;
780780
memcpy (message_type_p + 1, data, size);
781781

782-
jerry_debugger_send (sizeof (jerry_debugger_send_type_t) + size);
782+
JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_type_t) + size);
783783
} /* jerry_debugger_send_data */
784784

785785
/**
@@ -806,7 +806,7 @@ jerry_debugger_send_string (uint8_t message_type, /**< message type */
806806
{
807807
memcpy (message_string_p->string, string_p, max_fragment_len);
808808

809-
if (!jerry_debugger_send (sizeof (jerry_debugger_send_string_t)))
809+
if (!JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_string_t)))
810810
{
811811
return false;
812812
}
@@ -828,7 +828,7 @@ jerry_debugger_send_string (uint8_t message_type, /**< message type */
828828
message_string_p->string[string_length - 1] = sub_type;
829829
}
830830

831-
return jerry_debugger_send (sizeof (jerry_debugger_send_type_t) + string_length);
831+
return JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_type_t) + string_length);
832832
} /* jerry_debugger_send_string */
833833

834834
/**
@@ -851,7 +851,7 @@ jerry_debugger_send_function_cp (jerry_debugger_header_type_t type, /**< message
851851
JMEM_CP_SET_NON_NULL_POINTER (compiled_code_cp, compiled_code_p);
852852
memcpy (byte_code_cp_p->byte_code_cp, &compiled_code_cp, sizeof (jmem_cpointer_t));
853853

854-
return jerry_debugger_send (sizeof (jerry_debugger_send_byte_code_cp_t));
854+
return JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_byte_code_cp_t));
855855
} /* jerry_debugger_send_function_cp */
856856

857857
/**
@@ -872,7 +872,7 @@ jerry_debugger_send_parse_function (uint32_t line, /**< line */
872872
memcpy (message_parse_function_p->line, &line, sizeof (uint32_t));
873873
memcpy (message_parse_function_p->column, &column, sizeof (uint32_t));
874874

875-
return jerry_debugger_send (sizeof (jerry_debugger_send_parse_function_t));
875+
return JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_parse_function_t));
876876
} /* jerry_debugger_send_parse_function */
877877

878878
/**
@@ -908,7 +908,7 @@ jerry_debugger_send_memstats (void)
908908
memset (memstats_p->property_bytes, 0, sizeof (uint32_t));
909909
#endif
910910

911-
jerry_debugger_send (sizeof (jerry_debugger_send_memstats_t));
911+
JERRY_CONTEXT (debugger_transport_p)->send (sizeof (jerry_debugger_send_memstats_t));
912912
} /* jerry_debugger_send_memstats */
913913

914914
/*

jerry-core/debugger/debugger.h

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -245,21 +245,10 @@ typedef struct
245245
} jerry_debugger_send_header_t;
246246

247247
/**
248-
* Incoming message: next message of string data.
248+
* A forward declaration of various debugger structures.
249249
*/
250-
typedef struct
251-
{
252-
uint8_t type; /**< type of the message */
253-
} jerry_debugger_receive_uint8_data_part_t;
254-
255-
/**
256-
* Byte data for evaluating expressions and receiving client source.
257-
*/
258-
typedef struct
259-
{
260-
uint32_t uint8_size; /**< total size of the client source */
261-
uint32_t uint8_offset; /**< current offset in the client source */
262-
} jerry_debugger_uint8_data_t;
250+
typedef struct jerry_debugger_receive_uint8_data_part_t jerry_debugger_receive_uint8_data_part_t;
251+
typedef struct jerry_debugger_uint8_data_t jerry_debugger_uint8_data_t;
263252

264253
/**
265254
* Outgoing message: JerryScript configuration.
@@ -449,15 +438,6 @@ bool jerry_debugger_send_parse_function (uint32_t line, uint32_t column);
449438
void jerry_debugger_send_memstats (void);
450439
bool jerry_debugger_send_exception_string (void);
451440

452-
/**
453-
* Websocket transport layer will implement these functions.
454-
*/
455-
bool jerry_debugger_accept_connection (void);
456-
void jerry_debugger_close_connection (void);
457-
458-
bool jerry_debugger_send (size_t data_size);
459-
bool jerry_debugger_receive (jerry_debugger_uint8_data_t **message_data_p);
460-
461441
#endif /* JERRY_DEBUGGER */
462442

463443
#endif /* !DEBUGGER_H */

jerry-core/ecma/base/ecma-gc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,7 @@ ecma_free_unused_memory (jmem_free_unused_memory_severity_t severity) /**< sever
918918
&& JERRY_CONTEXT (debugger_byte_code_free_tail) != ECMA_NULL_POINTER)
919919
{
920920
/* Wait until all byte code is freed or the connection is aborted. */
921-
jerry_debugger_receive (NULL);
921+
JERRY_CONTEXT (debugger_transport_p)->receive (NULL);
922922
}
923923
#endif /* JERRY_DEBUGGER */
924924

jerry-core/ecma/base/ecma-helpers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1541,7 +1541,7 @@ ecma_bytecode_deref (ecma_compiled_code_t *bytecode_p) /**< byte code pointer */
15411541
{
15421542
/* Delay the byte code free until the debugger client is notified.
15431543
* If the connection is aborted the pointer is still freed by
1544-
* jerry_debugger_close_connection(). */
1544+
* debugger_transport_p->close (). */
15451545
jerry_debugger_byte_code_free_t *byte_code_free_p = (jerry_debugger_byte_code_free_t *) bytecode_p;
15461546
jmem_cpointer_t byte_code_free_head = JERRY_CONTEXT (debugger_byte_code_free_head);
15471547

jerry-core/include/jerryscript-debugger.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ typedef jerry_value_t (*jerry_debugger_wait_for_source_callback_t) (const jerry_
5353
/**
5454
* Engine debugger functions.
5555
*/
56-
void jerry_debugger_init (uint16_t port);
56+
typedef struct jerry_debugger_transport_t jerry_debugger_transport_t;
57+
58+
void jerry_debugger_init (jerry_debugger_transport_t *transport_p);
5759
bool jerry_debugger_is_connected (void);
5860
void jerry_debugger_stop (void);
5961
void jerry_debugger_continue (void);

0 commit comments

Comments
 (0)