A dynamic tracer for Linux

type.h 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. /* function arguments */
  30. int optional:1;
  31. } field_t;
  32. struct t_sou {
  33. char *name;
  34. int packed:1;
  35. field_t *fields;
  36. };
  37. struct t_func {
  38. char *name;
  39. type_t *type;
  40. field_t *args;
  41. };
  42. typedef enum ttype {
  43. T_TYPEDEF,
  44. T_SCALAR,
  45. T_POINTER,
  46. T_ARRAY,
  47. T_MAP,
  48. T_STRUCT,
  49. T_UNION,
  50. T_FUNC,
  51. } ttype_t;
  52. struct type {
  53. size_t size;
  54. ttype_t ttype;
  55. union {
  56. struct t_tdef tdef;
  57. struct t_scalar scalar;
  58. struct t_pointer pointer;
  59. struct t_array array;
  60. struct t_map map;
  61. struct t_sou sou;
  62. struct t_func func;
  63. } t;
  64. };
  65. extern type_t t_void;
  66. extern type_t t_char;
  67. extern type_t t_uchar;
  68. extern type_t t_short;
  69. extern type_t t_ushort;
  70. extern type_t t_int;
  71. extern type_t t_uint;
  72. extern type_t t_long;
  73. extern type_t t_ulong;
  74. extern type_t t_llong;
  75. extern type_t t_ullong;
  76. type_t *type_map_of(type_t *ktype, type_t *vtype);
  77. type_t *type_ptr_of(type_t *type);
  78. int type_equal (type_t *a, type_t *b);
  79. int type_compatible(type_t *a, type_t *b);
  80. int type_add(type_t *t);
  81. int type_add_list(type_t **ts);
  82. void type_dump (type_t *t, FILE *fp);
  83. void type_dump_cdecl(type_t *t, FILE *fp);
  84. void types_dump_cdecl(FILE *fp);
  85. #endif /* _PLY_TYPE_H */