From patchwork Fri Oct 10 19:43:10 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 3199 Received: (qmail 24877 invoked by alias); 10 Oct 2014 19:43:23 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 24859 invoked by uid 89); 10 Oct 2014 19:43:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.8 required=5.0 tests=AWL, BAYES_20, KAM_STOCKGEN, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 10 Oct 2014 19:43:13 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s9AJhCii001125 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Fri, 10 Oct 2014 15:43:12 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s9AJhAGJ030983 for ; Fri, 10 Oct 2014 15:43:11 -0400 Message-ID: <543836CE.6020302@redhat.com> Date: Fri, 10 Oct 2014 20:43:10 +0100 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.1 MIME-Version: 1.0 To: GDB Patches Subject: [PATCH] Delete Tru64 support Here's a patch that removes support for Tru64. Anyone see anything being removed that would be missed? Are the NEWS and manual bits OK? ---- From 9c1c3fad200d9b0d4003906cc0edd4d307061d41 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 10 Oct 2014 18:31:56 +0100 Subject: [PATCH] Delete Tru64 support This commit does most of the mechanical removal. IOW, the easy part. procfs.c isn't touched beyond removing a couple obvious bits that are guarded by a couple macros defined in config/alpha/nm-osf3.h. Going beyond that for procfs.c & co would be a harder excision that potentially affects Solaris. Some comments in the generic alpha code ABIs that may still be relevant and I wouldn't know what to do with them. That can always be done on a separate pass, preferably by someone who can test on alpha. A couple other spots have references to OSF/Tru64 and related files being removed, but it felt like removing them would make things worse, not better. We can revisit those when we next need to touch that code. I didn't remove a reference to osf in testsuite/lib/future.exp, as I believe that code is imported from DejaGNU. Built and tested on x86_64 Fedora 20, with --enable-targets=all. Tested that building for --target=alpha-osf3 on x86_64 Fedora 20 fails with: checking for default auto-load directory... $debugdir:$datadir/auto-load checking for default auto-load safe-path... $debugdir:$datadir/auto-load *** Configuration alpha-unknown-osf3 is obsolete. *** Support has been REMOVED. make[1]: *** [configure-gdb] Error 1 make[1]: Leaving directory `build-osf' make: *** [all] Error 2 gdb/ 2014-10-10 Pedro Alves * Makefile.in (ALL_64_TARGET_OBS): Remove alpha-osf1-tdep.o. (HFILES_NO_SRCDIR): Remove config/alpha/nm-osf3.h. (ALLDEPFILES): Remove alpha-nat.c, alpha-osf1-tdep.c and solib-osf.c. * NEWS: Mention that support for alpha*-*-osf* has been removed. * ada-lang.h [__alpha__ && __osf__] (ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS): Delete. * alpha-nat.c, alpha-osf1-tdep.c: Delete files. * alpha-tdep.c (alpha_gdbarch_init): Remove reference to GDB_OSABI_OSF1. * config/alpha/alpha-osf3.mh, config/alpha/nm-osf3.h: Delete files. * config/djgpp/fnchange.lst (config/alpha/alpha-osf1.mh) (config/alpha/alpha-osf2.mh, config/alpha/alpha-osf3.mh): Delete. * configure: Regenerate. * configure.ac: Remove references to osf. * configure.host: Handle alpha*-*-osf* in the obsolete hosts section. Remove all other references to osf. * configure.tgt: Add alpha*-*-osf* to the obsolete targets section. Remove all other references to osf. * dec-thread.c: Delete file. * defs.h (GDB_OSABI_OSF1): Delete. * inferior.h (START_INFERIOR_TRAPS_EXPECTED): New unconditionally defined. * osabi.c (gdb_osabi_names): Delete "OSF/1". * procfs.c (procfs_debug_inferior) [PROCFS_DONT_TRACE_FAULTS]: Delete code. (unconditionally_kill_inferior) [PROCFS_NEED_CLEAR_CURSIG_FOR_KILL]: Delete code. * solib-osf.c: Delete file. gdb/testsuite/ 2014-10-10 Pedro Alves * gdb.base/callfuncs.exp: emove references to osf. * gdb.base/sigall.exp: Likewise. * gdb.gdb/selftest.exp: Likewise. * gdb.hp/gdb.base-hp/callfwmall.exp: Likewise. * gdb.mi/non-stop.c: Likewise. * gdb.mi/pthreads.c: Likewise. * gdb.reverse/sigall-precsave.exp: Likewise. * gdb.reverse/sigall-reverse.exp: Likewise. * gdb.threads/pthreads.c: Likewise. * gdb.threads/pthreads.exp: Likewise. gdb/doc/ 2014-10-10 Pedro Alves * gdb.texinfo (Ada Tasks and Core Files): Delete mention of Tru64. (SVR4 Process Information): Delete mention of OSF/1. --- gdb/Makefile.in | 9 +- gdb/NEWS | 1 + gdb/ada-lang.h | 6 +- gdb/alpha-nat.c | 210 ------- gdb/alpha-osf1-tdep.c | 78 --- gdb/alpha-tdep.c | 8 - gdb/config/alpha/alpha-osf3.mh | 7 - gdb/config/alpha/nm-osf3.h | 35 -- gdb/config/djgpp/fnchange.lst | 3 - gdb/configure | 27 - gdb/configure.ac | 27 - gdb/configure.host | 4 +- gdb/configure.tgt | 5 +- gdb/dec-thread.c | 741 ------------------------ gdb/defs.h | 1 - gdb/doc/gdb.texinfo | 8 +- gdb/inferior.h | 6 +- gdb/osabi.c | 1 - gdb/procfs.c | 17 - gdb/solib-osf.c | 638 -------------------- gdb/testsuite/gdb.base/callfuncs.exp | 2 +- gdb/testsuite/gdb.base/sigall.exp | 11 - gdb/testsuite/gdb.gdb/selftest.exp | 9 - gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp | 2 +- gdb/testsuite/gdb.mi/non-stop.c | 4 +- gdb/testsuite/gdb.mi/pthreads.c | 4 +- gdb/testsuite/gdb.reverse/sigall-precsave.exp | 11 - gdb/testsuite/gdb.reverse/sigall-reverse.exp | 11 - gdb/testsuite/gdb.threads/pthreads.c | 6 +- gdb/testsuite/gdb.threads/pthreads.exp | 3 - 30 files changed, 21 insertions(+), 1874 deletions(-) delete mode 100644 gdb/alpha-nat.c delete mode 100644 gdb/alpha-osf1-tdep.c delete mode 100644 gdb/config/alpha/alpha-osf3.mh delete mode 100644 gdb/config/alpha/nm-osf3.h delete mode 100644 gdb/dec-thread.c delete mode 100644 gdb/solib-osf.c diff --git a/gdb/Makefile.in b/gdb/Makefile.in index fc27ba6..75dae12 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -607,7 +607,7 @@ TARGET_OBS = @TARGET_OBS@ ALL_64_TARGET_OBS = \ aarch64-tdep.o aarch64-linux-tdep.o aarch64-newlib-tdep.o \ alphabsd-tdep.o alphafbsd-tdep.o alpha-linux-tdep.o alpha-mdebug-tdep.o \ - alphanbsd-tdep.o alphaobsd-tdep.o alpha-osf1-tdep.o alpha-tdep.o \ + alphanbsd-tdep.o alphaobsd-tdep.o alpha-tdep.o \ amd64fbsd-tdep.o amd64-darwin-tdep.o amd64-dicos-tdep.o \ amd64-linux-tdep.o amd64nbsd-tdep.o \ amd64obsd-tdep.o amd64-sol2-tdep.o amd64-tdep.o amd64-windows-tdep.o \ @@ -910,7 +910,7 @@ common/gdb_locale.h arch-utils.h trad-frame.h gnu-nat.h \ language.h nbsd-tdep.h solib-svr4.h \ macroexp.h ui-file.h regcache.h tracepoint.h tracefile.h i386-tdep.h \ inf-child.h p-lang.h event-top.h gdbtypes.h user-regs.h \ -regformats/regdef.h config/alpha/nm-osf3.h config/i386/nm-i386gnu.h \ +regformats/regdef.h config/i386/nm-i386gnu.h \ config/i386/nm-fbsd.h \ config/nm-nto.h config/sparc/nm-sol2.h config/nm-linux.h \ top.h bsd-kvm.h gdb-stabs.h reggroups.h \ @@ -1602,9 +1602,9 @@ ALLDEPFILES = \ aarch64-tdep.c aarch64-linux-tdep.c aarch64-newlib-tdep.c \ aarch64-linux-nat.c \ aix-thread.c \ - alpha-nat.c alphabsd-nat.c alpha-linux-nat.c \ + alphabsd-nat.c alpha-linux-nat.c \ alpha-tdep.c alpha-mdebug-tdep.c \ - alpha-linux-tdep.c alpha-osf1-tdep.c \ + alpha-linux-tdep.c \ alphabsd-tdep.c alphafbsd-tdep.c alphanbsd-tdep.c alphaobsd-tdep.c \ amd64-nat.c amd64-tdep.c \ amd64bsd-nat.c amd64fbsd-nat.c amd64fbsd-tdep.c \ @@ -1667,7 +1667,6 @@ ALLDEPFILES = \ msp430-tdep.c \ nios2-tdep.c nios2-linux-tdep.c \ nbsd-nat.c nbsd-tdep.c obsd-nat.c obsd-tdep.c \ - solib-osf.c \ somread.c solib-som.c \ posix-hdep.c \ ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c ppc64-tdep.c \ diff --git a/gdb/NEWS b/gdb/NEWS index 5de0a33..5a22926 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -49,6 +49,7 @@ queue-signal signal-name-or-number Support for these obsolete configurations has been removed. +alpha*-*-osf* mips-sgi-irix5* mips-sgi-irix6* diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 6356cfa..ba3b9d8 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -34,11 +34,7 @@ struct parser_state; system and that might consider (confusing) debugging information. Each name (a basic regular expression string) is followed by a comma. FIXME: Should be part of a configuration file. */ -#if defined(__alpha__) && defined(__osf__) -#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \ - "^[agis]-.*\\.ad[bs]$", \ - "/usr/shlib/libpthread\\.so", -#elif defined (__linux__) +#if defined (__linux__) #define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \ "^[agis]-.*\\.ad[bs]$", \ "/lib.*/libpthread\\.so[.0-9]*$", "/lib.*/libpthread\\.a$", \ diff --git a/gdb/alpha-nat.c b/gdb/alpha-nat.c deleted file mode 100644 index 88ff62d..0000000 --- a/gdb/alpha-nat.c +++ /dev/null @@ -1,210 +0,0 @@ -/* Low level Alpha interface, for GDB when running native. - Copyright (C) 1993-2014 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "inferior.h" -#include "gdbcore.h" -#include "target.h" -#include "procfs.h" -#include "regcache.h" - -#include "alpha-tdep.h" - -#include -#include -#include - - -/* Extract the register values out of the core file and store - them into REGCACHE. - - CORE_REG_SECT points to the register values themselves, read into memory. - CORE_REG_SIZE is the size of that area. - WHICH says which set of registers we are handling (0 = int, 2 = float - on machines where they are discontiguous). - REG_ADDR is the offset from u.u_ar0 to the register values relative to - core_reg_sect. This is used with old-fashioned core files to - locate the registers in a large upage-plus-stack ".reg" section. - Original upage address X is at location core_reg_sect+x+reg_addr. */ - -static void -fetch_osf_core_registers (struct regcache *regcache, - char *core_reg_sect, unsigned core_reg_size, - int which, CORE_ADDR reg_addr) -{ - struct gdbarch *gdbarch = get_regcache_arch (regcache); - int regno; - int addr; - int bad_reg = -1; - - /* Table to map a gdb regnum to an index in the core register - section. The floating point register values are garbage in - OSF/1.2 core files. OSF5 uses different names for the register - enum list, need to handle two cases. The actual values are the - same. */ - static int const core_reg_mapping[ALPHA_NUM_REGS] = - { -#ifdef NCF_REGS -#define EFL NCF_REGS - CF_V0, CF_T0, CF_T1, CF_T2, CF_T3, CF_T4, CF_T5, CF_T6, - CF_T7, CF_S0, CF_S1, CF_S2, CF_S3, CF_S4, CF_S5, CF_S6, - CF_A0, CF_A1, CF_A2, CF_A3, CF_A4, CF_A5, CF_T8, CF_T9, - CF_T10, CF_T11, CF_RA, CF_T12, CF_AT, CF_GP, CF_SP, -1, - EFL + 0, EFL + 1, EFL + 2, EFL + 3, - EFL + 4, EFL + 5, EFL + 6, EFL + 7, - EFL + 8, EFL + 9, EFL + 10, EFL + 11, - EFL + 12, EFL + 13, EFL + 14, EFL + 15, - EFL + 16, EFL + 17, EFL + 18, EFL + 19, - EFL + 20, EFL + 21, EFL + 22, EFL + 23, - EFL + 24, EFL + 25, EFL + 26, EFL + 27, - EFL + 28, EFL + 29, EFL + 30, EFL + 31, - CF_PC, -1, -1 -#else -#define EFL (EF_SIZE / 8) - EF_V0, EF_T0, EF_T1, EF_T2, EF_T3, EF_T4, EF_T5, EF_T6, - EF_T7, EF_S0, EF_S1, EF_S2, EF_S3, EF_S4, EF_S5, EF_S6, - EF_A0, EF_A1, EF_A2, EF_A3, EF_A4, EF_A5, EF_T8, EF_T9, - EF_T10, EF_T11, EF_RA, EF_T12, EF_AT, EF_GP, EF_SP, -1, - EFL + 0, EFL + 1, EFL + 2, EFL + 3, - EFL + 4, EFL + 5, EFL + 6, EFL + 7, - EFL + 8, EFL + 9, EFL + 10, EFL + 11, - EFL + 12, EFL + 13, EFL + 14, EFL + 15, - EFL + 16, EFL + 17, EFL + 18, EFL + 19, - EFL + 20, EFL + 21, EFL + 22, EFL + 23, - EFL + 24, EFL + 25, EFL + 26, EFL + 27, - EFL + 28, EFL + 29, EFL + 30, EFL + 31, - EF_PC, -1, -1 -#endif - }; - - for (regno = 0; regno < ALPHA_NUM_REGS; regno++) - { - if (gdbarch_cannot_fetch_register (gdbarch, regno)) - { - regcache_raw_supply (regcache, regno, NULL); - continue; - } - - if (regno == ALPHA_ZERO_REGNUM) - { - const gdb_byte zero[8] = { 0 }; - - regcache_raw_supply (regcache, regno, zero); - continue; - } - - addr = 8 * core_reg_mapping[regno]; - if (addr < 0 || addr >= core_reg_size) - { - /* ??? UNIQUE is a new addition. Don't generate an error. */ - if (regno == ALPHA_UNIQUE_REGNUM) - { - regcache_raw_supply (regcache, regno, NULL); - continue; - } - if (bad_reg < 0) - bad_reg = regno; - } - else - { - regcache_raw_supply (regcache, regno, core_reg_sect + addr); - } - } - if (bad_reg >= 0) - { - error (_("Register %s not found in core file."), - gdbarch_register_name (gdbarch, bad_reg)); - } -} - - -#include -/* Prototypes for supply_gregset etc. */ -#include "gregset.h" - -/* See the comment in m68k-tdep.c regarding the utility of these - functions. */ - -void -supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) -{ - const long *regp = gregsetp->regs; - - /* PC is in slot 32. */ - alpha_supply_int_regs (regcache, -1, regp, regp + 31, NULL); -} - -void -fill_gregset (const struct regcache *regcache, - gdb_gregset_t *gregsetp, int regno) -{ - long *regp = gregsetp->regs; - - /* PC is in slot 32. */ - alpha_fill_int_regs (regcache, regno, regp, regp + 31, NULL); -} - -/* Now we do the same thing for floating-point registers. - Again, see the comments in m68k-tdep.c. */ - -void -supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp) -{ - const long *regp = fpregsetp->regs; - - /* FPCR is in slot 32. */ - alpha_supply_fp_regs (regcache, -1, regp, regp + 31); -} - -void -fill_fpregset (const struct regcache *regcache, - gdb_fpregset_t *fpregsetp, int regno) -{ - long *regp = fpregsetp->regs; - - /* FPCR is in slot 32. */ - alpha_fill_fp_regs (regcache, regno, regp, regp + 31); -} - - -/* Register that we are able to handle alpha core file formats. */ - -static struct core_fns alpha_osf_core_fns = -{ - /* This really is bfd_target_unknown_flavour. */ - - bfd_target_unknown_flavour, /* core_flavour */ - default_check_format, /* check_format */ - default_core_sniffer, /* core_sniffer */ - fetch_osf_core_registers, /* core_read_registers */ - NULL /* next */ -}; - -/* Provide a prototype to silence -Wmissing-prototypes. */ -extern initialize_file_ftype _initialize_alpha_nat; - -void -_initialize_alpha_nat (void) -{ - struct target_ops *t; - - t = procfs_target (); - add_target (t); - - deprecated_add_core_fns (&alpha_osf_core_fns); -} diff --git a/gdb/alpha-osf1-tdep.c b/gdb/alpha-osf1-tdep.c deleted file mode 100644 index c88be62..0000000 --- a/gdb/alpha-osf1-tdep.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Target-dependent code for OSF/1 on Alpha. - Copyright (C) 2002-2014 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "frame.h" -#include "gdbcore.h" -#include "value.h" -#include "osabi.h" -#include "objfiles.h" - -#include "alpha-tdep.h" - -static int -alpha_osf1_pc_in_sigtramp (struct gdbarch *gdbarch, - CORE_ADDR pc, const char *func_name) -{ - return (func_name != NULL && strcmp ("__sigtramp", func_name) == 0); -} - -static CORE_ADDR -alpha_osf1_sigcontext_addr (struct frame_info *this_frame) -{ - struct gdbarch *gdbarch = get_frame_arch (this_frame); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - struct frame_info *next_frame = get_next_frame (this_frame); - struct frame_id next_id = null_frame_id; - - if (next_frame != NULL) - next_id = get_frame_id (next_frame); - - return (read_memory_integer (next_id.stack_addr, 8, byte_order)); -} - -static void -alpha_osf1_init_abi (struct gdbarch_info info, - struct gdbarch *gdbarch) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - - /* Hook into the MDEBUG frame unwinder. */ - alpha_mdebug_init_abi (info, gdbarch); - - /* The next/step support via procfs on OSF1 is broken when running - on multi-processor machines. We need to use software single - stepping instead. */ - set_gdbarch_software_single_step (gdbarch, alpha_software_single_step); - - tdep->sigcontext_addr = alpha_osf1_sigcontext_addr; - tdep->pc_in_sigtramp = alpha_osf1_pc_in_sigtramp; - - tdep->jb_pc = 2; - tdep->jb_elt_size = 8; -} - -/* Provide a prototype to silence -Wmissing-prototypes. */ -extern initialize_file_ftype _initialize_alpha_osf1_tdep; - -void -_initialize_alpha_osf1_tdep (void) -{ - gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OSF1, - alpha_osf1_init_abi); -} diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 9e4a8d8..27fc592 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -1749,14 +1749,6 @@ alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) struct gdbarch_tdep *tdep; struct gdbarch *gdbarch; - /* Try to determine the ABI of the object we are loading. */ - if (info.abfd != NULL && info.osabi == GDB_OSABI_UNKNOWN) - { - /* If it's an ECOFF file, assume it's OSF/1. */ - if (bfd_get_flavour (info.abfd) == bfd_target_ecoff_flavour) - info.osabi = GDB_OSABI_OSF1; - } - /* Find a candidate among extant architectures. */ arches = gdbarch_list_lookup_by_info (arches, &info); if (arches != NULL) diff --git a/gdb/config/alpha/alpha-osf3.mh b/gdb/config/alpha/alpha-osf3.mh deleted file mode 100644 index aa63dc4..0000000 --- a/gdb/config/alpha/alpha-osf3.mh +++ /dev/null @@ -1,7 +0,0 @@ -# Host: Little-endian Alpha running OSF/1-3.x and higher using procfs -NAT_FILE= nm-osf3.h -NATDEPFILES= alpha-nat.o fork-child.o \ - solib-osf.o procfs.o proc-api.o proc-events.o proc-flags.o \ - proc-why.o dec-thread.o -HAVE_NATIVE_GCORE_HOST = 1 -NAT_CLIBS= -lpthreaddebug diff --git a/gdb/config/alpha/nm-osf3.h b/gdb/config/alpha/nm-osf3.h deleted file mode 100644 index a171f5d..0000000 --- a/gdb/config/alpha/nm-osf3.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Native definitions for alpha running OSF/1-3.x and higher, using procfs. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Number of traps that happen between exec'ing the shell to run an - inferior, and when we finally get to the inferior code, not - counting the exec for the shell. This is 1 on most - implementations. */ -#define START_INFERIOR_TRAPS_EXPECTED 2 - -/* Don't trace faults under OSF/1, rely on the posting of the appropriate - signal if fault tracing is disabled. - Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable' - fault from which we cannot continue (except by disabling the - tracing). - And as OSF/1 doesn't provide the standard fault definitions, the - mapping of faults to appropriate signals in procfs_wait is difficult. */ -#define PROCFS_DONT_TRACE_FAULTS - -/* Work around some peculiarities in the OSF/1 procfs implementation. */ -#define PROCFS_NEED_CLEAR_CURSIG_FOR_KILL diff --git a/gdb/config/djgpp/fnchange.lst b/gdb/config/djgpp/fnchange.lst index cbf11c6..5194850 100644 --- a/gdb/config/djgpp/fnchange.lst +++ b/gdb/config/djgpp/fnchange.lst @@ -132,9 +132,6 @@ @V@/gdb/armnbsd-nat.c @V@/gdb/armnbd-nat.c @V@/gdb/armnbsd-tdep.c @V@/gdb/armnbd-tdep.c @V@/gdb/c-exp.tab.c @V@/gdb/c-exp_tab.c -@V@/gdb/config/alpha/alpha-osf1.mh @V@/gdb/config/alpha/alphosf1.mh -@V@/gdb/config/alpha/alpha-osf2.mh @V@/gdb/config/alpha/alphosf2.mh -@V@/gdb/config/alpha/alpha-osf3.mh @V@/gdb/config/alpha/alphosf3.mh @V@/gdb/config/alpha/tm-alphalinux.h @V@/gdb/config/alpha/tm-alplinux.h @V@/gdb/config/i386/nm-cygwin64.h @V@/gdb/config/i386/nm-cyg64.h @V@/gdb/config/i386/nm-linux64.h @V@/gdb/config/i386/nm-lx64.h diff --git a/gdb/configure b/gdb/configure index 889103c..1d6d88b 100755 --- a/gdb/configure +++ b/gdb/configure @@ -7062,33 +7062,6 @@ _ACEOF fi -# On alpha-osf, it appears that libtermcap and libcurses are not compatible. -# There is a very specific comment in /usr/include/curses.h explaining that -# termcap routines built into libcurses must not be used. -# -# The symptoms we observed so far is GDB unexpectedly changing -# the terminal settings when tgetent is called - this is particularly -# visible as the output is missing carriage returns, and so rapidly -# becomes very hard to read. -# -# The readline configure script has already decided that libtermcap -# was enough for its purposes, and so decided to build readline using -# libtermcap. Since the TUI mode requires curses, building GDB with -# TUI enabled results in both libraries to be used at the same time, -# which is not allowed. This basically means that GDB with TUI is -# broken on alpha-osf. - -case $host_os in - osf* ) - if test x"$enable_tui" = xyes; then - as_fn_error "Building GDB with TUI mode is not supported on this host" "$LINENO" 5 - fi - if test x"$enable_tui" = xauto; then - enable_tui=no - fi - ;; -esac - # For the TUI, we need enhanced curses functionality. if test x"$enable_tui" != xno; then prefer_curses=yes diff --git a/gdb/configure.ac b/gdb/configure.ac index 2b4f5b0..2d73669 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -546,33 +546,6 @@ AS_HELP_STRING([--with-iconv-bin=PATH], [specify where to find the iconv program GDB_AC_DEFINE_RELOCATABLE(ICONV_BIN, iconv, ${iconv_bin}) ]) -# On alpha-osf, it appears that libtermcap and libcurses are not compatible. -# There is a very specific comment in /usr/include/curses.h explaining that -# termcap routines built into libcurses must not be used. -# -# The symptoms we observed so far is GDB unexpectedly changing -# the terminal settings when tgetent is called - this is particularly -# visible as the output is missing carriage returns, and so rapidly -# becomes very hard to read. -# -# The readline configure script has already decided that libtermcap -# was enough for its purposes, and so decided to build readline using -# libtermcap. Since the TUI mode requires curses, building GDB with -# TUI enabled results in both libraries to be used at the same time, -# which is not allowed. This basically means that GDB with TUI is -# broken on alpha-osf. - -case $host_os in - osf* ) - if test x"$enable_tui" = xyes; then - AC_MSG_ERROR([Building GDB with TUI mode is not supported on this host]) - fi - if test x"$enable_tui" = xauto; then - enable_tui=no - fi - ;; -esac - # For the TUI, we need enhanced curses functionality. if test x"$enable_tui" != xno; then prefer_curses=yes diff --git a/gdb/configure.host b/gdb/configure.host index 5f77166..43e41fb 100644 --- a/gdb/configure.host +++ b/gdb/configure.host @@ -20,8 +20,7 @@ case $host in vax-*-netbsdelf*) ;; *-*-irix* | \ - alpha*-*-osf1* | \ - alpha*-*-osf2* | \ + alpha*-*-osf* | \ arm*-*-netbsd* | \ hppa*-*-hiux* | \ i[34567]86-ncr-* | \ @@ -80,7 +79,6 @@ case "${host}" in aarch64*-*-linux*) gdb_host=linux ;; -alpha*-*-osf[3456789]*) gdb_host=alpha-osf3 ;; alpha*-*-linux*) gdb_host=alpha-linux ;; alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) gdb_host=fbsd ;; diff --git a/gdb/configure.tgt b/gdb/configure.tgt index d362cd9..b4d0c8f 100644 --- a/gdb/configure.tgt +++ b/gdb/configure.tgt @@ -14,6 +14,7 @@ case $targ in *-*-irix* | \ + alpha*-*-osf* | \ d10v-*-* | \ hppa*-*-hiux* | \ i[34567]86-ncr-* | \ @@ -46,10 +47,6 @@ aarch64*-*-linux*) build_gdbserver=yes ;; -alpha*-*-osf*) - # Target: Little-endian Alpha running OSF/1 - gdb_target_obs="alpha-tdep.o alpha-osf1-tdep.o alpha-mdebug-tdep.o" - ;; alpha*-*-linux*) # Target: Little-endian Alpha running Linux gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alpha-linux-tdep.o \ diff --git a/gdb/dec-thread.c b/gdb/dec-thread.c deleted file mode 100644 index 080640d..0000000 --- a/gdb/dec-thread.c +++ /dev/null @@ -1,741 +0,0 @@ -/* Copyright (C) 2008-2014 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "command.h" -#include "gdbcmd.h" -#include "target.h" -#include "observer.h" -#include -#include "gregset.h" -#include "regcache.h" -#include "inferior.h" -#include "gdbthread.h" - -#include - -/* Print debugging traces if set to non-zero. */ -static int debug_dec_thread = 0; - -/* Non-zero if the dec-thread layer is active. */ -static int dec_thread_active = 0; - -/* The pthread_debug context. */ -pthreadDebugContext_t debug_context; - -/* The dec-thread target_ops structure. */ -static struct target_ops dec_thread_ops; - -/* Print a debug trace if DEBUG_DEC_THREAD is set (its value is adjusted - by the user using "set debug dec-thread ..."). */ - -static void -debug (char *format, ...) -{ - if (debug_dec_thread) - { - va_list args; - - va_start (args, format); - printf_unfiltered ("DEC Threads: "); - vprintf_unfiltered (format, args); - printf_unfiltered ("\n"); - va_end (args); - } -} - -/* pthread debug callbacks. */ - -static int -suspend_clbk (void *caller_context) -{ - return ESUCCESS; -} - -static int -resume_clbk (void *caller_context) -{ - return ESUCCESS; -} - -static int -hold_clbk (void *caller_context, pthreadDebugKId_t kernel_tid) -{ - return ESUCCESS; -} - -static int -unhold_clbk (void *caller_context, pthreadDebugKId_t kernel_tid) -{ - return ESUCCESS; -} - -static int -read_clbk (void *caller_context, void *address, void *buffer, - unsigned long size) -{ - int status = target_read_memory ((CORE_ADDR) address, buffer, size); - - if (status != 0) - return EINVAL; - - return ESUCCESS; -} - -static int -write_clbk (void *caller_context, void *address, void *buffer, - unsigned long size) -{ - int status = target_write_memory ((CORE_ADDR) address, buffer, size); - - if (status != 0) - return EINVAL; - - return ESUCCESS; -} - -/* Get integer regs. */ - -static int -get_reg_clbk(void *caller_context, pthreadDebugGetRegRtn_t regs, - pthreadDebugKId_t kernel_tid) -{ - debug ("get_reg_clbk"); - - /* Not sure that we actually need to do anything in this callback. */ - return ESUCCESS; -} - -/* Set integer regs. */ - -static int -set_reg_clbk(void *caller_context, const pthreadDebugRegs_t *regs, - pthreadDebugKId_t kernel_tid) -{ - debug ("set_reg_clbk"); - - /* Not sure that we actually need to do anything in this callback. */ - return ESUCCESS; -} - -static int -output_clbk (void *caller_context, char *line) -{ - printf_filtered ("%s\n", line); - return ESUCCESS; -} - -static int -error_clbk (void *caller_context, char *line) -{ - fprintf_filtered (gdb_stderr, "%s\n", line); - return ESUCCESS; -} - -/* Get floating-point regs. */ - -static int -get_fpreg_clbk (void *caller_context, pthreadDebugFregs_p fregs, - pthreadDebugKId_t kernel_tid) -{ - debug ("get_fpreg_clbk"); - - /* Not sure that we actually need to do anything in this callback. */ - return ESUCCESS; -} - -/* Set floating-point regs. */ - -static int -set_fpreg_clbk (void *caller_context, const pthreadDebugFregs_t *fregs, - pthreadDebugKId_t kernel_tid) -{ - debug ("set_fpreg_clbk"); - - /* Not sure that we actually need to do anything in this callback. */ - return ESUCCESS; -} - -static void * -malloc_clbk (void *caller_context, size_t size) -{ - return xmalloc (size); -} - -static void -free_clbk (void *caller_context, void *address) -{ - xfree (address); -} - -static int -kthdinfo_clbk (pthreadDebugClient_t caller_context, - pthreadDebugKId_t kernel_tid, - pthreadDebugKThreadInfo_p thread_info) -{ - return ENOTSUP; -} - -static int -speckthd_clbk (pthreadDebugClient_t caller_context, - pthreadDebugSpecialType_t type, - pthreadDebugKId_t *kernel_tid) -{ - return ENOTSUP; -} - -static pthreadDebugCallbacks_t debug_callbacks = -{ - PTHREAD_DEBUG_VERSION, - (pthreadDebugGetMemRtn_t) read_clbk, - (pthreadDebugSetMemRtn_t) write_clbk, - suspend_clbk, - resume_clbk, - kthdinfo_clbk, - hold_clbk, - unhold_clbk, - (pthreadDebugGetFregRtn_t) get_fpreg_clbk, - (pthreadDebugSetFregRtn_t) set_fpreg_clbk, - (pthreadDebugGetRegRtn_t) get_reg_clbk, - (pthreadDebugSetRegRtn_t) set_reg_clbk, - (pthreadDebugOutputRtn_t) output_clbk, - (pthreadDebugOutputRtn_t) error_clbk, - malloc_clbk, - free_clbk, - speckthd_clbk -}; - -/* Activate thread support if appropriate. Do nothing if thread - support is already active. */ - -static void -enable_dec_thread (void) -{ - struct bound_minimal_symbol msym; - void* caller_context; - int status; - - /* If already active, nothing more to do. */ - if (dec_thread_active) - return; - - msym = lookup_minimal_symbol ("__pthread_dbg_symtable", NULL, NULL); - if (msym.minsym == NULL) - { - debug ("enable_dec_thread: No __pthread_dbg_symtable"); - return; - } - - status = pthreadDebugContextInit (&caller_context, &debug_callbacks, - (void *) SYMBOL_VALUE_ADDRESS (msym.minsym), - &debug_context); - if (status != ESUCCESS) - { - debug ("enable_dec_thread: pthreadDebugContextInit -> %d", - status); - return; - } - - push_target (&dec_thread_ops); - dec_thread_active = 1; - - debug ("enable_dec_thread: Thread support enabled."); -} - -/* Deactivate thread support. Do nothing if thread support is - already inactive. */ - -static void -disable_dec_thread (void) -{ - if (!dec_thread_active) - return; - - pthreadDebugContextDestroy (debug_context); - unpush_target (&dec_thread_ops); - dec_thread_active = 0; -} - -/* A structure that contains a thread ID and is associated - pthreadDebugThreadInfo_t data. */ - -struct dec_thread_info -{ - pthreadDebugId_t thread; - pthreadDebugThreadInfo_t info; -}; -typedef struct dec_thread_info dec_thread_info_s; - -/* The list of user threads. */ - -DEF_VEC_O (dec_thread_info_s); -VEC(dec_thread_info_s) *dec_thread_list; - -/* Release the memory used by the given VECP thread list pointer. - Then set *VECP to NULL. */ - -static void -free_dec_thread_info_vec (VEC(dec_thread_info_s) **vecp) -{ - int i; - struct dec_thread_info *item; - VEC(dec_thread_info_s) *vec = *vecp; - - for (i = 0; VEC_iterate (dec_thread_info_s, vec, i, item); i++) - xfree (item); - VEC_free (dec_thread_info_s, vec); - *vecp = NULL; -} - -/* Return a thread's ptid given its associated INFO. */ - -static ptid_t -ptid_build_from_info (struct dec_thread_info info) -{ - int pid = ptid_get_pid (inferior_ptid); - - return ptid_build (pid, 0, (long) info.thread); -} - -/* Return non-zero if PTID is still alive. - - Assumes that DEC_THREAD_LIST is up to date. */ -static int -dec_thread_ptid_is_alive (ptid_t ptid) -{ - pthreadDebugId_t tid = ptid_get_tid (ptid); - int i; - struct dec_thread_info *info; - - if (tid == 0) - /* This is the thread corresponding to the process. This ptid - is always alive until the program exits. */ - return 1; - - /* Search whether an entry with the same tid exists in the dec-thread - list of threads. If it does, then the thread is still alive. - No match found means that the thread must be dead, now. */ - for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++) - if (info->thread == tid) - return 1; - return 0; -} - -/* Recompute the list of user threads and store the result in - DEC_THREAD_LIST. */ - -static void -update_dec_thread_list (void) -{ - pthreadDebugId_t thread; - pthreadDebugThreadInfo_t info; - int res; - - free_dec_thread_info_vec (&dec_thread_list); - res = pthreadDebugThdSeqInit (debug_context, &thread); - while (res == ESUCCESS) - { - - res = pthreadDebugThdGetInfo (debug_context, thread, &info); - if (res != ESUCCESS) - warning (_("unable to get thread info, ignoring thread %ld"), - thread); - else if (info.kind == PTHREAD_DEBUG_THD_KIND_INITIAL - || info.kind == PTHREAD_DEBUG_THD_KIND_NORMAL) - { - struct dec_thread_info *item = - xmalloc (sizeof (struct dec_thread_info)); - - item->thread = thread; - item->info = info; - VEC_safe_push (dec_thread_info_s, dec_thread_list, item); - } - res = pthreadDebugThdSeqNext (debug_context, &thread); - } - pthreadDebugThdSeqDestroy (debug_context); -} - -/* A callback to count the number of threads known to GDB. */ - -static int -dec_thread_count_gdb_threads (struct thread_info *ignored, void *context) -{ - int *count = (int *) context; - - *count = *count + 1; - return 0; -} - -/* A callback that saves the given thread INFO at the end of an - array. The end of the array is given in the CONTEXT and is - incremented once the info has been added. */ - -static int -dec_thread_add_gdb_thread (struct thread_info *info, void *context) -{ - struct thread_info ***listp = (struct thread_info ***) context; - - **listp = info; - *listp = *listp + 1; - return 0; -} - -/* Implement the find_new_thread target_ops method. */ - -static void -dec_thread_find_new_threads (struct target_ops *ops) -{ - int i; - struct dec_thread_info *info; - - update_dec_thread_list (); - for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++) - { - ptid_t ptid = ptid_build_from_info (*info); - - if (!in_thread_list (ptid)) - add_thread (ptid); - } -} - -/* Resynchronize the list of threads known by GDB with the actual - list of threads reported by libpthread_debug. */ - -static void -resync_thread_list (struct target_ops *ops) -{ - int i; - int num_gdb_threads = 0; - struct thread_info **gdb_thread_list; - struct thread_info **next_thread_info; - - /* Add new threads. */ - dec_thread_find_new_threads (ops); - - /* Remove threads that no longer exist. To help with the search, - we build an array of GDB threads, and then iterate over this - array. */ - - iterate_over_threads (dec_thread_count_gdb_threads, - (void *) &num_gdb_threads); - gdb_thread_list = alloca (num_gdb_threads * sizeof (struct thread_info *)); - next_thread_info = gdb_thread_list; - iterate_over_threads (dec_thread_add_gdb_thread, (void *) &next_thread_info); - - for (i = 0; i < num_gdb_threads; i++) - if (!dec_thread_ptid_is_alive (gdb_thread_list[i]->ptid)) - delete_thread (gdb_thread_list[i]->ptid); -} - -/* The "to_detach" method of the dec_thread_ops. */ - -static void -dec_thread_detach (struct target_ops *ops, const char *args, int from_tty) -{ - struct target_ops *beneath = find_target_beneath (ops); - - debug ("dec_thread_detach"); - - disable_dec_thread (); - beneath->to_detach (beneath, args, from_tty); -} - -/* Return the ptid of the thread that is currently active. */ - -static ptid_t -get_active_ptid (void) -{ - int i; - struct dec_thread_info *info; - - for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); - i++) - if (info->info.state == PTHREAD_DEBUG_STATE_RUNNING) - return ptid_build_from_info (*info); - - /* No active thread found. This can happen when the program - has just exited. */ - return null_ptid; -} - -/* The "to_wait" method of the dec_thread_ops. */ - -static ptid_t -dec_thread_wait (struct target_ops *ops, - ptid_t ptid, struct target_waitstatus *status, int options) -{ - ptid_t active_ptid; - struct target_ops *beneath = find_target_beneath (ops); - - debug ("dec_thread_wait"); - - ptid = beneath->to_wait (beneath, ptid, status, options); - - /* The ptid returned by the target beneath us is the ptid of the process. - We need to find which thread is currently active and return its ptid. */ - resync_thread_list (ops); - active_ptid = get_active_ptid (); - if (ptid_equal (active_ptid, null_ptid)) - return ptid; - return active_ptid; -} - -/* Fetch the general purpose and floating point registers for the given - thread TID, and store the result in GREGSET and FPREGSET. Return - zero if successful. */ - -static int -dec_thread_get_regsets (pthreadDebugId_t tid, gdb_gregset_t *gregset, - gdb_fpregset_t *fpregset) -{ - int res; - pthreadDebugRegs_t regs; - pthreadDebugFregs_t fregs; - - res = pthreadDebugThdGetReg (debug_context, tid, ®s); - if (res != ESUCCESS) - { - debug ("dec_thread_get_regsets: pthreadDebugThdGetReg -> %d", res); - return -1; - } - memcpy (gregset->regs, ®s, sizeof (regs)); - - res = pthreadDebugThdGetFreg (debug_context, tid, &fregs); - if (res != ESUCCESS) - { - debug ("dec_thread_get_regsets: pthreadDebugThdGetFreg -> %d", res); - return -1; - } - memcpy (fpregset->regs, &fregs, sizeof (fregs)); - - return 0; -} - -/* The "to_fetch_registers" method of the dec_thread_ops. - - Because the dec-thread debug API doesn't allow us to fetch - only one register, we simply ignore regno and fetch+supply all - registers. */ - -static void -dec_thread_fetch_registers (struct target_ops *ops, - struct regcache *regcache, int regno) -{ - pthreadDebugId_t tid = ptid_get_tid (inferior_ptid); - gregset_t gregset; - fpregset_t fpregset; - int res; - - debug ("dec_thread_fetch_registers (tid=%ld, regno=%d)", tid, regno); - - - if (tid == 0 || ptid_equal (inferior_ptid, get_active_ptid ())) - { - struct target_ops *beneath = find_target_beneath (ops); - - beneath->to_fetch_registers (beneath, regcache, regno); - return; - } - - res = dec_thread_get_regsets (tid, &gregset, &fpregset); - if (res != 0) - return; - - supply_gregset (regcache, &gregset); - supply_fpregset (regcache, &fpregset); -} - -/* Store the registers given in GREGSET and FPREGSET into the associated - general purpose and floating point registers of thread TID. Return - zero if successful. */ - -static int -dec_thread_set_regsets (pthreadDebugId_t tid, gdb_gregset_t gregset, - gdb_fpregset_t fpregset) -{ - int res; - pthreadDebugRegs_t regs; - pthreadDebugFregs_t fregs; - - memcpy (®s, gregset.regs, sizeof (regs)); - res = pthreadDebugThdSetReg (debug_context, tid, ®s); - if (res != ESUCCESS) - { - debug ("dec_thread_set_regsets: pthreadDebugThdSetReg -> %d", res); - return -1; - } - - memcpy (&fregs, fpregset.regs, sizeof (fregs)); - res = pthreadDebugThdSetFreg (debug_context, tid, &fregs); - if (res != ESUCCESS) - { - debug ("dec_thread_set_regsets: pthreadDebugThdSetFreg -> %d", res); - return -1; - } - - return 0; -} - -/* The "to_store_registers" method of the dec_thread_ops. - - Because the dec-thread debug API doesn't allow us to store - just one register, we store all the registers. */ - -static void -dec_thread_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) -{ - pthreadDebugId_t tid = ptid_get_tid (inferior_ptid); - gregset_t gregset; - fpregset_t fpregset; - int res; - - debug ("dec_thread_store_registers (tid=%ld, regno=%d)", tid, regno); - - if (tid == 0 || ptid_equal (inferior_ptid, get_active_ptid ())) - { - struct target_ops *beneath = find_target_beneath (ops); - - beneath->to_store_registers (beneath, regcache, regno); - return; - } - - /* FIXME: brobecker/2008-05-28: I wonder if we could simply check - in which register set the register is and then only store the - registers for that register set, instead of storing both register - sets. */ - fill_gregset (regcache, &gregset, -1); - fill_fpregset (regcache, &fpregset, -1); - - res = dec_thread_set_regsets (tid, gregset, fpregset); - if (res != 0) - warning (_("failed to store registers.")); -} - -/* The "to_mourn_inferior" method of the dec_thread_ops. */ - -static void -dec_thread_mourn_inferior (struct target_ops *ops) -{ - struct target_ops *beneath = find_target_beneath (ops); - - debug ("dec_thread_mourn_inferior"); - - disable_dec_thread (); - beneath->to_mourn_inferior (beneath); -} - -/* The "to_thread_alive" method of the dec_thread_ops. */ -static int -dec_thread_thread_alive (struct target_ops *ops, ptid_t ptid) -{ - debug ("dec_thread_thread_alive (tid=%ld)", ptid_get_tid (ptid)); - - /* The thread list maintained by GDB is up to date, since we update - it everytime we stop. So check this list. */ - return in_thread_list (ptid); -} - -/* The "to_pid_to_str" method of the dec_thread_ops. */ - -static char * -dec_thread_pid_to_str (struct target_ops *ops, ptid_t ptid) -{ - static char *ret = NULL; - - if (ptid_get_tid (ptid) == 0) - { - struct target_ops *beneath = find_target_beneath (ops); - - return beneath->to_pid_to_str (beneath, ptid); - } - - /* Free previous return value; a new one will be allocated by - xstrprintf(). */ - xfree (ret); - - ret = xstrprintf (_("Thread %ld"), ptid_get_tid (ptid)); - return ret; -} - -/* A "new-objfile" observer. Used to activate/deactivate dec-thread - support. */ - -static void -dec_thread_new_objfile_observer (struct objfile *objfile) -{ - if (objfile != NULL) - enable_dec_thread (); - else - disable_dec_thread (); -} - -/* The "to_get_ada_task_ptid" method of the dec_thread_ops. */ - -static ptid_t -dec_thread_get_ada_task_ptid (struct target_ops *self, long lwp, long thread) -{ - int i; - struct dec_thread_info *info; - - debug ("dec_thread_get_ada_task_ptid (struct target_ops *self," - " lwp=0x%lx, thread=0x%lx)", - lwp, thread); - - for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); - i++) - if (info->info.teb == (pthread_t) thread) - return ptid_build_from_info (*info); - - warning (_("Could not find thread id from THREAD = 0x%lx"), thread); - return inferior_ptid; -} - -static void -init_dec_thread_ops (void) -{ - dec_thread_ops.to_shortname = "dec-threads"; - dec_thread_ops.to_longname = _("DEC threads support"); - dec_thread_ops.to_doc = _("DEC threads support"); - dec_thread_ops.to_detach = dec_thread_detach; - dec_thread_ops.to_wait = dec_thread_wait; - dec_thread_ops.to_fetch_registers = dec_thread_fetch_registers; - dec_thread_ops.to_store_registers = dec_thread_store_registers; - dec_thread_ops.to_mourn_inferior = dec_thread_mourn_inferior; - dec_thread_ops.to_thread_alive = dec_thread_thread_alive; - dec_thread_ops.to_find_new_threads = dec_thread_find_new_threads; - dec_thread_ops.to_pid_to_str = dec_thread_pid_to_str; - dec_thread_ops.to_stratum = thread_stratum; - dec_thread_ops.to_get_ada_task_ptid = dec_thread_get_ada_task_ptid; - dec_thread_ops.to_magic = OPS_MAGIC; -} - -void -_initialize_dec_thread (void) -{ - init_dec_thread_ops (); - complete_target_initialization (&dec_thread_ops); - - observer_attach_new_objfile (dec_thread_new_objfile_observer); - - add_setshow_boolean_cmd ("dec-thread", class_maintenance, &debug_dec_thread, - _("Set debugging of DEC threads module."), - _("Show debugging of DEC threads module."), - _("Enables debugging output (used to debug GDB)."), - NULL, NULL, - &setdebuglist, &showdebuglist); -} diff --git a/gdb/defs.h b/gdb/defs.h index 8914512..1eb43eb 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -514,7 +514,6 @@ enum gdb_osabi GDB_OSABI_SVR4, GDB_OSABI_HURD, GDB_OSABI_SOLARIS, - GDB_OSABI_OSF1, GDB_OSABI_LINUX, GDB_OSABI_FREEBSD_AOUT, GDB_OSABI_FREEBSD_ELF, diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 429c650..a1b8ac7 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -15725,10 +15725,9 @@ When inspecting a core file, as opposed to debugging a live program, tasking support may be limited or even unavailable, depending on the platform being used. For instance, on x86-linux, the list of tasks is available, but task -switching is not supported. On Tru64, however, task switching will work -as usual. +switching is not supported. -On certain platforms, including Tru64, the debugger needs to perform some +On certain platforms, the debugger needs to perform some memory writes in order to provide Ada tasking support. When inspecting a core file, this means that the core file must be opened with read-write privileges, using the command @samp{"set write on"} (@pxref{Patching}). @@ -19726,8 +19725,7 @@ If @value{GDBN} is configured for an operating system with this facility, the command @code{info proc} is available to report information about the process running your program, or about any process running on your system. This includes, as of this writing, -@sc{gnu}/Linux, OSF/1 (Digital Unix), Solaris, and Irix, but -not HP-UX, for example. +@sc{gnu}/Linux and Solaris, but not HP-UX, for example. This command may also work on core files that were created on a system that has the @samp{/proc} facility. diff --git a/gdb/inferior.h b/gdb/inferior.h index e716005..0129549 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -250,11 +250,9 @@ enum stop_kind /* Number of traps that happen between exec'ing the shell to run an inferior and when we finally get to the inferior code, not counting - the exec for the shell. This is 1 on most implementations. - Overridden in nm.h files. */ -#if !defined(START_INFERIOR_TRAPS_EXPECTED) + the exec for the shell. This is 1 on all supported + implementations. */ #define START_INFERIOR_TRAPS_EXPECTED 1 -#endif struct private_inferior; diff --git a/gdb/osabi.c b/gdb/osabi.c index cdba812..d33ef9c 100644 --- a/gdb/osabi.c +++ b/gdb/osabi.c @@ -50,7 +50,6 @@ static const char * const gdb_osabi_names[] = "SVR4", "GNU/Hurd", "Solaris", - "OSF/1", "GNU/Linux", "FreeBSD a.out", "FreeBSD ELF", diff --git a/gdb/procfs.c b/gdb/procfs.c index 15a0409..6b9468f 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -2917,16 +2917,9 @@ procfs_debug_inferior (procinfo *pi) sysset_t *traced_syscall_exits; int status; -#ifdef PROCFS_DONT_TRACE_FAULTS - /* On some systems (OSF), we don't trace hardware faults. - Apparently it's enough that we catch them as signals. - Wonder why we don't just do that in general? */ - premptyset (&traced_faults); /* don't trace faults. */ -#else /* Register to trace hardware faults in the child. */ prfillset (&traced_faults); /* trace all faults... */ gdb_prdelset (&traced_faults, FLTPAGE); /* except page fault. */ -#endif if (!proc_set_traced_faults (pi, &traced_faults)) return __LINE__; @@ -4227,16 +4220,6 @@ unconditionally_kill_inferior (procinfo *pi) int parent_pid; parent_pid = proc_parent_pid (pi); -#ifdef PROCFS_NEED_CLEAR_CURSIG_FOR_KILL - /* FIXME: use access functions. */ - /* Alpha OSF/1-3.x procfs needs a clear of the current signal - before the PIOCKILL, otherwise it might generate a corrupted core - file for the inferior. */ - if (ioctl (pi->ctl_fd, PIOCSSIG, NULL) < 0) - { - printf_filtered ("unconditionally_kill: SSIG failed!\n"); - } -#endif #ifdef PROCFS_NEED_PIOCSSIG_FOR_KILL /* Alpha OSF/1-2.x procfs needs a PIOCSSIG call with a SIGKILL signal to kill the inferior, otherwise it might remain stopped with a diff --git a/gdb/solib-osf.c b/gdb/solib-osf.c deleted file mode 100644 index 24915cb..0000000 --- a/gdb/solib-osf.c +++ /dev/null @@ -1,638 +0,0 @@ -/* Handle OSF/1, Digital UNIX, and Tru64 shared libraries - for GDB, the GNU Debugger. - Copyright (C) 1993-2014 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* When handling shared libraries, GDB has to find out the pathnames - of all shared libraries that are currently loaded (to read in their - symbols) and where the shared libraries are loaded in memory - (to relocate them properly from their prelinked addresses to the - current load address). - - Under OSF/1 there are two possibilities to get at this information: - - 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, - but they seem stable enough. - - 2) Use the libxproc.a library, which contains the equivalent ldr_* - routines. The library is documented in Tru64 5.x, but as of 5.1, it - only allows a process to examine itself. On earlier versions, it - may require that the GDB executable be dynamically linked and that - NAT_CLIBS include -lxproc -Wl,-expect_unresolved,ldr_process_context - for GDB and all applications that are using libgdb. - - We will use the peeking approach until libxproc.a works for other - processes. */ - -#include "defs.h" - -#include -#include -#include "bfd.h" -#include "symtab.h" -#include "symfile.h" -#include "objfiles.h" -#include "target.h" -#include "inferior.h" -#include "infrun.h" -#include "gdbthread.h" -#include "solist.h" -#include "solib.h" - -#ifdef USE_LDR_ROUTINES -# include -#endif - -#ifndef USE_LDR_ROUTINES -/* Definition of runtime loader structures, found by experimentation. */ -#define RLD_CONTEXT_ADDRESS 0x3ffc0000000 - -/* Per-module information structure referenced by ldr_context_t.head. */ - -typedef struct - { - CORE_ADDR next; - 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. */ - long module_id; - CORE_ADDR unknown2; - CORE_ADDR unknown3; - long region_count; - CORE_ADDR regioninfo_addr; - } -ldr_module_info_t; - -/* Per-region structure referenced by ldr_module_info_t.regioninfo_addr. */ - -typedef struct - { - long unknown1; - CORE_ADDR regionname_addr; - long protection; - CORE_ADDR vaddr; - CORE_ADDR mapaddr; - long size; - long unknown2[5]; - } -ldr_region_info_t; - -/* Structure at RLD_CONTEXT_ADDRESS specifying the start and finish addresses - of the shared module list. */ - -typedef struct - { - CORE_ADDR unknown1; - CORE_ADDR unknown2; - CORE_ADDR head; - CORE_ADDR tail; - } -ldr_context_t; -#endif /* !USE_LDR_ROUTINES */ - -/* Per-section information, stored in struct lm_info.secs. */ - -struct lm_sec - { - CORE_ADDR offset; /* difference between default and actual - virtual addresses of section .name */ - CORE_ADDR nameaddr; /* address in inferior of section name */ - const char *name; /* name of section, null if not fetched */ - }; - -/* Per-module information, stored in struct so_list.lm_info. */ - -struct lm_info - { - int isloader; /* whether the module is /sbin/loader */ - int nsecs; /* length of .secs */ - struct lm_sec secs[1]; /* variable-length array of sections, sorted - by name */ - }; - -/* Context for iterating through the inferior's shared module list. */ - -struct read_map_ctxt - { -#ifdef USE_LDR_ROUTINES - ldr_process_t proc; - ldr_module_t next; -#else - CORE_ADDR next; /* next element in module list */ - CORE_ADDR tail; /* last element in module list */ -#endif - }; - -/* Forward declaration for this module's autoinit function. */ - -extern void _initialize_osf_solib (void); - -#ifdef USE_LDR_ROUTINES -# if 0 -/* This routine is intended to be called by ldr_* routines to read memory from - the current target. Usage: - - ldr_process = ldr_core_process (); - ldr_set_core_reader (ldr_read_memory); - ldr_xdetach (ldr_process); - ldr_xattach (ldr_process); - - ldr_core_process() and ldr_read_memory() are neither documented nor - declared in system header files. They work with OSF/1 2.x, and they might - work with later versions as well. */ - -static int -ldr_read_memory (CORE_ADDR memaddr, char *myaddr, int len, int readstring) -{ - int result; - char *buffer; - - if (readstring) - { - target_read_string (memaddr, &buffer, len, &result); - if (result == 0) - strcpy (myaddr, buffer); - xfree (buffer); - } - else - result = target_read_memory (memaddr, myaddr, len); - - if (result != 0) - result = -result; - return result; -} -# endif /* 0 */ -#endif /* USE_LDR_ROUTINES */ - -/* Comparison for qsort() and bsearch(): return -1, 0, or 1 according to - whether lm_sec *P1's name is lexically less than, equal to, or greater - than that of *P2. */ - -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); -} - -/* Sort LMI->secs so that osf_relocate_section_addresses() can binary-search - it. */ - -static void -lm_secs_sort (struct lm_info *lmi) -{ - qsort (lmi->secs, lmi->nsecs, sizeof *lmi->secs, lm_sec_cmp); -} - -/* Populate name fields of LMI->secs. */ - -static void -fetch_sec_names (struct lm_info *lmi) -{ -#ifndef USE_LDR_ROUTINES - int i, errcode; - struct lm_sec *lms; - char *name; - - for (i = 0; i < lmi->nsecs; i++) - { - lms = lmi->secs + i; - target_read_string (lms->nameaddr, &name, PATH_MAX, &errcode); - if (errcode != 0) - { - warning (_("unable to read shared sec name at 0x%lx"), - lms->nameaddr); - name = xstrdup (""); - } - lms->name = name; - } - lm_secs_sort (lmi); -#endif -} - -/* target_so_ops callback. Adjust SEC's addresses after it's been mapped into - the process. */ - -static void -osf_relocate_section_addresses (struct so_list *so, - struct target_section *sec) -{ - struct lm_info *lmi; - struct lm_sec lms_key, *lms; - - /* Fetch SO's section names if we haven't done so already. */ - lmi = so->lm_info; - if (lmi->nsecs && !lmi->secs[0].name) - fetch_sec_names (lmi); - - /* Binary-search for offset information corresponding to SEC. */ - lms_key.name = sec->the_bfd_section->name; - lms = bsearch (&lms_key, lmi->secs, lmi->nsecs, sizeof *lms, lm_sec_cmp); - if (lms) - { - sec->addr += lms->offset; - sec->endaddr += lms->offset; - } -} - -/* target_so_ops callback. Free parts of SO allocated by this file. */ - -static void -osf_free_so (struct so_list *so) -{ - int i; - const char *name; - - for (i = 0; i < so->lm_info->nsecs; i++) - { - name = so->lm_info->secs[i].name; - if (name) - xfree ((void *) name); - } - xfree (so->lm_info); -} - -/* target_so_ops callback. Discard information accumulated by this file and - not freed by osf_free_so(). */ - -static void -osf_clear_solib (void) -{ - return; -} - -/* target_so_ops callback. Prepare to handle shared libraries after the - inferior process has been created but before it's executed any - 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 - in that case. - - For a dynamically bound executable, this first instruction is somewhere - in the rld, and the actual user executable is not yet mapped in. - We continue the inferior again, rld then maps in the actual user - executable and any needed shared libraries and then sends - itself a SIGTRAP. - - At that point we discover the names of all shared libraries and - read their symbols in. - - FIXME - - This code does not properly handle hitting breakpoints which the - user might have set in the rld itself. Proper handling would have - to check if the SIGTRAP happened due to a kill call. - - Also, what if child has exit()ed? Must exit loop somehow. */ - -static void -osf_solib_create_inferior_hook (int from_tty) -{ - struct inferior *inf; - struct thread_info *tp; - - inf = current_inferior (); - - /* If we are attaching to the inferior, the shared libraries - have already been mapped, so nothing more to do. */ - if (inf->attach_flag) - return; - - /* Nothing to do for statically bound executables. */ - - if (symfile_objfile == NULL - || symfile_objfile->obfd == NULL - || ((bfd_get_file_flags (symfile_objfile->obfd) & DYNAMIC) == 0)) - return; - - /* Now run the target. It will eventually get a SIGTRAP, at - which point all of the libraries will have been mapped in and we - can go groveling around in the rld structures to find - out what we need to know about them. - - If debugging from a core file, we cannot resume the execution - of the inferior. But this is actually not an issue, because - shared libraries have already been mapped anyways, which means - we have nothing more to do. */ - if (!target_can_run (¤t_target)) - return; - - tp = inferior_thread (); - clear_proceed_status (0); - inf->control.stop_soon = STOP_QUIETLY; - tp->suspend.stop_signal = GDB_SIGNAL_0; - do - { - target_resume (minus_one_ptid, 0, tp->suspend.stop_signal); - wait_for_inferior (); - } - 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 - 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->control.stop_soon = NO_STOP_QUIETLY; -} - -/* target_so_ops callback. Do additional symbol handling, lookup, etc. after - symbols for a shared object have been loaded. */ - -static void -osf_special_symbol_handling (void) -{ - return; -} - -/* Initialize CTXT in preparation for iterating through the inferior's module - list using read_map(). Return success. */ - -static int -open_map (struct read_map_ctxt *ctxt) -{ -#ifdef USE_LDR_ROUTINES - /* Note: As originally written, ldr_my_process() was used to obtain - the value for ctxt->proc. This is incorrect, however, since - ldr_my_process() retrieves the "unique identifier" associated - with the current process (i.e. GDB) and not the one being - debugged. Presumably, the pid of the process being debugged is - compatible with the "unique identifier" used by the ldr_ - routines, so we use that. */ - ctxt->proc = ptid_get_pid (inferior_ptid); - if (ldr_xattach (ctxt->proc) != 0) - return 0; - ctxt->next = LDR_NULL_MODULE; -#else - CORE_ADDR ldr_context_addr, prev, next; - ldr_context_t ldr_context; - - if (target_read_memory ((CORE_ADDR) RLD_CONTEXT_ADDRESS, - (char *) &ldr_context_addr, - sizeof (CORE_ADDR)) != 0) - return 0; - if (target_read_memory (ldr_context_addr, - (char *) &ldr_context, - sizeof (ldr_context_t)) != 0) - return 0; - ctxt->next = ldr_context.head; - ctxt->tail = ldr_context.tail; -#endif - return 1; -} - -/* Initialize SO to have module NAME, /sbin/loader indicator ISLOADR, and - space for NSECS sections. */ - -static void -init_so (struct so_list *so, char *name, int isloader, int nsecs) -{ - int namelen, i; - - /* solib.c requires various fields to be initialized to 0. */ - memset (so, 0, sizeof *so); - - /* Copy the name. */ - namelen = strlen (name); - if (namelen >= SO_NAME_MAX_PATH_SIZE) - namelen = SO_NAME_MAX_PATH_SIZE - 1; - - memcpy (so->so_original_name, name, namelen); - so->so_original_name[namelen] = '\0'; - memcpy (so->so_name, so->so_original_name, namelen + 1); - - /* Allocate section space. */ - 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++) - so->lm_info->secs[i].name = NULL; -} - -/* Initialize SO's section SECIDX with name address NAMEADDR, name string - NAME, default virtual address VADDR, and actual virtual address - MAPADDR. */ - -static void -init_sec (struct so_list *so, int secidx, CORE_ADDR nameaddr, - const char *name, CORE_ADDR vaddr, CORE_ADDR mapaddr) -{ - struct lm_sec *lms; - - lms = so->lm_info->secs + secidx; - lms->nameaddr = nameaddr; - lms->name = name; - lms->offset = mapaddr - vaddr; -} - -/* If there are more elements starting at CTXT in inferior's module list, - store the next element in SO, advance CTXT to the next element, and return - 1, else return 0. */ - -static int -read_map (struct read_map_ctxt *ctxt, struct so_list *so) -{ - ldr_module_info_t minf; - ldr_region_info_t rinf; - -#ifdef USE_LDR_ROUTINES - size_t size; - ldr_region_t i; - - /* Retrieve the next element. */ - if (ldr_next_module (ctxt->proc, &ctxt->next) != 0) - return 0; - if (ctxt->next == LDR_NULL_MODULE) - return 0; - if (ldr_inq_module (ctxt->proc, ctxt->next, &minf, sizeof minf, &size) != 0) - return 0; - - /* Initialize the module name and section count. */ - init_so (so, minf.lmi_name, 0, minf.lmi_nregion); - - /* Retrieve section names and offsets. */ - for (i = 0; i < minf.lmi_nregion; i++) - { - if (ldr_inq_region (ctxt->proc, ctxt->next, i, &rinf, - sizeof rinf, &size) != 0) - goto err; - init_sec (so, (int) i, 0, xstrdup (rinf.lri_name), - (CORE_ADDR) rinf.lri_vaddr, (CORE_ADDR) rinf.lri_mapaddr); - } - lm_secs_sort (so->lm_info); -#else - char *name; - int errcode, i; - - /* Retrieve the next element. */ - if (!ctxt->next) - return 0; - if (target_read_memory (ctxt->next, (char *) &minf, sizeof minf) != 0) - return 0; - if (ctxt->next == ctxt->tail) - ctxt->next = 0; - else - ctxt->next = minf.next; - - /* Initialize the module name and section count. */ - target_read_string (minf.module_name, &name, PATH_MAX, &errcode); - if (errcode != 0) - return 0; - init_so (so, name, !minf.modinfo_addr, minf.region_count); - xfree (name); - - /* Retrieve section names and offsets. */ - for (i = 0; i < minf.region_count; i++) - { - if (target_read_memory (minf.regioninfo_addr + i * sizeof rinf, - (char *) &rinf, sizeof rinf) != 0) - goto err; - init_sec (so, i, rinf.regionname_addr, NULL, rinf.vaddr, rinf.mapaddr); - } -#endif /* !USE_LDR_ROUTINES */ - return 1; - - err: - osf_free_so (so); - return 0; -} - -/* Free resources allocated by open_map (CTXT). */ - -static void -close_map (struct read_map_ctxt *ctxt) -{ -#ifdef USE_LDR_ROUTINES - ldr_xdetach (ctxt->proc); -#endif -} - -/* target_so_ops callback. Return a list of shared objects currently loaded - in the inferior. */ - -static struct so_list * -osf_current_sos (void) -{ - struct so_list *head = NULL, *tail = NULL, *newtail, so; - struct read_map_ctxt ctxt; - int skipped_main; - - if (!open_map (&ctxt)) - return NULL; - - /* Read subsequent elements. */ - for (skipped_main = 0;;) - { - if (!read_map (&ctxt, &so)) - break; - - /* Skip the main program module, which is first in the list after - /sbin/loader. */ - if (!so.lm_info->isloader && !skipped_main) - { - osf_free_so (&so); - skipped_main = 1; - continue; - } - - newtail = xmalloc (sizeof *newtail); - if (!head) - head = newtail; - else - tail->next = newtail; - tail = newtail; - - memcpy (tail, &so, sizeof so); - tail->next = NULL; - } - - close_map (&ctxt); - return head; -} - -/* target_so_ops callback. Attempt to locate and open the main symbol - file. */ - -static int -osf_open_symbol_file_object (void *from_ttyp) -{ - struct read_map_ctxt ctxt; - struct so_list so; - int found; - - if (symfile_objfile) - if (!query (_("Attempt to reload symbols from process? "))) - return 0; - - /* The first module after /sbin/loader is the main program. */ - if (!open_map (&ctxt)) - return 0; - for (found = 0; !found;) - { - if (!read_map (&ctxt, &so)) - break; - found = !so.lm_info->isloader; - osf_free_so (&so); - } - close_map (&ctxt); - - if (found) - symbol_file_add_main (so.so_name, *(int *) from_ttyp); - return found; -} - -/* target_so_ops callback. Return whether PC is in the dynamic linker. */ - -static int -osf_in_dynsym_resolve_code (CORE_ADDR pc) -{ - /* 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. */ - return 0; -} - -static struct target_so_ops osf_so_ops; - -void -_initialize_osf_solib (void) -{ - osf_so_ops.relocate_section_addresses = osf_relocate_section_addresses; - osf_so_ops.free_so = osf_free_so; - osf_so_ops.clear_solib = osf_clear_solib; - osf_so_ops.solib_create_inferior_hook = osf_solib_create_inferior_hook; - osf_so_ops.special_symbol_handling = osf_special_symbol_handling; - 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. */ - current_target_so_ops = &osf_so_ops; -} diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp index a8c8241..cff8bd0 100644 --- a/gdb/testsuite/gdb.base/callfuncs.exp +++ b/gdb/testsuite/gdb.base/callfuncs.exp @@ -122,7 +122,7 @@ proc do_function_calls {} { if $prototypes then { setup_xfail "sparc-*-*" "mips*-*-*" 5318 if { ! [test_compiler_info gcc-*-*] } then { - setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318 + setup_xfail "i*86-*-sysv4*" 5318 } } diff --git a/gdb/testsuite/gdb.base/sigall.exp b/gdb/testsuite/gdb.base/sigall.exp index 7a4007f..42927b6 100644 --- a/gdb/testsuite/gdb.base/sigall.exp +++ b/gdb/testsuite/gdb.base/sigall.exp @@ -54,17 +54,6 @@ proc test_one_sig {nextsig} { "Continuing.*Program received signal SIG$esig.*" \ "get signal $esig" } - if [ istarget "alpha-dec-osf3*" ] then { - # OSF/1-3.x is unable to continue with a job control stop signal. - # The inferior remains stopped without an event of interest - # and GDB waits forever for the inferior to stop on an event - # of interest. Work around the kernel bug. - if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } { - setup_xfail "alpha-dec-osf3*" - fail "cannot continue from signal $thissig" - set need_another_continue 0 - } - } if $need_another_continue then { if { $thissig == "URG" } { diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp index 91142fe..cd066f4 100644 --- a/gdb/testsuite/gdb.gdb/selftest.exp +++ b/gdb/testsuite/gdb.gdb/selftest.exp @@ -459,15 +459,6 @@ proc test_with_self { executable } { -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" { pass "$description" } - -re ".*$gdb_prompt $" { - # On the alpha, we hit the infamous problem about gdb - # being unable to get the frame pointer (mentioned in - # gdb/README). As it is intermittent, there is no way to - # XFAIL it which will give us an XPASS if the problem goes - # away. - setup_xfail "alpha*-*-osf*" - fail "$description" - } } diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp index 75d25c8..a7f0ed4 100644 --- a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp +++ b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp @@ -208,7 +208,7 @@ proc do_function_calls {} { if $prototypes then { setup_xfail "sparc-*-*" "mips*-*-*" 5318 if {!$gcc_compiled} then { - setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318 + setup_xfail "i*86-*-sysv4*" 5318 } } gdb_test "p t_float_values2(3.14159,float_val2)" " = 1" diff --git a/gdb/testsuite/gdb.mi/non-stop.c b/gdb/testsuite/gdb.mi/non-stop.c index 67b68aa..79ec562 100644 --- a/gdb/testsuite/gdb.mi/non-stop.c +++ b/gdb/testsuite/gdb.mi/non-stop.c @@ -20,11 +20,11 @@ #include #include -/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create +/* Under HPUX 10, the second arg of pthread_create is prototyped to be just a "pthread_attr_t", while under Solaris it is a "pthread_attr_t *". Arg! */ -#if defined (__osf__) || defined (__hpux__) +#if defined (__hpux__) #define PTHREAD_CREATE_ARG2(arg) arg #define PTHREAD_CREATE_NULL_ARG2 null_attr static pthread_attr_t null_attr; diff --git a/gdb/testsuite/gdb.mi/pthreads.c b/gdb/testsuite/gdb.mi/pthreads.c index d6cb897..933b31a 100644 --- a/gdb/testsuite/gdb.mi/pthreads.c +++ b/gdb/testsuite/gdb.mi/pthreads.c @@ -24,11 +24,11 @@ #include #include -/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create +/* Under HPUX 10, the second arg of pthread_create is prototyped to be just a "pthread_attr_t", while under Solaris it is a "pthread_attr_t *". Arg! */ -#if defined (__osf__) || defined (__hpux__) +#if defined (__hpux__) #define PTHREAD_CREATE_ARG2(arg) arg #define PTHREAD_CREATE_NULL_ARG2 null_attr static pthread_attr_t null_attr; diff --git a/gdb/testsuite/gdb.reverse/sigall-precsave.exp b/gdb/testsuite/gdb.reverse/sigall-precsave.exp index 4a4695e..dcae868 100644 --- a/gdb/testsuite/gdb.reverse/sigall-precsave.exp +++ b/gdb/testsuite/gdb.reverse/sigall-precsave.exp @@ -65,17 +65,6 @@ proc test_one_sig {nextsig} { } } } - if [ istarget "alpha-dec-osf3*" ] then { - # OSF/1-3.x is unable to continue with a job control stop signal. - # The inferior remains stopped without an event of interest - # and GDB waits forever for the inferior to stop on an event - # of interest. Work around the kernel bug. - if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } { - setup_xfail "alpha-dec-osf3*" - fail "cannot continue from signal $thissig" - set need_another_continue 0 - } - } if $need_another_continue then { if { $thissig == "URG" } { diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.exp b/gdb/testsuite/gdb.reverse/sigall-reverse.exp index fffc94e..0194ba4 100644 --- a/gdb/testsuite/gdb.reverse/sigall-reverse.exp +++ b/gdb/testsuite/gdb.reverse/sigall-reverse.exp @@ -64,17 +64,6 @@ proc test_one_sig {nextsig} { } } } - if [ istarget "alpha-dec-osf3*" ] then { - # OSF/1-3.x is unable to continue with a job control stop signal. - # The inferior remains stopped without an event of interest - # and GDB waits forever for the inferior to stop on an event - # of interest. Work around the kernel bug. - if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } { - setup_xfail "alpha-dec-osf3*" - fail "cannot continue from signal $thissig" - set need_another_continue 0 - } - } if $need_another_continue then { if { $thissig == "URG" } { diff --git a/gdb/testsuite/gdb.threads/pthreads.c b/gdb/testsuite/gdb.threads/pthreads.c index 0bfc618..ac0f133 100644 --- a/gdb/testsuite/gdb.threads/pthreads.c +++ b/gdb/testsuite/gdb.threads/pthreads.c @@ -23,11 +23,11 @@ #include #include -/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create +/* Under HPUX 10, the second arg of pthread_create is prototyped to be just a "pthread_attr_t", while under Solaris it is a "pthread_attr_t *". Arg! */ -#if defined (__osf__) || defined (__hpux__) +#if defined (__hpux__) #define PTHREAD_CREATE_ARG2(arg) arg #define PTHREAD_CREATE_NULL_ARG2 null_attr static pthread_attr_t null_attr; @@ -124,13 +124,11 @@ main(argc, argv) foo (1, 2, 3); -#ifndef __osf__ if (pthread_attr_init (&attr)) { perror ("pthread_attr_init 1"); exit (1); } -#endif #ifdef PTHREAD_SCOPE_SYSTEM if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM)) diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp index 4900e14..990dfaa 100644 --- a/gdb/testsuite/gdb.threads/pthreads.exp +++ b/gdb/testsuite/gdb.threads/pthreads.exp @@ -266,9 +266,7 @@ proc check_backtraces {} { } } -setup_xfail "alpha-*-osf*" if [runto_main] then { - clear_xfail "alpha-*-osf*" if [test_startup] then { if [check_control_c] then { warning "Could not stop child with ^C; skipping rest of tests.\n" @@ -277,4 +275,3 @@ if [runto_main] then { check_backtraces } } -clear_xfail "alpha-*-osf*"