bedwarf: query backend for pointer size
[libfirm] / ir / be / bedwarf.c
index 2de9f9d..49f4a8f 100644 (file)
@@ -63,7 +63,7 @@ static int debug_level = LEVEL_NONE;
  * here
  */
 typedef enum custom_abbrevs {
-       abbrev_void_subprogram,
+       abbrev_void_subprogram = 1,
        abbrev_subprogram,
        abbrev_formal_parameter,
        abbrev_unnamed_formal_parameter,
@@ -108,7 +108,7 @@ static char                 *comp_dir;
 static unsigned insert_file(const char *filename)
 {
        unsigned num;
-       void    *entry = pmap_get(env.file_map, filename);
+       void    *entry = pmap_get(void, env.file_map, filename);
        if (entry != NULL) {
                return PTR_TO_INT(entry);
        }
@@ -639,7 +639,7 @@ static void emit_array_type(const ir_type *type)
        ir_type *element_type = get_array_element_type(type);
 
        if (get_array_n_dimensions(type) != 1)
-               panic("dwarf: multidimensional arrays no supported yet");
+               panic("multidimensional arrays no supported yet");
 
        emit_type(element_type);
 
@@ -810,7 +810,7 @@ static void emit_subroutine_type(const ir_type *type)
 
 static void emit_type(ir_type *type)
 {
-       if (pset_new_insert(&env.emitted_types, type))
+       if (!pset_new_insert(&env.emitted_types, type))
                return;
 
        switch (get_type_tpop_code(type)) {
@@ -822,7 +822,7 @@ static void emit_type(ir_type *type)
        case tpo_union:     emit_compound_type(type);   break;
        case tpo_method:    emit_subroutine_type(type); break;
        default:
-               panic("bedwarf: type %+F not implemented yet", type);
+               panic("type %+F not implemented yet", type);
        }
 }
 
@@ -915,19 +915,20 @@ void be_dwarf_unit_begin(const char *filename)
        emit_label("info_section_begin");
        emit_label("info_begin");
 
+       const backend_params *be_params = be_get_backend_param();
+
        /* length of compilation unit info */
        emit_size("compile_unit_begin", "compile_unit_end");
        emit_label("compile_unit_begin");
        emit_int16(3);   /* dwarf version */
        emit_address("abbrev_begin");
-       emit_int8(4);    /* pointer size, TODO: query backend */
+       emit_int8(be_params->machine_size / 8); /* pointer size */
 
        /* compile_unit die */
        emit_uleb128(abbrev_compile_unit);
        emit_address("line_section_begin");
        emit_string_printf("libFirm (%u.%u %s)", ir_get_version_major(),
-                          ir_get_version_minor(),
-                          ir_get_version_revision());
+                          ir_get_version_minor(), ir_get_version_revision());
        emit_string(filename);
        if (language != 0)
                emit_int16(language);