L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
debugger.h
Go to the documentation of this file.
1#pragma once
7/*
8 * (c) 2008-2011 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
9 * Alexander Warg <warg@os.inf.tu-dresden.de>
10 * economic rights: Technische Universität Dresden (Germany)
11 *
12 * License: see LICENSE.spdx (in this directory or the directories above)
13 */
14
15#include <l4/sys/compiler.h>
16#include <l4/sys/utcb.h>
17#include <l4/sys/ipc.h>
18
31
44
49l4_debugger_set_object_name_u(l4_cap_idx_t cap, const char *name, l4_utcb_t *utcb) L4_NOTHROW;
50
66 char *name, unsigned size) L4_NOTHROW;
67
72l4_debugger_query_object_name_u(l4_cap_idx_t cap, unsigned id,
73 char *name, unsigned size,
74 l4_utcb_t *utcb) L4_NOTHROW;
75
90 char *name, unsigned size) L4_NOTHROW;
91
96l4_debugger_get_object_name_u(l4_cap_idx_t cap,
97 char *name, unsigned size,
98 l4_utcb_t *utcb) L4_NOTHROW;
99
111L4_INLINE unsigned long
113
117L4_INLINE unsigned long
118l4_debugger_global_id_u(l4_cap_idx_t cap, l4_utcb_t *utcb) L4_NOTHROW;
119
132L4_INLINE unsigned long
134
138L4_INLINE unsigned long
139l4_debugger_kobj_to_id_u(l4_cap_idx_t cap, l4_addr_t kobjp, l4_utcb_t *utcb) L4_NOTHROW;
140
154l4_debugger_query_log_typeid(l4_cap_idx_t cap, const char *name,
155 unsigned idx) L4_NOTHROW;
156
161l4_debugger_query_log_typeid_u(l4_cap_idx_t cap, const char *name,
162 unsigned idx, l4_utcb_t *utcb) L4_NOTHROW;
163
182 char *name, unsigned namelen,
183 char *shortname, unsigned shortnamelen) L4_NOTHROW;
184
189l4_debugger_query_log_name_u(l4_cap_idx_t cap, unsigned idx,
190 char *name, unsigned namelen,
191 char *shortname, unsigned shortnamelen,
192 l4_utcb_t *utcb) L4_NOTHROW;
193
205l4_debugger_switch_log(l4_cap_idx_t cap, const char *name,
206 int on_off) L4_NOTHROW;
207
212l4_debugger_switch_log_u(l4_cap_idx_t cap, const char *name, int on_off,
213 l4_utcb_t *utcb) L4_NOTHROW;
214
227 const char *name) L4_NOTHROW;
228
233l4_debugger_add_image_info_u(l4_cap_idx_t cap, l4_addr_t base, const char *name,
234 l4_utcb_t *utcb) L4_NOTHROW;
235
236enum
237{
256
259};
260
261enum
262{
263 L4_DEBUGGER_SWITCH_LOG_ON = 1,
264 L4_DEBUGGER_SWITCH_LOG_OFF = 0,
265};
266
267/* IMPLEMENTATION -----------------------------------------------------------*/
268
269#include <l4/sys/kernel_object.h>
270
284L4_INLINE unsigned
285__strcpy_maxlen(char *dst, char const *src, unsigned maxlen)
286{
287 unsigned i;
288 if (!maxlen)
289 return 0;
290
291 for (i = 0; i < maxlen - 1 && src[i]; ++i)
292 dst[i] = src[i];
293 dst[i] = '\0';
294
295 return i + 1;
296}
297
299l4_debugger_set_object_name_u(l4_cap_idx_t cap,
300 const char *name, l4_utcb_t *utcb) L4_NOTHROW
301{
302 unsigned i;
303 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_SET_NAME_OP;
304 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[1], name,
305 (L4_UTCB_GENERIC_DATA_SIZE - 2) * sizeof(l4_umword_t));
306 i = l4_bytes_to_mwords(i);
307 return l4_invoke_debugger(cap, l4_msgtag(0, 1 + i, 0, 0), utcb);
308}
309
310L4_INLINE unsigned long
311l4_debugger_global_id_u(l4_cap_idx_t cap, l4_utcb_t *utcb) L4_NOTHROW
312{
313 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_GET_GLOBAL_ID_OP;
314 if (l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 1, 0, 0), utcb), utcb))
315 return ~0UL;
316 return l4_utcb_mr_u(utcb)->mr[0];
317}
318
319L4_INLINE unsigned long
320l4_debugger_kobj_to_id_u(l4_cap_idx_t cap, l4_addr_t kobjp, l4_utcb_t *utcb) L4_NOTHROW
321{
322 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_PTR_GET_GLOBAL_ID_OP;
323 l4_utcb_mr_u(utcb)->mr[1] = kobjp;
324 if (l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb), utcb))
325 return ~0UL;
326 return l4_utcb_mr_u(utcb)->mr[0];
327}
328
330l4_debugger_query_log_typeid_u(l4_cap_idx_t cap, const char *name,
331 unsigned idx,
332 l4_utcb_t *utcb) L4_NOTHROW
333{
334 unsigned i;
335 l4_ret_t e;
336 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_QUERY_TYPEID_OP;
337 l4_utcb_mr_u(utcb)->mr[1] = idx;
338 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name, 32);
339 i = l4_bytes_to_mwords(i);
340 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb), utcb);
341 if (e < 0)
342 return e;
343
344 return l4_utcb_mr_u(utcb)->mr[0];
345}
346
348l4_debugger_query_log_name_u(l4_cap_idx_t cap, unsigned idx,
349 char *name, unsigned namelen,
350 char *shortname, unsigned shortnamelen,
351 l4_utcb_t *utcb) L4_NOTHROW
352{
353 l4_ret_t e;
354 char const *n;
355 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_QUERY_NAME_OP;
356 l4_utcb_mr_u(utcb)->mr[1] = idx;
357 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb), utcb);
358 if (e < 0)
359 return e;
360
361 n = (char const *)&l4_utcb_mr_u(utcb)->mr[0];
362 __strcpy_maxlen(name, n, namelen);
363 __strcpy_maxlen(shortname, n + __builtin_strlen(n) + 1, shortnamelen);
364 return 0;
365}
366
367
369l4_debugger_switch_log_u(l4_cap_idx_t cap, const char *name, int on_off,
370 l4_utcb_t *utcb) L4_NOTHROW
371{
372 unsigned i;
373 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_SWITCH_OP;
374 l4_utcb_mr_u(utcb)->mr[1] = on_off;
375 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name, 32);
376 i = l4_bytes_to_mwords(i);
377 return l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb);
378}
379
381l4_debugger_query_object_name_u(l4_cap_idx_t cap, unsigned id,
382 char *name, unsigned size,
383 l4_utcb_t *utcb) L4_NOTHROW
384{
385 l4_ret_t e;
386 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_GLOBAL_ID_GET_NAME_OP;
387 l4_utcb_mr_u(utcb)->mr[1] = id;
388 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb), utcb);
389 if (e < 0)
390 return e;
391
392 __strcpy_maxlen(name, (char const *)&l4_utcb_mr_u(utcb)->mr[0], size);
393 return 0;
394}
395
397l4_debugger_get_object_name_u(l4_cap_idx_t cap,
398 char *name, unsigned size,
399 l4_utcb_t *utcb) L4_NOTHROW
400{
401 l4_ret_t e;
402 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_GET_NAME_OP;
403 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 1, 0, 0), utcb), utcb);
404 if (e < 0)
405 return e;
406
407 __strcpy_maxlen(name, (char const *)&l4_utcb_mr_u(utcb)->mr[0], size);
408 return 0;
409}
410
412l4_debugger_add_image_info_u(l4_cap_idx_t cap, l4_addr_t base,
413 const char *name, l4_utcb_t *utcb) L4_NOTHROW
414{
415 unsigned i;
416 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_TASK_ADD_IMAGE_INFO_OP;
417 l4_utcb_mr_u(utcb)->mr[1] = base;
418 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name,
419 (L4_UTCB_GENERIC_DATA_SIZE - 3) * sizeof(l4_umword_t));
420 i = l4_bytes_to_mwords(i);
421 return l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb);
422}
423
424
427 const char *name) L4_NOTHROW
428{
429 return l4_debugger_set_object_name_u(cap, name, l4_utcb());
430}
431
432L4_INLINE unsigned long
434{
435 return l4_debugger_global_id_u(cap, l4_utcb());
436}
437
438L4_INLINE unsigned long
440{
441 return l4_debugger_kobj_to_id_u(cap, kobjp, l4_utcb());
442}
443
446 unsigned idx) L4_NOTHROW
447{
448 return l4_debugger_query_log_typeid_u(cap, name, idx, l4_utcb());
449}
450
453 char *name, unsigned namelen,
454 char *shortname, unsigned shortnamelen) L4_NOTHROW
455{
456 return l4_debugger_query_log_name_u(cap, idx, name, namelen,
457 shortname, shortnamelen, l4_utcb());
458}
459
462 int on_off) L4_NOTHROW
463{
464 return l4_debugger_switch_log_u(cap, name, on_off, l4_utcb());
465}
466
469 char *name, unsigned size) L4_NOTHROW
470{
471 return l4_debugger_query_object_name_u(cap, id, name, size, l4_utcb());
472}
473
476 char *name, unsigned size) L4_NOTHROW
477{
478 return l4_debugger_get_object_name_u(cap, name, size, l4_utcb());
479}
480
483 const char *name) L4_NOTHROW
484{
485 return l4_debugger_add_image_info_u(cap, base, name, l4_utcb());
486}
L4 compiler related defines.
@ L4_DEBUGGER_LOG_QUERY_NAME_OP
Get name of log type for given log-id.
Definition debugger.h:251
@ L4_DEBUGGER_KOBJ_PTR_GET_GLOBAL_ID_OP
Get debug ID of kernel object by pointer.
Definition debugger.h:243
@ L4_DEBUGGER_TASK_ADD_IMAGE_INFO_OP
Add image information for task.
Definition debugger.h:253
@ L4_DEBUGGER_KOBJ_SET_NAME_OP
Set debug name of kernel object.
Definition debugger.h:239
@ L4_DEBUGGER_OBJ_INFO_OP
Query information about all kernel objects.
Definition debugger.h:258
@ L4_DEBUGGER_KOBJ_GET_NAME_OP
Get debug name of kernel object.
Definition debugger.h:255
@ L4_DEBUGGER_GLOBAL_ID_GET_NAME_OP
Get debug name of kernel object by debug ID.
Definition debugger.h:249
@ L4_DEBUGGER_LOG_QUERY_TYPEID_OP
Query log-id for log type.
Definition debugger.h:245
@ L4_DEBUGGER_KOBJ_GET_GLOBAL_ID_OP
Get debug ID of kernel object.
Definition debugger.h:241
@ L4_DEBUGGER_LOG_SWITCH_OP
Enable / disable log.
Definition debugger.h:247
unsigned long l4_umword_t
Unsigned machine word.
Definition l4int.h:40
unsigned long l4_addr_t
Address type.
Definition l4int.h:34
unsigned long l4_cap_idx_t
Capability selector type.
Definition types.h:372
l4_msgtag_t l4_debugger_add_image_info(l4_cap_idx_t cap, l4_addr_t base, const char *name) L4_NOTHROW
Add loaded image information for a task.
Definition debugger.h:482
unsigned long l4_debugger_kobj_to_id(l4_cap_idx_t cap, l4_addr_t kobjp) L4_NOTHROW
Get the globally unique ID of the object behind the kobject pointer.
Definition debugger.h:439
l4_ret_t l4_debugger_query_log_typeid(l4_cap_idx_t cap, const char *name, unsigned idx) L4_NOTHROW
Query the log-id for a log type.
Definition debugger.h:445
l4_msgtag_t l4_debugger_set_object_name(l4_cap_idx_t cap, const char *name) L4_NOTHROW
Set the name of a kernel object.
Definition debugger.h:426
l4_ret_t l4_debugger_get_object_name(l4_cap_idx_t cap, char *name, unsigned size) L4_NOTHROW
Get name of a kernel object.
Definition debugger.h:475
l4_ret_t l4_debugger_query_log_name(l4_cap_idx_t cap, unsigned idx, char *name, unsigned namelen, char *shortname, unsigned shortnamelen) L4_NOTHROW
Query the name of a log type given the ID.
Definition debugger.h:452
unsigned long l4_debugger_global_id(l4_cap_idx_t cap) L4_NOTHROW
Get the globally unique ID of the object behind a capability.
Definition debugger.h:433
l4_msgtag_t l4_debugger_switch_log(l4_cap_idx_t cap, const char *name, int on_off) L4_NOTHROW
Set or unset log.
Definition debugger.h:461
l4_ret_t l4_debugger_query_object_name(l4_cap_idx_t cap, unsigned id, char *name, unsigned size) L4_NOTHROW
Get name of the kernel object with Id id.
Definition debugger.h:468
unsigned l4_bytes_to_mwords(unsigned size) L4_NOTHROW
Determine how many machine words (l4_umword_t) are required to store a buffer of 'size' bytes.
Definition consts.h:507
l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items, unsigned flags) L4_NOTHROW
Create a message tag from the specified values.
Definition types.h:441
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
Definition utcb.h:56
l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE
Get the UTCB address.
Definition utcb.h:369
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition compiler.h:167
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:51
Kernel object system calls.
Common IPC interface.
l4_int16_t l4_ret_t
Return value of an IPC call as well as an RPC call.
Definition types.h:29
UTCB definitions.
Message tag data structure.
Definition types.h:269