Ken Thomases : dbghelp/stabs: For Mach-O, line offset is relative to original function address.

Alexandre Julliard julliard at winehq.org
Tue Apr 7 09:04:38 CDT 2009


Module: wine
Branch: master
Commit: 905ab99815eff344de3a5c5dffdcf5ec83cdb45c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=905ab99815eff344de3a5c5dffdcf5ec83cdb45c

Author: Ken Thomases <ken at codeweavers.com>
Date:   Mon Apr  6 21:40:16 2009 -0500

dbghelp/stabs: For Mach-O, line offset is relative to original function address.

---

 dlls/dbghelp/stabs.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c
index b2df46a..f6199f3 100644
--- a/dlls/dbghelp/stabs.c
+++ b/dlls/dbghelp/stabs.c
@@ -1131,6 +1131,7 @@ struct pending_line
     int                 source_idx;
     int                 line_num;
     unsigned long       offset;
+    unsigned long       load_offset;
 };
 
 struct pending_object
@@ -1177,13 +1178,15 @@ static inline void pending_add_var(struct pending_list* pending, const char* nam
 }
 
 static inline void pending_add_line(struct pending_list* pending, int source_idx,
-                                    int line_num, unsigned long offset)
+                                    int line_num, unsigned long offset,
+                                    unsigned long load_offset)
 {
     pending_make_room(pending);
     pending->objs[pending->num].tag = PENDING_LINE;
     pending->objs[pending->num].u.line.source_idx   = source_idx;
     pending->objs[pending->num].u.line.line_num     = line_num;
     pending->objs[pending->num].u.line.offset       = offset;
+    pending->objs[pending->num].u.line.load_offset  = load_offset;
     pending->num++;
 }
 
@@ -1203,7 +1206,7 @@ static void pending_flush(struct pending_list* pending, struct module* module,
             break;
         case PENDING_LINE:
             if (module->type == DMT_MACHO)
-                pending->objs[i].u.line.offset -= func->address;
+                pending->objs[i].u.line.offset -= func->address - pending->objs[i].u.line.load_offset;
             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;
@@ -1489,12 +1492,12 @@ BOOL stabs_parse(struct module* module, unsigned long load_offset,
             {
                 unsigned long offset = stab_ptr->n_value;
                 if (module->type == DMT_MACHO)
-                    offset -= curr_func->address;
+                    offset -= curr_func->address - load_offset;
                 symt_add_func_line(module, curr_func, source_idx, 
                                    stab_ptr->n_desc, offset);
             }
             else pending_add_line(&pending_func, source_idx, stab_ptr->n_desc,
-                                  stab_ptr->n_value);
+                                  stab_ptr->n_value, load_offset);
             break;
         case N_FUN:
             /*




More information about the wine-cvs mailing list