userspace/kp_util.h - ktap

Data types defined

Macros defined

Source code

  1. #ifndef __KTAP_UTIL_H__
  2. #define __KTAP_UTIL_H__

  3. #include <stdarg.h>

  4. #include "../include/ktap_bc.h"
  5. #include "../include/ktap_err.h"

  6. typedef int bool;
  7. #define false 0
  8. #define true 1

  9. /* Resizable string buffer. */
  10. typedef struct SBuf {
  11.     char *p; /* String buffer pointer. */
  12.     char *e; /* String buffer end pointer. */
  13.     char *b; /* String buffer base. */
  14. } SBuf;

  15. /* Resizable string buffers. Struct definition in kp_obj.h. */
  16. #define sbufB(sb)    ((char *)(sb)->b)
  17. #define sbufP(sb)    ((char *)(sb)->p)
  18. #define sbufE(sb)    ((char *)(sb)->e)
  19. #define sbufsz(sb)    ((int)(sbufE((sb)) - sbufB((sb))))
  20. #define sbuflen(sb)    ((int)(sbufP((sb)) - sbufB((sb))))
  21. #define sbufleft(sb)    ((int)(sbufE((sb)) - sbufP((sb))))
  22. #define setsbufP(sb, q) ((sb)->p = (q))

  23. void kp_buf_init(SBuf *sb);
  24. void kp_buf_reset(SBuf *sb);
  25. void kp_buf_free(SBuf *sb);
  26. char *kp_buf_more(SBuf *sb, int sz);
  27. char *kp_buf_need(SBuf *sb, int sz);
  28. char *kp_buf_wmem(char *p, const void *q, int len);
  29. void kp_buf_putb(SBuf *sb, int c);
  30. ktap_str_t *kp_buf_str(SBuf *sb);


  31. #define KP_CHAR_CNTRL    0x01
  32. #define KP_CHAR_SPACE    0x02
  33. #define KP_CHAR_PUNCT    0x04
  34. #define KP_CHAR_DIGIT    0x08
  35. #define KP_CHAR_XDIGIT    0x10
  36. #define KP_CHAR_UPPER    0x20
  37. #define KP_CHAR_LOWER    0x40
  38. #define KP_CHAR_IDENT    0x80
  39. #define KP_CHAR_ALPHA    (KP_CHAR_LOWER|KP_CHAR_UPPER)
  40. #define KP_CHAR_ALNUM    (KP_CHAR_ALPHA|KP_CHAR_DIGIT)
  41. #define KP_CHAR_GRAPH    (KP_CHAR_ALNUM|KP_CHAR_PUNCT)

  42. /* Only pass -1 or 0..255 to these macros. Never pass a signed char! */
  43. #define kp_char_isa(c, t)    ((kp_char_bits+1)[(c)] & t)
  44. #define kp_char_iscntrl(c)    kp_char_isa((c), KP_CHAR_CNTRL)
  45. #define kp_char_isspace(c)    kp_char_isa((c), KP_CHAR_SPACE)
  46. #define kp_char_ispunct(c)    kp_char_isa((c), KP_CHAR_PUNCT)
  47. #define kp_char_isdigit(c)    kp_char_isa((c), KP_CHAR_DIGIT)
  48. #define kp_char_isxdigit(c)    kp_char_isa((c), KP_CHAR_XDIGIT)
  49. #define kp_char_isupper(c)    kp_char_isa((c), KP_CHAR_UPPER)
  50. #define kp_char_islower(c)    kp_char_isa((c), KP_CHAR_LOWER)
  51. #define kp_char_isident(c)    kp_char_isa((c), KP_CHAR_IDENT)
  52. #define kp_char_isalpha(c)    kp_char_isa((c), KP_CHAR_ALPHA)
  53. #define kp_char_isalnum(c)    kp_char_isa((c), KP_CHAR_ALNUM)
  54. #define kp_char_isgraph(c)    kp_char_isa((c), KP_CHAR_GRAPH)

  55. #define kp_char_toupper(c)    ((c) - (kp_char_islower(c) >> 1))
  56. #define kp_char_tolower(c)    ((c) + kp_char_isupper(c))

  57. extern const char *kp_err_allmsg;
  58. #define err2msg(em)     (kp_err_allmsg+(int)(em))

  59. extern const uint8_t kp_char_bits[257];


  60. char *strfmt_wuleb128(char *p, uint32_t v);
  61. void kp_err_lex(ktap_str_t *src, const char *tok, BCLine line,
  62.         ErrMsg em, va_list argp);
  63. char *kp_sprintf(const char *fmt, ...);
  64. const char *kp_sprintfv(const char *fmt, va_list argp);

  65. void *kp_reallocv(void *block, size_t osize, size_t nsize);

  66. void kp_str_resize(void);
  67. ktap_str_t *kp_str_newz(const char *str);
  68. ktap_str_t *kp_str_new(const char *str, size_t l);

  69. ktap_tab_t *kp_tab_new();
  70. const ktap_val_t *kp_tab_get(ktap_tab_t *t, const ktap_val_t *key);
  71. const ktap_val_t *kp_tab_getstr(ktap_tab_t *t, const ktap_str_t *ts);
  72. void kp_tab_setvalue(ktap_tab_t *t, const ktap_val_t *key, ktap_val_t *val);
  73. ktap_val_t *kp_tab_set(ktap_tab_t *t, const ktap_val_t *key);

  74. int kp_obj_equal(const ktap_val_t *t1, const ktap_val_t *t2);

  75. bool strglobmatch(const char *str, const char *pat);
  76. int kallsyms_parse(void *arg,
  77.            int(*process_symbol)(void *arg, const char *name,
  78.            char type, unsigned long start));

  79. unsigned long find_kernel_symbol(const char *symbol);
  80. void list_available_events(const char *match);
  81. void process_available_tracepoints(const char *sys, const char *event,
  82.                    int (*process)(const char *sys,
  83.                           const char *event));
  84. int kallsyms_parse(void *arg,
  85.                    int(*process_symbol)(void *arg, const char *name,
  86.                    char type, unsigned long start));


  87. #ifdef CONFIG_KTAP_FFI
  88. #include "../include/ktap_ffi.h"

  89. typedef struct cp_csymbol_state {
  90.     int cs_nr; /* number of c symbols */
  91.     int cs_arr_size; /* size of current symbol arrays */
  92.     csymbol *cs_arr;
  93. } cp_csymbol_state;

  94. cp_csymbol_state *ctype_get_csym_state(void);
  95. void kp_dump_csymbols();
  96. #endif

  97. ktap_eventdesc_t *kp_parse_events(const char *eventdef);
  98. void cleanup_event_resources(void);

  99. extern int verbose;
  100. #define verbose_printf(...) \
  101.     if (verbose)    \
  102.         printf("[verbose] " __VA_ARGS__);


  103. void kp_dump_proto(ktap_proto_t *pt);
  104. typedef int (*ktap_writer)(const void* p, size_t sz, void* ud);
  105. int kp_bcwrite(ktap_proto_t *pt, ktap_writer writer, void *data, int strip);

  106. int kp_create_reader(const char *output);
  107. #endif