X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/e4730328287f755eb313c3762d83d389462cde15..HEAD:/gdb/source.c diff --git a/gdb/source.c b/gdb/source.c index 2025c93e93..d0f2d1c763 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -115,7 +115,8 @@ private: int m_line = 0; }; -static program_space_key current_source_key; +static const registry::key + current_source_key; /* Default number of lines to print with commands like "list". This is based on guessing how many long (i.e. more than chars_per_line @@ -311,7 +312,7 @@ select_source_symtab (struct symtab *s) if (s) { current_source_location *loc - = get_source_location (s->pspace ()); + = get_source_location (s->compunit ()->objfile ()->pspace); loc->set (s, 1); return; } @@ -329,7 +330,7 @@ select_source_symtab (struct symtab *s) if (sal.symtab == NULL) /* We couldn't find the location of `main', possibly due to missing line number info, fall back to line 1 in the corresponding file. */ - loc->set (symbol_symtab (bsym.symbol), 1); + loc->set (bsym.symbol->symtab (), 1); else loc->set (sal.symtab, std::max (sal.line - (lines_to_list - 1), 1)); return; @@ -537,15 +538,15 @@ add_path (const char *dirname, char **which_path, int parse_separators) for (const gdb::unique_xmalloc_ptr &name_up : dir_vec) { - char *name = name_up.get (); + const char *name = name_up.get (); char *p; struct stat st; - gdb::unique_xmalloc_ptr new_name_holder; + std::string new_name_holder; /* Spaces and tabs will have been removed by buildargv(). NAME is the start of the directory. P is the '\0' following the end. */ - p = name + strlen (name); + p = name_up.get () + strlen (name); while (!(IS_DIR_SEPARATOR (*name) && p <= name + 1) /* "/" */ #ifdef HAVE_DOS_BASED_FILE_SYSTEM @@ -589,16 +590,18 @@ add_path (const char *dirname, char **which_path, int parse_separators) if (name[0] == '\0') goto skip_dup; if (name[0] == '~') - new_name_holder.reset (tilde_expand (name)); + new_name_holder + = gdb::unique_xmalloc_ptr (tilde_expand (name)).get (); #ifdef HAVE_DOS_BASED_FILE_SYSTEM else if (IS_ABSOLUTE_PATH (name) && p == name + 2) /* "d:" => "d:." */ - new_name_holder.reset (concat (name, ".", (char *) NULL)); + new_name_holder = std::string (name) + "."; #endif else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$') new_name_holder = gdb_abspath (name); else - new_name_holder.reset (savestring (name, p - name)); - name = new_name_holder.get (); + new_name_holder = std::string (name, p - name); + + name = new_name_holder.c_str (); /* Unless it's a variable, check existence. */ if (name[0] != '$') @@ -950,7 +953,8 @@ done: else if ((opts & OPF_RETURN_REALPATH) != 0) *filename_opened = gdb_realpath (filename); else - *filename_opened = gdb_abspath (filename); + *filename_opened + = make_unique_xstrdup (gdb_abspath (filename).c_str ()); } errno = last_errno; @@ -1142,15 +1146,7 @@ find_and_open_source (const char *filename, helpful if part of the compilation directory was removed, e.g. using gcc's -fdebug-prefix-map, and we have added the missing prefix to source_path. */ - std::string cdir_filename (dirname); - - /* Remove any trailing directory separators. */ - while (IS_DIR_SEPARATOR (cdir_filename.back ())) - cdir_filename.pop_back (); - - /* Add our own directory separator. */ - cdir_filename.append (SLASH_STRING); - cdir_filename.append (filename_start); + std::string cdir_filename = path_join (dirname, filename_start); result = openp (path, OPF_SEARCH_IN_PATH | OPF_RETURN_REALPATH, cdir_filename.c_str (), OPEN_MODE, fullname); @@ -1199,7 +1195,8 @@ open_source_file (struct symtab *s) srcpath += s->filename; } - const struct bfd_build_id *build_id = build_id_bfd_get (ofp->obfd); + const struct bfd_build_id *build_id + = build_id_bfd_get (ofp->obfd.get ()); /* Query debuginfod for the source file. */ if (build_id != nullptr && !srcpath.empty ()) @@ -1296,7 +1293,7 @@ symtab_to_filename_for_display (struct symtab *symtab) else if (filename_display_string == filename_display_relative) return symtab->filename; else - internal_error (__FILE__, __LINE__, _("invalid filename_display_string")); + internal_error (_("invalid filename_display_string")); } @@ -1560,7 +1557,7 @@ info_line_command (const char *arg, int from_tty) else if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc)) { - struct gdbarch *gdbarch = sal.symtab->objfile ()->arch (); + gdbarch *gdbarch = sal.symtab->compunit ()->objfile ()->arch (); if (start_pc == end_pc) {