* @brief Implements the Firm interface to debug information.
* @author Goetz Lindenmaier, Michael Beck
* @date 2001
- * @version $Id$
- * @brief
- * 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 "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.
* @{
*/
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 type of the debug info retriever function.
- * When given a dbg_info returns the name (usually the filename) of the
- * compilation unit defining it. @p line is set to the line number of the
- * definition.
+ * 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.
*/
-typedef const char *(*retrieve_dbg_func)(const dbg_info *dbg, unsigned *line);
+typedef src_loc_t (*retrieve_dbg_func)(dbg_info const *dbg);
/**
* Sets a debug info retriever.
const type_dbg_info *tdbgi);
/**
- * Set global print_type_dbg_info function in firm
+ * 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.
*/
-FIRM_API const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line);
+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);
+/** @} */
+
#include "end.h"
#endif