A dynamic tracer for Linux

type.h 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef _PLY_TYPE_H
  2. #define _PLY_TYPE_H
  3. #include <stddef.h>
  4. #include <stdio.h>
  5. typedef struct type type_t;
  6. struct t_tdef {
  7. char *name;
  8. type_t *type;
  9. };
  10. struct t_scalar {
  11. char *name;
  12. };
  13. struct t_pointer {
  14. type_t *type;
  15. };
  16. struct t_array {
  17. type_t *type;
  18. size_t len;
  19. };
  20. struct t_map {
  21. type_t *vtype;
  22. type_t *ktype;
  23. size_t len;
  24. };
  25. typedef struct field {
  26. char *name;
  27. type_t *type;
  28. size_t offset;
  29. } field_t;
  30. struct t_sou {
  31. char *name;
  32. int packed:1;
  33. field_t *fields;
  34. };
  35. struct t_func {
  36. char *name;
  37. type_t *type;
  38. field_t *args;
  39. };
  40. typedef enum ttype {
  41. T_TYPEDEF,
  42. T_SCALAR,
  43. T_POINTER,
  44. T_ARRAY,
  45. T_MAP,
  46. T_STRUCT,
  47. T_UNION,
  48. T_FUNC,
  49. } ttype_t;
  50. struct type {
  51. size_t size;
  52. ttype_t ttype;
  53. union {
  54. struct t_tdef tdef;
  55. struct t_scalar scalar;
  56. struct t_pointer pointer;
  57. struct t_array array;
  58. struct t_map map;
  59. struct t_sou sou;
  60. struct t_func func;
  61. } t;
  62. };
  63. extern type_t t_v;
  64. extern type_t t_vp;
  65. extern type_t t_c;
  66. extern type_t t_cp;
  67. extern type_t t_uc;
  68. extern type_t t_ucp;
  69. extern type_t t_s;
  70. extern type_t t_sp;
  71. extern type_t t_us;
  72. extern type_t t_usp;
  73. extern type_t t_i;
  74. extern type_t t_ip;
  75. extern type_t t_ui;
  76. extern type_t t_uip;
  77. extern type_t t_l;
  78. extern type_t t_lp;
  79. extern type_t t_ul;
  80. extern type_t t_ulp;
  81. extern type_t t_ll;
  82. extern type_t t_llp;
  83. extern type_t t_ull;
  84. extern type_t t_ullp;
  85. int type_equal(type_t *a, type_t *b);
  86. int type_add(type_t *t);
  87. int type_add_list(type_t **ts);
  88. void type_dump (type_t *t, FILE *fp);
  89. void type_dump_cdecl(type_t *t, FILE *fp);
  90. void types_dump_cdecl(FILE *fp);
  91. #endif /* _PLY_TYPE_H */