From c9ef7ab429ab92780950a76dd266ba509cd21380d043a98ca752764c4ff2f651 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 10 Jan 2008 14:35:00 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdb?expand=0&rev=27 --- gdb-6.7.1.tar.bz2 | 3 - gdb-6.7.50.20080110-cvs.tar.bz2 | 3 + gdb.changes | 5 + gdb.spec | 23 +- macro-table.diff | 136 -------- pie-relocate.diff | 583 -------------------------------- ppc-long-double.diff | 18 - 7 files changed, 18 insertions(+), 753 deletions(-) delete mode 100644 gdb-6.7.1.tar.bz2 create mode 100644 gdb-6.7.50.20080110-cvs.tar.bz2 delete mode 100644 macro-table.diff delete mode 100644 pie-relocate.diff delete mode 100644 ppc-long-double.diff diff --git a/gdb-6.7.1.tar.bz2 b/gdb-6.7.1.tar.bz2 deleted file mode 100644 index b7300c7..0000000 --- a/gdb-6.7.1.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f98cec38420f4f1ce3da2f16e6045f086d24dfcf05996b2d74f8620691442f62 -size 15080950 diff --git a/gdb-6.7.50.20080110-cvs.tar.bz2 b/gdb-6.7.50.20080110-cvs.tar.bz2 new file mode 100644 index 0000000..a26a055 --- /dev/null +++ b/gdb-6.7.50.20080110-cvs.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03d71579cbc8e43da40bf8cb3662f705eef2fa86ac5030b9520ae4a080dbf260 +size 15093497 diff --git a/gdb.changes b/gdb.changes index f7ddce4..ecb6d36 100644 --- a/gdb.changes +++ b/gdb.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Jan 10 11:57:13 CET 2008 - schwab@suse.de + +- Update to head of trunk. + ------------------------------------------------------------------- Mon Nov 12 14:47:26 CET 2007 - schwab@suse.de diff --git a/gdb.spec b/gdb.spec index 93310b8..e86709b 100644 --- a/gdb.spec +++ b/gdb.spec @@ -1,7 +1,7 @@ # -# spec file for package gdb (Version 6.7.1) +# spec file for package gdb (Version 6.7.50.20080110) # -# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # @@ -28,19 +28,16 @@ License: GPL v2 or later Group: Development/Tools/Debuggers AutoReqProv: on PreReq: %{install_info_prereq} -Version: 6.7.1 +Version: 6.7.50.20080110 Release: 1 Summary: The GNU Debugger -Source: gdb-%{version}.tar.bz2 +Source: gdb-%{version}-cvs.tar.bz2 +Patch1: find-pc-sect-line.diff Patch2: warn.patch Patch3: readline-5.1-random.patch Patch4: readnever.patch Patch5: gstack.patch Patch6: sect-index-text.diff -Patch7: pie-relocate.diff -Patch9: macro-table.diff -Patch10: ppc-long-double.diff -Patch12: find-pc-sect-line.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -68,16 +65,13 @@ Authors: Stu Grossman %prep -%setup -q +%setup -q -n %{name}-%{version}-cvs +%patch1 %patch2 %patch3 %patch4 %patch5 %patch6 -%patch7 -%patch9 -p1 -%patch10 -%patch12 %build CFLAGS="$RPM_OPT_FLAGS" \ @@ -133,7 +127,10 @@ rm -rf $RPM_BUILD_ROOT %{_bindir}/gdbserver %{_mandir}/man1/gdbserver.1.gz %endif + %changelog +* Thu Jan 10 2008 - schwab@suse.de +- Update to head of trunk. * Mon Nov 12 2007 - schwab@suse.de - Update to gdb 6.7.1. * hppa*64*-*-hpux11* target broken diff --git a/macro-table.diff b/macro-table.diff deleted file mode 100644 index a952840..0000000 --- a/macro-table.diff +++ /dev/null @@ -1,136 +0,0 @@ -2007-09-21 Jim Blandy - - * macrotab.h (new_macro_table): Document that removing information - from an obstack/bcache-managed macro table leaks memory. - * macrotab.c (macro_free, macro_bcache_free): Instead of asserting - that data is never freed in obstack/bcache-managed macro tables, - just leak the storage. - (macro_undef): If we're undefining a macro at exactly the same - source location that we defined it, simply remove the definition - altogether. - -diff -r 77afe7ffac2f gdb/macrotab.c ---- a/gdb/macrotab.c Fri Sep 21 14:38:59 2007 -0700 -+++ b/gdb/macrotab.c Fri Sep 21 17:32:52 2007 -0700 -@@ -87,8 +87,14 @@ static void - static void - macro_free (void *object, struct macro_table *t) - { -- gdb_assert (! t->obstack); -- xfree (object); -+ if (t->obstack) -+ /* There are cases where we need to remove entries from a macro -+ table, even when reading debugging information. This should be -+ rare, and there's no easy way to free arbitrary data from an -+ obstack, so we just leak it. */ -+ ; -+ else -+ xfree (object); - } - - -@@ -120,12 +126,18 @@ macro_bcache_str (struct macro_table *t, - - - /* Free a possibly bcached object OBJ. That is, if the macro table T -- has a bcache, it's an error; otherwise, xfree OBJ. */ -+ has a bcache, do nothing; otherwise, xfree OBJ. */ - static void - macro_bcache_free (struct macro_table *t, void *obj) - { -- gdb_assert (! t->bcache); -- xfree (obj); -+ if (t->bcache) -+ /* There are cases where we need to remove entries from a macro -+ table, even when reading debugging information. This should be -+ rare, and there's no easy way to free data from a bcache, so we -+ just leak it. */ -+ ; -+ else -+ xfree (obj); - } - - -@@ -781,25 +793,39 @@ macro_undef (struct macro_source_file *s - - if (n) - { -- /* This function is the only place a macro's end-of-scope -- location gets set to anything other than "end of the -- compilation unit" (i.e., end_file is zero). So if this macro -- already has its end-of-scope set, then we're probably seeing -- a second #undefinition for the same #definition. */ - struct macro_key *key = (struct macro_key *) n->key; - -- if (key->end_file) -+ /* If we're removing a definition at exactly the same point that -+ we defined it, then just delete the entry altogether. GCC -+ 4.1.2 will generate DWARF that says to do this if you pass it -+ arguments like '-DFOO -UFOO -DFOO=2'. */ -+ if (source == key->start_file -+ && line == key->start_line) -+ splay_tree_remove (source->table->definitions, n->key); -+ -+ else - { -- complaint (&symfile_complaints, -- _("macro '%s' is #undefined twice, at %s:%d and %s:%d"), name, -- source->filename, line, key->end_file->filename, -- key->end_line); -+ /* This function is the only place a macro's end-of-scope -+ location gets set to anything other than "end of the -+ compilation unit" (i.e., end_file is zero). So if this -+ macro already has its end-of-scope set, then we're -+ probably seeing a second #undefinition for the same -+ #definition. */ -+ if (key->end_file) -+ { -+ complaint (&symfile_complaints, -+ _("macro '%s' is #undefined twice," -+ " at %s:%d and %s:%d"), -+ name, -+ source->filename, line, -+ key->end_file->filename, key->end_line); -+ } -+ -+ /* Whether or not we've seen a prior #undefinition, wipe out -+ the old ending point, and make this the ending point. */ -+ key->end_file = source; -+ key->end_line = line; - } -- -- /* Whatever the case, wipe out the old ending point, and -- make this the ending point. */ -- key->end_file = source; -- key->end_line = line; - } - else - { -diff -r 77afe7ffac2f gdb/macrotab.h ---- a/gdb/macrotab.h Fri Sep 21 14:38:59 2007 -0700 -+++ b/gdb/macrotab.h Fri Sep 21 17:32:52 2007 -0700 -@@ -152,15 +152,15 @@ struct macro_source_file - amongst compilation units in an executable file; if BCACHE is zero, - don't cache these things. - -- Note that, if either OBSTACK or BCACHE are non-zero, then you -- should only ever add information the macro table --- you should -- never remove things from it. You'll get an error if you try. At -- the moment, since we only provide obstacks and bcaches for macro -- tables for symtabs, this restriction makes a nice sanity check. -- Obstacks and bcaches are pretty much grow-only structures anyway. -- However, if we find that it's occasionally useful to delete things -- even from the symtab's tables, and the storage leak isn't a -- problem, this restriction could be lifted. */ -+ Note that, if either OBSTACK or BCACHE are non-zero, then removing -+ information from the table may leak memory. Neither obstacks nor -+ bcaches really allow you to remove information, so although we can -+ update the data structure to record the change, we can't free the -+ old data. At the moment, since we only provide obstacks and -+ bcaches for macro tables for symtabs, this isn't a problem; only -+ odd debugging information makes a definition and then deletes it at -+ the same source location (although 'gcc -DFOO -UFOO -DFOO=2' does -+ do that in GCC 4.1.2.). */ - struct macro_table *new_macro_table (struct obstack *obstack, - struct bcache *bcache); - diff --git a/pie-relocate.diff b/pie-relocate.diff deleted file mode 100644 index 8698c78..0000000 --- a/pie-relocate.diff +++ /dev/null @@ -1,583 +0,0 @@ ---- gdb/Makefile.in -+++ gdb/Makefile.in -@@ -2450,7 +2450,7 @@ objfiles.o: objfiles.c $(defs_h) $(bfd_h - $(objfiles_h) $(gdb_stabs_h) $(target_h) $(bcache_h) $(mdebugread_h) \ - $(gdb_assert_h) $(gdb_stat_h) $(gdb_obstack_h) $(gdb_string_h) \ - $(hashtab_h) $(breakpoint_h) $(block_h) $(dictionary_h) $(source_h) \ -- $(parser_defs_h) $(expression_h) -+ $(parser_defs_h) $(expression_h) $(auxv_h) $(elf_common_h) - observer.o: observer.c $(defs_h) $(observer_h) $(command_h) $(gdbcmd_h) \ - $(observer_inc) - obsd-tdep.o: obsd-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(obsd_tdep_h) -@@ -2643,9 +2643,9 @@ solib-sunos.o: solib-sunos.c $(defs_h) $ - $(bcache_h) $(regcache_h) - solib-svr4.o: solib-svr4.c $(defs_h) $(elf_external_h) $(elf_common_h) \ - $(elf_mips_h) $(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ -- $(gdbcore_h) $(target_h) $(inferior_h) $(gdb_assert_h) \ -+ $(gdbcore_h) $(target_h) $(inferior_h) $(command_h) $(gdb_assert_h) \ - $(solist_h) $(solib_h) $(solib_svr4_h) $(bfd_target_h) $(elf_bfd_h) \ -- $(exec_h) -+ $(exec_h) $(auxv_h) - solib-target.o: solib-target.c $(defs_h) $(objfiles_h) $(solist_h) \ - $(symtab_h) $(symfile_h) $(target_h) $(vec_h) $(xml_support_h) \ - $(gdb_string_h) ---- gdb/breakpoint.c -+++ gdb/breakpoint.c -@@ -3869,6 +3869,7 @@ describe_other_breakpoints (CORE_ADDR pc - printf_filtered ("%s%s ", - ((b->enable_state == bp_disabled || - b->enable_state == bp_shlib_disabled || -+ b->enable_state == bp_startup_disabled || - b->enable_state == bp_call_disabled) - ? " (disabled)" - : b->enable_state == bp_permanent -@@ -4541,6 +4542,60 @@ re_enable_breakpoints_in_shlibs (void) - } - } - -+void -+disable_breakpoints_at_startup (int silent) -+{ -+ struct breakpoint *b; -+ int disabled_startup_breaks = 0; -+ -+ if (bfd_get_start_address (exec_bfd) != entry_point_address ()) -+ { -+ ALL_BREAKPOINTS (b) -+ { -+ if ((b->type == bp_breakpoint -+ || b->type == bp_hardware_breakpoint) -+ && b->enable_state == bp_enabled -+ && !b->loc->duplicate) -+ { -+ b->enable_state = bp_startup_disabled; -+ if (!silent) -+ { -+ if (!disabled_startup_breaks) -+ { -+ target_terminal_ours_for_output (); -+ warning ("Temporarily disabling breakpoints:"); -+ } -+ disabled_startup_breaks = 1; -+ warning ("breakpoint #%d addr 0x%s", -+ b->number, paddr_nz (b->loc->address)); -+ } -+ } -+ } -+ } -+} -+ -+/* Try to reenable any breakpoints after startup. */ -+void -+re_enable_breakpoints_at_startup (void) -+{ -+ struct breakpoint *b; -+ -+ if (bfd_get_start_address (exec_bfd) != entry_point_address ()) -+ { -+ ALL_BREAKPOINTS (b) -+ if (b->enable_state == bp_startup_disabled) -+ { -+ gdb_byte buf[1]; -+ -+ /* Do not reenable the breakpoint if the shared library -+ is still not mapped in. */ -+ if (target_read_memory (b->loc->address, buf, 1) == 0) -+ b->enable_state = bp_enabled; -+ } -+ } -+} -+ -+ - static void - solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname, - char *cond_string, enum bptype bp_kind) -@@ -6956,6 +7011,7 @@ delete_breakpoint (struct breakpoint *bp - && !b->loc->duplicate - && b->enable_state != bp_disabled - && b->enable_state != bp_shlib_disabled -+ && b->enable_state != bp_startup_disabled - && !b->pending - && b->enable_state != bp_call_disabled) - { -@@ -7180,7 +7236,8 @@ breakpoint_re_set_one (void *bint) - break; - - save_enable = b->enable_state; -- if (b->enable_state != bp_shlib_disabled) -+ if (b->enable_state != bp_shlib_disabled -+ && b->enable_state != bp_startup_disabled) - b->enable_state = bp_disabled; - else - /* If resetting a shlib-disabled breakpoint, we don't want to ---- gdb/breakpoint.h -+++ gdb/breakpoint.h -@@ -153,6 +153,7 @@ enum enable_state - automatically enabled and reset when the call - "lands" (either completes, or stops at another - eventpoint). */ -+ bp_startup_disabled, - bp_permanent /* There is a breakpoint instruction hard-wired into - the target's code. Don't try to write another - breakpoint instruction on top of it, or restore -@@ -794,8 +795,12 @@ extern void remove_thread_event_breakpoi - - extern void disable_breakpoints_in_shlibs (void); - -+extern void disable_breakpoints_at_startup (int silent); -+ - extern void re_enable_breakpoints_in_shlibs (void); - -+extern void re_enable_breakpoints_at_startup (void); -+ - extern void create_solib_load_event_breakpoint (char *, int, char *, char *); - - extern void create_solib_unload_event_breakpoint (char *, int, ---- gdb/dwarf2read.c -+++ gdb/dwarf2read.c -@@ -1231,7 +1231,7 @@ dwarf2_build_psymtabs (struct objfile *o - else - dwarf2_per_objfile->loc_buffer = NULL; - -- if (mainline -+ if (mainline == 1 - || (objfile->global_psymbols.size == 0 - && objfile->static_psymbols.size == 0)) - { ---- gdb/elfread.c -+++ gdb/elfread.c -@@ -611,7 +611,7 @@ elf_symfile_read (struct objfile *objfil - /* If we are reinitializing, or if we have never loaded syms yet, - set table to empty. MAINLINE is cleared so that *_read_psymtab - functions do not all also re-initialize the psymbol table. */ -- if (mainline) -+ if (mainline == 1) - { - init_psymbol_list (objfile, 0); - mainline = 0; ---- gdb/infrun.c -+++ gdb/infrun.c -@@ -2250,6 +2250,11 @@ process_event_stop_test: - code segments in shared libraries might be mapped in now. */ - re_enable_breakpoints_in_shlibs (); - -+ /* For PIE executables, we dont really know where the -+ breakpoints are going to be until we start up the -+ inferior. */ -+ re_enable_breakpoints_at_startup (); -+ - /* If requested, stop when the dynamic linker notifies - gdb of events. This allows the user to get control - and place breakpoints in initializer routines for ---- gdb/objfiles.c -+++ gdb/objfiles.c -@@ -47,6 +47,8 @@ - #include "block.h" - #include "dictionary.h" - #include "source.h" -+#include "auxv.h" -+#include "elf/common.h" - - /* Prototypes for local functions */ - -@@ -259,7 +261,16 @@ init_entry_point_info (struct objfile *o - CORE_ADDR - entry_point_address (void) - { -- return symfile_objfile ? symfile_objfile->ei.entry_point : 0; -+ int ret; -+ CORE_ADDR entry_addr; -+ -+ /* Find the address of the entry point of the program from the -+ auxv vector. */ -+ ret = target_auxv_search (¤t_target, AT_ENTRY, &entry_addr); -+ if (ret > 0) -+ return entry_addr; -+ else -+ return symfile_objfile ? symfile_objfile->ei.entry_point : 0; - } - - /* Create the terminating entry of OBJFILE's minimal symbol table. ---- gdb/solib-svr4.c -+++ gdb/solib-svr4.c -@@ -31,6 +31,7 @@ - #include "gdbcore.h" - #include "target.h" - #include "inferior.h" -+#include "command.h" - - #include "gdb_assert.h" - -@@ -41,6 +42,7 @@ - #include "bfd-target.h" - #include "elf-bfd.h" - #include "exec.h" -+#include "auxv.h" - - static struct link_map_offsets *svr4_fetch_link_map_offsets (void); - static int svr4_have_link_map_offsets (void); -@@ -249,8 +251,6 @@ static char *debug_loader_name; - - /* Local function prototypes */ - --static int match_main (char *); -- - static CORE_ADDR bfd_lookup_symbol (bfd *, char *); - - /* -@@ -356,6 +356,8 @@ scan_dyntag (int dyntag, bfd *abfd, CORE - Elf32_External_Dyn *x_dynp_32; - Elf64_External_Dyn *x_dynp_64; - struct bfd_section *sect; -+ CORE_ADDR relocated_dyn_addr, entry_addr; -+ int ret; - - if (abfd == NULL) - return 0; -@@ -363,11 +365,20 @@ scan_dyntag (int dyntag, bfd *abfd, CORE - if (arch_size == -1) - return 0; - -+ /* Find the address of the entry point of the program from the -+ auxv vector. */ -+ ret = target_auxv_search (¤t_target, AT_ENTRY, &entry_addr); -+ if (ret <= 0) -+ /* No auxv info, maybe an older kernel. Fake our way through. */ -+ entry_addr = bfd_get_start_address (exec_bfd); -+ - /* Find the start address of the .dynamic section. */ - sect = bfd_get_section_by_name (abfd, ".dynamic"); - if (sect == NULL) - return 0; - dyn_addr = bfd_section_vma (abfd, sect); -+ relocated_dyn_addr -+ = dyn_addr + entry_addr - bfd_get_start_address (exec_bfd); - - /* Read in .dynamic from the BFD. We will get the actual value - from memory later. */ -@@ -407,7 +418,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE - gdb_byte ptr_buf[8]; - CORE_ADDR ptr_addr; - -- ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8; -+ ptr_addr = relocated_dyn_addr + (buf - bufstart) + arch_size / 8; - if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0) - dyn_ptr = extract_typed_address (ptr_buf, - builtin_type_void_data_ptr); -@@ -743,9 +754,55 @@ svr4_current_sos (void) - does have a name, so we can no longer use a missing name to - decide when to ignore it. */ - if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0) -- free_so (new); -+ { -+ /* It is the first link map entry, i.e. it is the main -+ executable. */ -+ if (bfd_get_start_address (exec_bfd) == entry_point_address ()) -+ { -+ /* Non-pie case, main executable has not been relocated. */ -+ free_so (new); -+ } -+ else -+ { -+ /* Pie case, main executable has been relocated. */ -+ struct so_list *gdb_solib; -+ -+ strncpy (new->so_name, exec_bfd->filename, -+ SO_NAME_MAX_PATH_SIZE - 1); -+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -+ strcpy (new->so_original_name, new->so_name); -+ new->main_relocated = 0; -+ -+ for (gdb_solib = master_so_list (); -+ gdb_solib != NULL; -+ gdb_solib = gdb_solib->next) -+ if (strcmp (gdb_solib->so_name, new->so_name) == 0 -+ && gdb_solib->main_relocated) -+ break; -+ -+ if (gdb_solib == NULL) -+ { -+ add_to_target_sections (0 /*from_tty*/, ¤t_target, new); -+ new->main_p = 1; -+ } -+ -+ /* We need this in the list of shared libs we return because -+ solib_add_stub will loop through it and add the symbol -+ file. */ -+ new->next = 0; -+ *link_ptr = new; -+ link_ptr = &new->next; -+ } -+ } - else - { -+ /* This is not the first link map entry, i.e. is not the main -+ executable. Note however that it could be the DSO supplied on -+ certain systems (i.e. Linux 2.6) containing information about -+ the vsyscall page. We must ignore such entry. This entry is -+ nameless (just like the one for the main executable, -+ sigh). */ -+ - int errcode; - char *buffer; - -@@ -763,10 +820,8 @@ svr4_current_sos (void) - } - xfree (buffer); - -- /* If this entry has no name, or its name matches the name -- for the main executable, don't include it in the list. */ -- if (! new->so_name[0] -- || match_main (new->so_name)) -+ /* If this entry has no name, don't include it in the list. */ -+ if (! new->so_name[0]) - free_so (new); - else - { -@@ -865,24 +920,6 @@ svr4_fetch_objfile_link_map (struct objf - return 0; - } - --/* On some systems, the only way to recognize the link map entry for -- the main executable file is by looking at its name. Return -- non-zero iff SONAME matches one of the known main executable names. */ -- --static int --match_main (char *soname) --{ -- char **mainp; -- -- for (mainp = main_name_list; *mainp != NULL; mainp++) -- { -- if (strcmp (soname, *mainp) == 0) -- return (1); -- } -- -- return (0); --} -- - /* Return 1 if PC lies in the dynamic symbol resolution code of the - SVR4 run time loader. */ - static CORE_ADDR interp_text_sect_low; -@@ -1363,6 +1400,8 @@ svr4_solib_create_inferior_hook (void) - while (stop_signal != TARGET_SIGNAL_TRAP); - stop_soon = NO_STOP_QUIETLY; - #endif /* defined(_SCO_DS) */ -+ -+ disable_breakpoints_at_startup (1); - } - - static void ---- gdb/solib.c -+++ gdb/solib.c -@@ -414,15 +414,37 @@ symbol_add_stub (void *arg) - /* Have we already loaded this shared object? */ - ALL_OBJFILES (so->objfile) - { -- if (strcmp (so->objfile->name, so->so_name) == 0) -+ /* Found an already loaded shared library. */ -+ if (strcmp (so->objfile->name, so->so_name) == 0 -+ && !so->main_p) - return 1; -+ /* Found an already loaded main executable. This could happen in -+ two circumstances. -+ First case: the main file has already been read in as the first -+ thing that gdb does at startup, and the file hasn't been -+ relocated properly yet. Therefore we need to read it in with the -+ proper section info. -+ Second case: it has been read in with the correct relocation, and -+ therefore we need to skip it. */ -+ if (strcmp (so->objfile->name, so->so_name) == 0 -+ && so->main_p -+ && so->main_relocated) -+ return 1; - } - - sap = build_section_addr_info_from_section_table (so->sections, - so->sections_end); - -- so->objfile = symbol_file_add (so->so_name, so->from_tty, -- sap, 0, OBJF_SHARED); -+ if (so->main_p) -+ { -+ so->objfile = symbol_file_add (so->so_name, /*so->from_tty*/ 0, -+ sap, 1, 0); -+ so->main_relocated = 1; -+ } -+ else -+ so->objfile = symbol_file_add (so->so_name, so->from_tty, -+ sap, 0, OBJF_SHARED); -+ - free_section_addr_info (sap); - - return (1); -@@ -603,28 +625,7 @@ update_solib_list (int from_tty, struct - /* Fill in the rest of each of the `struct so_list' nodes. */ - for (i = inferior; i; i = i->next) - { -- i->from_tty = from_tty; -- -- /* Fill in the rest of the `struct so_list' node. */ -- catch_errors (solib_map_sections, i, -- "Error while mapping shared library sections:\n", -- RETURN_MASK_ALL); -- -- /* If requested, add the shared object's sections to the TARGET's -- section table. Do this immediately after mapping the object so -- that later nodes in the list can query this object, as is needed -- in solib-osf.c. */ -- if (target) -- { -- int count = (i->sections_end - i->sections); -- if (count > 0) -- { -- int space = target_resize_to_sections (target, count); -- memcpy (target->to_sections + space, -- i->sections, -- count * sizeof (i->sections[0])); -- } -- } -+ add_to_target_sections (from_tty, target, i); - - /* Notify any observer that the shared object has been - loaded now that we've added it to GDB's tables. */ -@@ -720,6 +721,39 @@ solib_add (char *pattern, int from_tty, - } - } - -+void -+add_to_target_sections (int from_tty, struct target_ops *target, -+ struct so_list *solib) -+{ -+ /* If this is set, then the sections have been already added to the -+ target list. */ -+ if (solib->main_p) -+ return; -+ -+ solib->from_tty = from_tty; -+ -+ /* Fill in the rest of the `struct so_list' node. */ -+ catch_errors (solib_map_sections, solib, -+ "Error while mapping shared library sections:\n", -+ RETURN_MASK_ALL); -+ -+ /* If requested, add the shared object's sections to the TARGET's -+ section table. Do this immediately after mapping the object so -+ that later nodes in the list can query this object, as is needed -+ in solib-osf.c. */ -+ if (target) -+ { -+ int count = solib->sections_end - solib->sections; -+ if (count > 0) -+ { -+ int space = target_resize_to_sections (target, count); -+ memcpy (target->to_sections + space, -+ solib->sections, -+ count * sizeof (solib->sections[0])); -+ } -+ } -+} -+ - - /* - ---- gdb/solist.h -+++ gdb/solist.h -@@ -61,6 +61,8 @@ struct so_list - bfd *abfd; - char symbols_loaded; /* flag: symbols read in yet? */ - char from_tty; /* flag: print msgs? */ -+ char main_p; /* flag: is this the main executable? */ -+ char main_relocated; /* flag: has it been relocated yet? */ - struct objfile *objfile; /* objfile for loaded lib */ - struct section_table *sections; - struct section_table *sections_end; -@@ -126,6 +128,10 @@ struct so_list *master_so_list (void); - /* Find solib binary file and open it. */ - extern int solib_open (char *in_pathname, char **found_pathname); - -+/* Add the list of sections in so_list to the target to_sections. */ -+extern void add_to_target_sections (int, struct target_ops *, -+ struct so_list *); -+ - /* FIXME: gdbarch needs to control this variable */ - extern struct target_so_ops *current_target_so_ops; - ---- gdb/symfile-mem.c -+++ gdb/symfile-mem.c -@@ -108,7 +108,7 @@ symbol_file_add_from_memory (struct bfd - } - - objf = symbol_file_add_from_bfd (nbfd, from_tty, -- sai, 0, OBJF_SHARED); -+ sai, 2, OBJF_SHARED); - - /* This might change our ideas about frames already looked at. */ - reinit_frame_cache (); ---- gdb/symfile.c -+++ gdb/symfile.c -@@ -780,7 +780,7 @@ syms_from_objfile (struct objfile *objfi - - /* Now either addrs or offsets is non-zero. */ - -- if (mainline) -+ if (mainline == 1) - { - /* We will modify the main symbol table, make sure that all its users - will be cleaned up if an error occurs during symbol reading. */ -@@ -808,7 +808,7 @@ syms_from_objfile (struct objfile *objfi - - We no longer warn if the lowest section is not a text segment (as - happens for the PA64 port. */ -- if (!mainline && addrs && addrs->other[0].name) -+ if (addrs && addrs->other[0].name) - { - asection *lower_sect; - asection *sect; -@@ -977,14 +977,14 @@ new_symfile_objfile (struct objfile *obj - /* If this is the main symbol file we have to clean up all users of the - old main symbol file. Otherwise it is sufficient to fixup all the - breakpoints that may have been redefined by this symbol file. */ -- if (mainline) -+ if (mainline == 1) - { - /* OK, make it the "real" symbol file. */ - symfile_objfile = objfile; - - clear_symtab_users (); - } -- else -+ else if (mainline == 0) - { - breakpoint_re_set (); - } -@@ -1030,7 +1030,7 @@ symbol_file_add_with_addrs_or_offsets (b - interactively wiping out any existing symbols. */ - - if ((have_full_symbols () || have_partial_symbols ()) -- && mainline -+ && mainline == 1 - && from_tty - && !query ("Load new symbol table from \"%s\"? ", name)) - error (_("Not confirmed.")); -@@ -1214,6 +1214,11 @@ symbol_file_clear (int from_tty) - symfile_objfile->name) - : !query (_("Discard symbol table? ")))) - error (_("Not confirmed.")); -+ -+#ifdef CLEAR_SOLIB -+ CLEAR_SOLIB (); -+#endif -+ - free_all_objfiles (); - - /* solib descriptors may have handles to objfiles. Since their -@@ -2471,6 +2476,8 @@ reread_symbols (void) - /* Discard cleanups as symbol reading was successful. */ - discard_cleanups (old_cleanups); - -+ init_entry_point_info (objfile); -+ - /* If the mtime has changed between the time we set new_modtime - and now, we *want* this to be out of date, so don't call stat - again now. */ diff --git a/ppc-long-double.diff b/ppc-long-double.diff deleted file mode 100644 index ff841e2..0000000 --- a/ppc-long-double.diff +++ /dev/null @@ -1,18 +0,0 @@ ---- gdb/ppc-linux-tdep.c -+++ gdb/ppc-linux-tdep.c -@@ -1065,6 +1065,7 @@ - { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - -+#if 0 - /* NOTE: jimb/2004-03-26: The System V ABI PowerPC Processor - Supplement says that long doubles are sixteen bytes long. - However, as one of the known warts of its ABI, PPC GNU/Linux uses -@@ -1074,6 +1075,7 @@ - double' on PPC GNU/Linux are non-conformant. */ - /* NOTE: cagney/2005-01-25: True for both 32- and 64-bit. */ - set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); -+#endif - - if (tdep->wordsize == 4) - {