X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fsolib-osf.c;h=e2bb38d6185da8b77b766dc9bb529163ef73893b;hb=a493e3e2e429e4832b8620bd920ad07d0c2892d7;hp=151589f8296819ba2522ea873d144bc7505857ea;hpb=0fb0cc7590113e9b459dfcc48dc71c9d419d9580;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/solib-osf.c b/gdb/solib-osf.c index 151589f829..e2bb38d618 100644 --- a/gdb/solib-osf.c +++ b/gdb/solib-osf.c @@ -1,7 +1,7 @@ /* Handle OSF/1, Digital UNIX, and Tru64 shared libraries for GDB, the GNU Debugger. - Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2007, 2008, - 2009 Free Software Foundation, Inc. + Copyright (C) 1993-1996, 1998-2001, 2007-2012 Free Software + Foundation, Inc. This file is part of GDB. @@ -28,7 +28,7 @@ 1) Peek around in the runtime loader structures. These are not documented, and they are not defined in the system - header files. The definitions below were obtained by experimentation, + header files. The definitions below were obtained by experimentation, but they seem stable enough. 2) Use the libxproc.a library, which contains the equivalent ldr_* @@ -73,8 +73,8 @@ typedef struct CORE_ADDR previous; CORE_ADDR unknown1; CORE_ADDR module_name; - CORE_ADDR modinfo_addr; /* used by next_link_map_member() to detect - the end of the shared module list */ + CORE_ADDR modinfo_addr; /* Used by next_link_map_member() to detect + the end of the shared module list. */ long module_id; CORE_ADDR unknown2; CORE_ADDR unknown3; @@ -192,6 +192,7 @@ static int lm_sec_cmp (const void *p1, const void *p2) { const struct lm_sec *lms1 = p1, *lms2 = p2; + return strcmp (lms1->name, lms2->name); } @@ -220,7 +221,8 @@ fetch_sec_names (struct lm_info *lmi) target_read_string (lms->nameaddr, &name, PATH_MAX, &errcode); if (errcode != 0) { - warning (_("unable to read shared sec name at 0x%lx"), lms->nameaddr); + warning (_("unable to read shared sec name at 0x%lx"), + lms->nameaddr); name = xstrdup (""); } lms->name = name; @@ -234,7 +236,7 @@ fetch_sec_names (struct lm_info *lmi) static void osf_relocate_section_addresses (struct so_list *so, - struct section_table *sec) + struct target_section *sec) { struct lm_info *lmi; struct lm_sec lms_key, *lms; @@ -285,7 +287,7 @@ osf_clear_solib (void) instructions. For a statically bound executable, the inferior's first instruction is the - one at "_start", or a similar text label. No further processing is needed + one at "_start", or a similar text label. No further processing is needed in that case. For a dynamically bound executable, this first instruction is somewhere @@ -306,7 +308,7 @@ osf_clear_solib (void) Also, what if child has exit()ed? Must exit loop somehow. */ static void -osf_solib_create_inferior_hook (void) +osf_solib_create_inferior_hook (int from_tty) { struct inferior *inf; struct thread_info *tp; @@ -339,23 +341,23 @@ osf_solib_create_inferior_hook (void) tp = inferior_thread (); clear_proceed_status (); - inf->stop_soon = STOP_QUIETLY; - tp->stop_signal = TARGET_SIGNAL_0; + inf->control.stop_soon = STOP_QUIETLY; + tp->suspend.stop_signal = GDB_SIGNAL_0; do { - target_resume (minus_one_ptid, 0, tp->stop_signal); - wait_for_inferior (0); + target_resume (minus_one_ptid, 0, tp->suspend.stop_signal); + wait_for_inferior (); } - while (tp->stop_signal != TARGET_SIGNAL_TRAP); + while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP); /* solib_add will call reinit_frame_cache. But we are stopped in the runtime loader and we do not have symbols - for the runtime loader. So heuristic_proc_start will be called + for the runtime loader. So heuristic_proc_start will be called and will put out an annoying warning. Delaying the resetting of stop_soon until after symbol loading suppresses the warning. */ solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add); - inf->stop_soon = NO_STOP_QUIETLY; + inf->control.stop_soon = NO_STOP_QUIETLY; } /* target_so_ops callback. Do additional symbol handling, lookup, etc. after @@ -424,8 +426,8 @@ init_so (struct so_list *so, char *name, int isloader, int nsecs) memcpy (so->so_name, so->so_original_name, namelen + 1); /* Allocate section space. */ - so->lm_info = xmalloc ((unsigned) &(((struct lm_info *)0)->secs) + - nsecs * sizeof *so->lm_info); + so->lm_info = xmalloc (sizeof (struct lm_info) + + (nsecs - 1) * sizeof (struct lm_sec)); so->lm_info->isloader = isloader; so->lm_info->nsecs = nsecs; for (i = 0; i < nsecs; i++) @@ -536,7 +538,7 @@ close_map (struct read_map_ctxt *ctxt) static struct so_list * osf_current_sos (void) { - struct so_list *head = NULL, *tail, *newtail, so; + struct so_list *head = NULL, *tail = NULL, *newtail, so; struct read_map_ctxt ctxt; int skipped_main; @@ -584,7 +586,7 @@ osf_open_symbol_file_object (void *from_ttyp) int found; if (symfile_objfile) - if (!query ("Attempt to reload symbols from process? ")) + if (!query (_("Attempt to reload symbols from process? "))) return 0; /* The first module after /sbin/loader is the main program. */ @@ -609,12 +611,12 @@ osf_open_symbol_file_object (void *from_ttyp) static int osf_in_dynsym_resolve_code (CORE_ADDR pc) { - /* This function currently always return False. This is a temporary + /* This function currently always return False. This is a temporary solution which only consequence is to introduce a minor incovenience for the user: When stepping inside a subprogram located in a shared library, gdb might stop inside the dynamic loader code instead of - inside the subprogram itself. See the explanations in infrun.c about - the in_solib_dynsym_resolve_code() function for more details. */ + inside the subprogram itself. See the explanations in infrun.c about + the in_solib_dynsym_resolve_code() function for more details. */ return 0; } @@ -631,7 +633,8 @@ _initialize_osf_solib (void) osf_so_ops.current_sos = osf_current_sos; osf_so_ops.open_symbol_file_object = osf_open_symbol_file_object; osf_so_ops.in_dynsym_resolve_code = osf_in_dynsym_resolve_code; + osf_so_ops.bfd_open = solib_bfd_open; - /* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */ + /* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */ current_target_so_ops = &osf_so_ops; }