+} /* stabs_method_begin */
+
+/**
+ * dump the stabs for a method end
+ */
+static void stabs_method_end(dbg_handle *handle)
+{
+ stabs_handle *h = (stabs_handle *)handle;
+ 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;
+ static unsigned scope_nr = 0;
+
+ /* create entries for automatic variables on the stack */
+ frame_size = get_type_size_bytes(layout->frame_type);
+ for (i = 0, n = get_compound_n_members(layout->frame_type); i < n; ++i) {
+ ir_entity *member = get_compound_member(layout->frame_type, i);
+ ir_type *tp;
+ int ofs;
+ unsigned type_num;
+
+ /* ignore spill slots and other helper objects */
+ if (is_entity_compiler_generated(member))
+ continue;
+
+ tp = get_entity_type(member);
+ /* should not happen in backend but ... */
+ if (is_Method_type(tp))
+ continue;
+ type_num = get_type_number(h, tp);
+ ofs = -frame_size + get_entity_offset(member);
+
+ be_emit_irprintf("\t.stabs\t\"%s:%u\",%d,0,0,%d\n",
+ get_entity_name(member), type_num, N_LSYM, ofs);
+ be_emit_write_line();
+ }
+ /* we need a lexical block here */
+ be_emit_irprintf("\t.stabn\t%d,0,0,%s-%s\n", N_LBRAC, ld_name, ld_name);
+ be_emit_write_line();
+ be_emit_irprintf("\t.stabn\t%d,0,0,.Lscope%u-%s\n", N_RBRAC, scope_nr, ld_name);
+ be_emit_write_line();
+ be_emit_irprintf(".Lscope%u:\n", scope_nr);
+ be_emit_write_line();
+ ++scope_nr;
+
+ h->cur_ent = NULL;
+ h->layout = NULL;
+} /* stabs_method_end */