sparc64-tdep.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* Target-dependent code for UltraSPARC.
  2. Copyright (C) 2003-2022 Free Software Foundation, Inc.
  3. This file is part of GDB.
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>. */
  14. #ifndef SPARC64_TDEP_H
  15. #define SPARC64_TDEP_H 1
  16. struct frame_info;
  17. struct gdbarch;
  18. struct regcache;
  19. struct sparc_gregmap;
  20. struct trad_frame_saved_reg;
  21. #include "sparc-tdep.h"
  22. /* The stack pointer is offset from the stack frame by a BIAS of 2047
  23. (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC
  24. hosts, so undefine it first. */
  25. #undef BIAS
  26. #define BIAS 2047
  27. /* Register offsets for the general-purpose register set. */
  28. /* UltraSPARC doesn't have %psr. */
  29. #define r_tstate_offset r_psr_offset
  30. /* UltraSPARC doesn't have %wim either. */
  31. #define r_fprs_offset r_wim_offset
  32. /* Register numbers of various important registers. */
  33. enum sparc64_regnum
  34. {
  35. SPARC64_F32_REGNUM /* %f32 */
  36. = SPARC_F0_REGNUM + 32,
  37. SPARC64_F62_REGNUM /* %f62 */
  38. = SPARC64_F32_REGNUM + 15,
  39. SPARC64_PC_REGNUM, /* %pc */
  40. SPARC64_NPC_REGNUM, /* %npc */
  41. SPARC64_STATE_REGNUM,
  42. SPARC64_FSR_REGNUM, /* %fsr */
  43. SPARC64_FPRS_REGNUM, /* %fprs */
  44. SPARC64_Y_REGNUM, /* %y */
  45. };
  46. /* Pseudo registers. */
  47. enum sparc64_pseudo_regnum
  48. {
  49. SPARC64_CWP_REGNUM = 0, /* %cwp */
  50. SPARC64_PSTATE_REGNUM, /* %pstate */
  51. SPARC64_ASI_REGNUM, /* %asi */
  52. SPARC64_CCR_REGNUM, /* %ccr */
  53. SPARC64_D0_REGNUM, /* %d0 */
  54. SPARC64_D10_REGNUM /* %d10 */
  55. = SPARC64_D0_REGNUM + 5,
  56. SPARC64_D30_REGNUM /* %d30 */
  57. = SPARC64_D0_REGNUM + 15,
  58. SPARC64_D32_REGNUM /* %d32 */
  59. = SPARC64_D0_REGNUM + 16,
  60. SPARC64_D62_REGNUM /* %d62 */
  61. = SPARC64_D0_REGNUM + 31,
  62. SPARC64_Q0_REGNUM, /* %q0 */
  63. SPARC64_Q8_REGNUM /* %q8 */
  64. = SPARC64_Q0_REGNUM + 2,
  65. SPARC64_Q28_REGNUM /* %q28 */
  66. = SPARC64_Q0_REGNUM + 7,
  67. SPARC64_Q32_REGNUM /* %q32 */
  68. = SPARC64_Q0_REGNUM + 8,
  69. SPARC64_Q60_REGNUM /* %q60 */
  70. = SPARC64_Q0_REGNUM + 15
  71. };
  72. /* Processor state bits. */
  73. #define SPARC64_PSTATE_AG 0x001
  74. #define SPARC64_PSTATE_IE 0x002
  75. #define SPARC64_PSTATE_PRIV 0x004
  76. #define SPARC64_PSTATE_AM 0x008
  77. #define SPARC64_PSTATE_PEF 0x010
  78. #define SPARC64_PSTATE_RED 0x020
  79. #define SPARC64_PSTATE_TLE 0x100
  80. #define SPARC64_PSTATE_CLE 0x200
  81. #define SPARC64_PSTATE_PID0 0x400
  82. #define SPARC64_PSTATE_PID1 0x800
  83. extern void sparc64_init_abi (struct gdbarch_info info,
  84. struct gdbarch *gdbarch);
  85. extern void sparc64_supply_gregset (const struct sparc_gregmap *gregmap,
  86. struct regcache *regcache,
  87. int regnum, const void *gregs);
  88. extern void sparc64_collect_gregset (const struct sparc_gregmap *gregmap,
  89. const struct regcache *regcache,
  90. int regnum, void *gregs);
  91. extern void sparc64_supply_fpregset (const struct sparc_fpregmap *fpregmap,
  92. struct regcache *regcache,
  93. int regnum, const void *fpregs);
  94. extern void sparc64_collect_fpregset (const struct sparc_fpregmap *fpregmap,
  95. const struct regcache *regcache,
  96. int regnum, void *fpregs);
  97. /* Functions and variables exported from sparc64-sol2-tdep.c. */
  98. /* Register offsets for Solaris 2. */
  99. extern const struct sparc_gregmap sparc64_sol2_gregmap;
  100. extern const struct sparc_fpregmap sparc64_sol2_fpregmap;
  101. /* Variables exported from sparc64-fbsd-tdep.c. */
  102. /* Register offsets for FreeBSD/sparc64. */
  103. extern const struct sparc_gregmap sparc64fbsd_gregmap;
  104. /* Functions and variables exported from sparc64-netbsd-tdep.c. */
  105. /* Register offsets for NetBSD/sparc64. */
  106. extern const struct sparc_gregmap sparc64nbsd_gregmap;
  107. extern struct trad_frame_saved_reg *
  108. sparc64nbsd_sigcontext_saved_regs (CORE_ADDR sigcontext_addr,
  109. struct frame_info *next_frame);
  110. extern const struct sparc_fpregmap sparc64_bsd_fpregmap;
  111. extern void sparc64_forget_process (pid_t pid);
  112. #endif /* sparc64-tdep.h */