*/
static char *
-solib_find_1 (char *in_pathname, int *fd, int is_solib)
+solib_find_1 (const char *in_pathname, int *fd, int is_solib)
{
const struct target_so_ops *ops = solib_ops (target_gdbarch ());
int found_file = -1;
/* Return the full pathname of the main executable, or NULL if not
found. The returned pathname is malloc'ed and must be freed by
the caller. If FD is non-NULL, *FD is set to either -1 or an open
- file handle for the main executable.
-
- The search algorithm used is described in solib_find_1's comment
- above. */
+ file handle for the main executable. */
char *
-exec_file_find (char *in_pathname, int *fd)
+exec_file_find (const char *in_pathname, int *fd)
{
- char *result = solib_find_1 (in_pathname, fd, 0);
+ char *result;
+ const char *fskind = effective_target_file_system_kind ();
+
+ if (in_pathname == NULL)
+ return NULL;
- if (result == NULL)
+ if (*gdb_sysroot != '\0' && IS_TARGET_ABSOLUTE_PATH (fskind, in_pathname))
{
- const char *fskind = effective_target_file_system_kind ();
+ result = solib_find_1 (in_pathname, fd, 0);
- if (fskind == file_system_kind_dos_based)
+ if (result == NULL && fskind == file_system_kind_dos_based)
{
char *new_pathname;
result = solib_find_1 (new_pathname, fd, 0);
}
}
+ else
+ {
+ /* It's possible we don't have a full path, but rather just a
+ filename. Some targets, such as HP-UX, don't provide the
+ full path, sigh.
+
+ Attempt to qualify the filename against the source path.
+ (If that fails, we'll just fall back on the original
+ filename. Not much more we can do...) */
+
+ if (!source_full_path_of (in_pathname, &result))
+ result = xstrdup (in_pathname);
+ if (fd != NULL)
+ *fd = -1;
+ }
return result;
}
above. */
char *
-solib_find (char *in_pathname, int *fd)
+solib_find (const char *in_pathname, int *fd)
{
const char *solib_symbols_extension
= gdbarch_solib_symbols_extension (target_gdbarch ());
extension. */
if (solib_symbols_extension != NULL)
{
- char *p = in_pathname + strlen (in_pathname);
+ const char *p = in_pathname + strlen (in_pathname);
while (p > in_pathname && *p != '.')
p--;
"SharedLibraryTable");
/* The "- 1" is because ui_out adds one space between columns. */
- ui_out_table_header (uiout, addr_width - 1, ui_left, "from", "From");
- ui_out_table_header (uiout, addr_width - 1, ui_left, "to", "To");
- ui_out_table_header (uiout, 12 - 1, ui_left, "syms-read", "Syms Read");
- ui_out_table_header (uiout, 0, ui_noalign,
- "name", "Shared Object Library");
+ uiout->table_header (addr_width - 1, ui_left, "from", "From");
+ uiout->table_header (addr_width - 1, ui_left, "to", "To");
+ uiout->table_header (12 - 1, ui_left, "syms-read", "Syms Read");
+ uiout->table_header (0, ui_noalign, "name", "Shared Object Library");
- ui_out_table_body (uiout);
+ uiout->table_body ();
for (so = so_list_head; so; so = so->next)
{
if (so->addr_high != 0)
{
- ui_out_field_core_addr (uiout, "from", gdbarch, so->addr_low);
- ui_out_field_core_addr (uiout, "to", gdbarch, so->addr_high);
+ uiout->field_core_addr ("from", gdbarch, so->addr_low);
+ uiout->field_core_addr ("to", gdbarch, so->addr_high);
}
else
{
- ui_out_field_skip (uiout, "from");
- ui_out_field_skip (uiout, "to");
+ uiout->field_skip ("from");
+ uiout->field_skip ("to");
}
- if (! ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
+ if (! interp_ui_out (top_level_interpreter ())->is_mi_like_p ()
&& so->symbols_loaded
&& !objfile_has_symbols (so->objfile))
{
so_missing_debug_info = 1;
- ui_out_field_string (uiout, "syms-read", "Yes (*)");
+ uiout->field_string ("syms-read", "Yes (*)");
}
else
- ui_out_field_string (uiout, "syms-read",
- so->symbols_loaded ? "Yes" : "No");
+ uiout->field_string ("syms-read", so->symbols_loaded ? "Yes" : "No");
- ui_out_field_string (uiout, "name", so->so_name);
+ uiout->field_string ("name", so->so_name);
- ui_out_text (uiout, "\n");
+ uiout->text ("\n");
do_cleanups (lib_cleanup);
}
if (nr_libs == 0)
{
if (pattern)
- ui_out_message (uiout, 0,
- _("No shared libraries matched.\n"));
+ uiout->message (_("No shared libraries matched.\n"));
else
- ui_out_message (uiout, 0,
- _("No shared libraries loaded at this time.\n"));
+ uiout->message (_("No shared libraries loaded at this time.\n"));
}
else
{
if (so_missing_debug_info)
- ui_out_message (uiout, 0,
- _("(*): Shared library is missing "
+ uiout->message (_("(*): Shared library is missing "
"debugging information.\n"));
}
}
{
const struct target_so_ops *ops = solib_ops (target_gdbarch ());
- /* This function is expected to handle ELF shared libraries. It is
- also used on Solaris, which can run either ELF or a.out binaries
- (for compatibility with SunOS 4), both of which can use shared
- libraries. So we don't know whether we have an ELF executable or
- an a.out executable until the user chooses an executable file.
-
- ELF shared libraries don't get mapped into the address space
- until after the program starts, so we'd better not try to insert
- breakpoints in them immediately. We have to wait until the
- dynamic linker has loaded them; we'll hit a bp_shlib_event
- breakpoint (look for calls to create_solib_event_breakpoint) when
- it's ready.
-
- SunOS shared libraries seem to be different --- they're present
- as soon as the process begins execution, so there's no need to
- put off inserting breakpoints. There's also nowhere to put a
- bp_shlib_event breakpoint, so if we put it off, we'll never get
- around to it.
-
- So: disable breakpoints only if we're using ELF shared libs. */
- if (exec_bfd != NULL
- && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
- disable_breakpoints_in_shlibs ();
+ disable_breakpoints_in_shlibs ();
while (so_list_head)
{