static void db_cpu_init(void) { db_expr_t addr; db_value_of_name("ncpu", &addr); db_read_bytes((db_addr_t)addr, sizeof(db_ncpu), (char *)&db_ncpu); db_value_of_name("cpu_infos", &addr); db_read_bytes((db_addr_t)addr, sizeof(db_cpu_infos), (char *)&db_cpu_infos); }
void db_find_trace_symbols(void) { db_expr_t value; if (db_value_of_name("_trap", &value)) db_trap_symbol_value = (db_addr_t) value; if (db_value_of_name("_kdintr", &value)) db_kdintr_symbol_value = (db_addr_t) value; if (db_value_of_name("_syscall", &value)) db_syscall_symbol_value = (db_addr_t) value; db_trace_symbols_found = TRUE; }
static boolean_t db_term(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tIDENT) { if (!db_value_of_name(db_tok_string, valuep) && !db_value_of_name_pcpu(db_tok_string, valuep) && !db_value_of_name_vnet(db_tok_string, valuep)) { db_error("Symbol not found\n"); /*NOTREACHED*/ } return (TRUE); } if (t == tNUMBER) { *valuep = (db_expr_t)db_tok_number; return (TRUE); } if (t == tDOT) { *valuep = (db_expr_t)db_dot; return (TRUE); } if (t == tDOTDOT) { *valuep = (db_expr_t)db_prev; return (TRUE); } if (t == tPLUS) { *valuep = (db_expr_t) db_next; return (TRUE); } if (t == tDITTO) { *valuep = (db_expr_t)db_last_addr; return (TRUE); } if (t == tDOLLAR) { if (!db_get_variable(valuep)) return (FALSE); return (TRUE); } if (t == tLPAREN) { if (!db_expression(valuep)) { db_error("Syntax error\n"); /*NOTREACHED*/ } t = db_read_token(); if (t != tRPAREN) { db_error("Syntax error\n"); /*NOTREACHED*/ } return (TRUE); } db_unread_token(t); return (FALSE); }
void db_find_trace_symbols(void) { db_expr_t value; #ifdef __ELF__ #define P #else #define P "_" #endif if (db_value_of_name(P"user_trap", &value)) db_user_trap_symbol_value = (db_addr_t) value; if (db_value_of_name(P"kernel_trap", &value)) db_kernel_trap_symbol_value = (db_addr_t) value; if (db_value_of_name(P"interrupt", &value)) db_interrupt_symbol_value = (db_addr_t) value; if (db_value_of_name(P"return_to_iret", &value)) db_return_to_iret_symbol_value = (db_addr_t) value; if (db_value_of_name(P"syscall", &value)) db_syscall_symbol_value = (db_addr_t) value; #undef P db_trace_symbols_found = TRUE; }
int db_read_int(const char *name) { db_expr_t val; int p; if (!db_value_of_name(name, &val)) { db_printf("db_read_int: cannot find `%s'\n", name); db_error(NULL); /* NOTREACHED */ } db_read_bytes((db_addr_t)val, sizeof(p), (char *)&p); return p; }
static bool db_term(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tIDENT) { if (!db_value_of_name(db_tok_string, valuep)) { db_expr_t v = 0; int i, c, byte; /* See if we can make a number out of all of it */ for (i = 0; (c = db_tok_string[i]) != '\0'; i++) { byte = 0; if (c >= '0' && c <= '9') byte = c - '0'; else if (db_radix == 16 && c >= 'a' && c <= 'f') byte = c - 'a' + 10; else if (db_radix == 16 && c >= 'A' && c <= 'F') byte = c - 'A' + 10; else db_error("Symbol not found\n"); /*NOTREACHED*/ v = v * db_radix + byte; } *valuep = (db_expr_t)v; } return (true); } if (t == tNUMBER) { *valuep = (db_expr_t)db_tok_number; return (true); } if (t == tDOT) { *valuep = (db_expr_t)db_dot; return (true); } if (t == tDOTDOT) { *valuep = (db_expr_t)db_prev; return (true); } if (t == tPLUS) { *valuep = (db_expr_t) db_next; return (true); } if (t == tDITTO) { *valuep = (db_expr_t)db_last_addr; return (true); } if (t == tDOLLAR) { if (!db_get_variable(valuep)) return (false); return (true); } if (t == tLPAREN) { if (!db_expression(valuep)) { db_error("Syntax error\n"); /*NOTREACHED*/ } t = db_read_token(); if (t != tRPAREN) { db_error("Syntax error\n"); /*NOTREACHED*/ } return (true); } db_unread_token(t); return (false); }