Gregs.c revision fd40db490a2aecd38c8c1f9644a7573d7c2edb2c
1fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm/* libunwind - a platform-independent unwind library
2fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm   Copyright (C) 2003 Hewlett-Packard Co
3fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm	Contributed by ...
4fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
5fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmThis file is part of libunwind.
6fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
7fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmPermission is hereby granted, free of charge, to any person obtaining
8fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidma copy of this software and associated documentation files (the
9fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm"Software"), to deal in the Software without restriction, including
10fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmwithout limitation the rights to use, copy, modify, merge, publish,
11fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmdistribute, sublicense, and/or sell copies of the Software, and to
12fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmpermit persons to whom the Software is furnished to do so, subject to
13fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmthe following conditions:
14fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
15fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmThe above copyright notice and this permission notice shall be
16fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmincluded in all copies or substantial portions of the Software.
17fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
18fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
25fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
26fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm#include "unwind_i.h"
27fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
28fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmHIDDEN int
29fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidmhppa_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp,
30fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm		int write)
31fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm{
32fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm  struct hppa_loc loc = HPPA_LOC (0, 0);
33fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
34fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm  switch (reg)
35fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    {
36fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    case UNW_HPPA_IP:
37fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      if (write)
38fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm	c->ip = *valp;		/* also update the IP cache */
39fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      loc = c->ip_loc;
40fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      break;
41fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
42fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    case UNW_HPPA_SP:
43fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      if (write)
44fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm	return -UNW_EREADONLYREG;
45fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      *valp = c->sp;
46fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      return 0;
47fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
48fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    default:
49fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm      return -UNW_EBADREG;
50fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    }
51fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm
52fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm  if (write)
53fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    return hppa_put (c, loc, *valp);
54fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm  else
55fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm    return hppa_get (c, loc, valp);
56fd40db490a2aecd38c8c1f9644a7573d7c2edb2chomeip.net!davidm}
57