diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4215476d2cd..3a02f7d6a54 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2009-08-17 Pedro Alves > + + * objfiles.c (objfile_relocate): Relocate the entry point before + relocating the section offsets. Flush the section map before + resetting breakpoints. + 2009-08-14 Doug Evans * symfile.c (find_separate_debug_file): Remove double free of diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 586f5d00117..92db65ef7c0 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -666,12 +666,6 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets) to be out of order. */ msymbols_sort (objfile); - { - int i; - for (i = 0; i < objfile->num_sections; ++i) - (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i); - } - if (objfile->ei.entry_point != ~(CORE_ADDR) 0) { /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT @@ -684,6 +678,15 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets) objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); } + { + int i; + for (i = 0; i < objfile->num_sections; ++i) + (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i); + } + + /* Rebuild section map next time we need it. */ + objfiles_changed_p = 1; + /* Update the table in exec_ops, used to read memory. */ ALL_OBJFILE_OSECTIONS (objfile, s) { @@ -695,7 +698,6 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets) /* Relocate breakpoints as necessary, after things are relocated. */ breakpoint_re_set (); - objfiles_changed_p = 1; /* Rebuild section map next time we need it. */ } /* Many places in gdb want to test just to see if we have any partial