* hppa-tdep.h (hppa_lookup_stub_minimal_symbol): Add declaration.
* solib-som.c (som_solib_create_inferior_hook): Replace stub
msymbol search by call to hppa_lookup_stub_minimal_symbol. This
extends the search to all objfiles, not just shared libraries.
Remove unused variable.
+2004-12-17 Joel Brobecker <brobecker@gnat.com>
+
+ * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): New function.
+ * hppa-tdep.h (hppa_lookup_stub_minimal_symbol): Add declaration.
+ * solib-som.c (som_solib_create_inferior_hook): Replace stub
+ msymbol search by call to hppa_lookup_stub_minimal_symbol. This
+ extends the search to all objfiles, not just shared libraries.
+ Remove unused variable.
+
2004-12-16 Michael Snyder <msnyder@redhat.com>
* MAINTAINERS: Add myself as maintainer for mn10300.
return pc & ~0x3;
}
+/* Return the minimal symbol whose name is NAME and stub type is STUB_TYPE.
+ Return NULL if no such symbol was found. */
+
+struct minimal_symbol *
+hppa_lookup_stub_minimal_symbol (const char *name,
+ enum unwind_stub_types stub_type)
+{
+ struct objfile *objfile;
+ struct minimal_symbol *msym;
+
+ ALL_MSYMBOLS (objfile, msym)
+ {
+ if (strcmp (SYMBOL_LINKAGE_NAME (msym), name) == 0)
+ {
+ struct unwind_table_entry *u;
+
+ u = find_unwind_entry (SYMBOL_VALUE (msym));
+ if (u != NULL && u->stub_unwind.stub_type == stub_type)
+ return msym;
+ }
+ }
+
+ return NULL;
+}
+
/* Instead of this nasty cast, add a method pvoid() that prints out a
host VOID data type (remember %p isn't portable). */
extern CORE_ADDR hppa_unwind_pc (struct gdbarch *gdbarch,
struct frame_info *next_frame);
+extern struct minimal_symbol *
+ hppa_lookup_stub_minimal_symbol (const char *name,
+ enum unwind_stub_types stub_type);
+
#endif /* HPPA_TDEP_H */
unsigned int dld_flags, status, have_endo;
asection *shlib_info;
char buf[4];
- struct objfile *objfile;
CORE_ADDR anaddr;
/* First, remove all the solib event breakpoints. Their addresses
/* Grrr, this might not be an export symbol! We have to find the
export stub. */
- ALL_OBJFILES (objfile)
- {
- struct unwind_table_entry *u;
- struct minimal_symbol *msymbol2;
-
- /* What a crock. */
- msymbol2 =
- lookup_minimal_symbol_solib_trampoline (SYMBOL_LINKAGE_NAME (msymbol),
- objfile);
- /* Found a symbol with the right name. */
- if (msymbol2)
- {
- struct unwind_table_entry *u;
- /* It must be a shared library trampoline. */
- if (SYMBOL_TYPE (msymbol2) != mst_solib_trampoline)
- continue;
-
- /* It must also be an export stub. */
- u = find_unwind_entry (SYMBOL_VALUE (msymbol2));
- if (!u || u->stub_unwind.stub_type != EXPORT)
- continue;
-
- /* OK. Looks like the correct import stub. */
- anaddr = SYMBOL_VALUE (msymbol2);
- dld_cache.hook_stub.address = anaddr;
- }
- }
+ msymbol = hppa_lookup_stub_minimal_symbol (SYMBOL_LINKAGE_NAME (msymbol),
+ EXPORT);
+ if (msymbol != NULL)
+ {
+ anaddr = SYMBOL_VALUE (msymbol);
+ dld_cache.hook_stub.address = anaddr;
+ }
store_unsigned_integer (buf, 4, anaddr);
msymbol = lookup_minimal_symbol ("__dld_hook", NULL, symfile_objfile);