X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=include%2Flibfirm%2Fdbginfo.h;h=9778aea9e461659c059ed06675f15db001dc7754;hb=86bf49fa21cc460fcb4e5962308dcb6eac08e293;hp=317e821e036defb5cd8d962402804338c4595ba7;hpb=1ec30d95387eb392ba5a1adc7958ebd91383d59c;p=libfirm diff --git a/include/libfirm/dbginfo.h b/include/libfirm/dbginfo.h index 317e821e0..9778aea9e 100644 --- a/include/libfirm/dbginfo.h +++ b/include/libfirm/dbginfo.h @@ -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. * @@ -22,29 +22,24 @@ * @brief Implements the Firm interface to debug information. * @author Goetz Lindenmaier, Michael Beck * @date 2001 - * @version $Id$ - * @summary - * Firm requires a debugging module fulfilling this interface, else no - * debugging information is passed to the backend. - * The interface requires a datatype representing the debugging - * information. Firm supports administrating a reference to the debug - * information in every Firm node. Further Firm optimizations call - * routines to propagate debug information from old nodes to new nodes - * if the optimization replaces the old ones by the new ones. */ #ifndef FIRM_DEBUG_DBGINFO_H #define FIRM_DEBUG_DBGINFO_H +#include #include "firm_types.h" #include "ident.h" - -#ifdef __cplusplus -extern "C" { -#endif +#include "begin.h" /** - * @defgroup debug The Firm interface to debugging support. - * + * @defgroup dbg_info Source References + * Firm requires a debugging module fulfilling this interface, else no + * debugging information is passed to the backend. + * The interface requires a datatype representing the debugging + * information. Firm supports administrating a reference to the debug + * information in every Firm node. Further Firm optimizations call + * routines to propagate debug information from old nodes to new nodes + * if the optimization replaces the old ones by the new ones. * @{ */ @@ -58,80 +53,38 @@ extern "C" { * but pointers to this type can be stored in Firm nodes. */ -/** - * Sets the debug information of a node. - * - * @param n The node. - * @param db The debug info. - */ -void set_irn_dbg_info(ir_node *n, dbg_info *db); - -/** - * Returns the debug information of an node. - * - * @param n The node. - */ -dbg_info *get_irn_dbg_info(const ir_node *n); - -/** - * Sets the debug information of an entity. - * - * @param ent The entity. - * @param db The debug info. - */ -void set_entity_dbg_info(ir_entity *ent, dbg_info *db); - -/** - * Returns the debug information of an entity. - * - * @param ent The entity. - */ -dbg_info *get_entity_dbg_info(const ir_entity *ent); - -/** - * Sets the debug information of a type. - * - * @param tp The type. - * @param db The debug info. - */ -void set_type_dbg_info(ir_type *tp, dbg_info *db); - -/** - * Returns the debug information of a type. - * - * @param tp The type. - */ -dbg_info *get_type_dbg_info(const ir_type *tp); - /** * An enumeration indicating the action performed by a transformation. */ typedef enum { - dbg_error = 0, - dbg_opt_ssa, /**< Optimization of the SSA representation, e.g. removal of superfluent Phi nodes. */ - dbg_opt_auxnode, /**< Removal of unnecessary auxiliary nodes. */ - dbg_const_eval, /**< A Firm subgraph was evaluated to a single constant. */ - dbg_opt_cse, /**< A Firm node was replaced due to common subexpression elimination. */ - dbg_straightening, /**< A Firm subgraph was replaced by a single, existing block. */ - dbg_if_simplification, /**< The control flow of an if is changed as either the - else, the then or both blocks are empty. */ - dbg_algebraic_simplification, /**< A Firm subgraph was replaced because of an algebraic - simplification. */ - dbg_write_after_write, /**< A Firm subgraph was replaced because of a write - after write optimization. */ - dbg_write_after_read, /**< A Firm subgraph was replaced because of a write - after read optimization. */ - dbg_read_after_write, /**< A Firm subgraph was replaced because of a read - after write optimization. */ - dbg_read_after_read, /**< A Firm subgraph was replaced because of a read - after read optimization. */ - dbg_read_a_const, /**< A Firm subgraph was replaced because of a read - a constant optimization. */ - dbg_rem_poly_call, /**< Remove polymorphic call. */ - dbg_dead_code, /**< Removing unreachable code, I.e. blocks that are never executed. */ - dbg_opt_confirm, /**< A Firm subgraph was replace because of a Confirmation. */ - dbg_backend, /**< A Firm subgraph was replaced because of a Backend transformation */ - dbg_max /**< Maximum value. */ + dbg_error = 0, + dbg_opt_ssa, /**< Optimization of the SSA representation, e.g. removal of superfluent Phi nodes. */ + dbg_opt_auxnode, /**< Removal of unnecessary auxiliary nodes. */ + dbg_const_eval, /**< A Firm subgraph was evaluated to a single constant. */ + dbg_opt_cse, /**< A Firm node was replaced due to common subexpression elimination. */ + dbg_straightening, /**< A Firm subgraph was replaced by a single, existing block. */ + dbg_if_simplification, /**< The control flow of an if is changed as either the + else, the then or both blocks are empty. */ + dbg_algebraic_simplification, /**< A Firm subgraph was replaced because of an algebraic + simplification. */ + dbg_write_after_write, /**< A Firm subgraph was replaced because of a write + after write optimization. */ + dbg_write_after_read, /**< A Firm subgraph was replaced because of a write + after read optimization. */ + dbg_read_after_write, /**< A Firm subgraph was replaced because of a read + after write optimization. */ + dbg_read_after_read, /**< A Firm subgraph was replaced because of a read + after read optimization. */ + dbg_read_a_const, /**< A Firm subgraph was replaced because of a read + a constant optimization. */ + dbg_rem_poly_call, /**< Remove polymorphic call. */ + dbg_dead_code, /**< Removing unreachable code, i.e. blocks that are never executed. */ + dbg_opt_confirm, /**< A Firm subgraph was replace because of a Confirmation. */ + dbg_gvn_pre, /**< A Firm node was replace because of the GVN-PRE algorithm. */ + dbg_combo, /**< A Firm node was replace because of the combo algorithm. */ + dbg_jumpthreading, /**< A Firm node was replace because of the jumpthreading algorithm. */ + dbg_backend, /**< A Firm subgraph was replaced because of a Backend transformation */ + dbg_max /**< Maximum value. */ } dbg_action; /** @@ -139,7 +92,7 @@ typedef enum { * * @param a the debug action */ -const char *dbg_action_2_str(dbg_action a); +FIRM_API const char *dbg_action_2_str(dbg_action a); /** * The type of the debug info merge function. @@ -165,26 +118,9 @@ typedef void merge_pair_func(ir_node *new_node, ir_node *old_node, dbg_action ac */ typedef void merge_sets_func(ir_node **new_node_array, int new_num_entries, ir_node **old_node_array, int old_num_entries, dbg_action action); -/** - * The type of the debug info to human readable string function. - * - * @param buf pointer to a buffer that will hold the info - * @param len length of the buffer - * @param dbg the debug info - * - * @return Number of written characters to the buffer. - * - * @see dbg_init() - */ -typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg); - /** * Initializes the debug support. * - * @param dbg_info_merge_pair see function description - * @param dbg_info_merge_sets see function description - * @param snprint_dbg see function description - * * This function takes pointers to two functions that merge the * debug information when a * transformation of a Firm graph is performed. @@ -204,44 +140,59 @@ typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg); * * Further both functions pass an enumeration indicating the action * performed by the transformation, e.g. the kind of optimization performed. - * - * The third argument snprint_dbg is called to convert a debug info into a human readable string. - * This string is the dumped in the dumper functions. - * - * Note that if NULL is passed for dbg_info_merge_pair or dbg_info_merge_sets, the default - * implementations default_dbg_info_merge_pair() and default_dbg_info_merge_sets() are used. - * NULL passed for snprint_dbg means no output. */ -void dbg_init(merge_pair_func *dbg_info_merge_pair, merge_sets_func *dbg_info_merge_sets, snprint_dbg_func *snprint_dbg); +FIRM_API void dbg_init(merge_pair_func *dbg_info_merge_pair, + merge_sets_func *dbg_info_merge_sets); + +/** A sourcecode location */ +typedef struct src_loc_t { + char const *file; /**< the name of the source (usually a file) */ + unsigned line; /**< line number (starting at 1; 0 if unknown) */ + unsigned column; /**< column number (starting at 1; 0 if unknown) */ +} src_loc_t; /** - * The default merge_pair_func implementation, simply copies the debug info - * from the old Firm node to the new one if the new one does not have debug info yet. - * - * @param nw The new Firm node. - * @param old The old Firm node. - * @param info The action that cause old node to be replaced by new one. + * The type of the debug info retriever function. + * When given a dbg_info returns the name (usually the filename), line number + * and column number of the definition. + * Any part of the returned information may be NULL/0, which means it is not + * available. */ -void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info); +typedef src_loc_t (*retrieve_dbg_func)(dbg_info const *dbg); /** - * The default merge_sets_func implementation. If n_old_nodes is equal 1, copies - * the debug info from the old node to all new ones (if they do not have one), else does nothing. + * Sets a debug info retriever. * - * @param new_nodes An array of new Firm nodes. - * @param n_new_nodes The length of the new_nodes array. - * @param old_nodes An array of old (replaced) Firm nodes. - * @param n_old_nodes The length of the old_nodes array. - * @param info The action that cause old node to be replaced by new one. + * @param func the debug retriever function. + */ +FIRM_API void ir_set_debug_retrieve(retrieve_dbg_func func); + +/** + * The type of the type debug info retrieve function. + * Prints a human readable source representation of a type to an obstack. + * (Used for generating debug info like stabs or dwarf) + */ +typedef void (*retrieve_type_dbg_func)(char *buffer, size_t buffer_size, + const type_dbg_info *tdbgi); + +/** + * Sets global print_type_dbg_info function in firm + */ +FIRM_API void ir_set_type_debug_retrieve(retrieve_type_dbg_func func); + +/** + * Retrieve the debug info. */ -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); +FIRM_API src_loc_t ir_retrieve_dbg_info(dbg_info const *dbg); + +/** + * Retrieve type debug info + */ +FIRM_API void ir_retrieve_type_dbg_info(char *buffer, size_t buffer_size, + const type_dbg_info *tdbgi); /** @} */ -#ifdef __cplusplus -} -#endif +#include "end.h" #endif