/* terminal symbols denoted by reserved words */
TK_TRACE = FIRST_RESERVED, TK_TRACE_END,
TK_ARGEVENT, TK_ARGNAME,
+ TK_FFI_CDEF,
TK_ARG1, TK_ARG2, TK_ARG3, TK_ARG4, TK_ARG5, TK_ARG6, TK_ARG7, TK_ARG8,
- TK_ARG9, TK_PROFILE, TK_TICK,
+ TK_ARG9, TK_PROFILE, TK_TICK, TK_AGGR_ASSIGN,
TK_AND, TK_BREAK,
TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION,
TK_GOTO, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT,
TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE,
/* other terminal symbols */
TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_INCR, TK_DBCOLON,
- TK_EOS, TK_NUMBER, TK_NAME, TK_STRING
+ TK_EOS, TK_NUMBER, TK_NAME, TK_STRING, TK_KSYM
};
/* number of reserved words */
/* state needed to generate code for a given function */
typedef struct ktap_funcstate {
ktap_proto *f; /* current function header */
- ktap_table *h; /* table to find (and reuse) elements in `k' */
+ ktap_tab *h; /* table to find (and reuse) elements in `k' */
struct ktap_funcstate *prev; /* enclosing function */
struct ktap_lexstate *ls; /* lexical state */
struct ktap_blockcnt *bl; /* chain of current blocks */
int ktapc_ts_eqstr(ktap_string *a, ktap_string *b);
ktap_string *ktapc_ts_newlstr(const char *str, size_t l);
ktap_proto *ktapc_newproto();
-ktap_table *ktapc_table_new();
-const ktap_value *ktapc_table_get(ktap_table *t, const ktap_value *key);
-void ktapc_table_setvalue(ktap_table *t, const ktap_value *key, ktap_value *val);
-ktap_closure *ktapc_newlclosure(int n);
+ktap_tab *ktapc_table_new();
+const ktap_value *ktapc_table_get(ktap_tab *t, const ktap_value *key);
+void ktapc_table_setvalue(ktap_tab *t, const ktap_value *key, ktap_value *val);
+ktap_closure *ktapc_newclosure(int n);
char *ktapc_sprintf(const char *fmt, ...);
void *ktapc_reallocv(void *block, size_t osize, size_t nsize);
void ktapio_exit(void);
int ktapio_create(const char *output_filename);
-ktap_string *ktapc_parse_eventdef(ktap_string *eventdef);
+ktap_eventdef_info *ktapc_parse_eventdef(const char *eventdef);
void cleanup_event_resources(void);
extern int verbose;
#define ktapc_equalobj(t1, t2) kp_equalobjv(NULL, t1, t2)
-
-#include "../include/ktap_opcodes.h"
-
int codegen_stringK(ktap_funcstate *fs, ktap_string *s);
void codegen_indexed(ktap_funcstate *fs, ktap_expdesc *t, ktap_expdesc *k);
void codegen_setreturns(ktap_funcstate *fs, ktap_expdesc *e, int nresults);
void codegen_setoneret(ktap_funcstate *fs, ktap_expdesc *e);
void codegen_storevar(ktap_funcstate *fs, ktap_expdesc *var, ktap_expdesc *ex);
void codegen_storeincr(ktap_funcstate *fs, ktap_expdesc *var, ktap_expdesc *ex);
+void codegen_store_aggr(ktap_funcstate *fs, ktap_expdesc *var,
+ ktap_expdesc *ex);
void codegen_goiftrue(ktap_funcstate *fs, ktap_expdesc *e);
int codegen_getlabel(ktap_funcstate *fs);
int codegen_codek(ktap_funcstate *fs, int reg, int k);
int ktapc_hexavalue(int c);
ktap_number ktapc_arith(int op, ktap_number v1, ktap_number v2);
int ktapc_int2fb(unsigned int x);
-
bool strglobmatch(const char *str, const char *pat);
+int kallsyms_parse(void *arg,
+ int(*process_symbol)(void *arg, const char *name,
+ char type, unsigned long start));
+
+unsigned long find_kernel_symbol(const char *symbol);
+void list_available_events(const char *match);
+
+
+#ifdef CONFIG_KTAP_FFI
+#include "../include/ktap_ffi.h"
+
+typedef struct cp_csymbol_state {
+ int cs_nr; /* number of c symbols */
+ int cs_arr_size; /* size of current symbol arrays */
+ csymbol *cs_arr;
+} cp_csymbol_state;
+cp_csymbol_state *ctype_get_csym_state(void);
+#endif