X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fdebug%2Fdbginfo.c;h=08591d14f2772610b3efead9b6ce9a9dcf437262;hb=c59d37f47fdab6d74f1da6738b2d3f3373a378b9;hp=a65f28b521af6dbe147ce8420c755fcc2bdfdcb8;hpb=51381c73a9ad796f4d12faf6c7ec6f60cbc9f9b6;p=libfirm diff --git a/ir/debug/dbginfo.c b/ir/debug/dbginfo.c index a65f28b52..08591d14f 100644 --- a/ir/debug/dbginfo.c +++ b/ir/debug/dbginfo.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -24,9 +24,7 @@ * @date 2001 * @version $Id$ */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif +#include "config.h" #include "dbginfo_t.h" #include "irnode_t.h" @@ -34,52 +32,19 @@ #include "entity_t.h" merge_pair_func *__dbg_info_merge_pair = default_dbg_info_merge_pair; - merge_sets_func *__dbg_info_merge_sets = default_dbg_info_merge_sets; -snprint_dbg_func *__dbg_info_snprint = (snprint_dbg_func *)0; - -void dbg_init( merge_pair_func *mpf, merge_sets_func *msf, snprint_dbg_func *snprint_dbg ) +void dbg_init(merge_pair_func *mpf, merge_sets_func *msf) { __dbg_info_merge_pair = mpf ? mpf : default_dbg_info_merge_pair; __dbg_info_merge_sets = msf ? msf : default_dbg_info_merge_sets; - __dbg_info_snprint = snprint_dbg; -} /* dbg_init */ - - -void set_irn_dbg_info(ir_node *n, dbg_info *db) { - n->dbi = db; -} /* set_irn_dbg_info */ - -struct dbg_info *get_irn_dbg_info(const ir_node *n) { - return n->dbi; -} /* get_irn_dbg_info */ - - -/* Routines to access the field of an entity containing the - debugging information. */ -void set_entity_dbg_info(ir_entity *ent, dbg_info *db) { - ent->dbi = db; -} /* set_entity_dbg_info */ - -dbg_info *get_entity_dbg_info(const ir_entity *ent) { - return ent->dbi; -} /* get_entity_dbg_info */ - -/* Routines to access the field of a type containing the - debugging information. */ -void set_type_dbg_info(ir_type *tp, dbg_info *db) { - tp->dbi = db; -} /* set_type_dbg_info */ - -dbg_info *get_type_dbg_info(const ir_type *tp) { - return tp->dbi; -} /* get_type_dbg_info */ +} /* * Converts a debug_action into a string. */ -const char *dbg_action_2_str(dbg_action a) { +const char *dbg_action_2_str(dbg_action a) +{ #define CASE(a) case a: return #a switch (a) { @@ -99,6 +64,9 @@ const char *dbg_action_2_str(dbg_action a) { CASE(dbg_rem_poly_call); CASE(dbg_dead_code); CASE(dbg_opt_confirm); + CASE(dbg_gvn_pre); + CASE(dbg_combo); + CASE(dbg_jumpthreading); CASE(dbg_backend); default: if (a <= dbg_max) @@ -108,18 +76,21 @@ const char *dbg_action_2_str(dbg_action a) { return NULL; } #undef CASE -} /* dbg_action_2_str */ +} - -void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) { +void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) +{ dbg_info *new_db = get_irn_dbg_info(nw); + (void) info; if (new_db == NULL) set_irn_dbg_info(nw, get_irn_dbg_info(old)); -} /* default_dbg_info_merge_pair */ +} void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, ir_node **old_nodes, int n_old_nodes, - dbg_action info) { + dbg_action info) +{ + (void) info; if (n_old_nodes == 1) { dbg_info *old_db = get_irn_dbg_info(old_nodes[0]); int i; @@ -128,4 +99,49 @@ void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, if (get_irn_dbg_info(new_nodes[i]) == NULL) set_irn_dbg_info(new_nodes[i], old_db); } -} /* default_dbg_info_merge_sets */ +} + +/** The debug info retriever function. */ +static retrieve_dbg_func retrieve_dbg = NULL; +static retrieve_type_dbg_func retrieve_type_dbg = NULL; + +void ir_set_debug_retrieve(retrieve_dbg_func func) +{ + retrieve_dbg = func; +} + +const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line) +{ + if (retrieve_dbg) + return retrieve_dbg(dbg, line); + + *line = 0; + return NULL; +} + +void ir_set_type_debug_retrieve(retrieve_type_dbg_func func) +{ + retrieve_type_dbg = func; +} + +void ir_retrieve_type_dbg_info(char *buffer, size_t buffer_size, + const type_dbg_info *tdbgi) +{ + if (retrieve_type_dbg) + retrieve_type_dbg(buffer, buffer_size, tdbgi); + assert(buffer_size > 0); + buffer[0] = 0; +} + +void ir_dbg_info_snprint(char *buf, size_t bufsize, const dbg_info *dbg) +{ + unsigned line; + const char *source = ir_retrieve_dbg_info(dbg, &line); + + if (source == NULL) { + assert(bufsize > 0); + buf[0] = 0; + return; + } + snprintf(buf, bufsize, "%s:%u", source, line); +}