X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ffbsd-tdep.c;h=ff642d5658699914fea0419fbcb98fbef2d1ebb5;hb=452f10a186cdb18091f590315c55488b871812e3;hp=73d62cffe016c5c4c8bbfc4380134ece517b78bc;hpb=d55e5aa6b29906346c51ad00e6a9b112590aa294;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c index 73d62cffe0..ff642d5658 100644 --- a/gdb/fbsd-tdep.c +++ b/gdb/fbsd-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD, architecture-independent. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -18,22 +18,19 @@ along with this program. If not, see . */ #include "defs.h" - -/* Standard C includes. */ -#include -#include - -/* Local non-gdb includes. */ #include "auxv.h" -#include "elf-bfd.h" -#include "fbsd-tdep.h" #include "gdbcore.h" -#include "gdbthread.h" #include "inferior.h" -#include "objfiles.h" #include "regcache.h" #include "regset.h" +#include "gdbthread.h" +#include "objfiles.h" #include "xml-syscall.h" +#include +#include + +#include "elf-bfd.h" +#include "fbsd-tdep.h" /* This enum is derived from FreeBSD's . */ @@ -104,7 +101,7 @@ enum all architectures. Note that FreeBSD 7.0 used an older version of this structure - (struct kinfo_ovmentry), but the NT_FREEBSD_PROCSTAT_VMMAP core + (struct kinfo_vmentry), but the NT_FREEBSD_PROCSTAT_VMMAP core dump note wasn't introduced until FreeBSD 9.2. As a result, the core dump note has always used the 7.1 and later structure format. */ @@ -448,41 +445,30 @@ get_fbsd_gdbarch_data (struct gdbarch *gdbarch) gdbarch_data (gdbarch, fbsd_gdbarch_data_handle)); } -/* Per-program-space data for FreeBSD architectures. */ -static const struct program_space_data *fbsd_pspace_data_handle; - struct fbsd_pspace_data { /* Offsets in the runtime linker's 'Obj_Entry' structure. */ - LONGEST off_linkmap; - LONGEST off_tlsindex; - bool rtld_offsets_valid; + LONGEST off_linkmap = 0; + LONGEST off_tlsindex = 0; + bool rtld_offsets_valid = false; }; +/* Per-program-space data for FreeBSD architectures. */ +static const struct program_space_key + fbsd_pspace_data_handle; + static struct fbsd_pspace_data * get_fbsd_pspace_data (struct program_space *pspace) { struct fbsd_pspace_data *data; - data = ((struct fbsd_pspace_data *) - program_space_data (pspace, fbsd_pspace_data_handle)); + data = fbsd_pspace_data_handle.get (pspace); if (data == NULL) - { - data = XCNEW (struct fbsd_pspace_data); - set_program_space_data (pspace, fbsd_pspace_data_handle, data); - } + data = fbsd_pspace_data_handle.emplace (pspace); return data; } -/* The cleanup callback for FreeBSD architecture per-program-space data. */ - -static void -fbsd_pspace_data_cleanup (struct program_space *pspace, void *data) -{ - xfree (data); -} - /* This is how we want PTIDs from core files to be printed. */ static std::string @@ -516,10 +502,10 @@ fbsd_core_thread_name (struct gdbarch *gdbarch, struct thread_info *thr) thread_section_name section_name (".thrmisc", thr->ptid); section = bfd_get_section_by_name (core_bfd, section_name.c_str ()); - if (section != NULL && bfd_section_size (core_bfd, section) > 0) + if (section != NULL && bfd_section_size (section) > 0) { /* Truncate the name if it is longer than "buf". */ - size = bfd_section_size (core_bfd, section); + size = bfd_section_size (section); if (size > sizeof buf - 1) size = sizeof buf - 1; if (bfd_get_section_contents (core_bfd, section, buf, (file_ptr) 0, @@ -749,15 +735,14 @@ fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size) } /* Thread register information. */ - TRY + try { update_thread_list (); } - CATCH (e, RETURN_MASK_ERROR) + catch (const gdb_exception_error &e) { exception_print (gdb_stderr, e); } - END_CATCH /* Like the kernel, prefer dumping the signalled thread first. "First thread" is what tools use to infer the signalled thread. @@ -1033,12 +1018,12 @@ fbsd_info_proc_files_entry (int kf_type, int kf_fd, int kf_flags, /* For local sockets, print out the first non-nul path rather than both paths. */ - const struct fbsd_sockaddr_un *sun + const struct fbsd_sockaddr_un *saddr_un = reinterpret_cast (kf_sa_local); - if (sun->sun_path[0] == 0) - sun = reinterpret_cast + if (saddr_un->sun_path[0] == 0) + saddr_un = reinterpret_cast (kf_sa_peer); - printf_filtered ("%s", sun->sun_path); + printf_filtered ("%s", saddr_un->sun_path); break; } case FBSD_AF_INET: @@ -1073,7 +1058,7 @@ fbsd_core_info_proc_files (struct gdbarch *gdbarch) return; } - size_t note_size = bfd_get_section_size (section); + size_t note_size = bfd_section_size (section); if (note_size < 4) error (_("malformed core note - too short for header")); @@ -1206,7 +1191,7 @@ fbsd_core_info_proc_mappings (struct gdbarch *gdbarch) return; } - note_size = bfd_get_section_size (section); + note_size = bfd_section_size (section); if (note_size < 4) error (_("malformed core note - too short for header")); @@ -1254,7 +1239,7 @@ fbsd_core_vnode_path (struct gdbarch *gdbarch, int fd) if (section == NULL) return nullptr; - note_size = bfd_get_section_size (section); + note_size = bfd_section_size (section); if (note_size < 4) error (_("malformed core note - too short for header")); @@ -1281,7 +1266,7 @@ fbsd_core_vnode_path (struct gdbarch *gdbarch, int fd) && bfd_get_signed_32 (core_bfd, descdata + KF_FD) == fd) { char *path = (char *) descdata + KF_PATH; - return gdb::unique_xmalloc_ptr (xstrdup (path)); + return make_unique_xstrdup (path); } descdata += structsize; @@ -1359,7 +1344,7 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch) * structure size, then it must be long enough to access the last * field used (ki_rusage_ch.ru_majflt) which is the size of a long. */ - note_size = bfd_get_section_size (section); + note_size = bfd_section_size (section); if (note_size < (4 + kp->ki_rusage_ch + kp->ru_majflt + long_bit / TARGET_CHAR_BIT)) error (_("malformed core note - too short")); @@ -1448,7 +1433,7 @@ fbsd_core_info_proc_status (struct gdbarch *gdbarch) sec, value); printf_filtered ("stime, children: %s.%06d\n", plongest (sec), (int) value); printf_filtered ("'nice' value: %d\n", - bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice)); + (int) bfd_get_signed_8 (core_bfd, descdata + kp->ki_nice)); fbsd_core_fetch_timeval (gdbarch, descdata + kp->ki_start, sec, value); printf_filtered ("Start time: %s.%06d\n", plongest (sec), (int) value); printf_filtered ("Virtual memory size: %s kB\n", @@ -1988,7 +1973,7 @@ fbsd_read_integer_by_name (struct gdbarch *gdbarch, const char *name) static void fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data) { - TRY + try { /* Fetch offsets from debug symbols in rtld. */ struct symbol *obj_entry_sym @@ -2003,13 +1988,12 @@ fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data) data->rtld_offsets_valid = true; return; } - CATCH (e, RETURN_MASK_ERROR) + catch (const gdb_exception_error &e) { data->off_linkmap = -1; } - END_CATCH - TRY + try { /* Fetch offsets from global variables in libthr. Note that this does not work for single-threaded processes that are not @@ -2021,11 +2005,10 @@ fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data) data->rtld_offsets_valid = true; return; } - CATCH (e, RETURN_MASK_ERROR) + catch (const gdb_exception_error &e) { data->off_linkmap = -1; } - END_CATCH } /* Helper function to read the TLS index of an object file associated @@ -2106,6 +2089,4 @@ _initialize_fbsd_tdep (void) { fbsd_gdbarch_data_handle = gdbarch_data_register_post_init (init_fbsd_gdbarch_data); - fbsd_pspace_data_handle - = register_program_space_data_with_cleanup (NULL, fbsd_pspace_data_cleanup); }