1 /* Native-dependent code for GNU/Linux UltraSPARC. 2 3 Copyright (C) 2003-2019 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include "regcache.h" 22 23 #include <sys/procfs.h> 24 #include "gregset.h" 25 26 #include "sparc64-tdep.h" 27 #include "sparc-tdep.h" 28 #include "sparc-nat.h" 29 #include "inferior.h" 30 #include "target.h" 31 #include "linux-nat.h" 32 33 class sparc64_linux_nat_target final : public linux_nat_target 34 { 35 public: 36 /* Add our register access methods. */ 37 void fetch_registers (struct regcache *regcache, int regnum) override 38 { sparc_fetch_inferior_registers (regcache, regnum); } 39 40 void store_registers (struct regcache *regcache, int regnum) override 41 { sparc_store_inferior_registers (regcache, regnum); } 42 43 /* Override linux_nat_target low methods. */ 44 45 /* ADI support */ 46 void low_forget_process (pid_t pid) override 47 { sparc64_forget_process (pid); } 48 }; 49 50 static sparc64_linux_nat_target the_sparc64_linux_nat_target; 51 52 static const struct sparc_gregmap sparc64_linux_ptrace_gregmap = 53 { 54 16 * 8, /* "tstate" */ 55 17 * 8, /* %pc */ 56 18 * 8, /* %npc */ 57 19 * 8, /* %y */ 58 -1, /* %wim */ 59 -1, /* %tbr */ 60 0 * 8, /* %g1 */ 61 -1, /* %l0 */ 62 4 /* sizeof (%y) */ 63 }; 64 65 66 void 67 supply_gregset (struct regcache *regcache, const prgregset_t *gregs) 68 { 69 sparc64_supply_gregset (sparc_gregmap, regcache, -1, gregs); 70 } 71 72 void 73 supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs) 74 { 75 sparc64_supply_fpregset (&sparc64_bsd_fpregmap, regcache, -1, fpregs); 76 } 77 78 void 79 fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum) 80 { 81 sparc64_collect_gregset (sparc_gregmap, regcache, regnum, gregs); 82 } 83 84 void 85 fill_fpregset (const struct regcache *regcache, 86 prfpregset_t *fpregs, int regnum) 87 { 88 sparc64_collect_fpregset (&sparc64_bsd_fpregmap, regcache, regnum, fpregs); 89 } 90 91 void 92 _initialize_sparc64_linux_nat (void) 93 { 94 sparc_fpregmap = &sparc64_bsd_fpregmap; 95 96 /* Register the target. */ 97 linux_target = &the_sparc64_linux_nat_target; 98 add_inf_child_target (&the_sparc64_linux_nat_target); 99 100 sparc_gregmap = &sparc64_linux_ptrace_gregmap; 101 } 102