keeps behind a series of phis are fine
[libfirm] / ir / be / bestabs.c
index 36b6e1a..a96c8ac 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -116,7 +116,7 @@ enum stabs_types {
  */
 typedef struct stabs_handle {
        dbg_handle              base;         /**< the base class */
-       ir_entity               *cur_ent;     /**< current method entity */
+       const ir_entity               *cur_ent;     /**< current method entity */
        const be_stack_layout_t *layout;      /**< current stack layout */
        unsigned                next_type_nr; /**< next type number */
        pmap                    *type_map;    /**< a map from type to type number */
@@ -143,7 +143,7 @@ static unsigned get_type_number(stabs_handle *h, ir_type *tp)
                num = h->next_type_nr++;
                pmap_insert(h->type_map, tp, INT_TO_PTR(num));
        } else {
-               num = PTR_TO_INT(entry->value);
+               num = (unsigned)PTR_TO_INT(entry->value);
        }
        return num;
 }  /* get_type_number */
@@ -202,7 +202,7 @@ static const tarval_mode_info dec_output = {
 /**
  * emit a tarval as decimal
  */
-static void be_emit_tv_as_decimal(tarval *tv)
+static void be_emit_tv_as_decimal(ir_tarval *tv)
 {
        ir_mode *mode = get_tarval_mode(tv);
        const tarval_mode_info *old = get_tarval_mode_output_option(mode);
@@ -214,8 +214,14 @@ static void be_emit_tv_as_decimal(tarval *tv)
 
 static void emit_type_name(const ir_type *type)
 {
+       char *c;
        char buf[256];
        ir_print_type(buf, sizeof(buf), type);
+       /* replace special chars to be on the safe side */
+       for (c = buf; *c != '\0'; ++c) {
+               if (*c == '\n' || *c == '"' || *c == '\\')
+                       *c = '?';
+       }
        be_emit_string(buf);
 }
 
@@ -292,7 +298,7 @@ static void gen_enum_type(stabs_handle *h, ir_type *tp)
 /**
  * print a pointer type
  */
-void print_pointer_type(stabs_handle *h, ir_type *tp, int local)
+static void print_pointer_type(stabs_handle *h, ir_type *tp, int local)
 {
        unsigned     type_num = local ? h->next_type_nr++ : get_type_number(h, tp);
        ir_type      *el_tp   = get_pointer_points_to_type(tp);
@@ -502,7 +508,7 @@ static void gen_method_type(wenv_t *env, ir_type *tp)
  */
 static void walk_type(type_or_ent tore, void *ctx)
 {
-       wenv_t *env = ctx;
+       wenv_t *env = (wenv_t*)ctx;
        ir_type  *tp;
 
        if (is_type(tore.typ)) {
@@ -562,10 +568,9 @@ static void walk_type(type_or_ent tore, void *ctx)
 static void finish_types(wenv_t *env)
 {
        waitq *wq = env->wq;
-       ir_type *tp;
 
        while (! waitq_empty(wq)) {
-               tp = waitq_get(wq);
+               ir_type *tp = (ir_type*)waitq_get(wq);
                if (IS_TYPE_READY(tp))
                        continue;
 
@@ -677,12 +682,14 @@ static void stabs_set_dbg_info(dbg_handle *h, dbg_info *dbgi)
 /**
  * dump the stabs for a method begin
  */
-static void stabs_method_begin(dbg_handle *handle, ir_entity *ent, const be_stack_layout_t *layout)
+static void stabs_method_begin(dbg_handle *handle, const ir_entity *ent)
 {
        stabs_handle *h = (stabs_handle *)handle;
+       ir_graph     *irg = get_entity_irg(ent);
        ir_type      *mtp, *rtp;
        unsigned     type_num;
        int          i, n, between_size;
+       be_stack_layout_t *layout = be_get_irg_stack_layout(irg);
 
        h->cur_ent = ent;
        h->layout  = layout;
@@ -749,7 +756,7 @@ static void stabs_method_begin(dbg_handle *handle, ir_entity *ent, const be_stac
 static void stabs_method_end(dbg_handle *handle)
 {
        stabs_handle            *h = (stabs_handle *)handle;
-       ir_entity               *ent = h->cur_ent;
+       const ir_entity         *ent = h->cur_ent;
        const be_stack_layout_t *layout = h->layout;
        const char              *ld_name = get_entity_ld_name(ent);
        int                     i, n, frame_size;
@@ -807,7 +814,7 @@ static void stabs_types(dbg_handle *handle)
 /**
  * dump a variable in the global type
  */
-static void stabs_variable(dbg_handle *handle, ir_entity *ent)
+static void stabs_variable(dbg_handle *handle, const ir_entity *ent)
 {
        stabs_handle *h = (stabs_handle *)handle;
        unsigned tp_num = get_type_number(h, get_entity_type(ent));
@@ -855,7 +862,7 @@ static const debug_ops stabs_ops = {
 };
 
 /* Opens a stabs handler */
-dbg_handle *be_stabs_open(void)
+static dbg_handle *be_stabs_open(void)
 {
        stabs_handle *h = XMALLOCZ(stabs_handle);
 
@@ -865,9 +872,8 @@ dbg_handle *be_stabs_open(void)
        return &h->base;
 }
 
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_stabs);
 void be_init_stabs(void)
 {
        be_register_dbgout_module("stabs", be_stabs_open);
 }
-
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_stabs);