3d747882c760d93a2e7107a432cfe7430610d1d6
1 /* Functions specific to running gdb native on IA-64 running AIX.
2 Copyright 2000, 2001 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
25 #include <sys/procfs.h>
32 #include <sys/types.h>
37 supply_gregset (prgregset_t
*gregsetp
)
41 for (regi
= IA64_GR0_REGNUM
; regi
<= IA64_GR31_REGNUM
; regi
++)
43 supply_register (regi
,
44 (char *) &(gregsetp
->__gpr
[regi
- IA64_GR0_REGNUM
]));
47 for (regi
= IA64_BR0_REGNUM
; regi
<= IA64_BR7_REGNUM
; regi
++)
49 supply_register (regi
,
50 (char *) &(gregsetp
->__br
[regi
- IA64_BR0_REGNUM
]));
53 supply_register (IA64_PSR_REGNUM
, (char *) &(gregsetp
->__psr
));
54 supply_register (IA64_IP_REGNUM
, (char *) &(gregsetp
->__ip
));
55 supply_register (IA64_CFM_REGNUM
, (char *) &(gregsetp
->__ifs
));
56 supply_register (IA64_RSC_REGNUM
, (char *) &(gregsetp
->__rsc
));
57 supply_register (IA64_BSP_REGNUM
, (char *) &(gregsetp
->__bsp
));
58 supply_register (IA64_BSPSTORE_REGNUM
, (char *) &(gregsetp
->__bspstore
));
59 supply_register (IA64_RNAT_REGNUM
, (char *) &(gregsetp
->__rnat
));
60 supply_register (IA64_PFS_REGNUM
, (char *) &(gregsetp
->__pfs
));
61 supply_register (IA64_UNAT_REGNUM
, (char *) &(gregsetp
->__unat
));
62 supply_register (IA64_PR_REGNUM
, (char *) &(gregsetp
->__preds
));
63 supply_register (IA64_CCV_REGNUM
, (char *) &(gregsetp
->__ccv
));
64 supply_register (IA64_LC_REGNUM
, (char *) &(gregsetp
->__lc
));
65 supply_register (IA64_EC_REGNUM
, (char *) &(gregsetp
->__ec
));
67 supply_register (IA64_FPSR_REGNUM
, (char *) &(gregsetp
->__fpsr
));
69 /* These (for the most part) are pseudo registers and are obtained
70 by other means. Those that aren't are already handled by the
72 for (regi
= IA64_GR32_REGNUM
; regi
<= IA64_GR127_REGNUM
; regi
++)
73 register_valid
[regi
] = 1;
74 for (regi
= IA64_PR0_REGNUM
; regi
<= IA64_PR63_REGNUM
; regi
++)
75 register_valid
[regi
] = 1;
76 for (regi
= IA64_VFP_REGNUM
; regi
<= NUM_REGS
; regi
++)
77 register_valid
[regi
] = 1;
81 fill_gregset (prgregset_t
*gregsetp
, int regno
)
85 #define COPY_REG(_fld_,_regi_) \
86 if ((regno == -1) || regno == _regi_) \
87 memcpy (&(gregsetp->_fld_), ®isters[REGISTER_BYTE (_regi_)], \
88 REGISTER_RAW_SIZE (_regi_))
90 for (regi
= IA64_GR0_REGNUM
; regi
<= IA64_GR31_REGNUM
; regi
++)
92 COPY_REG (__gpr
[regi
- IA64_GR0_REGNUM
], regi
);
95 for (regi
= IA64_BR0_REGNUM
; regi
<= IA64_BR7_REGNUM
; regi
++)
97 COPY_REG (__br
[regi
- IA64_BR0_REGNUM
], regi
);
99 COPY_REG (__psr
, IA64_PSR_REGNUM
);
100 COPY_REG (__ip
, IA64_IP_REGNUM
);
101 COPY_REG (__ifs
, IA64_CFM_REGNUM
);
102 COPY_REG (__rsc
, IA64_RSC_REGNUM
);
103 COPY_REG (__bsp
, IA64_BSP_REGNUM
);
105 /* Bad things happen if we don't update both bsp and bspstore at the
107 if (regno
== IA64_BSP_REGNUM
|| regno
== -1)
109 memcpy (&(gregsetp
->__bspstore
),
110 ®isters
[REGISTER_BYTE (IA64_BSP_REGNUM
)],
111 REGISTER_RAW_SIZE (IA64_BSP_REGNUM
));
112 memcpy (®isters
[REGISTER_BYTE (IA64_BSPSTORE_REGNUM
)],
113 ®isters
[REGISTER_BYTE (IA64_BSP_REGNUM
)],
114 REGISTER_RAW_SIZE (IA64_BSP_REGNUM
));
118 /* We never actually write to bspstore, or we'd have to do the same thing
120 COPY_REG (__bspstore
, IA64_BSPSTORE_REGNUM
);
122 COPY_REG (__rnat
, IA64_RNAT_REGNUM
);
123 COPY_REG (__pfs
, IA64_PFS_REGNUM
);
124 COPY_REG (__unat
, IA64_UNAT_REGNUM
);
125 COPY_REG (__preds
, IA64_PR_REGNUM
);
126 COPY_REG (__ccv
, IA64_CCV_REGNUM
);
127 COPY_REG (__lc
, IA64_LC_REGNUM
);
128 COPY_REG (__ec
, IA64_EC_REGNUM
);
130 COPY_REG (__fpsr
, IA64_FPSR_REGNUM
);
135 supply_fpregset (prfpregset_t
*fpregsetp
)
139 for (regi
= IA64_FR0_REGNUM
; regi
<= IA64_FR127_REGNUM
; regi
++)
140 supply_register (regi
,
141 (char *) &(fpregsetp
->__fpr
[regi
- IA64_FR0_REGNUM
]));
145 fill_fpregset (prfpregset_t
*fpregsetp
, int regno
)
151 for (regi
= IA64_FR0_REGNUM
; regi
<= IA64_FR127_REGNUM
; regi
++)
153 if ((regno
== -1) || (regno
== regi
))
155 from
= (char *) ®isters
[REGISTER_BYTE (regi
)];
156 to
= (char *) &(fpregsetp
->__fpr
[regi
- IA64_FR0_REGNUM
]);
157 memcpy (to
, from
, REGISTER_RAW_SIZE (regi
));
This page took 0.032885 seconds and 3 git commands to generate.