* @date 11.9.2006
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include "pdeq.h"
#include "irtools.h"
#include "obst.h"
-#include "array.h"
+#include "array_t.h"
#include "be_dbgout_t.h"
#include "beabi.h"
#include "bemodule.h"
set_tarval_mode_output_option(mode, old);
}
+static void emit_type_name(const ir_type *type)
+{
+ char buf[256];
+ ir_print_type(buf, sizeof(buf), type);
+ be_emit_string(buf);
+}
+
/**
* Generates a primitive type.
*
type_num = get_type_number(h, tp);
if (mode_is_int(mode)) {
- be_emit_irprintf("\t.stabs\t\"%s:t%u=r%u;", get_type_name(tp), type_num, type_num);
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_irprintf(":t%u=r%u;", type_num, type_num);
be_emit_tv_as_decimal(get_mode_min(mode));
be_emit_char(';');
be_emit_tv_as_decimal(get_mode_max(mode));
be_emit_write_line();
} else if (mode_is_float(mode)) {
int size = get_type_size_bytes(tp);
- be_emit_irprintf("\t.stabs\t\"%s:t%u=r1;%d;0;\",%d,0,0,0\n", get_type_name(tp), type_num, size, N_LSYM);
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_irprintf(":t%u=r1;%d;0;\",%d,0,0,0\n", type_num, size, N_LSYM);
be_emit_write_line();
}
} /* gen_primitive_type */
int i, n;
SET_TYPE_READY(tp);
- be_emit_irprintf("\t.stabs\t\"%s:T%u=e", get_type_name(tp), type_num);
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_irprintf(":T%u=e", type_num);
for (i = 0, n = get_enumeration_n_enums(tp); i < n; ++i) {
ir_enum_const *ec = get_enumeration_const(tp, i);
char buf[64];
tarval_snprintf(buf, sizeof(buf), get_enumeration_value(ec));
- be_emit_irprintf("%s:%s,", get_enumeration_name(ec), buf);
+ be_emit_irprintf("%s:%s,", get_enumeration_const_name(ec), buf);
}
be_emit_irprintf(";\",%d,0,0,0\n", N_LSYM);
be_emit_write_line();
if (! IS_TYPE_READY(el_tp))
waitq_put(env->wq, el_tp);
- be_emit_irprintf("\t.stabs\t\"%s:t", get_type_name(tp));
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_cstring(":t");
print_pointer_type(h, tp, 0);
be_emit_irprintf("\",%d,0,0,0\n", N_LSYM);
be_emit_write_line();
if (! IS_TYPE_READY(etp))
waitq_put(env->wq, etp);
- be_emit_irprintf("\t.stabs\t\"%s:t", get_type_name(tp));
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_cstring(":t");
print_array_type(h, tp, 0);
else if (is_Union_type(tp))
desc = 'u';
- be_emit_irprintf("\t.stabs\t\"%s:Tt%u=%c%d",
- get_type_name(tp), type_num, desc, get_type_size_bytes(tp));
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_irprintf(":Tt%u=%c%d", type_num, desc, get_type_size_bytes(tp));
for (i = 0, n = get_compound_n_members(tp); i < n; ++i) {
ir_entity *ent = get_compound_member(tp, i);
}
res_type_num = get_type_number(h, rtp);
- be_emit_irprintf("\t.stabs\t\"%s:t%u=f%u", get_type_name(tp), type_num, res_type_num);
+ be_emit_cstring("\t.stabs\t\"");
+ emit_type_name(tp);
+ be_emit_irprintf(":t%u=f%u", type_num, res_type_num);
/* handle more than one return type */
for (i = 1; i < n; ++i) {
* type-walker: generate declaration for simple types,
* put all other types on a wait queue
*/
-static void walk_type(type_or_ent *tore, void *ctx)
+static void walk_type(type_or_ent tore, void *ctx)
{
wenv_t *env = ctx;
ir_type *tp;
- if (get_kind(tore) == k_type) {
- tp = (ir_type *)tore;
+ if (is_type(tore.typ)) {
+ tp = tore.typ;
/* ignore the unknown type */
if (tp == firm_unknown_type)
return;
if (handle->curr_file != fname) {
- /* TODO: escape filename correctly */
- if (handle->curr_file != handle->main_file) {
- be_emit_irprintf("\t.stabs\t\"%s\",%d,0,0,0\n", handle->curr_file,
- N_EINCL);
- be_emit_write_line();
- }
if (fname != handle->main_file) {
be_emit_irprintf("\t.stabs\t\"%s\",%d,0,0,0\n", fname, N_SOL);
be_emit_write_line();
/* Opens a stabs handler */
dbg_handle *be_stabs_open(void) {
- stabs_handle *h = xmalloc(sizeof(*h));
+ stabs_handle *h = XMALLOCZ(stabs_handle);
h->base.ops = &stabs_ops;
- h->cur_ent = NULL;
- h->layout = NULL;
- h->next_type_nr = 0;
h->type_map = pmap_create_ex(64);
- h->main_file = NULL;
- h->curr_file = NULL;
return &h->base;
}