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
65 char *name, unsigned size) L4_NOTHROW;
66
71l4_debugger_query_object_name_u(l4_cap_idx_t cap, unsigned id,
72 char *name, unsigned size,
73 l4_utcb_t *utcb) L4_NOTHROW;
74
88 char *name, unsigned size) L4_NOTHROW;
89
94l4_debugger_get_object_name_u(l4_cap_idx_t cap,
95 char *name, unsigned size,
96 l4_utcb_t *utcb) L4_NOTHROW;
97
109L4_INLINE unsigned long
111
115L4_INLINE unsigned long
116l4_debugger_global_id_u(l4_cap_idx_t cap, l4_utcb_t *utcb) L4_NOTHROW;
117
130L4_INLINE unsigned long
132
136L4_INLINE unsigned long
137l4_debugger_kobj_to_id_u(l4_cap_idx_t cap, l4_addr_t kobjp, l4_utcb_t *utcb) L4_NOTHROW;
138
151L4_INLINE long
152l4_debugger_query_log_typeid(l4_cap_idx_t cap, const char *name,
153 unsigned idx) L4_NOTHROW;
154
158L4_INLINE long
159l4_debugger_query_log_typeid_u(l4_cap_idx_t cap, const char *name,
160 unsigned idx, l4_utcb_t *utcb) L4_NOTHROW;
161
178L4_INLINE long
180 char *name, unsigned namelen,
181 char *shortname, unsigned shortnamelen) L4_NOTHROW;
182
186L4_INLINE long
187l4_debugger_query_log_name_u(l4_cap_idx_t cap, unsigned idx,
188 char *name, unsigned namelen,
189 char *shortname, unsigned shortnamelen,
190 l4_utcb_t *utcb) L4_NOTHROW;
191
203l4_debugger_switch_log(l4_cap_idx_t cap, const char *name,
204 int on_off) L4_NOTHROW;
205
210l4_debugger_switch_log_u(l4_cap_idx_t cap, const char *name, int on_off,
211 l4_utcb_t *utcb) L4_NOTHROW;
212
225 const char *name) L4_NOTHROW;
226
231l4_debugger_add_image_info_u(l4_cap_idx_t cap, l4_addr_t base, const char *name,
232 l4_utcb_t *utcb) L4_NOTHROW;
233
234enum
235{
254
257};
258
259enum
260{
261 L4_DEBUGGER_SWITCH_LOG_ON = 1,
262 L4_DEBUGGER_SWITCH_LOG_OFF = 0,
263};
264
265/* IMPLEMENTATION -----------------------------------------------------------*/
266
267#include <l4/sys/kernel_object.h>
268
282L4_INLINE unsigned
283__strcpy_maxlen(char *dst, char const *src, unsigned maxlen)
284{
285 unsigned i;
286 if (!maxlen)
287 return 0;
288
289 for (i = 0; i < maxlen - 1 && src[i]; ++i)
290 dst[i] = src[i];
291 dst[i] = '\0';
292
293 return i + 1;
294}
295
297l4_debugger_set_object_name_u(l4_cap_idx_t cap,
298 const char *name, l4_utcb_t *utcb) L4_NOTHROW
299{
300 unsigned i;
301 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_SET_NAME_OP;
302 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[1], name,
303 (L4_UTCB_GENERIC_DATA_SIZE - 2) * sizeof(l4_umword_t));
304 i = l4_bytes_to_mwords(i);
305 return l4_invoke_debugger(cap, l4_msgtag(0, 1 + i, 0, 0), utcb);
306}
307
308L4_INLINE unsigned long
309l4_debugger_global_id_u(l4_cap_idx_t cap, l4_utcb_t *utcb) L4_NOTHROW
310{
311 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_GET_GLOBAL_ID_OP;
312 if (l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 1, 0, 0), utcb), utcb))
313 return ~0UL;
314 return l4_utcb_mr_u(utcb)->mr[0];
315}
316
317L4_INLINE unsigned long
318l4_debugger_kobj_to_id_u(l4_cap_idx_t cap, l4_addr_t kobjp, l4_utcb_t *utcb) L4_NOTHROW
319{
320 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_PTR_GET_GLOBAL_ID_OP;
321 l4_utcb_mr_u(utcb)->mr[1] = kobjp;
322 if (l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb), utcb))
323 return ~0UL;
324 return l4_utcb_mr_u(utcb)->mr[0];
325}
326
327L4_INLINE long
328l4_debugger_query_log_typeid_u(l4_cap_idx_t cap, const char *name,
329 unsigned idx,
330 l4_utcb_t *utcb) L4_NOTHROW
331{
332 unsigned i;
333 long e;
334 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_QUERY_TYPEID_OP;
335 l4_utcb_mr_u(utcb)->mr[1] = idx;
336 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name, 32);
337 i = l4_bytes_to_mwords(i);
338 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb), utcb);
339 if (e < 0)
340 return e;
341 return l4_utcb_mr_u(utcb)->mr[0];
342}
343
344L4_INLINE long
345l4_debugger_query_log_name_u(l4_cap_idx_t cap, unsigned idx,
346 char *name, unsigned namelen,
347 char *shortname, unsigned shortnamelen,
348 l4_utcb_t *utcb) L4_NOTHROW
349{
350 long e;
351 char const *n;
352 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_QUERY_NAME_OP;
353 l4_utcb_mr_u(utcb)->mr[1] = idx;
354 e = l4_error_u(l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb), utcb);
355 if (e < 0)
356 return e;
357 n = (char const *)&l4_utcb_mr_u(utcb)->mr[0];
358 __strcpy_maxlen(name, n, namelen);
359 __strcpy_maxlen(shortname, n + __builtin_strlen(n) + 1, shortnamelen);
360 return 0;
361}
362
363
365l4_debugger_switch_log_u(l4_cap_idx_t cap, const char *name, int on_off,
366 l4_utcb_t *utcb) L4_NOTHROW
367{
368 unsigned i;
369 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_LOG_SWITCH_OP;
370 l4_utcb_mr_u(utcb)->mr[1] = on_off;
371 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name, 32);
372 i = l4_bytes_to_mwords(i);
373 return l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb);
374}
375
377l4_debugger_query_object_name_u(l4_cap_idx_t cap, unsigned id,
378 char *name, unsigned size,
379 l4_utcb_t *utcb) L4_NOTHROW
380{
381 l4_msgtag_t t;
382 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_GLOBAL_ID_GET_NAME_OP;
383 l4_utcb_mr_u(utcb)->mr[1] = id;
384 t = l4_invoke_debugger(cap, l4_msgtag(0, 2, 0, 0), utcb);
385 __strcpy_maxlen(name, (char const *)&l4_utcb_mr_u(utcb)->mr[0], size);
386 return t;
387}
388
390l4_debugger_get_object_name_u(l4_cap_idx_t cap,
391 char *name, unsigned size,
392 l4_utcb_t *utcb) L4_NOTHROW
393{
394 l4_msgtag_t t;
395 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_KOBJ_GET_NAME_OP;
396 t = l4_invoke_debugger(cap, l4_msgtag(0, 1, 0, 0), utcb);
397 __strcpy_maxlen(name, (char const *)&l4_utcb_mr_u(utcb)->mr[0], size);
398 return t;
399}
400
402l4_debugger_add_image_info_u(l4_cap_idx_t cap, l4_addr_t base,
403 const char *name, l4_utcb_t *utcb) L4_NOTHROW
404{
405 unsigned i;
406 l4_utcb_mr_u(utcb)->mr[0] = L4_DEBUGGER_TASK_ADD_IMAGE_INFO_OP;
407 l4_utcb_mr_u(utcb)->mr[1] = base;
408 i = __strcpy_maxlen((char *)&l4_utcb_mr_u(utcb)->mr[2], name,
409 (L4_UTCB_GENERIC_DATA_SIZE - 3) * sizeof(l4_umword_t));
410 i = l4_bytes_to_mwords(i);
411 return l4_invoke_debugger(cap, l4_msgtag(0, 2 + i, 0, 0), utcb);
412}
413
414
417 const char *name) L4_NOTHROW
418{
419 return l4_debugger_set_object_name_u(cap, name, l4_utcb());
420}
421
422L4_INLINE unsigned long
424{
425 return l4_debugger_global_id_u(cap, l4_utcb());
426}
427
428L4_INLINE unsigned long
430{
431 return l4_debugger_kobj_to_id_u(cap, kobjp, l4_utcb());
432}
433
434L4_INLINE long
436 unsigned idx) L4_NOTHROW
437{
438 return l4_debugger_query_log_typeid_u(cap, name, idx, l4_utcb());
439}
440
441L4_INLINE long
443 char *name, unsigned namelen,
444 char *shortname, unsigned shortnamelen) L4_NOTHROW
445{
446 return l4_debugger_query_log_name_u(cap, idx, name, namelen,
447 shortname, shortnamelen, l4_utcb());
448}
449
452 int on_off) L4_NOTHROW
453{
454 return l4_debugger_switch_log_u(cap, name, on_off, l4_utcb());
455}
456
459 char *name, unsigned size) L4_NOTHROW
460{
461 return l4_debugger_query_object_name_u(cap, id, name, size, l4_utcb());
462}
463
466 char *name, unsigned size) L4_NOTHROW
467{
468 return l4_debugger_get_object_name_u(cap, name, size, l4_utcb());
469}
470
473 const char *name) L4_NOTHROW
474{
475 return l4_debugger_add_image_info_u(cap, base, name, l4_utcb());
476}
L4 compiler related defines.
@ L4_DEBUGGER_LOG_QUERY_NAME_OP
Get name of log type for given log-id.
Definition debugger.h:249
@ L4_DEBUGGER_KOBJ_PTR_GET_GLOBAL_ID_OP
Get debug ID of kernel object by pointer.
Definition debugger.h:241
@ L4_DEBUGGER_TASK_ADD_IMAGE_INFO_OP
Add image information for task.
Definition debugger.h:251
@ L4_DEBUGGER_KOBJ_SET_NAME_OP
Set debug name of kernel object.
Definition debugger.h:237
@ L4_DEBUGGER_OBJ_INFO_OP
Query information about all kernel objects.
Definition debugger.h:256
@ L4_DEBUGGER_KOBJ_GET_NAME_OP
Get debug name of kernel object.
Definition debugger.h:253
@ L4_DEBUGGER_GLOBAL_ID_GET_NAME_OP
Get debug name of kernel object by debug ID.
Definition debugger.h:247
@ L4_DEBUGGER_LOG_QUERY_TYPEID_OP
Query log-id for log type.
Definition debugger.h:243
@ L4_DEBUGGER_KOBJ_GET_GLOBAL_ID_OP
Get debug ID of kernel object.
Definition debugger.h:239
@ L4_DEBUGGER_LOG_SWITCH_OP
Enable / disable log.
Definition debugger.h:245
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:336
l4_msgtag_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:458
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:472
long 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:435
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:429
long 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:442
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:416
l4_msgtag_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:465
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:423
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:451
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:496
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:405
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:346
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition compiler.h:161
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:51
Kernel object system calls.
Common IPC interface.
UTCB definitions.
Message tag data structure.
Definition types.h:154