dbghelp/stabs: For Mach-O, line numbers use absolute address, not offset.
authorKen Thomases <ken@codeweavers.com>
Fri, 13 Mar 2009 16:48:21 +0000 (11:48 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 25 Mar 2009 11:17:42 +0000 (12:17 +0100)
So, compute the offset by subtracting the function address.

dlls/dbghelp/stabs.c

index fd88722688a58c3021d98551a0b938fc3ce3a717..b2df46a28dfa5a8d8f44eb1e2c56f3b3c6d16546 100644 (file)
@@ -1202,6 +1202,8 @@ static void pending_flush(struct pending_list* pending, struct module* module,
                                 block, pending->objs[i].u.var.type, pending->objs[i].u.var.name);
             break;
         case PENDING_LINE:
+            if (module->type == DMT_MACHO)
+                pending->objs[i].u.line.offset -= func->address;
             symt_add_func_line(module, func, pending->objs[i].u.line.source_idx,
                                pending->objs[i].u.line.line_num, pending->objs[i].u.line.offset);
             break;
@@ -1485,8 +1487,11 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
             assert(source_idx >= 0);
             if (curr_func != NULL)
             {
+                unsigned long offset = stab_ptr->n_value;
+                if (module->type == DMT_MACHO)
+                    offset -= curr_func->address;
                 symt_add_func_line(module, curr_func, source_idx, 
-                                   stab_ptr->n_desc, stab_ptr->n_value);
+                                   stab_ptr->n_desc, offset);
             }
             else pending_add_line(&pending_func, source_idx, stab_ptr->n_desc,
                                   stab_ptr->n_value);