GDB (xrefs)
/tmp/gdb-8.1/gdb/hppa-tdep.c
Go to the documentation of this file.
1 /* Target-dependent code for the HP PA-RISC architecture.
2 
3  Copyright (C) 1986-2018 Free Software Foundation, Inc.
4 
5  Contributed by the Center for Software Science at the
6  University of Utah (pa-gdb-bugs@cs.utah.edu).
7 
8  This file is part of GDB.
9 
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 3 of the License, or
13  (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 
23 #include "defs.h"
24 #include "bfd.h"
25 #include "inferior.h"
26 #include "regcache.h"
27 #include "completer.h"
28 #include "osabi.h"
29 #include "arch-utils.h"
30 /* For argument passing to the inferior. */
31 #include "symtab.h"
32 #include "dis-asm.h"
33 #include "trad-frame.h"
34 #include "frame-unwind.h"
35 #include "frame-base.h"
36 
37 #include "gdbcore.h"
38 #include "gdbcmd.h"
39 #include "gdbtypes.h"
40 #include "objfiles.h"
41 #include "hppa-tdep.h"
42 #include <algorithm>
43 
44 static int hppa_debug = 0;
45 
46 /* Some local constants. */
47 static const int hppa32_num_regs = 128;
48 static const int hppa64_num_regs = 96;
49 
50 /* We use the objfile->obj_private pointer for two things:
51  * 1. An unwind table;
52  *
53  * 2. A pointer to any associated shared library object.
54  *
55  * #defines are used to help refer to these objects.
56  */
57 
58 /* Info about the unwind table associated with an object file.
59  * This is hung off of the "objfile->obj_private" pointer, and
60  * is allocated in the objfile's psymbol obstack. This allows
61  * us to have unique unwind info for each executable and shared
62  * library that we are debugging.
63  */
65  {
66  struct unwind_table_entry *table; /* Pointer to unwind info */
67  struct unwind_table_entry *cache; /* Pointer to last entry we found */
68  int last; /* Index of last entry */
69  };
70 
72  {
73  struct hppa_unwind_info *unwind_info; /* a pointer */
74  struct so_list *so_info; /* a pointer */
76 
79  };
80 
81 /* hppa-specific object data -- unwind and solib info.
82  TODO/maybe: think about splitting this into two parts; the unwind data is
83  common to all hppa targets, but is only used in this file; we can register
84  that separately and make this static. The solib data is probably hpux-
85  specific, so we can create a separate extern objfile_data that is registered
86  by hppa-hpux-tdep.c and shared with pa64solib.c and somsolib.c. */
87 static const struct objfile_data *hppa_objfile_priv_data = NULL;
88 
89 /* Get at various relevent fields of an instruction word. */
90 #define MASK_5 0x1f
91 #define MASK_11 0x7ff
92 #define MASK_14 0x3fff
93 #define MASK_21 0x1fffff
94 
95 /* Sizes (in bytes) of the native unwind entries. */
96 #define UNWIND_ENTRY_SIZE 16
97 #define STUB_UNWIND_ENTRY_SIZE 8
98 
99 /* Routines to extract various sized constants out of hppa
100  instructions. */
101 
102 /* This assumes that no garbage lies outside of the lower bits of
103  value. */
104 
105 static int
106 hppa_sign_extend (unsigned val, unsigned bits)
107 {
108  return (int) (val >> (bits - 1) ? (-(1 << bits)) | val : val);
109 }
110 
111 /* For many immediate values the sign bit is the low bit! */
112 
113 static int
114 hppa_low_hppa_sign_extend (unsigned val, unsigned bits)
115 {
116  return (int) ((val & 0x1 ? (-(1 << (bits - 1))) : 0) | val >> 1);
117 }
118 
119 /* Extract the bits at positions between FROM and TO, using HP's numbering
120  (MSB = 0). */
121 
122 int
123 hppa_get_field (unsigned word, int from, int to)
124 {
125  return ((word) >> (31 - (to)) & ((1 << ((to) - (from) + 1)) - 1));
126 }
127 
128 /* Extract the immediate field from a ld{bhw}s instruction. */
129 
130 int
131 hppa_extract_5_load (unsigned word)
132 {
133  return hppa_low_hppa_sign_extend (word >> 16 & MASK_5, 5);
134 }
135 
136 /* Extract the immediate field from a break instruction. */
137 
138 unsigned
139 hppa_extract_5r_store (unsigned word)
140 {
141  return (word & MASK_5);
142 }
143 
144 /* Extract the immediate field from a {sr}sm instruction. */
145 
146 unsigned
147 hppa_extract_5R_store (unsigned word)
148 {
149  return (word >> 16 & MASK_5);
150 }
151 
152 /* Extract a 14 bit immediate field. */
153 
154 int
155 hppa_extract_14 (unsigned word)
156 {
157  return hppa_low_hppa_sign_extend (word & MASK_14, 14);
158 }
159 
160 /* Extract a 21 bit constant. */
161 
162 int
163 hppa_extract_21 (unsigned word)
164 {
165  int val;
166 
167  word &= MASK_21;
168  word <<= 11;
169  val = hppa_get_field (word, 20, 20);
170  val <<= 11;
171  val |= hppa_get_field (word, 9, 19);
172  val <<= 2;
173  val |= hppa_get_field (word, 5, 6);
174  val <<= 5;
175  val |= hppa_get_field (word, 0, 4);
176  val <<= 2;
177  val |= hppa_get_field (word, 7, 8);
178  return hppa_sign_extend (val, 21) << 11;
179 }
180 
181 /* extract a 17 bit constant from branch instructions, returning the
182  19 bit signed value. */
183 
184 int
185 hppa_extract_17 (unsigned word)
186 {
187  return hppa_sign_extend (hppa_get_field (word, 19, 28) |
188  hppa_get_field (word, 29, 29) << 10 |
189  hppa_get_field (word, 11, 15) << 11 |
190  (word & 0x1) << 16, 17) << 2;
191 }
192 
193 CORE_ADDR
194 hppa_symbol_address(const char *sym)
195 {
197 
198  minsym = lookup_minimal_symbol (sym, NULL, NULL);
199  if (minsym.minsym)
201  else
202  return (CORE_ADDR)-1;
203 }
204 
205 static struct hppa_objfile_private *
207 {
208  struct hppa_objfile_private *priv;
209 
210  priv = (struct hppa_objfile_private *)
211  obstack_alloc (&objfile->objfile_obstack,
212  sizeof (struct hppa_objfile_private));
213  set_objfile_data (objfile, hppa_objfile_priv_data, priv);
214  memset (priv, 0, sizeof (*priv));
215 
216  return priv;
217 }
218 
219 
220 /* Compare the start address for two unwind entries returning 1 if
221  the first address is larger than the second, -1 if the second is
222  larger than the first, and zero if they are equal. */
223 
224 static int
225 compare_unwind_entries (const void *arg1, const void *arg2)
226 {
227  const struct unwind_table_entry *a = (const struct unwind_table_entry *) arg1;
228  const struct unwind_table_entry *b = (const struct unwind_table_entry *) arg2;
229 
230  if (a->region_start > b->region_start)
231  return 1;
232  else if (a->region_start < b->region_start)
233  return -1;
234  else
235  return 0;
236 }
237 
238 static void
239 record_text_segment_lowaddr (bfd *abfd, asection *section, void *data)
240 {
241  if ((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
242  == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
243  {
244  bfd_vma value = section->vma - section->filepos;
245  CORE_ADDR *low_text_segment_address = (CORE_ADDR *)data;
246 
247  if (value < *low_text_segment_address)
248  *low_text_segment_address = value;
249  }
250 }
251 
252 static void
254  asection *section, unsigned int entries,
255  size_t size, CORE_ADDR text_offset)
256 {
257  /* We will read the unwind entries into temporary memory, then
258  fill in the actual unwind table. */
259 
260  if (size > 0)
261  {
263  unsigned long tmp;
264  unsigned i;
265  char *buf = (char *) alloca (size);
266  CORE_ADDR low_text_segment_address;
267 
268  /* For ELF targets, then unwinds are supposed to
269  be segment relative offsets instead of absolute addresses.
270 
271  Note that when loading a shared library (text_offset != 0) the
272  unwinds are already relative to the text_offset that will be
273  passed in. */
274  if (gdbarch_tdep (gdbarch)->is_elf && text_offset == 0)
275  {
276  low_text_segment_address = -1;
277 
278  bfd_map_over_sections (objfile->obfd,
280  &low_text_segment_address);
281 
282  text_offset = low_text_segment_address;
283  }
284  else if (gdbarch_tdep (gdbarch)->solib_get_text_base)
285  {
286  text_offset = gdbarch_tdep (gdbarch)->solib_get_text_base (objfile);
287  }
288 
289  bfd_get_section_contents (objfile->obfd, section, buf, 0, size);
290 
291  /* Now internalize the information being careful to handle host/target
292  endian issues. */
293  for (i = 0; i < entries; i++)
294  {
295  table[i].region_start = bfd_get_32 (objfile->obfd,
296  (bfd_byte *) buf);
297  table[i].region_start += text_offset;
298  buf += 4;
299  table[i].region_end = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
300  table[i].region_end += text_offset;
301  buf += 4;
302  tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
303  buf += 4;
304  table[i].Cannot_unwind = (tmp >> 31) & 0x1;
305  table[i].Millicode = (tmp >> 30) & 0x1;
306  table[i].Millicode_save_sr0 = (tmp >> 29) & 0x1;
307  table[i].Region_description = (tmp >> 27) & 0x3;
308  table[i].reserved = (tmp >> 26) & 0x1;
309  table[i].Entry_SR = (tmp >> 25) & 0x1;
310  table[i].Entry_FR = (tmp >> 21) & 0xf;
311  table[i].Entry_GR = (tmp >> 16) & 0x1f;
312  table[i].Args_stored = (tmp >> 15) & 0x1;
313  table[i].Variable_Frame = (tmp >> 14) & 0x1;
314  table[i].Separate_Package_Body = (tmp >> 13) & 0x1;
315  table[i].Frame_Extension_Millicode = (tmp >> 12) & 0x1;
316  table[i].Stack_Overflow_Check = (tmp >> 11) & 0x1;
317  table[i].Two_Instruction_SP_Increment = (tmp >> 10) & 0x1;
318  table[i].sr4export = (tmp >> 9) & 0x1;
319  table[i].cxx_info = (tmp >> 8) & 0x1;
320  table[i].cxx_try_catch = (tmp >> 7) & 0x1;
321  table[i].sched_entry_seq = (tmp >> 6) & 0x1;
322  table[i].reserved1 = (tmp >> 5) & 0x1;
323  table[i].Save_SP = (tmp >> 4) & 0x1;
324  table[i].Save_RP = (tmp >> 3) & 0x1;
325  table[i].Save_MRP_in_frame = (tmp >> 2) & 0x1;
326  table[i].save_r19 = (tmp >> 1) & 0x1;
327  table[i].Cleanup_defined = tmp & 0x1;
328  tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
329  buf += 4;
330  table[i].MPE_XL_interrupt_marker = (tmp >> 31) & 0x1;
331  table[i].HP_UX_interrupt_marker = (tmp >> 30) & 0x1;
332  table[i].Large_frame = (tmp >> 29) & 0x1;
333  table[i].alloca_frame = (tmp >> 28) & 0x1;
334  table[i].reserved2 = (tmp >> 27) & 0x1;
335  table[i].Total_frame_size = tmp & 0x7ffffff;
336 
337  /* Stub unwinds are handled elsewhere. */
338  table[i].stub_unwind.stub_type = 0;
339  table[i].stub_unwind.padding = 0;
340  }
341  }
342 }
343 
344 /* Read in the backtrace information stored in the `$UNWIND_START$' section of
345  the object file. This info is used mainly by find_unwind_entry() to find
346  out the stack frame size and frame pointer used by procedures. We put
347  everything on the psymbol obstack in the objfile so that it automatically
348  gets freed when the objfile is destroyed. */
349 
350 static void
352 {
353  asection *unwind_sec, *stub_unwind_sec;
354  size_t unwind_size, stub_unwind_size, total_size;
355  unsigned index, unwind_entries;
356  unsigned stub_entries, total_entries;
357  CORE_ADDR text_offset;
358  struct hppa_unwind_info *ui;
359  struct hppa_objfile_private *obj_private;
360 
362  ui = (struct hppa_unwind_info *) obstack_alloc (&objfile->objfile_obstack,
363  sizeof (struct hppa_unwind_info));
364 
365  ui->table = NULL;
366  ui->cache = NULL;
367  ui->last = -1;
368 
369  /* For reasons unknown the HP PA64 tools generate multiple unwinder
370  sections in a single executable. So we just iterate over every
371  section in the BFD looking for unwinder sections intead of trying
372  to do a lookup with bfd_get_section_by_name.
373 
374  First determine the total size of the unwind tables so that we
375  can allocate memory in a nice big hunk. */
376  total_entries = 0;
377  for (unwind_sec = objfile->obfd->sections;
378  unwind_sec;
379  unwind_sec = unwind_sec->next)
380  {
381  if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
382  || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
383  {
384  unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
385  unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
386 
387  total_entries += unwind_entries;
388  }
389  }
390 
391  /* Now compute the size of the stub unwinds. Note the ELF tools do not
392  use stub unwinds at the current time. */
393  stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
394 
395  if (stub_unwind_sec)
396  {
397  stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
398  stub_entries = stub_unwind_size / STUB_UNWIND_ENTRY_SIZE;
399  }
400  else
401  {
402  stub_unwind_size = 0;
403  stub_entries = 0;
404  }
405 
406  /* Compute total number of unwind entries and their total size. */
407  total_entries += stub_entries;
408  total_size = total_entries * sizeof (struct unwind_table_entry);
409 
410  /* Allocate memory for the unwind table. */
411  ui->table = (struct unwind_table_entry *)
412  obstack_alloc (&objfile->objfile_obstack, total_size);
413  ui->last = total_entries - 1;
414 
415  /* Now read in each unwind section and internalize the standard unwind
416  entries. */
417  index = 0;
418  for (unwind_sec = objfile->obfd->sections;
419  unwind_sec;
420  unwind_sec = unwind_sec->next)
421  {
422  if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
423  || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
424  {
425  unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
426  unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
427 
428  internalize_unwinds (objfile, &ui->table[index], unwind_sec,
429  unwind_entries, unwind_size, text_offset);
430  index += unwind_entries;
431  }
432  }
433 
434  /* Now read in and internalize the stub unwind entries. */
435  if (stub_unwind_size > 0)
436  {
437  unsigned int i;
438  char *buf = (char *) alloca (stub_unwind_size);
439 
440  /* Read in the stub unwind entries. */
441  bfd_get_section_contents (objfile->obfd, stub_unwind_sec, buf,
442  0, stub_unwind_size);
443 
444  /* Now convert them into regular unwind entries. */
445  for (i = 0; i < stub_entries; i++, index++)
446  {
447  /* Clear out the next unwind entry. */
448  memset (&ui->table[index], 0, sizeof (struct unwind_table_entry));
449 
450  /* Convert offset & size into region_start and region_end.
451  Stuff away the stub type into "reserved" fields. */
452  ui->table[index].region_start = bfd_get_32 (objfile->obfd,
453  (bfd_byte *) buf);
454  ui->table[index].region_start += text_offset;
455  buf += 4;
456  ui->table[index].stub_unwind.stub_type = bfd_get_8 (objfile->obfd,
457  (bfd_byte *) buf);
458  buf += 2;
459  ui->table[index].region_end
460  = ui->table[index].region_start + 4 *
461  (bfd_get_16 (objfile->obfd, (bfd_byte *) buf) - 1);
462  buf += 2;
463  }
464 
465  }
466 
467  /* Unwind table needs to be kept sorted. */
468  qsort (ui->table, total_entries, sizeof (struct unwind_table_entry),
470 
471  /* Keep a pointer to the unwind information. */
472  obj_private = (struct hppa_objfile_private *)
473  objfile_data (objfile, hppa_objfile_priv_data);
474  if (obj_private == NULL)
475  obj_private = hppa_init_objfile_priv_data (objfile);
476 
477  obj_private->unwind_info = ui;
478 }
479 
480 /* Lookup the unwind (stack backtrace) info for the given PC. We search all
481  of the objfiles seeking the unwind table entry for this PC. Each objfile
482  contains a sorted list of struct unwind_table_entry. Since we do a binary
483  search of the unwind tables, we depend upon them to be sorted. */
484 
485 struct unwind_table_entry *
487 {
488  int first, middle, last;
489  struct objfile *objfile;
490  struct hppa_objfile_private *priv;
491 
492  if (hppa_debug)
493  fprintf_unfiltered (gdb_stdlog, "{ find_unwind_entry %s -> ",
494  hex_string (pc));
495 
496  /* A function at address 0? Not in HP-UX! */
497  if (pc == (CORE_ADDR) 0)
498  {
499  if (hppa_debug)
500  fprintf_unfiltered (gdb_stdlog, "NULL }\n");
501  return NULL;
502  }
503 
505  {
506  struct hppa_unwind_info *ui;
507  ui = NULL;
508  priv = ((struct hppa_objfile_private *)
509  objfile_data (objfile, hppa_objfile_priv_data));
510  if (priv)
511  ui = ((struct hppa_objfile_private *) priv)->unwind_info;
512 
513  if (!ui)
514  {
516  priv = ((struct hppa_objfile_private *)
517  objfile_data (objfile, hppa_objfile_priv_data));
518  if (priv == NULL)
519  error (_("Internal error reading unwind information."));
520  ui = ((struct hppa_objfile_private *) priv)->unwind_info;
521  }
522 
523  /* First, check the cache. */
524 
525  if (ui->cache
526  && pc >= ui->cache->region_start
527  && pc <= ui->cache->region_end)
528  {
529  if (hppa_debug)
530  fprintf_unfiltered (gdb_stdlog, "%s (cached) }\n",
531  hex_string ((uintptr_t) ui->cache));
532  return ui->cache;
533  }
534 
535  /* Not in the cache, do a binary search. */
536 
537  first = 0;
538  last = ui->last;
539 
540  while (first <= last)
541  {
542  middle = (first + last) / 2;
543  if (pc >= ui->table[middle].region_start
544  && pc <= ui->table[middle].region_end)
545  {
546  ui->cache = &ui->table[middle];
547  if (hppa_debug)
548  fprintf_unfiltered (gdb_stdlog, "%s }\n",
549  hex_string ((uintptr_t) ui->cache));
550  return &ui->table[middle];
551  }
552 
553  if (pc < ui->table[middle].region_start)
554  last = middle - 1;
555  else
556  first = middle + 1;
557  }
558  } /* ALL_OBJFILES() */
559 
560  if (hppa_debug)
561  fprintf_unfiltered (gdb_stdlog, "NULL (not found) }\n");
562 
563  return NULL;
564 }
565 
566 /* Implement the stack_frame_destroyed_p gdbarch method.
567 
568  The epilogue is defined here as the area either on the `bv' instruction
569  itself or an instruction which destroys the function's stack frame.
570 
571  We do not assume that the epilogue is at the end of a function as we can
572  also have return sequences in the middle of a function. */
573 
574 static int
576 {
577  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
578  unsigned long status;
579  unsigned int inst;
580  gdb_byte buf[4];
581 
582  status = target_read_memory (pc, buf, 4);
583  if (status != 0)
584  return 0;
585 
586  inst = extract_unsigned_integer (buf, 4, byte_order);
587 
588  /* The most common way to perform a stack adjustment ldo X(sp),sp
589  We are destroying a stack frame if the offset is negative. */
590  if ((inst & 0xffffc000) == 0x37de0000
591  && hppa_extract_14 (inst) < 0)
592  return 1;
593 
594  /* ldw,mb D(sp),X or ldd,mb D(sp),X */
595  if (((inst & 0x0fc010e0) == 0x0fc010e0
596  || (inst & 0x0fc010e0) == 0x0fc010e0)
597  && hppa_extract_14 (inst) < 0)
598  return 1;
599 
600  /* bv %r0(%rp) or bv,n %r0(%rp) */
601  if (inst == 0xe840c000 || inst == 0xe840c002)
602  return 1;
603 
604  return 0;
605 }
606 
607 constexpr gdb_byte hppa_break_insn[] = {0x00, 0x01, 0x00, 0x04};
608 
609 typedef BP_MANIPULATION (hppa_break_insn) hppa_breakpoint;
610 
611 /* Return the name of a register. */
612 
613 static const char *
614 hppa32_register_name (struct gdbarch *gdbarch, int i)
615 {
616  static const char *names[] = {
617  "flags", "r1", "rp", "r3",
618  "r4", "r5", "r6", "r7",
619  "r8", "r9", "r10", "r11",
620  "r12", "r13", "r14", "r15",
621  "r16", "r17", "r18", "r19",
622  "r20", "r21", "r22", "r23",
623  "r24", "r25", "r26", "dp",
624  "ret0", "ret1", "sp", "r31",
625  "sar", "pcoqh", "pcsqh", "pcoqt",
626  "pcsqt", "eiem", "iir", "isr",
627  "ior", "ipsw", "goto", "sr4",
628  "sr0", "sr1", "sr2", "sr3",
629  "sr5", "sr6", "sr7", "cr0",
630  "cr8", "cr9", "ccr", "cr12",
631  "cr13", "cr24", "cr25", "cr26",
632  "mpsfu_high","mpsfu_low","mpsfu_ovflo","pad",
633  "fpsr", "fpe1", "fpe2", "fpe3",
634  "fpe4", "fpe5", "fpe6", "fpe7",
635  "fr4", "fr4R", "fr5", "fr5R",
636  "fr6", "fr6R", "fr7", "fr7R",
637  "fr8", "fr8R", "fr9", "fr9R",
638  "fr10", "fr10R", "fr11", "fr11R",
639  "fr12", "fr12R", "fr13", "fr13R",
640  "fr14", "fr14R", "fr15", "fr15R",
641  "fr16", "fr16R", "fr17", "fr17R",
642  "fr18", "fr18R", "fr19", "fr19R",
643  "fr20", "fr20R", "fr21", "fr21R",
644  "fr22", "fr22R", "fr23", "fr23R",
645  "fr24", "fr24R", "fr25", "fr25R",
646  "fr26", "fr26R", "fr27", "fr27R",
647  "fr28", "fr28R", "fr29", "fr29R",
648  "fr30", "fr30R", "fr31", "fr31R"
649  };
650  if (i < 0 || i >= (sizeof (names) / sizeof (*names)))
651  return NULL;
652  else
653  return names[i];
654 }
655 
656 static const char *
658 {
659  static const char *names[] = {
660  "flags", "r1", "rp", "r3",
661  "r4", "r5", "r6", "r7",
662  "r8", "r9", "r10", "r11",
663  "r12", "r13", "r14", "r15",
664  "r16", "r17", "r18", "r19",
665  "r20", "r21", "r22", "r23",
666  "r24", "r25", "r26", "dp",
667  "ret0", "ret1", "sp", "r31",
668  "sar", "pcoqh", "pcsqh", "pcoqt",
669  "pcsqt", "eiem", "iir", "isr",
670  "ior", "ipsw", "goto", "sr4",
671  "sr0", "sr1", "sr2", "sr3",
672  "sr5", "sr6", "sr7", "cr0",
673  "cr8", "cr9", "ccr", "cr12",
674  "cr13", "cr24", "cr25", "cr26",
675  "mpsfu_high","mpsfu_low","mpsfu_ovflo","pad",
676  "fpsr", "fpe1", "fpe2", "fpe3",
677  "fr4", "fr5", "fr6", "fr7",
678  "fr8", "fr9", "fr10", "fr11",
679  "fr12", "fr13", "fr14", "fr15",
680  "fr16", "fr17", "fr18", "fr19",
681  "fr20", "fr21", "fr22", "fr23",
682  "fr24", "fr25", "fr26", "fr27",
683  "fr28", "fr29", "fr30", "fr31"
684  };
685  if (i < 0 || i >= (sizeof (names) / sizeof (*names)))
686  return NULL;
687  else
688  return names[i];
689 }
690 
691 /* Map dwarf DBX register numbers to GDB register numbers. */
692 static int
694 {
695  /* The general registers and the sar are the same in both sets. */
696  if (reg >= 0 && reg <= 32)
697  return reg;
698 
699  /* fr4-fr31 are mapped from 72 in steps of 2. */
700  if (reg >= 72 && reg < 72 + 28 * 2 && !(reg & 1))
701  return HPPA64_FP4_REGNUM + (reg - 72) / 2;
702 
703  return -1;
704 }
705 
706 /* This function pushes a stack frame with arguments as part of the
707  inferior function calling mechanism.
708 
709  This is the version of the function for the 32-bit PA machines, in
710  which later arguments appear at lower addresses. (The stack always
711  grows towards higher addresses.)
712 
713  We simply allocate the appropriate amount of stack space and put
714  arguments into their proper slots. */
715 
716 static CORE_ADDR
717 hppa32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
718  struct regcache *regcache, CORE_ADDR bp_addr,
719  int nargs, struct value **args, CORE_ADDR sp,
720  int struct_return, CORE_ADDR struct_addr)
721 {
722  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
723 
724  /* Stack base address at which any pass-by-reference parameters are
725  stored. */
726  CORE_ADDR struct_end = 0;
727  /* Stack base address at which the first parameter is stored. */
728  CORE_ADDR param_end = 0;
729 
730  /* Two passes. First pass computes the location of everything,
731  second pass writes the bytes out. */
732  int write_pass;
733 
734  /* Global pointer (r19) of the function we are trying to call. */
735  CORE_ADDR gp;
736 
737  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
738 
739  for (write_pass = 0; write_pass < 2; write_pass++)
740  {
741  CORE_ADDR struct_ptr = 0;
742  /* The first parameter goes into sp-36, each stack slot is 4-bytes.
743  struct_ptr is adjusted for each argument below, so the first
744  argument will end up at sp-36. */
745  CORE_ADDR param_ptr = 32;
746  int i;
747  int small_struct = 0;
748 
749  for (i = 0; i < nargs; i++)
750  {
751  struct value *arg = args[i];
752  struct type *type = check_typedef (value_type (arg));
753  /* The corresponding parameter that is pushed onto the
754  stack, and [possibly] passed in a register. */
755  gdb_byte param_val[8];
756  int param_len;
757  memset (param_val, 0, sizeof param_val);
758  if (TYPE_LENGTH (type) > 8)
759  {
760  /* Large parameter, pass by reference. Store the value
761  in "struct" area and then pass its address. */
762  param_len = 4;
763  struct_ptr += align_up (TYPE_LENGTH (type), 8);
764  if (write_pass)
765  write_memory (struct_end - struct_ptr, value_contents (arg),
766  TYPE_LENGTH (type));
767  store_unsigned_integer (param_val, 4, byte_order,
768  struct_end - struct_ptr);
769  }
770  else if (TYPE_CODE (type) == TYPE_CODE_INT
771  || TYPE_CODE (type) == TYPE_CODE_ENUM)
772  {
773  /* Integer value store, right aligned. "unpack_long"
774  takes care of any sign-extension problems. */
775  param_len = align_up (TYPE_LENGTH (type), 4);
776  store_unsigned_integer (param_val, param_len, byte_order,
777  unpack_long (type,
778  value_contents (arg)));
779  }
780  else if (TYPE_CODE (type) == TYPE_CODE_FLT)
781  {
782  /* Floating point value store, right aligned. */
783  param_len = align_up (TYPE_LENGTH (type), 4);
784  memcpy (param_val, value_contents (arg), param_len);
785  }
786  else
787  {
788  param_len = align_up (TYPE_LENGTH (type), 4);
789 
790  /* Small struct value are stored right-aligned. */
791  memcpy (param_val + param_len - TYPE_LENGTH (type),
792  value_contents (arg), TYPE_LENGTH (type));
793 
794  /* Structures of size 5, 6 and 7 bytes are special in that
795  the higher-ordered word is stored in the lower-ordered
796  argument, and even though it is a 8-byte quantity the
797  registers need not be 8-byte aligned. */
798  if (param_len > 4 && param_len < 8)
799  small_struct = 1;
800  }
801 
802  param_ptr += param_len;
803  if (param_len == 8 && !small_struct)
804  param_ptr = align_up (param_ptr, 8);
805 
806  /* First 4 non-FP arguments are passed in gr26-gr23.
807  First 4 32-bit FP arguments are passed in fr4L-fr7L.
808  First 2 64-bit FP arguments are passed in fr5 and fr7.
809 
810  The rest go on the stack, starting at sp-36, towards lower
811  addresses. 8-byte arguments must be aligned to a 8-byte
812  stack boundary. */
813  if (write_pass)
814  {
815  write_memory (param_end - param_ptr, param_val, param_len);
816 
817  /* There are some cases when we don't know the type
818  expected by the callee (e.g. for variadic functions), so
819  pass the parameters in both general and fp regs. */
820  if (param_ptr <= 48)
821  {
822  int grreg = 26 - (param_ptr - 36) / 4;
823  int fpLreg = 72 + (param_ptr - 36) / 4 * 2;
824  int fpreg = 74 + (param_ptr - 32) / 8 * 4;
825 
826  regcache_cooked_write (regcache, grreg, param_val);
827  regcache_cooked_write (regcache, fpLreg, param_val);
828 
829  if (param_len > 4)
830  {
831  regcache_cooked_write (regcache, grreg + 1,
832  param_val + 4);
833 
834  regcache_cooked_write (regcache, fpreg, param_val);
835  regcache_cooked_write (regcache, fpreg + 1,
836  param_val + 4);
837  }
838  }
839  }
840  }
841 
842  /* Update the various stack pointers. */
843  if (!write_pass)
844  {
845  struct_end = sp + align_up (struct_ptr, 64);
846  /* PARAM_PTR already accounts for all the arguments passed
847  by the user. However, the ABI mandates minimum stack
848  space allocations for outgoing arguments. The ABI also
849  mandates minimum stack alignments which we must
850  preserve. */
851  param_end = struct_end + align_up (param_ptr, 64);
852  }
853  }
854 
855  /* If a structure has to be returned, set up register 28 to hold its
856  address. */
857  if (struct_return)
858  regcache_cooked_write_unsigned (regcache, 28, struct_addr);
859 
860  gp = tdep->find_global_pointer (gdbarch, function);
861 
862  if (gp != 0)
864 
865  /* Set the return address. */
868 
869  /* Update the Stack Pointer. */
871 
872  return param_end;
873 }
874 
875 /* The 64-bit PA-RISC calling conventions are documented in "64-Bit
876  Runtime Architecture for PA-RISC 2.0", which is distributed as part
877  as of the HP-UX Software Transition Kit (STK). This implementation
878  is based on version 3.3, dated October 6, 1997. */
879 
880 /* Check whether TYPE is an "Integral or Pointer Scalar Type". */
881 
882 static int
884 {
885  switch (TYPE_CODE (type))
886  {
887  case TYPE_CODE_INT:
888  case TYPE_CODE_BOOL:
889  case TYPE_CODE_CHAR:
890  case TYPE_CODE_ENUM:
891  case TYPE_CODE_RANGE:
892  {
893  int len = TYPE_LENGTH (type);
894  return (len == 1 || len == 2 || len == 4 || len == 8);
895  }
896  case TYPE_CODE_PTR:
897  case TYPE_CODE_REF:
899  return (TYPE_LENGTH (type) == 8);
900  default:
901  break;
902  }
903 
904  return 0;
905 }
906 
907 /* Check whether TYPE is a "Floating Scalar Type". */
908 
909 static int
910 hppa64_floating_p (const struct type *type)
911 {
912  switch (TYPE_CODE (type))
913  {
914  case TYPE_CODE_FLT:
915  {
916  int len = TYPE_LENGTH (type);
917  return (len == 4 || len == 8 || len == 16);
918  }
919  default:
920  break;
921  }
922 
923  return 0;
924 }
925 
926 /* If CODE points to a function entry address, try to look up the corresponding
927  function descriptor and return its address instead. If CODE is not a
928  function entry address, then just return it unchanged. */
929 static CORE_ADDR
931 {
932  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
933  struct obj_section *sec, *opd;
934 
935  sec = find_pc_section (code);
936 
937  if (!sec)
938  return code;
939 
940  /* If CODE is in a data section, assume it's already a fptr. */
941  if (!(sec->the_bfd_section->flags & SEC_CODE))
942  return code;
943 
944  ALL_OBJFILE_OSECTIONS (sec->objfile, opd)
945  {
946  if (strcmp (opd->the_bfd_section->name, ".opd") == 0)
947  break;
948  }
949 
950  if (opd < sec->objfile->sections_end)
951  {
952  CORE_ADDR addr;
953 
954  for (addr = obj_section_addr (opd);
955  addr < obj_section_endaddr (opd);
956  addr += 2 * 8)
957  {
958  ULONGEST opdaddr;
959  gdb_byte tmp[8];
960 
961  if (target_read_memory (addr, tmp, sizeof (tmp)))
962  break;
963  opdaddr = extract_unsigned_integer (tmp, sizeof (tmp), byte_order);
964 
965  if (opdaddr == code)
966  return addr - 16;
967  }
968  }
969 
970  return code;
971 }
972 
973 static CORE_ADDR
974 hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
975  struct regcache *regcache, CORE_ADDR bp_addr,
976  int nargs, struct value **args, CORE_ADDR sp,
977  int struct_return, CORE_ADDR struct_addr)
978 {
979  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
980  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
981  int i, offset = 0;
982  CORE_ADDR gp;
983 
984  /* "The outgoing parameter area [...] must be aligned at a 16-byte
985  boundary." */
986  sp = align_up (sp, 16);
987 
988  for (i = 0; i < nargs; i++)
989  {
990  struct value *arg = args[i];
991  struct type *type = value_type (arg);
992  int len = TYPE_LENGTH (type);
993  const bfd_byte *valbuf;
994  bfd_byte fptrbuf[8];
995  int regnum;
996 
997  /* "Each parameter begins on a 64-bit (8-byte) boundary." */
998  offset = align_up (offset, 8);
999 
1001  {
1002  /* "Integral scalar parameters smaller than 64 bits are
1003  padded on the left (i.e., the value is in the
1004  least-significant bits of the 64-bit storage unit, and
1005  the high-order bits are undefined)." Therefore we can
1006  safely sign-extend them. */
1007  if (len < 8)
1008  {
1009  arg = value_cast (builtin_type (gdbarch)->builtin_int64, arg);
1010  len = 8;
1011  }
1012  }
1013  else if (hppa64_floating_p (type))
1014  {
1015  if (len > 8)
1016  {
1017  /* "Quad-precision (128-bit) floating-point scalar
1018  parameters are aligned on a 16-byte boundary." */
1019  offset = align_up (offset, 16);
1020 
1021  /* "Double-extended- and quad-precision floating-point
1022  parameters within the first 64 bytes of the parameter
1023  list are always passed in general registers." */
1024  }
1025  else
1026  {
1027  if (len == 4)
1028  {
1029  /* "Single-precision (32-bit) floating-point scalar
1030  parameters are padded on the left with 32 bits of
1031  garbage (i.e., the floating-point value is in the
1032  least-significant 32 bits of a 64-bit storage
1033  unit)." */
1034  offset += 4;
1035  }
1036 
1037  /* "Single- and double-precision floating-point
1038  parameters in this area are passed according to the
1039  available formal parameter information in a function
1040  prototype. [...] If no prototype is in scope,
1041  floating-point parameters must be passed both in the
1042  corresponding general registers and in the
1043  corresponding floating-point registers." */
1045 
1046  if (regnum < HPPA64_FP4_REGNUM + 8)
1047  {
1048  /* "Single-precision floating-point parameters, when
1049  passed in floating-point registers, are passed in
1050  the right halves of the floating point registers;
1051  the left halves are unused." */
1053  len, value_contents (arg));
1054  }
1055  }
1056  }
1057  else
1058  {
1059  if (len > 8)
1060  {
1061  /* "Aggregates larger than 8 bytes are aligned on a
1062  16-byte boundary, possibly leaving an unused argument
1063  slot, which is filled with garbage. If necessary,
1064  they are padded on the right (with garbage), to a
1065  multiple of 8 bytes." */
1066  offset = align_up (offset, 16);
1067  }
1068  }
1069 
1070  /* If we are passing a function pointer, make sure we pass a function
1071  descriptor instead of the function entry address. */
1072  if (TYPE_CODE (type) == TYPE_CODE_PTR
1074  {
1075  ULONGEST codeptr, fptr;
1076 
1077  codeptr = unpack_long (type, value_contents (arg));
1078  fptr = hppa64_convert_code_addr_to_fptr (gdbarch, codeptr);
1079  store_unsigned_integer (fptrbuf, TYPE_LENGTH (type), byte_order,
1080  fptr);
1081  valbuf = fptrbuf;
1082  }
1083  else
1084  {
1085  valbuf = value_contents (arg);
1086  }
1087 
1088  /* Always store the argument in memory. */
1089  write_memory (sp + offset, valbuf, len);
1090 
1091  regnum = HPPA_ARG0_REGNUM - offset / 8;
1092  while (regnum > HPPA_ARG0_REGNUM - 8 && len > 0)
1093  {
1095  offset % 8, std::min (len, 8), valbuf);
1096  offset += std::min (len, 8);
1097  valbuf += std::min (len, 8);
1098  len -= std::min (len, 8);
1099  regnum--;
1100  }
1101 
1102  offset += len;
1103  }
1104 
1105  /* Set up GR29 (%ret1) to hold the argument pointer (ap). */
1107 
1108  /* Allocate the outgoing parameter area. Make sure the outgoing
1109  parameter area is multiple of 16 bytes in length. */
1110  sp += std::max (align_up (offset, 16), (ULONGEST) 64);
1111 
1112  /* Allocate 32-bytes of scratch space. The documentation doesn't
1113  mention this, but it seems to be needed. */
1114  sp += 32;
1115 
1116  /* Allocate the frame marker area. */
1117  sp += 16;
1118 
1119  /* If a structure has to be returned, set up GR 28 (%ret0) to hold
1120  its address. */
1121  if (struct_return)
1123 
1124  /* Set up GR27 (%dp) to hold the global pointer (gp). */
1125  gp = tdep->find_global_pointer (gdbarch, function);
1126  if (gp != 0)
1128 
1129  /* Set up GR2 (%rp) to hold the return pointer (rp). */
1132 
1133  /* Set up GR30 to hold the stack pointer (sp). */
1135 
1136  return sp;
1137 }
1138 
1139 
1140 /* Handle 32/64-bit struct return conventions. */
1141 
1142 static enum return_value_convention
1143 hppa32_return_value (struct gdbarch *gdbarch, struct value *function,
1144  struct type *type, struct regcache *regcache,
1145  gdb_byte *readbuf, const gdb_byte *writebuf)
1146 {
1147  if (TYPE_LENGTH (type) <= 2 * 4)
1148  {
1149  /* The value always lives in the right hand end of the register
1150  (or register pair)? */
1151  int b;
1152  int reg = TYPE_CODE (type) == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28;
1153  int part = TYPE_LENGTH (type) % 4;
1154  /* The left hand register contains only part of the value,
1155  transfer that first so that the rest can be xfered as entire
1156  4-byte registers. */
1157  if (part > 0)
1158  {
1159  if (readbuf != NULL)
1161  part, readbuf);
1162  if (writebuf != NULL)
1164  part, writebuf);
1165  reg++;
1166  }
1167  /* Now transfer the remaining register values. */
1168  for (b = part; b < TYPE_LENGTH (type); b += 4)
1169  {
1170  if (readbuf != NULL)
1171  regcache_cooked_read (regcache, reg, readbuf + b);
1172  if (writebuf != NULL)
1173  regcache_cooked_write (regcache, reg, writebuf + b);
1174  reg++;
1175  }
1177  }
1178  else
1180 }
1181 
1182 static enum return_value_convention
1183 hppa64_return_value (struct gdbarch *gdbarch, struct value *function,
1184  struct type *type, struct regcache *regcache,
1185  gdb_byte *readbuf, const gdb_byte *writebuf)
1186 {
1187  int len = TYPE_LENGTH (type);
1188  int regnum, offset;
1189 
1190  if (len > 16)
1191  {
1192  /* All return values larget than 128 bits must be aggregate
1193  return values. */
1196 
1197  /* "Aggregate return values larger than 128 bits are returned in
1198  a buffer allocated by the caller. The address of the buffer
1199  must be passed in GR 28." */
1201  }
1202 
1204  {
1205  /* "Integral return values are returned in GR 28. Values
1206  smaller than 64 bits are padded on the left (with garbage)." */
1208  offset = 8 - len;
1209  }
1210  else if (hppa64_floating_p (type))
1211  {
1212  if (len > 8)
1213  {
1214  /* "Double-extended- and quad-precision floating-point
1215  values are returned in GRs 28 and 29. The sign,
1216  exponent, and most-significant bits of the mantissa are
1217  returned in GR 28; the least-significant bits of the
1218  mantissa are passed in GR 29. For double-extended
1219  precision values, GR 29 is padded on the right with 48
1220  bits of garbage." */
1222  offset = 0;
1223  }
1224  else
1225  {
1226  /* "Single-precision and double-precision floating-point
1227  return values are returned in FR 4R (single precision) or
1228  FR 4 (double-precision)." */
1230  offset = 8 - len;
1231  }
1232  }
1233  else
1234  {
1235  /* "Aggregate return values up to 64 bits in size are returned
1236  in GR 28. Aggregates smaller than 64 bits are left aligned
1237  in the register; the pad bits on the right are undefined."
1238 
1239  "Aggregate return values between 65 and 128 bits are returned
1240  in GRs 28 and 29. The first 64 bits are placed in GR 28, and
1241  the remaining bits are placed, left aligned, in GR 29. The
1242  pad bits on the right of GR 29 (if any) are undefined." */
1244  offset = 0;
1245  }
1246 
1247  if (readbuf)
1248  {
1249  while (len > 0)
1250  {
1252  std::min (len, 8), readbuf);
1253  readbuf += std::min (len, 8);
1254  len -= std::min (len, 8);
1255  regnum++;
1256  }
1257  }
1258 
1259  if (writebuf)
1260  {
1261  while (len > 0)
1262  {
1264  std::min (len, 8), writebuf);
1265  writebuf += std::min (len, 8);
1266  len -= std::min (len, 8);
1267  regnum++;
1268  }
1269  }
1270 
1272 }
1273 
1274 
1275 static CORE_ADDR
1277  struct target_ops *targ)
1278 {
1279  if (addr & 2)
1280  {
1281  struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
1282  CORE_ADDR plabel = addr & ~3;
1283  return read_memory_typed_address (plabel, func_ptr_type);
1284  }
1285 
1286  return addr;
1287 }
1288 
1289 static CORE_ADDR
1291 {
1292  /* HP frames are 64-byte (or cache line) aligned (yes that's _byte_
1293  and not _bit_)! */
1294  return align_up (addr, 64);
1295 }
1296 
1297 /* Force all frames to 16-byte alignment. Better safe than sorry. */
1298 
1299 static CORE_ADDR
1301 {
1302  /* Just always 16-byte align. */
1303  return align_up (addr, 16);
1304 }
1305 
1306 CORE_ADDR
1308 {
1309  ULONGEST ipsw;
1310  ULONGEST pc;
1311 
1314 
1315  /* If the current instruction is nullified, then we are effectively
1316  still executing the previous instruction. Pretend we are still
1317  there. This is needed when single stepping; if the nullified
1318  instruction is on a different line, we don't want GDB to think
1319  we've stepped onto that line. */
1320  if (ipsw & 0x00200000)
1321  pc -= 4;
1322 
1323  return pc & ~0x3;
1324 }
1325 
1326 void
1328 {
1331 }
1332 
1333 /* For the given instruction (INST), return any adjustment it makes
1334  to the stack pointer or zero for no adjustment.
1335 
1336  This only handles instructions commonly found in prologues. */
1337 
1338 static int
1339 prologue_inst_adjust_sp (unsigned long inst)
1340 {
1341  /* This must persist across calls. */
1342  static int save_high21;
1343 
1344  /* The most common way to perform a stack adjustment ldo X(sp),sp */
1345  if ((inst & 0xffffc000) == 0x37de0000)
1346  return hppa_extract_14 (inst);
1347 
1348  /* stwm X,D(sp) */
1349  if ((inst & 0xffe00000) == 0x6fc00000)
1350  return hppa_extract_14 (inst);
1351 
1352  /* std,ma X,D(sp) */
1353  if ((inst & 0xffe00008) == 0x73c00008)
1354  return (inst & 0x1 ? -(1 << 13) : 0) | (((inst >> 4) & 0x3ff) << 3);
1355 
1356  /* addil high21,%r30; ldo low11,(%r1),%r30)
1357  save high bits in save_high21 for later use. */
1358  if ((inst & 0xffe00000) == 0x2bc00000)
1359  {
1360  save_high21 = hppa_extract_21 (inst);
1361  return 0;
1362  }
1363 
1364  if ((inst & 0xffff0000) == 0x343e0000)
1365  return save_high21 + hppa_extract_14 (inst);
1366 
1367  /* fstws as used by the HP compilers. */
1368  if ((inst & 0xffffffe0) == 0x2fd01220)
1369  return hppa_extract_5_load (inst);
1370 
1371  /* No adjustment. */
1372  return 0;
1373 }
1374 
1375 /* Return nonzero if INST is a branch of some kind, else return zero. */
1376 
1377 static int
1378 is_branch (unsigned long inst)
1379 {
1380  switch (inst >> 26)
1381  {
1382  case 0x20:
1383  case 0x21:
1384  case 0x22:
1385  case 0x23:
1386  case 0x27:
1387  case 0x28:
1388  case 0x29:
1389  case 0x2a:
1390  case 0x2b:
1391  case 0x2f:
1392  case 0x30:
1393  case 0x31:
1394  case 0x32:
1395  case 0x33:
1396  case 0x38:
1397  case 0x39:
1398  case 0x3a:
1399  case 0x3b:
1400  return 1;
1401 
1402  default:
1403  return 0;
1404  }
1405 }
1406 
1407 /* Return the register number for a GR which is saved by INST or
1408  zero if INST does not save a GR.
1409 
1410  Referenced from:
1411 
1412  parisc 1.1:
1413  https://parisc.wiki.kernel.org/images-parisc/6/68/Pa11_acd.pdf
1414 
1415  parisc 2.0:
1416  https://parisc.wiki.kernel.org/images-parisc/7/73/Parisc2.0.pdf
1417 
1418  According to Table 6-5 of Chapter 6 (Memory Reference Instructions)
1419  on page 106 in parisc 2.0, all instructions for storing values from
1420  the general registers are:
1421 
1422  Store: stb, sth, stw, std (according to Chapter 7, they
1423  are only in both "inst >> 26" and "inst >> 6".
1424  Store Absolute: stwa, stda (according to Chapter 7, they are only
1425  in "inst >> 6".
1426  Store Bytes: stby, stdby (according to Chapter 7, they are
1427  only in "inst >> 6").
1428 
1429  For (inst >> 26), according to Chapter 7:
1430 
1431  The effective memory reference address is formed by the addition
1432  of an immediate displacement to a base value.
1433 
1434  - stb: 0x18, store a byte from a general register.
1435 
1436  - sth: 0x19, store a halfword from a general register.
1437 
1438  - stw: 0x1a, store a word from a general register.
1439 
1440  - stwm: 0x1b, store a word from a general register and perform base
1441  register modification (2.0 will still treate it as stw).
1442 
1443  - std: 0x1c, store a doubleword from a general register (2.0 only).
1444 
1445  - stw: 0x1f, store a word from a general register (2.0 only).
1446 
1447  For (inst >> 6) when ((inst >> 26) == 0x03), according to Chapter 7:
1448 
1449  The effective memory reference address is formed by the addition
1450  of an index value to a base value specified in the instruction.
1451 
1452  - stb: 0x08, store a byte from a general register (1.1 calls stbs).
1453 
1454  - sth: 0x09, store a halfword from a general register (1.1 calls
1455  sths).
1456 
1457  - stw: 0x0a, store a word from a general register (1.1 calls stws).
1458 
1459  - std: 0x0b: store a doubleword from a general register (2.0 only)
1460 
1461  Implement fast byte moves (stores) to unaligned word or doubleword
1462  destination.
1463 
1464  - stby: 0x0c, for unaligned word (1.1 calls stbys).
1465 
1466  - stdby: 0x0d for unaligned doubleword (2.0 only).
1467 
1468  Store a word or doubleword using an absolute memory address formed
1469  using short or long displacement or indexed
1470 
1471  - stwa: 0x0e, store a word from a general register to an absolute
1472  address (1.0 calls stwas).
1473 
1474  - stda: 0x0f, store a doubleword from a general register to an
1475  absolute address (2.0 only). */
1476 
1477 static int
1478 inst_saves_gr (unsigned long inst)
1479 {
1480  switch ((inst >> 26) & 0x0f)
1481  {
1482  case 0x03:
1483  switch ((inst >> 6) & 0x0f)
1484  {
1485  case 0x08:
1486  case 0x09:
1487  case 0x0a:
1488  case 0x0b:
1489  case 0x0c:
1490  case 0x0d:
1491  case 0x0e:
1492  case 0x0f:
1493  return hppa_extract_5R_store (inst);
1494  default:
1495  return 0;
1496  }
1497  case 0x18:
1498  case 0x19:
1499  case 0x1a:
1500  case 0x1b:
1501  case 0x1c:
1502  /* no 0x1d or 0x1e -- according to parisc 2.0 document */
1503  case 0x1f:
1504  return hppa_extract_5R_store (inst);
1505  default:
1506  return 0;
1507  }
1508 }
1509 
1510 /* Return the register number for a FR which is saved by INST or
1511  zero it INST does not save a FR.
1512 
1513  Note we only care about full 64bit register stores (that's the only
1514  kind of stores the prologue will use).
1515 
1516  FIXME: What about argument stores with the HP compiler in ANSI mode? */
1517 
1518 static int
1519 inst_saves_fr (unsigned long inst)
1520 {
1521  /* Is this an FSTD? */
1522  if ((inst & 0xfc00dfc0) == 0x2c001200)
1523  return hppa_extract_5r_store (inst);
1524  if ((inst & 0xfc000002) == 0x70000002)
1525  return hppa_extract_5R_store (inst);
1526  /* Is this an FSTW? */
1527  if ((inst & 0xfc00df80) == 0x24001200)
1528  return hppa_extract_5r_store (inst);
1529  if ((inst & 0xfc000002) == 0x7c000000)
1530  return hppa_extract_5R_store (inst);
1531  return 0;
1532 }
1533 
1534 /* Advance PC across any function entry prologue instructions
1535  to reach some "real" code.
1536 
1537  Use information in the unwind table to determine what exactly should
1538  be in the prologue. */
1539 
1540 
1541 static CORE_ADDR
1543  int stop_before_branch)
1544 {
1545  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1546  gdb_byte buf[4];
1547  CORE_ADDR orig_pc = pc;
1548  unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1549  unsigned long args_stored, status, i, restart_gr, restart_fr;
1550  struct unwind_table_entry *u;
1551  int final_iteration;
1552 
1553  restart_gr = 0;
1554  restart_fr = 0;
1555 
1556 restart:
1557  u = find_unwind_entry (pc);
1558  if (!u)
1559  return pc;
1560 
1561  /* If we are not at the beginning of a function, then return now. */
1562  if ((pc & ~0x3) != u->region_start)
1563  return pc;
1564 
1565  /* This is how much of a frame adjustment we need to account for. */
1566  stack_remaining = u->Total_frame_size << 3;
1567 
1568  /* Magic register saves we want to know about. */
1569  save_rp = u->Save_RP;
1570  save_sp = u->Save_SP;
1571 
1572  /* An indication that args may be stored into the stack. Unfortunately
1573  the HPUX compilers tend to set this in cases where no args were
1574  stored too!. */
1575  args_stored = 1;
1576 
1577  /* Turn the Entry_GR field into a bitmask. */
1578  save_gr = 0;
1579  for (i = 3; i < u->Entry_GR + 3; i++)
1580  {
1581  /* Frame pointer gets saved into a special location. */
1582  if (u->Save_SP && i == HPPA_FP_REGNUM)
1583  continue;
1584 
1585  save_gr |= (1 << i);
1586  }
1587  save_gr &= ~restart_gr;
1588 
1589  /* Turn the Entry_FR field into a bitmask too. */
1590  save_fr = 0;
1591  for (i = 12; i < u->Entry_FR + 12; i++)
1592  save_fr |= (1 << i);
1593  save_fr &= ~restart_fr;
1594 
1595  final_iteration = 0;
1596 
1597  /* Loop until we find everything of interest or hit a branch.
1598 
1599  For unoptimized GCC code and for any HP CC code this will never ever
1600  examine any user instructions.
1601 
1602  For optimzied GCC code we're faced with problems. GCC will schedule
1603  its prologue and make prologue instructions available for delay slot
1604  filling. The end result is user code gets mixed in with the prologue
1605  and a prologue instruction may be in the delay slot of the first branch
1606  or call.
1607 
1608  Some unexpected things are expected with debugging optimized code, so
1609  we allow this routine to walk past user instructions in optimized
1610  GCC code. */
1611  while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0
1612  || args_stored)
1613  {
1614  unsigned int reg_num;
1615  unsigned long old_stack_remaining, old_save_gr, old_save_fr;
1616  unsigned long old_save_rp, old_save_sp, next_inst;
1617 
1618  /* Save copies of all the triggers so we can compare them later
1619  (only for HPC). */
1620  old_save_gr = save_gr;
1621  old_save_fr = save_fr;
1622  old_save_rp = save_rp;
1623  old_save_sp = save_sp;
1624  old_stack_remaining = stack_remaining;
1625 
1626  status = target_read_memory (pc, buf, 4);
1627  inst = extract_unsigned_integer (buf, 4, byte_order);
1628 
1629  /* Yow! */
1630  if (status != 0)
1631  return pc;
1632 
1633  /* Note the interesting effects of this instruction. */
1634  stack_remaining -= prologue_inst_adjust_sp (inst);
1635 
1636  /* There are limited ways to store the return pointer into the
1637  stack. */
1638  if (inst == 0x6bc23fd9 || inst == 0x0fc212c1 || inst == 0x73c23fe1)
1639  save_rp = 0;
1640 
1641  /* These are the only ways we save SP into the stack. At this time
1642  the HP compilers never bother to save SP into the stack. */
1643  if ((inst & 0xffffc000) == 0x6fc10000
1644  || (inst & 0xffffc00c) == 0x73c10008)
1645  save_sp = 0;
1646 
1647  /* Are we loading some register with an offset from the argument
1648  pointer? */
1649  if ((inst & 0xffe00000) == 0x37a00000
1650  || (inst & 0xffffffe0) == 0x081d0240)
1651  {
1652  pc += 4;
1653  continue;
1654  }
1655 
1656  /* Account for general and floating-point register saves. */
1657  reg_num = inst_saves_gr (inst);
1658  save_gr &= ~(1 << reg_num);
1659 
1660  /* Ugh. Also account for argument stores into the stack.
1661  Unfortunately args_stored only tells us that some arguments
1662  where stored into the stack. Not how many or what kind!
1663 
1664  This is a kludge as on the HP compiler sets this bit and it
1665  never does prologue scheduling. So once we see one, skip past
1666  all of them. We have similar code for the fp arg stores below.
1667 
1668  FIXME. Can still die if we have a mix of GR and FR argument
1669  stores! */
1670  if (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
1671  && reg_num <= 26)
1672  {
1673  while (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
1674  && reg_num <= 26)
1675  {
1676  pc += 4;
1677  status = target_read_memory (pc, buf, 4);
1678  inst = extract_unsigned_integer (buf, 4, byte_order);
1679  if (status != 0)
1680  return pc;
1681  reg_num = inst_saves_gr (inst);
1682  }
1683  args_stored = 0;
1684  continue;
1685  }
1686 
1687  reg_num = inst_saves_fr (inst);
1688  save_fr &= ~(1 << reg_num);
1689 
1690  status = target_read_memory (pc + 4, buf, 4);
1691  next_inst = extract_unsigned_integer (buf, 4, byte_order);
1692 
1693  /* Yow! */
1694  if (status != 0)
1695  return pc;
1696 
1697  /* We've got to be read to handle the ldo before the fp register
1698  save. */
1699  if ((inst & 0xfc000000) == 0x34000000
1700  && inst_saves_fr (next_inst) >= 4
1701  && inst_saves_fr (next_inst)
1702  <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1703  {
1704  /* So we drop into the code below in a reasonable state. */
1705  reg_num = inst_saves_fr (next_inst);
1706  pc -= 4;
1707  }
1708 
1709  /* Ugh. Also account for argument stores into the stack.
1710  This is a kludge as on the HP compiler sets this bit and it
1711  never does prologue scheduling. So once we see one, skip past
1712  all of them. */
1713  if (reg_num >= 4
1714  && reg_num <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1715  {
1716  while (reg_num >= 4
1717  && reg_num
1718  <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1719  {
1720  pc += 8;
1721  status = target_read_memory (pc, buf, 4);
1722  inst = extract_unsigned_integer (buf, 4, byte_order);
1723  if (status != 0)
1724  return pc;
1725  if ((inst & 0xfc000000) != 0x34000000)
1726  break;
1727  status = target_read_memory (pc + 4, buf, 4);
1728  next_inst = extract_unsigned_integer (buf, 4, byte_order);
1729  if (status != 0)
1730  return pc;
1731  reg_num = inst_saves_fr (next_inst);
1732  }
1733  args_stored = 0;
1734  continue;
1735  }
1736 
1737  /* Quit if we hit any kind of branch. This can happen if a prologue
1738  instruction is in the delay slot of the first call/branch. */
1739  if (is_branch (inst) && stop_before_branch)
1740  break;
1741 
1742  /* What a crock. The HP compilers set args_stored even if no
1743  arguments were stored into the stack (boo hiss). This could
1744  cause this code to then skip a bunch of user insns (up to the
1745  first branch).
1746 
1747  To combat this we try to identify when args_stored was bogusly
1748  set and clear it. We only do this when args_stored is nonzero,
1749  all other resources are accounted for, and nothing changed on
1750  this pass. */
1751  if (args_stored
1752  && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1753  && old_save_gr == save_gr && old_save_fr == save_fr
1754  && old_save_rp == save_rp && old_save_sp == save_sp
1755  && old_stack_remaining == stack_remaining)
1756  break;
1757 
1758  /* Bump the PC. */
1759  pc += 4;
1760 
1761  /* !stop_before_branch, so also look at the insn in the delay slot
1762  of the branch. */
1763  if (final_iteration)
1764  break;
1765  if (is_branch (inst))
1766  final_iteration = 1;
1767  }
1768 
1769  /* We've got a tenative location for the end of the prologue. However
1770  because of limitations in the unwind descriptor mechanism we may
1771  have went too far into user code looking for the save of a register
1772  that does not exist. So, if there registers we expected to be saved
1773  but never were, mask them out and restart.
1774 
1775  This should only happen in optimized code, and should be very rare. */
1776  if (save_gr || (save_fr && !(restart_fr || restart_gr)))
1777  {
1778  pc = orig_pc;
1779  restart_gr = save_gr;
1780  restart_fr = save_fr;
1781  goto restart;
1782  }
1783 
1784  return pc;
1785 }
1786 
1787 
1788 /* Return the address of the PC after the last prologue instruction if
1789  we can determine it from the debug symbols. Else return zero. */
1790 
1791 static CORE_ADDR
1793 {
1794  struct symtab_and_line sal;
1795  CORE_ADDR func_addr, func_end;
1796 
1797  /* If we can not find the symbol in the partial symbol table, then
1798  there is no hope we can determine the function's start address
1799  with this code. */
1800  if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
1801  return 0;
1802 
1803  /* Get the line associated with FUNC_ADDR. */
1804  sal = find_pc_line (func_addr, 0);
1805 
1806  /* There are only two cases to consider. First, the end of the source line
1807  is within the function bounds. In that case we return the end of the
1808  source line. Second is the end of the source line extends beyond the
1809  bounds of the current function. We need to use the slow code to
1810  examine instructions in that case.
1811 
1812  Anything else is simply a bug elsewhere. Fixing it here is absolutely
1813  the wrong thing to do. In fact, it should be entirely possible for this
1814  function to always return zero since the slow instruction scanning code
1815  is supposed to *always* work. If it does not, then it is a bug. */
1816  if (sal.end < func_end)
1817  return sal.end;
1818  else
1819  return 0;
1820 }
1821 
1822 /* To skip prologues, I use this predicate. Returns either PC itself
1823  if the code at PC does not look like a function prologue; otherwise
1824  returns an address that (if we're lucky) follows the prologue.
1825 
1826  hppa_skip_prologue is called by gdb to place a breakpoint in a function.
1827  It doesn't necessarily skips all the insns in the prologue. In fact
1828  we might not want to skip all the insns because a prologue insn may
1829  appear in the delay slot of the first branch, and we don't want to
1830  skip over the branch in that case. */
1831 
1832 static CORE_ADDR
1834 {
1835  CORE_ADDR post_prologue_pc;
1836 
1837  /* See if we can determine the end of the prologue via the symbol table.
1838  If so, then return either PC, or the PC after the prologue, whichever
1839  is greater. */
1840 
1841  post_prologue_pc = after_prologue (pc);
1842 
1843  /* If after_prologue returned a useful address, then use it. Else
1844  fall back on the instruction skipping code.
1845 
1846  Some folks have claimed this causes problems because the breakpoint
1847  may be the first instruction of the prologue. If that happens, then
1848  the instruction skipping code has a bug that needs to be fixed. */
1849  if (post_prologue_pc != 0)
1850  return std::max (pc, post_prologue_pc);
1851  else
1852  return (skip_prologue_hard_way (gdbarch, pc, 1));
1853 }
1854 
1855 /* Return an unwind entry that falls within the frame's code block. */
1856 
1857 static struct unwind_table_entry *
1859 {
1860  CORE_ADDR pc = get_frame_address_in_block (this_frame);
1861 
1862  /* FIXME drow/20070101: Calling gdbarch_addr_bits_remove on the
1863  result of get_frame_address_in_block implies a problem.
1864  The bits should have been removed earlier, before the return
1865  value of gdbarch_unwind_pc. That might be happening already;
1866  if it isn't, it should be fixed. Then this call can be
1867  removed. */
1868  pc = gdbarch_addr_bits_remove (get_frame_arch (this_frame), pc);
1869  return find_unwind_entry (pc);
1870 }
1871 
1873 {
1876 };
1877 
1878 static struct hppa_frame_cache *
1879 hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
1880 {
1881  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1882  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1883  int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1884  struct hppa_frame_cache *cache;
1885  long saved_gr_mask;
1886  long saved_fr_mask;
1887  long frame_size;
1888  struct unwind_table_entry *u;
1889  CORE_ADDR prologue_end;
1890  int fp_in_r1 = 0;
1891  int i;
1892 
1893  if (hppa_debug)
1894  fprintf_unfiltered (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ",
1895  frame_relative_level(this_frame));
1896 
1897  if ((*this_cache) != NULL)
1898  {
1899  if (hppa_debug)
1900  fprintf_unfiltered (gdb_stdlog, "base=%s (cached) }",
1901  paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
1902  return (struct hppa_frame_cache *) (*this_cache);
1903  }
1904  cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
1905  (*this_cache) = cache;
1906  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1907 
1908  /* Yow! */
1909  u = hppa_find_unwind_entry_in_block (this_frame);
1910  if (!u)
1911  {
1912  if (hppa_debug)
1913  fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
1914  return (struct hppa_frame_cache *) (*this_cache);
1915  }
1916 
1917  /* Turn the Entry_GR field into a bitmask. */
1918  saved_gr_mask = 0;
1919  for (i = 3; i < u->Entry_GR + 3; i++)
1920  {
1921  /* Frame pointer gets saved into a special location. */
1922  if (u->Save_SP && i == HPPA_FP_REGNUM)
1923  continue;
1924 
1925  saved_gr_mask |= (1 << i);
1926  }
1927 
1928  /* Turn the Entry_FR field into a bitmask too. */
1929  saved_fr_mask = 0;
1930  for (i = 12; i < u->Entry_FR + 12; i++)
1931  saved_fr_mask |= (1 << i);
1932 
1933  /* Loop until we find everything of interest or hit a branch.
1934 
1935  For unoptimized GCC code and for any HP CC code this will never ever
1936  examine any user instructions.
1937 
1938  For optimized GCC code we're faced with problems. GCC will schedule
1939  its prologue and make prologue instructions available for delay slot
1940  filling. The end result is user code gets mixed in with the prologue
1941  and a prologue instruction may be in the delay slot of the first branch
1942  or call.
1943 
1944  Some unexpected things are expected with debugging optimized code, so
1945  we allow this routine to walk past user instructions in optimized
1946  GCC code. */
1947  {
1948  int final_iteration = 0;
1949  CORE_ADDR pc, start_pc, end_pc;
1950  int looking_for_sp = u->Save_SP;
1951  int looking_for_rp = u->Save_RP;
1952  int fp_loc = -1;
1953 
1954  /* We have to use skip_prologue_hard_way instead of just
1955  skip_prologue_using_sal, in case we stepped into a function without
1956  symbol information. hppa_skip_prologue also bounds the returned
1957  pc by the passed in pc, so it will not return a pc in the next
1958  function.
1959 
1960  We used to call hppa_skip_prologue to find the end of the prologue,
1961  but if some non-prologue instructions get scheduled into the prologue,
1962  and the program is compiled with debug information, the "easy" way
1963  in hppa_skip_prologue will return a prologue end that is too early
1964  for us to notice any potential frame adjustments. */
1965 
1966  /* We used to use get_frame_func to locate the beginning of the
1967  function to pass to skip_prologue. However, when objects are
1968  compiled without debug symbols, get_frame_func can return the wrong
1969  function (or 0). We can do better than that by using unwind records.
1970  This only works if the Region_description of the unwind record
1971  indicates that it includes the entry point of the function.
1972  HP compilers sometimes generate unwind records for regions that
1973  do not include the entry or exit point of a function. GNU tools
1974  do not do this. */
1975 
1976  if ((u->Region_description & 0x2) == 0)
1977  start_pc = u->region_start;
1978  else
1979  start_pc = get_frame_func (this_frame);
1980 
1981  prologue_end = skip_prologue_hard_way (gdbarch, start_pc, 0);
1982  end_pc = get_frame_pc (this_frame);
1983 
1984  if (prologue_end != 0 && end_pc > prologue_end)
1985  end_pc = prologue_end;
1986 
1987  frame_size = 0;
1988 
1989  for (pc = start_pc;
1990  ((saved_gr_mask || saved_fr_mask
1991  || looking_for_sp || looking_for_rp
1992  || frame_size < (u->Total_frame_size << 3))
1993  && pc < end_pc);
1994  pc += 4)
1995  {
1996  int reg;
1997  gdb_byte buf4[4];
1998  long inst;
1999 
2000  if (!safe_frame_unwind_memory (this_frame, pc, buf4, sizeof buf4))
2001  {
2002  error (_("Cannot read instruction at %s."),
2003  paddress (gdbarch, pc));
2004  return (struct hppa_frame_cache *) (*this_cache);
2005  }
2006 
2007  inst = extract_unsigned_integer (buf4, sizeof buf4, byte_order);
2008 
2009  /* Note the interesting effects of this instruction. */
2010  frame_size += prologue_inst_adjust_sp (inst);
2011 
2012  /* There are limited ways to store the return pointer into the
2013  stack. */
2014  if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
2015  {
2016  looking_for_rp = 0;
2017  cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
2018  }
2019  else if (inst == 0x6bc23fd1) /* stw rp,-0x18(sr0,sp) */
2020  {
2021  looking_for_rp = 0;
2022  cache->saved_regs[HPPA_RP_REGNUM].addr = -24;
2023  }
2024  else if (inst == 0x0fc212c1
2025  || inst == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
2026  {
2027  looking_for_rp = 0;
2028  cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
2029  }
2030 
2031  /* Check to see if we saved SP into the stack. This also
2032  happens to indicate the location of the saved frame
2033  pointer. */
2034  if ((inst & 0xffffc000) == 0x6fc10000 /* stw,ma r1,N(sr0,sp) */
2035  || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
2036  {
2037  looking_for_sp = 0;
2038  cache->saved_regs[HPPA_FP_REGNUM].addr = 0;
2039  }
2040  else if (inst == 0x08030241) /* copy %r3, %r1 */
2041  {
2042  fp_in_r1 = 1;
2043  }
2044 
2045  /* Account for general and floating-point register saves. */
2046  reg = inst_saves_gr (inst);
2047  if (reg >= 3 && reg <= 18
2048  && (!u->Save_SP || reg != HPPA_FP_REGNUM))
2049  {
2050  saved_gr_mask &= ~(1 << reg);
2051  if ((inst >> 26) == 0x1b && hppa_extract_14 (inst) >= 0)
2052  /* stwm with a positive displacement is a _post_
2053  _modify_. */
2054  cache->saved_regs[reg].addr = 0;
2055  else if ((inst & 0xfc00000c) == 0x70000008)
2056  /* A std has explicit post_modify forms. */
2057  cache->saved_regs[reg].addr = 0;
2058  else
2059  {
2060  CORE_ADDR offset;
2061 
2062  if ((inst >> 26) == 0x1c)
2063  offset = (inst & 0x1 ? -(1 << 13) : 0)
2064  | (((inst >> 4) & 0x3ff) << 3);
2065  else if ((inst >> 26) == 0x03)
2066  offset = hppa_low_hppa_sign_extend (inst & 0x1f, 5);
2067  else
2068  offset = hppa_extract_14 (inst);
2069 
2070  /* Handle code with and without frame pointers. */
2071  if (u->Save_SP)
2072  cache->saved_regs[reg].addr = offset;
2073  else
2074  cache->saved_regs[reg].addr
2075  = (u->Total_frame_size << 3) + offset;
2076  }
2077  }
2078 
2079  /* GCC handles callee saved FP regs a little differently.
2080 
2081  It emits an instruction to put the value of the start of
2082  the FP store area into %r1. It then uses fstds,ma with a
2083  basereg of %r1 for the stores.
2084 
2085  HP CC emits them at the current stack pointer modifying the
2086  stack pointer as it stores each register. */
2087 
2088  /* ldo X(%r3),%r1 or ldo X(%r30),%r1. */
2089  if ((inst & 0xffffc000) == 0x34610000
2090  || (inst & 0xffffc000) == 0x37c10000)
2091  fp_loc = hppa_extract_14 (inst);
2092 
2093  reg = inst_saves_fr (inst);
2094  if (reg >= 12 && reg <= 21)
2095  {
2096  /* Note +4 braindamage below is necessary because the FP
2097  status registers are internally 8 registers rather than
2098  the expected 4 registers. */
2099  saved_fr_mask &= ~(1 << reg);
2100  if (fp_loc == -1)
2101  {
2102  /* 1st HP CC FP register store. After this
2103  instruction we've set enough state that the GCC and
2104  HPCC code are both handled in the same manner. */
2105  cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].addr = 0;
2106  fp_loc = 8;
2107  }
2108  else
2109  {
2110  cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc;
2111  fp_loc += 8;
2112  }
2113  }
2114 
2115  /* Quit if we hit any kind of branch the previous iteration. */
2116  if (final_iteration)
2117  break;
2118  /* We want to look precisely one instruction beyond the branch
2119  if we have not found everything yet. */
2120  if (is_branch (inst))
2121  final_iteration = 1;
2122  }
2123  }
2124 
2125  {
2126  /* The frame base always represents the value of %sp at entry to
2127  the current function (and is thus equivalent to the "saved"
2128  stack pointer. */
2129  CORE_ADDR this_sp = get_frame_register_unsigned (this_frame,
2130  HPPA_SP_REGNUM);
2131  CORE_ADDR fp;
2132 
2133  if (hppa_debug)
2134  fprintf_unfiltered (gdb_stdlog, " (this_sp=%s, pc=%s, "
2135  "prologue_end=%s) ",
2136  paddress (gdbarch, this_sp),
2137  paddress (gdbarch, get_frame_pc (this_frame)),
2138  paddress (gdbarch, prologue_end));
2139 
2140  /* Check to see if a frame pointer is available, and use it for
2141  frame unwinding if it is.
2142 
2143  There are some situations where we need to rely on the frame
2144  pointer to do stack unwinding. For example, if a function calls
2145  alloca (), the stack pointer can get adjusted inside the body of
2146  the function. In this case, the ABI requires that the compiler
2147  maintain a frame pointer for the function.
2148 
2149  The unwind record has a flag (alloca_frame) that indicates that
2150  a function has a variable frame; unfortunately, gcc/binutils
2151  does not set this flag. Instead, whenever a frame pointer is used
2152  and saved on the stack, the Save_SP flag is set. We use this to
2153  decide whether to use the frame pointer for unwinding.
2154 
2155  TODO: For the HP compiler, maybe we should use the alloca_frame flag
2156  instead of Save_SP. */
2157 
2158  fp = get_frame_register_unsigned (this_frame, HPPA_FP_REGNUM);
2159 
2160  if (u->alloca_frame)
2161  fp -= u->Total_frame_size << 3;
2162 
2163  if (get_frame_pc (this_frame) >= prologue_end
2164  && (u->Save_SP || u->alloca_frame) && fp != 0)
2165  {
2166  cache->base = fp;
2167 
2168  if (hppa_debug)
2169  fprintf_unfiltered (gdb_stdlog, " (base=%s) [frame pointer]",
2170  paddress (gdbarch, cache->base));
2171  }
2172  else if (u->Save_SP
2173  && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM))
2174  {
2175  /* Both we're expecting the SP to be saved and the SP has been
2176  saved. The entry SP value is saved at this frame's SP
2177  address. */
2178  cache->base = read_memory_integer (this_sp, word_size, byte_order);
2179 
2180  if (hppa_debug)
2181  fprintf_unfiltered (gdb_stdlog, " (base=%s) [saved]",
2182  paddress (gdbarch, cache->base));
2183  }
2184  else
2185  {
2186  /* The prologue has been slowly allocating stack space. Adjust
2187  the SP back. */
2188  cache->base = this_sp - frame_size;
2189  if (hppa_debug)
2190  fprintf_unfiltered (gdb_stdlog, " (base=%s) [unwind adjust]",
2191  paddress (gdbarch, cache->base));
2192 
2193  }
2194  trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2195  }
2196 
2197  /* The PC is found in the "return register", "Millicode" uses "r31"
2198  as the return register while normal code uses "rp". */
2199  if (u->Millicode)
2200  {
2201  if (trad_frame_addr_p (cache->saved_regs, 31))
2202  {
2203  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
2204  if (hppa_debug)
2205  fprintf_unfiltered (gdb_stdlog, " (pc=r31) [stack] } ");
2206  }
2207  else
2208  {
2209  ULONGEST r31 = get_frame_register_unsigned (this_frame, 31);
2210  trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, r31);
2211  if (hppa_debug)
2212  fprintf_unfiltered (gdb_stdlog, " (pc=r31) [frame] } ");
2213  }
2214  }
2215  else
2216  {
2217  if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2218  {
2219  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] =
2220  cache->saved_regs[HPPA_RP_REGNUM];
2221  if (hppa_debug)
2222  fprintf_unfiltered (gdb_stdlog, " (pc=rp) [stack] } ");
2223  }
2224  else
2225  {
2226  ULONGEST rp = get_frame_register_unsigned (this_frame,
2227  HPPA_RP_REGNUM);
2228  trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
2229  if (hppa_debug)
2230  fprintf_unfiltered (gdb_stdlog, " (pc=rp) [frame] } ");
2231  }
2232  }
2233 
2234  /* If Save_SP is set, then we expect the frame pointer to be saved in the
2235  frame. However, there is a one-insn window where we haven't saved it
2236  yet, but we've already clobbered it. Detect this case and fix it up.
2237 
2238  The prologue sequence for frame-pointer functions is:
2239  0: stw %rp, -20(%sp)
2240  4: copy %r3, %r1
2241  8: copy %sp, %r3
2242  c: stw,ma %r1, XX(%sp)
2243 
2244  So if we are at offset c, the r3 value that we want is not yet saved
2245  on the stack, but it's been overwritten. The prologue analyzer will
2246  set fp_in_r1 when it sees the copy insn so we know to get the value
2247  from r1 instead. */
2248  if (u->Save_SP && !trad_frame_addr_p (cache->saved_regs, HPPA_FP_REGNUM)
2249  && fp_in_r1)
2250  {
2251  ULONGEST r1 = get_frame_register_unsigned (this_frame, 1);
2252  trad_frame_set_value (cache->saved_regs, HPPA_FP_REGNUM, r1);
2253  }
2254 
2255  {
2256  /* Convert all the offsets into addresses. */
2257  int reg;
2258  for (reg = 0; reg < gdbarch_num_regs (gdbarch); reg++)
2259  {
2260  if (trad_frame_addr_p (cache->saved_regs, reg))
2261  cache->saved_regs[reg].addr += cache->base;
2262  }
2263  }
2264 
2265  {
2266  struct gdbarch_tdep *tdep;
2267 
2268  tdep = gdbarch_tdep (gdbarch);
2269 
2270  if (tdep->unwind_adjust_stub)
2271  tdep->unwind_adjust_stub (this_frame, cache->base, cache->saved_regs);
2272  }
2273 
2274  if (hppa_debug)
2275  fprintf_unfiltered (gdb_stdlog, "base=%s }",
2276  paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
2277  return (struct hppa_frame_cache *) (*this_cache);
2278 }
2279 
2280 static void
2281 hppa_frame_this_id (struct frame_info *this_frame, void **this_cache,
2282  struct frame_id *this_id)
2283 {
2284  struct hppa_frame_cache *info;
2285  struct unwind_table_entry *u;
2286 
2287  info = hppa_frame_cache (this_frame, this_cache);
2288  u = hppa_find_unwind_entry_in_block (this_frame);
2289 
2290  (*this_id) = frame_id_build (info->base, u->region_start);
2291 }
2292 
2293 static struct value *
2295  void **this_cache, int regnum)
2296 {
2297  struct hppa_frame_cache *info = hppa_frame_cache (this_frame, this_cache);
2298 
2299  return hppa_frame_prev_register_helper (this_frame,
2300  info->saved_regs, regnum);
2301 }
2302 
2303 static int
2305  struct frame_info *this_frame, void **this_cache)
2306 {
2307  if (hppa_find_unwind_entry_in_block (this_frame))
2308  return 1;
2309 
2310  return 0;
2311 }
2312 
2313 static const struct frame_unwind hppa_frame_unwind =
2314 {
2315  NORMAL_FRAME,
2319  NULL,
2321 };
2322 
2323 /* This is a generic fallback frame unwinder that kicks in if we fail all
2324  the other ones. Normally we would expect the stub and regular unwinder
2325  to work, but in some cases we might hit a function that just doesn't
2326  have any unwind information available. In this case we try to do
2327  unwinding solely based on code reading. This is obviously going to be
2328  slow, so only use this as a last resort. Currently this will only
2329  identify the stack and pc for the frame. */
2330 
2331 static struct hppa_frame_cache *
2332 hppa_fallback_frame_cache (struct frame_info *this_frame, void **this_cache)
2333 {
2334  struct gdbarch *gdbarch = get_frame_arch (this_frame);
2335  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2336  struct hppa_frame_cache *cache;
2337  unsigned int frame_size = 0;
2338  int found_rp = 0;
2339  CORE_ADDR start_pc;
2340 
2341  if (hppa_debug)
2343  "{ hppa_fallback_frame_cache (frame=%d) -> ",
2344  frame_relative_level (this_frame));
2345 
2346  cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
2347  (*this_cache) = cache;
2348  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2349 
2350  start_pc = get_frame_func (this_frame);
2351  if (start_pc)
2352  {
2353  CORE_ADDR cur_pc = get_frame_pc (this_frame);
2354  CORE_ADDR pc;
2355 
2356  for (pc = start_pc; pc < cur_pc; pc += 4)
2357  {
2358  unsigned int insn;
2359 
2360  insn = read_memory_unsigned_integer (pc, 4, byte_order);
2361  frame_size += prologue_inst_adjust_sp (insn);
2362 
2363  /* There are limited ways to store the return pointer into the
2364  stack. */
2365  if (insn == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
2366  {
2367  cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
2368  found_rp = 1;
2369  }
2370  else if (insn == 0x0fc212c1
2371  || insn == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
2372  {
2373  cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
2374  found_rp = 1;
2375  }
2376  }
2377  }
2378 
2379  if (hppa_debug)
2380  fprintf_unfiltered (gdb_stdlog, " frame_size=%d, found_rp=%d }\n",
2381  frame_size, found_rp);
2382 
2383  cache->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
2384  cache->base -= frame_size;
2386 
2388  {
2389  cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base;
2391  cache->saved_regs[HPPA_RP_REGNUM];
2392  }
2393  else
2394  {
2395  ULONGEST rp;
2396  rp = get_frame_register_unsigned (this_frame, HPPA_RP_REGNUM);
2398  }
2399 
2400  return cache;
2401 }
2402 
2403 static void
2404 hppa_fallback_frame_this_id (struct frame_info *this_frame, void **this_cache,
2405  struct frame_id *this_id)
2406 {
2407  struct hppa_frame_cache *info =
2408  hppa_fallback_frame_cache (this_frame, this_cache);
2409 
2410  (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
2411 }
2412 
2413 static struct value *
2415  void **this_cache, int regnum)
2416 {
2417  struct hppa_frame_cache *info
2418  = hppa_fallback_frame_cache (this_frame, this_cache);
2419 
2420  return hppa_frame_prev_register_helper (this_frame,
2421  info->saved_regs, regnum);
2422 }
2423 
2425 {
2426  NORMAL_FRAME,
2430  NULL,
2432 };
2433 
2434 /* Stub frames, used for all kinds of call stubs. */
2436 {
2439 };
2440 
2441 static struct hppa_stub_unwind_cache *
2443  void **this_cache)
2444 {
2445  struct gdbarch *gdbarch = get_frame_arch (this_frame);
2446  struct hppa_stub_unwind_cache *info;
2447  struct unwind_table_entry *u;
2448 
2449  if (*this_cache)
2450  return (struct hppa_stub_unwind_cache *) *this_cache;
2451 
2453  *this_cache = info;
2454  info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2455 
2456  info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
2457 
2458  /* By default we assume that stubs do not change the rp. */
2460 
2461  return info;
2462 }
2463 
2464 static void
2466  void **this_prologue_cache,
2467  struct frame_id *this_id)
2468 {
2469  struct hppa_stub_unwind_cache *info
2470  = hppa_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2471 
2472  if (info)
2473  *this_id = frame_id_build (info->base, get_frame_func (this_frame));
2474 }
2475 
2476 static struct value *
2478  void **this_prologue_cache, int regnum)
2479 {
2480  struct hppa_stub_unwind_cache *info
2481  = hppa_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2482 
2483  if (info == NULL)
2484  error (_("Requesting registers from null frame."));
2485 
2486  return hppa_frame_prev_register_helper (this_frame,
2487  info->saved_regs, regnum);
2488 }
2489 
2490 static int
2492  struct frame_info *this_frame,
2493  void **this_cache)
2494 {
2495  CORE_ADDR pc = get_frame_address_in_block (this_frame);
2496  struct gdbarch *gdbarch = get_frame_arch (this_frame);
2497  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2498 
2499  if (pc == 0
2500  || (tdep->in_solib_call_trampoline != NULL
2501  && tdep->in_solib_call_trampoline (gdbarch, pc))
2503  return 1;
2504  return 0;
2505 }
2506 
2507 static const struct frame_unwind hppa_stub_frame_unwind = {
2508  NORMAL_FRAME,
2512  NULL,
2514 };
2515 
2516 static struct frame_id
2517 hppa_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2518 {
2519  return frame_id_build (get_frame_register_unsigned (this_frame,
2520  HPPA_SP_REGNUM),
2521  get_frame_pc (this_frame));
2522 }
2523 
2524 CORE_ADDR
2525 hppa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2526 {
2527  ULONGEST ipsw;
2528  CORE_ADDR pc;
2529 
2530  ipsw = frame_unwind_register_unsigned (next_frame, HPPA_IPSW_REGNUM);
2532 
2533  /* If the current instruction is nullified, then we are effectively
2534  still executing the previous instruction. Pretend we are still
2535  there. This is needed when single stepping; if the nullified
2536  instruction is on a different line, we don't want GDB to think
2537  we've stepped onto that line. */
2538  if (ipsw & 0x00200000)
2539  pc -= 4;
2540 
2541  return pc & ~0x3;
2542 }
2543 
2544 /* Return the minimal symbol whose name is NAME and stub type is STUB_TYPE.
2545  Return NULL if no such symbol was found. */
2546 
2547 struct bound_minimal_symbol
2549  enum unwind_stub_types stub_type)
2550 {
2551  struct objfile *objfile;
2552  struct minimal_symbol *msym;
2553  struct bound_minimal_symbol result = { NULL, NULL };
2554 
2555  ALL_MSYMBOLS (objfile, msym)
2556  {
2557  if (strcmp (MSYMBOL_LINKAGE_NAME (msym), name) == 0)
2558  {
2559  struct unwind_table_entry *u;
2560 
2561  u = find_unwind_entry (MSYMBOL_VALUE (msym));
2562  if (u != NULL && u->stub_unwind.stub_type == stub_type)
2563  {
2564  result.objfile = objfile;
2565  result.minsym = msym;
2566  return result;
2567  }
2568  }
2569  }
2570 
2571  return result;
2572 }
2573 
2574 static void
2575 unwind_command (const char *exp, int from_tty)
2576 {
2577  CORE_ADDR address;
2578  struct unwind_table_entry *u;
2579 
2580  /* If we have an expression, evaluate it and use it as the address. */
2581 
2582  if (exp != 0 && *exp != 0)
2583  address = parse_and_eval_address (exp);
2584  else
2585  return;
2586 
2587  u = find_unwind_entry (address);
2588 
2589  if (!u)
2590  {
2591  printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
2592  return;
2593  }
2594 
2595  printf_unfiltered ("unwind_table_entry (%s):\n", host_address_to_string (u));
2596 
2597  printf_unfiltered ("\tregion_start = %s\n", hex_string (u->region_start));
2599 
2600  printf_unfiltered ("\tregion_end = %s\n", hex_string (u->region_end));
2602 
2603 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
2604 
2605  printf_unfiltered ("\n\tflags =");
2606  pif (Cannot_unwind);
2607  pif (Millicode);
2609  pif (Entry_SR);
2610  pif (Args_stored);
2611  pif (Variable_Frame);
2616  pif (sr4export);
2617  pif (cxx_info);
2618  pif (cxx_try_catch);
2619  pif (sched_entry_seq);
2620  pif (Save_SP);
2621  pif (Save_RP);
2623  pif (save_r19);
2624  pif (Cleanup_defined);
2627  pif (Large_frame);
2628  pif (alloca_frame);
2629 
2630  putchar_unfiltered ('\n');
2631 
2632 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
2633 
2635  pin (Entry_FR);
2636  pin (Entry_GR);
2638 
2639  if (u->stub_unwind.stub_type)
2640  {
2641  printf_unfiltered ("\tstub type = ");
2642  switch (u->stub_unwind.stub_type)
2643  {
2644  case LONG_BRANCH:
2645  printf_unfiltered ("long branch\n");
2646  break;
2647  case PARAMETER_RELOCATION:
2648  printf_unfiltered ("parameter relocation\n");
2649  break;
2650  case EXPORT:
2651  printf_unfiltered ("export\n");
2652  break;
2653  case IMPORT:
2654  printf_unfiltered ("import\n");
2655  break;
2656  case IMPORT_SHLIB:
2657  printf_unfiltered ("import shlib\n");
2658  break;
2659  default:
2660  printf_unfiltered ("unknown (%d)\n", u->stub_unwind.stub_type);
2661  }
2662  }
2663 }
2664 
2665 /* Return the GDB type object for the "standard" data type of data in
2666  register REGNUM. */
2667 
2668 static struct type *
2670 {
2671  if (regnum < HPPA_FP4_REGNUM)
2673  else
2675 }
2676 
2677 static struct type *
2679 {
2680  if (regnum < HPPA64_FP4_REGNUM)
2682  else
2684 }
2685 
2686 /* Return non-zero if REGNUM is not a register available to the user
2687  through ptrace/ttrace. */
2688 
2689 static int
2691 {
2692  return (regnum == 0
2696 }
2697 
2698 static int
2700 {
2701  /* cr26 and cr27 are readable (but not writable) from userspace. */
2703  return 0;
2704  else
2706 }
2707 
2708 static int
2710 {
2711  return (regnum == 0
2715 }
2716 
2717 static int
2719 {
2720  /* cr26 and cr27 are readable (but not writable) from userspace. */
2722  return 0;
2723  else
2725 }
2726 
2727 static CORE_ADDR
2729 {
2730  /* The low two bits of the PC on the PA contain the privilege level.
2731  Some genius implementing a (non-GCC) compiler apparently decided
2732  this means that "addresses" in a text section therefore include a
2733  privilege level, and thus symbol tables should contain these bits.
2734  This seems like a bonehead thing to do--anyway, it seems to work
2735  for our purposes to just ignore those bits. */
2736 
2737  return (addr &= ~0x3);
2738 }
2739 
2740 /* Get the ARGIth function argument for the current function. */
2741 
2742 static CORE_ADDR
2743 hppa_fetch_pointer_argument (struct frame_info *frame, int argi,
2744  struct type *type)
2745 {
2746  return get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 26 - argi);
2747 }
2748 
2749 static enum register_status
2751  int regnum, gdb_byte *buf)
2752 {
2753  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2754  ULONGEST tmp;
2755  enum register_status status;
2756 
2758  if (status == REG_VALID)
2759  {
2761  tmp &= ~0x3;
2762  store_unsigned_integer (buf, sizeof tmp, byte_order, tmp);
2763  }
2764  return status;
2765 }
2766 
2767 static CORE_ADDR
2768 hppa_find_global_pointer (struct gdbarch *gdbarch, struct value *function)
2769 {
2770  return 0;
2771 }
2772 
2773 struct value *
2775  struct trad_frame_saved_reg saved_regs[],
2776  int regnum)
2777 {
2778  struct gdbarch *arch = get_frame_arch (this_frame);
2779  enum bfd_endian byte_order = gdbarch_byte_order (arch);
2780 
2782  {
2784  CORE_ADDR pc;
2785  struct value *pcoq_val =
2786  trad_frame_get_prev_register (this_frame, saved_regs,
2788 
2790  size, byte_order);
2791  return frame_unwind_got_constant (this_frame, regnum, pc + 4);
2792  }
2793 
2794  return trad_frame_get_prev_register (this_frame, saved_regs, regnum);
2795 }
2796 
2797 
2798 /* An instruction to match. */
2799 struct insn_pattern
2800 {
2801  unsigned int data; /* See if it matches this.... */
2802  unsigned int mask; /* ... with this mask. */
2803 };
2804 
2805 /* See bfd/elf32-hppa.c */
2807  /* ldil LR'xxx,%r1 */
2808  { 0x20200000, 0xffe00000 },
2809  /* be,n RR'xxx(%sr4,%r1) */
2810  { 0xe0202002, 0xffe02002 },
2811  { 0, 0 }
2812 };
2813 
2815  /* b,l .+8, %r1 */
2816  { 0xe8200000, 0xffe00000 },
2817  /* addil LR'xxx - ($PIC_pcrel$0 - 4), %r1 */
2818  { 0x28200000, 0xffe00000 },
2819  /* be,n RR'xxxx - ($PIC_pcrel$0 - 8)(%sr4, %r1) */
2820  { 0xe0202002, 0xffe02002 },
2821  { 0, 0 }
2822 };
2823 
2824 static struct insn_pattern hppa_import_stub[] = {
2825  /* addil LR'xxx, %dp */
2826  { 0x2b600000, 0xffe00000 },
2827  /* ldw RR'xxx(%r1), %r21 */
2828  { 0x48350000, 0xffffb000 },
2829  /* bv %r0(%r21) */
2830  { 0xeaa0c000, 0xffffffff },
2831  /* ldw RR'xxx+4(%r1), %r19 */
2832  { 0x48330000, 0xffffb000 },
2833  { 0, 0 }
2834 };
2835 
2837  /* addil LR'xxx,%r19 */
2838  { 0x2a600000, 0xffe00000 },
2839  /* ldw RR'xxx(%r1),%r21 */
2840  { 0x48350000, 0xffffb000 },
2841  /* bv %r0(%r21) */
2842  { 0xeaa0c000, 0xffffffff },
2843  /* ldw RR'xxx+4(%r1),%r19 */
2844  { 0x48330000, 0xffffb000 },
2845  { 0, 0 },
2846 };
2847 
2848 static struct insn_pattern hppa_plt_stub[] = {
2849  /* b,l 1b, %r20 - 1b is 3 insns before here */
2850  { 0xea9f1fdd, 0xffffffff },
2851  /* depi 0,31,2,%r20 */
2852  { 0xd6801c1e, 0xffffffff },
2853  { 0, 0 }
2854 };
2855 
2856 /* Maximum number of instructions on the patterns above. */
2857 #define HPPA_MAX_INSN_PATTERN_LEN 4
2858 
2859 /* Return non-zero if the instructions at PC match the series
2860  described in PATTERN, or zero otherwise. PATTERN is an array of
2861  'struct insn_pattern' objects, terminated by an entry whose mask is
2862  zero.
2863 
2864  When the match is successful, fill INSN[i] with what PATTERN[i]
2865  matched. */
2866 
2867 static int
2869  struct insn_pattern *pattern, unsigned int *insn)
2870 {
2871  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2872  CORE_ADDR npc = pc;
2873  int i;
2874 
2875  for (i = 0; pattern[i].mask; i++)
2876  {
2877  gdb_byte buf[HPPA_INSN_SIZE];
2878 
2879  target_read_memory (npc, buf, HPPA_INSN_SIZE);
2880  insn[i] = extract_unsigned_integer (buf, HPPA_INSN_SIZE, byte_order);
2881  if ((insn[i] & pattern[i].mask) == pattern[i].data)
2882  npc += 4;
2883  else
2884  return 0;
2885  }
2886 
2887  return 1;
2888 }
2889 
2890 /* This relaxed version of the insstruction matcher allows us to match
2891  from somewhere inside the pattern, by looking backwards in the
2892  instruction scheme. */
2893 
2894 static int
2896  struct insn_pattern *pattern, unsigned int *insn)
2897 {
2898  int offset, len = 0;
2899 
2900  while (pattern[len].mask)
2901  len++;
2902 
2903  for (offset = 0; offset < len; offset++)
2905  pattern, insn))
2906  return 1;
2907 
2908  return 0;
2909 }
2910 
2911 static int
2913 {
2914  struct unwind_table_entry *u;
2915 
2916  u = find_unwind_entry (hppa_symbol_address ("$$dyncall"));
2917  if (!u)
2918  return 0;
2919 
2920  return (pc >= u->region_start && pc <= u->region_end);
2921 }
2922 
2923 int
2925 {
2926  unsigned int insn[HPPA_MAX_INSN_PATTERN_LEN];
2927  struct unwind_table_entry *u;
2928 
2929  if (in_plt_section (pc) || hppa_in_dyncall (pc))
2930  return 1;
2931 
2932  /* The GNU toolchain produces linker stubs without unwind
2933  information. Since the pattern matching for linker stubs can be
2934  quite slow, so bail out if we do have an unwind entry. */
2935 
2936  u = find_unwind_entry (pc);
2937  if (u != NULL)
2938  return 0;
2939 
2940  return
2945  hppa_long_branch_pic_stub, insn));
2946 }
2947 
2948 /* This code skips several kind of "trampolines" used on PA-RISC
2949  systems: $$dyncall, import stubs and PLT stubs. */
2950 
2951 CORE_ADDR
2953 {
2954  struct gdbarch *gdbarch = get_frame_arch (frame);
2955  struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
2956 
2957  unsigned int insn[HPPA_MAX_INSN_PATTERN_LEN];
2958  int dp_rel;
2959 
2960  /* $$dyncall handles both PLABELs and direct addresses. */
2961  if (hppa_in_dyncall (pc))
2962  {
2963  pc = get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 22);
2964 
2965  /* PLABELs have bit 30 set; if it's a PLABEL, then dereference it. */
2966  if (pc & 0x2)
2967  pc = read_memory_typed_address (pc & ~0x3, func_ptr_type);
2968 
2969  return pc;
2970  }
2971 
2972  dp_rel = hppa_match_insns (gdbarch, pc, hppa_import_stub, insn);
2973  if (dp_rel || hppa_match_insns (gdbarch, pc, hppa_import_pic_stub, insn))
2974  {
2975  /* Extract the target address from the addil/ldw sequence. */
2976  pc = hppa_extract_21 (insn[0]) + hppa_extract_14 (insn[1]);
2977 
2978  if (dp_rel)
2980  else
2981  pc += get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 19);
2982 
2983  /* fallthrough */
2984  }
2985 
2986  if (in_plt_section (pc))
2987  {
2988  pc = read_memory_typed_address (pc, func_ptr_type);
2989 
2990  /* If the PLT slot has not yet been resolved, the target will be
2991  the PLT stub. */
2992  if (in_plt_section (pc))
2993  {
2994  /* Sanity check: are we pointing to the PLT stub? */
2995  if (!hppa_match_insns (gdbarch, pc, hppa_plt_stub, insn))
2996  {
2997  warning (_("Cannot resolve PLT stub at %s."),
2998  paddress (gdbarch, pc));
2999  return 0;
3000  }
3001 
3002  /* This should point to the fixup routine. */
3003  pc = read_memory_typed_address (pc + 8, func_ptr_type);
3004  }
3005  }
3006 
3007  return pc;
3008 }
3009 
3010 
3011 /* Here is a table of C type sizes on hppa with various compiles
3012  and options. I measured this on PA 9000/800 with HP-UX 11.11
3013  and these compilers:
3014 
3015  /usr/ccs/bin/cc HP92453-01 A.11.01.21
3016  /opt/ansic/bin/cc HP92453-01 B.11.11.28706.GP
3017  /opt/aCC/bin/aCC B3910B A.03.45
3018  gcc gcc 3.3.2 native hppa2.0w-hp-hpux11.11
3019 
3020  cc : 1 2 4 4 8 : 4 8 -- : 4 4
3021  ansic +DA1.1 : 1 2 4 4 8 : 4 8 16 : 4 4
3022  ansic +DA2.0 : 1 2 4 4 8 : 4 8 16 : 4 4
3023  ansic +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
3024  acc +DA1.1 : 1 2 4 4 8 : 4 8 16 : 4 4
3025  acc +DA2.0 : 1 2 4 4 8 : 4 8 16 : 4 4
3026  acc +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
3027  gcc : 1 2 4 4 8 : 4 8 16 : 4 4
3028 
3029  Each line is:
3030 
3031  compiler and options
3032  char, short, int, long, long long
3033  float, double, long double
3034  char *, void (*)()
3035 
3036  So all these compilers use either ILP32 or LP64 model.
3037  TODO: gcc has more options so it needs more investigation.
3038 
3039  For floating point types, see:
3040 
3041  http://docs.hp.com/hpux/pdf/B3906-90006.pdf
3042  HP-UX floating-point guide, hpux 11.00
3043 
3044  -- chastain 2003-12-18 */
3045 
3046 static struct gdbarch *
3047 hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3048 {
3049  struct gdbarch_tdep *tdep;
3050  struct gdbarch *gdbarch;
3051 
3052  /* find a candidate among the list of pre-declared architectures. */
3053  arches = gdbarch_list_lookup_by_info (arches, &info);
3054  if (arches != NULL)
3055  return (arches->gdbarch);
3056 
3057  /* If none found, then allocate and initialize one. */
3058  tdep = XCNEW (struct gdbarch_tdep);
3059  gdbarch = gdbarch_alloc (&info, tdep);
3060 
3061  /* Determine from the bfd_arch_info structure if we are dealing with
3062  a 32 or 64 bits architecture. If the bfd_arch_info is not available,
3063  then default to a 32bit machine. */
3064  if (info.bfd_arch_info != NULL)
3066  info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte;
3067  else
3068  tdep->bytes_per_address = 4;
3069 
3071 
3072  /* Some parts of the gdbarch vector depend on whether we are running
3073  on a 32 bits or 64 bits target. */
3074  switch (tdep->bytes_per_address)
3075  {
3076  case 4:
3078  set_gdbarch_register_name (gdbarch, hppa32_register_name);
3084  break;
3085  case 8:
3094  break;
3095  default:
3096  internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
3098  }
3099 
3102 
3103  /* The following gdbarch vector elements are the same in both ILP32
3104  and LP64, but might show differences some day. */
3108 
3109  /* The following gdbarch vector elements do not depend on the address
3110  size, or in any other gdbarch element previously set. */
3121 
3122  /* Helper for function argument information. */
3124 
3125  /* When a hardware watchpoint triggers, we'll move the inferior past
3126  it by removing all eventpoints; stepping past the instruction
3127  that caused the trigger; reinserting eventpoints; and checking
3128  whether any watched location changed. */
3130 
3131  /* Inferior function call methods. */
3132  switch (tdep->bytes_per_address)
3133  {
3134  case 4:
3139  break;
3140  case 8:
3143  break;
3144  default:
3145  internal_error (__FILE__, __LINE__, _("bad switch"));
3146  }
3147 
3148  /* Struct return methods. */
3149  switch (tdep->bytes_per_address)
3150  {
3151  case 4:
3153  break;
3154  case 8:
3156  break;
3157  default:
3158  internal_error (__FILE__, __LINE__, _("bad switch"));
3159  }
3160 
3161  set_gdbarch_breakpoint_kind_from_pc (gdbarch, hppa_breakpoint::kind_from_pc);
3162  set_gdbarch_sw_breakpoint_from_kind (gdbarch, hppa_breakpoint::bp_from_kind);
3164 
3165  /* Frame unwind methods. */
3168 
3169  /* Hook in ABI-specific overrides, if they have been registered. */
3170  gdbarch_init_osabi (info, gdbarch);
3171 
3172  /* Hook in the default unwinders. */
3176 
3177  return gdbarch;
3178 }
3179 
3180 static void
3181 hppa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3182 {
3183  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3184 
3185  fprintf_unfiltered (file, "bytes_per_address = %d\n",
3186  tdep->bytes_per_address);
3187  fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
3188 }
3189 
3190 void
3192 {
3194 
3195  hppa_objfile_priv_data = register_objfile_data ();
3196 
3198  _("Print unwind table entry at given address."),
3200 
3201  /* Debug this files internals. */
3203 Set whether hppa target specific debugging information should be displayed."),
3204  _("\
3205 Show whether hppa target specific debugging information is displayed."), _("\
3206 This flag controls whether hppa target specific debugging information is\n\
3207 displayed. This information is particularly useful for debugging frame\n\
3208 unwinding problems."),
3209  NULL,
3210  NULL, /* FIXME: i18n: hppa debug flag is %s. */
3212 }
CORE_ADDR(* find_global_pointer)(struct gdbarch *, struct value *)
Definition: hppa-tdep.h:97
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
Definition: gdbarch.c:2050
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
Definition: gdbarch.c:3151
void set_gdbarch_have_nonsteppable_watchpoint(struct gdbarch *gdbarch, int have_nonsteppable_watchpoint)
Definition: gdbarch.c:3493
void set_gdbarch_cannot_fetch_register(struct gdbarch *gdbarch, gdbarch_cannot_fetch_register_ftype cannot_fetch_register)
Definition: gdbarch.c:2531
unsigned int padding
Definition: hppa-tdep.h:168
static void internalize_unwinds(struct objfile *objfile, struct unwind_table_entry *table, asection *section, unsigned int entries, size_t size, CORE_ADDR text_offset)
Definition: hppa-tdep.c:253
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
Definition: frame.c:624
unsigned int sr4export
Definition: hppa-tdep.h:143
CORE_ADDR get_frame_address_in_block(struct frame_info *this_frame)
Definition: frame.c:2407
static struct insn_pattern hppa_long_branch_pic_stub[]
Definition: hppa-tdep.c:2814
static struct insn_pattern hppa_import_stub[]
Definition: hppa-tdep.c:2824
int hppa_extract_5_load(unsigned word)
Definition: hppa-tdep.c:131
int putchar_unfiltered(int c)
Definition: utils.c:1817
CORE_ADDR hppa_read_pc(struct regcache *regcache)
Definition: hppa-tdep.c:1307
static int hppa64_cannot_fetch_register(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2718
unsigned int reserved
Definition: hppa-tdep.h:133
#define SECT_OFF_TEXT(objfile)
Definition: objfiles.h:686
bfd * obfd
Definition: objfiles.h:342
static int hppa_frame_unwind_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_cache)
Definition: hppa-tdep.c:2304
struct type * builtin_func_ptr
Definition: gdbtypes.h:1565
unsigned int Entry_SR
Definition: hppa-tdep.h:134
CORE_ADDR get_frame_pc(struct frame_info *frame)
Definition: frame.c:2376
static CORE_ADDR hppa_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: hppa-tdep.c:2728
void set_gdbarch_fp0_regnum(struct gdbarch *gdbarch, int fp0_regnum)
Definition: gdbarch.c:2207
unsigned int Save_MRP_in_frame
Definition: hppa-tdep.h:150
#define MSYMBOL_LINKAGE_NAME(symbol)
Definition: symtab.h:707
bfd_vma CORE_ADDR
Definition: common-types.h:41
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
Definition: osabi.c:334
#define MASK_21
Definition: hppa-tdep.c:93
static void hppa_dump_tdep(struct gdbarch *gdbarch, struct ui_file *file)
Definition: hppa-tdep.c:3181
static int hppa_stub_unwind_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_cache)
Definition: hppa-tdep.c:2491
static int inst_saves_fr(unsigned long inst)
Definition: hppa-tdep.c:1519
struct value * trad_frame_get_prev_register(struct frame_info *this_frame, struct trad_frame_saved_reg this_saved_regs[], int regnum)
Definition: trad-frame.c:142
static struct hppa_frame_cache * hppa_fallback_frame_cache(struct frame_info *this_frame, void **this_cache)
Definition: hppa-tdep.c:2332
unsigned int Large_frame
Definition: hppa-tdep.h:156
unsigned int Variable_Frame
Definition: hppa-tdep.h:138
int gdbarch_push_dummy_code_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:2405
unsigned int reserved1
Definition: hppa-tdep.h:147
int trad_frame_addr_p(struct trad_frame_saved_reg this_saved_regs[], int regnum)
Definition: trad-frame.c:84
unsigned int Two_Instruction_SP_Increment
Definition: hppa-tdep.h:142
unsigned int Cannot_unwind
Definition: hppa-tdep.h:129
if(!(yy_init))
Definition: ada-lex.c:1075
struct bfd_section * the_bfd_section
Definition: objfiles.h:126
#define BMSYMBOL_VALUE_ADDRESS(symbol)
Definition: symtab.h:691
CORE_ADDR hppa_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc)
Definition: hppa-tdep.c:2952
void warning(const char *fmt,...)
Definition: errors.c:26
int(* in_solib_call_trampoline)(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.h:102
CORE_ADDR end
Definition: symtab.h:1760
void trad_frame_set_value(struct trad_frame_saved_reg this_saved_regs[], int regnum, LONGEST val)
Definition: trad-frame.c:99
struct gdbarch_tdep * tdep
Definition: gdbarch.c:143
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype write_pc)
Definition: gdbarch.c:1943
static struct insn_pattern hppa_plt_stub[]
Definition: hppa-tdep.c:2848
void set_gdbarch_addr_bits_remove(struct gdbarch *gdbarch, gdbarch_addr_bits_remove_ftype addr_bits_remove)
Definition: gdbarch.c:3218
unsigned int data
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1831
void _initialize_hppa_tdep(void)
Definition: hppa-tdep.c:3191
unsigned int save_r19
Definition: hppa-tdep.h:151
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
Definition: frame.c:1279
unsigned int Total_frame_size
Definition: hppa-tdep.h:159
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
Definition: gdbtypes.c:5217
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
CORE_ADDR hppa_symbol_address(const char *sym)
Definition: hppa-tdep.c:194
#define obj_section_endaddr(s)
Definition: objfiles.h:146
struct m32c_reg * pc
Definition: m32c-tdep.c:116
return_value_convention
Definition: defs.h:247
static CORE_ADDR after_prologue(CORE_ADDR pc)
Definition: hppa-tdep.c:1792
static CORE_ADDR hppa64_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
Definition: hppa-tdep.c:974
#define pin(FLD)
static struct value * hppa_stub_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
Definition: hppa-tdep.c:2477
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
Definition: cli-decode.c:262
void regcache_cooked_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
Definition: regcache.c:987
struct unwind_table_entry::@75 stub_unwind
static CORE_ADDR hppa64_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: hppa-tdep.c:1300
const struct floatformat * floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN]
Definition: gdbtypes.c:100
Definition: solist.h:38
#define ALL_OBJFILE_OSECTIONS(objfile, osect)
Definition: objfiles.h:630
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
Definition: gdbarch.c:5309
register_status
int gdbarch_num_regs(struct gdbarch *gdbarch)
Definition: gdbarch.c:2039
struct so_list * so_info
Definition: hppa-tdep.c:74
struct bound_minimal_symbol hppa_lookup_stub_minimal_symbol(const char *name, enum unwind_stub_types stub_type)
Definition: hppa-tdep.c:2548
#define _(String)
Definition: gdb_locale.h:35
const struct bfd_arch_info * bfd_arch_info
Definition: gdbarch.h:1629
struct trad_frame_saved_reg * saved_regs
Definition: hppa-tdep.c:2438
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
Definition: gdbarch.c:2275
void(* unwind_adjust_stub)(struct frame_info *this_frame, CORE_ADDR base, struct trad_frame_saved_reg *saved_regs)
Definition: hppa-tdep.h:109
static void read_unwind_info(struct objfile *objfile)
Definition: hppa-tdep.c:351
static const struct objfile_data * hppa_objfile_priv_data
Definition: hppa-tdep.c:87
#define bits(obj, st, fn)
Definition: aarch64-tdep.c:64
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
Definition: gdbarch.c:1491
unsigned int stub_type
Definition: hppa-tdep.h:167
unsigned int Save_SP
Definition: hppa-tdep.h:148
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
Definition: frame-unwind.c:79
#define MSYMBOL_VALUE(symbol)
Definition: symtab.h:682
struct value * hppa_frame_prev_register_helper(struct frame_info *this_frame, struct trad_frame_saved_reg saved_regs[], int regnum)
Definition: hppa-tdep.c:2774
#define FRAME_OBSTACK_ZALLOC(TYPE)
Definition: frame.h:678
static struct hppa_frame_cache * hppa_frame_cache(struct frame_info *this_frame, void **this_cache)
Definition: hppa-tdep.c:1879
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: utils.c:2745
unsigned int cxx_try_catch
Definition: hppa-tdep.h:145
struct value * frame_unwind_got_constant(struct frame_info *frame, int regnum, ULONGEST val)
Definition: frame-unwind.c:246
static int hppa_in_dyncall(CORE_ADDR pc)
Definition: hppa-tdep.c:2912
static CORE_ADDR hppa_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.c:1833
int hppa_in_solib_call_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.c:2924
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep)
Definition: gdbarch.c:5257
#define pif(FLD)
static struct gdbarch * hppa_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
Definition: hppa-tdep.c:3047
CORE_ADDR dummy_call_sequence_addr
Definition: hppa-tdep.c:78
const char *const name
Definition: aarch64-tdep.c:76
static CORE_ADDR skip_prologue_hard_way(struct gdbarch *gdbarch, CORE_ADDR pc, int stop_before_branch)
Definition: hppa-tdep.c:1542
static struct unwind_table_entry * hppa_find_unwind_entry_in_block(struct frame_info *this_frame)
Definition: hppa-tdep.c:1858
static CORE_ADDR hppa_fetch_pointer_argument(struct frame_info *frame, int argi, struct type *type)
Definition: hppa-tdep.c:2743
unsigned int Cleanup_defined
Definition: hppa-tdep.h:152
void set_gdbarch_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype register_type)
Definition: gdbarch.c:2316
struct type * check_typedef(struct type *type)
Definition: gdbtypes.c:2421
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
Definition: corefile.c:316
const gdb_byte * value_contents(struct value *value)
Definition: value.c:1407
static struct value * hppa_fallback_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
Definition: hppa-tdep.c:2414
CORE_ADDR region_end
Definition: hppa-tdep.h:127
CORE_ADDR gdbarch_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: gdbarch.c:3208
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
Definition: symtab.c:3288
static const struct frame_unwind hppa_stub_frame_unwind
Definition: hppa-tdep.c:2507
unsigned hppa_extract_5r_store(unsigned word)
Definition: hppa-tdep.c:139
objfile(bfd *, const char *, objfile_flags)
Definition: objfiles.c:373
typedef BP_MANIPULATION(hppa_break_insn)
Definition: hppa-tdep.c:609
void set_gdbarch_stack_frame_destroyed_p(struct gdbarch *gdbarch, gdbarch_stack_frame_destroyed_p_ftype stack_frame_destroyed_p)
Definition: gdbarch.c:3367
static const char * hppa64_register_name(struct gdbarch *gdbarch, int i)
Definition: hppa-tdep.c:657
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
Definition: defs.h:577
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:777
int safe_frame_unwind_memory(struct frame_info *this_frame, CORE_ADDR addr, gdb_byte *buf, int len)
Definition: frame.c:2681
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
Definition: gdbarch.c:2156
int hppa_extract_14(unsigned word)
Definition: hppa-tdep.c:155
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
Definition: gdbarch.c:2340
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2018
struct_return
Definition: arm-tdep.h:88
void set_gdbarch_believe_pcc_promotion(struct gdbarch *gdbarch, int believe_pcc_promotion)
Definition: gdbarch.c:2588
const gdb_byte * value_contents_all(struct value *value)
Definition: value.c:1265
static int hppa64_cannot_store_register(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2709
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
static int is_branch(unsigned long inst)
Definition: hppa-tdep.c:1378
unsigned int MPE_XL_interrupt_marker
Definition: hppa-tdep.h:154
#define ANOFFSET(secoff, whichone)
Definition: symtab.h:1276
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
Definition: objfiles.c:445
#define TARGET_CHAR_BIT
Definition: host-defs.h:29
void set_gdbarch_cannot_store_register(struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype cannot_store_register)
Definition: gdbarch.c:2548
static int hppa_low_hppa_sign_extend(unsigned val, unsigned bits)
Definition: hppa-tdep.c:114
Definition: gdbtypes.h:749
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
Definition: blockframe.c:320
unsigned int mask
static int inst_saves_gr(unsigned long inst)
Definition: hppa-tdep.c:1478
unsigned int Save_RP
Definition: hppa-tdep.h:149
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
Definition: gdbarch.c:3079
struct type * builtin_uint32
Definition: gdbtypes.h:1539
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
Definition: frame-unwind.c:174
static struct frame_id hppa_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
Definition: hppa-tdep.c:2517
unsigned int alloca_frame
Definition: hppa-tdep.h:157
Definition: top.h:56
unsigned int sched_entry_seq
Definition: hppa-tdep.h:146
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
Definition: gnu-nat.c:1822
struct value * value_cast(struct type *type, struct value *arg2)
Definition: valops.c:351
void set_gdbarch_read_pc(struct gdbarch *gdbarch, gdbarch_read_pc_ftype read_pc)
Definition: gdbarch.c:1919
static struct value * hppa_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
Definition: hppa-tdep.c:2294
static int hppa32_cannot_fetch_register(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2699
static enum return_value_convention hppa64_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: hppa-tdep.c:1183
struct gdbarch * gdbarch
Definition: gdbarch.h:1622
void set_gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, gdbarch_convert_from_func_ptr_addr_ftype convert_from_func_ptr_addr)
Definition: gdbarch.c:3201
struct trad_frame_saved_reg * saved_regs
Definition: hppa-tdep.c:1875
int regnum
Definition: aarch64-tdep.c:77
void printf_unfiltered(const char *format,...)
Definition: utils.c:2056
struct cmd_list_element * setdebuglist
Definition: cli-cmds.c:153
static struct type * hppa64_register_type(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2678
struct obj_section * find_pc_section(CORE_ADDR pc)
Definition: objfiles.c:1395
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
Definition: frame.c:1308
int gdbarch_in_solib_return_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
Definition: gdbarch.c:3340
CORE_ADDR region_start
Definition: hppa-tdep.h:126
struct cmd_list_element * maintenanceprintlist
Definition: cli-cmds.c:143
unsigned int Separate_Package_Body
Definition: hppa-tdep.h:139
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
Definition: gdbarch.c:2871
struct trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
Definition: trad-frame.c:47
unsigned int Millicode_save_sr0
Definition: hppa-tdep.h:131
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
Definition: gdbarch.c:1623
LONGEST unpack_long(struct type *type, const gdb_byte *valaddr)
Definition: value.c:2880
#define STUB_UNWIND_ENTRY_SIZE
Definition: hppa-tdep.c:97
int hppa_extract_17(unsigned word)
Definition: hppa-tdep.c:185
void hppa_write_pc(struct regcache *regcache, CORE_ADDR pc)
Definition: hppa-tdep.c:1327
static int hppa64_floating_p(const struct type *type)
Definition: hppa-tdep.c:910
unsigned int reserved2
Definition: hppa-tdep.h:158
Definition: regdef.h:22
static const struct frame_unwind hppa_frame_unwind
Definition: hppa-tdep.c:2313
static CORE_ADDR hppa32_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
Definition: hppa-tdep.c:717
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
struct hppa_unwind_info * unwind_info
Definition: hppa-tdep.c:73
CORE_ADDR hppa_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
Definition: hppa-tdep.c:2525
#define HPPA_MAX_INSN_PATTERN_LEN
Definition: hppa-tdep.c:2857
static struct insn_pattern hppa_import_pic_stub[]
Definition: hppa-tdep.c:2836
bfd_byte gdb_byte
Definition: common-types.h:38
unsigned int HP_UX_interrupt_marker
Definition: hppa-tdep.h:155
void set_gdbarch_pseudo_register_read(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype pseudo_register_read)
Definition: gdbarch.c:1984
ULONGEST align_up(ULONGEST v, int n)
Definition: utils.c:2997
#define ALL_MSYMBOLS(objfile, m)
Definition: objfiles.h:626
unsigned int Entry_FR
Definition: hppa-tdep.h:135
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
struct type * builtin_double
Definition: gdbtypes.h:1511
static const struct frame_unwind hppa_fallback_frame_unwind
Definition: hppa-tdep.c:2424
static enum return_value_convention hppa32_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: hppa-tdep.c:1143
#define XCNEW(T)
Definition: poison.h:121
int frame_relative_level(struct frame_info *fi)
Definition: frame.c:2610
CORE_ADDR parse_and_eval_address(const char *exp)
Definition: eval.c:101
#define MASK_5
Definition: hppa-tdep.c:90
#define UNWIND_ENTRY_SIZE
Definition: hppa-tdep.c:96
#define TYPE_CODE(thistype)
Definition: gdbtypes.h:1238
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:806
static CORE_ADDR hppa64_convert_code_addr_to_fptr(struct gdbarch *gdbarch, CORE_ADDR code)
Definition: hppa-tdep.c:930
static struct hppa_stub_unwind_cache * hppa_stub_frame_unwind_cache(struct frame_info *this_frame, void **this_cache)
Definition: hppa-tdep.c:2442
static int hppa64_integral_or_pointer_p(const struct type *type)
Definition: hppa-tdep.c:883
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Definition: target.c:1370
static int in_plt_section(CORE_ADDR pc)
Definition: objfiles.h:542
static int prologue_inst_adjust_sp(unsigned long inst)
Definition: hppa-tdep.c:1339
struct minimal_symbol * minsym
Definition: minsyms.h:34
unsigned int Millicode
Definition: hppa-tdep.h:130
#define obj_section_addr(s)
Definition: objfiles.h:140
int offset
Definition: agent.c:65
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:569
int code
Definition: ser-unix.c:239
struct objfile * objfile
Definition: objfiles.h:129
static CORE_ADDR hppa32_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: hppa-tdep.c:1276
static void hppa_fallback_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
Definition: hppa-tdep.c:2404
#define qsort
Definition: ada-exp.c:2694
static struct type * hppa32_register_type(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2669
enum register_status regcache_cooked_read(struct regcache *regcache, int regnum, gdb_byte *buf)
Definition: regcache.c:661
void set_gdbarch_fetch_pointer_argument(struct gdbarch *gdbarch, gdbarch_fetch_pointer_argument_ftype fetch_pointer_argument)
Definition: gdbarch.c:3623
CORE_ADDR pc
Definition: symtab.h:1759
int hppa_get_field(unsigned word, int from, int to)
Definition: hppa-tdep.c:123
static int compare_unwind_entries(const void *arg1, const void *arg2)
Definition: hppa-tdep.c:225
static void hppa_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
Definition: hppa-tdep.c:2281
CORE_ADDR(* solib_get_text_base)(struct objfile *objfile)
Definition: hppa-tdep.h:117
struct m32c_reg * sp
Definition: m32c-tdep.c:119
static int hppa32_cannot_store_register(struct gdbarch *gdbarch, int regnum)
Definition: hppa-tdep.c:2690
static int hppa_sign_extend(unsigned val, unsigned bits)
Definition: hppa-tdep.c:106
CORE_ADDR base
Definition: hppa-tdep.c:1874
unsigned int Frame_Extension_Millicode
Definition: hppa-tdep.h:140
static int hppa_match_insns_relaxed(struct gdbarch *gdbarch, CORE_ADDR pc, struct insn_pattern *pattern, unsigned int *insn)
Definition: hppa-tdep.c:2895
static const int hppa64_num_regs
Definition: hppa-tdep.c:48
unsigned long long ULONGEST
Definition: common-types.h:53
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
Definition: frame-unwind.c:184
int bytes_per_address
Definition: hppa-tdep.h:89
static struct hppa_objfile_private * hppa_init_objfile_priv_data(struct objfile *objfile)
Definition: hppa-tdep.c:206
struct unwind_table_entry * cache
Definition: hppa-tdep.c:67
int register_size(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:164
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
Definition: gdbarch.c:1756
#define gdb_stdlog
Definition: utils.h:349
struct type * value_type(const struct value *value)
Definition: value.c:1095
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
Definition: gdbarch.c:1606
enum register_status regcache_cooked_read_part(struct regcache *regcache, int regnum, int offset, int len, gdb_byte *buf)
Definition: regcache.c:972
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
Definition: gdbarch.c:2738
static int hppa_debug
Definition: hppa-tdep.c:44
struct cmd_list_element * showdebuglist
Definition: cli-cmds.c:155
static int hppa_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.c:575
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
Definition: gdbarch.c:1772
static int hppa64_dwarf_reg_to_regnum(struct gdbarch *gdbarch, int reg)
Definition: hppa-tdep.c:693
static CORE_ADDR hppa32_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: hppa-tdep.c:1290
static void hppa_stub_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
Definition: hppa-tdep.c:2465
int core_addr_greaterthan(CORE_ADDR lhs, CORE_ADDR rhs)
Definition: arch-utils.c:123
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
Definition: gdbarch.c:1841
struct objfile * objfile
Definition: minsyms.h:39
unsigned int cxx_info
Definition: hppa-tdep.h:144
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:612
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
Definition: gdbarch.c:2381
static void record_text_segment_lowaddr(bfd *abfd, asection *section, void *data)
Definition: hppa-tdep.c:239
struct unwind_table_entry * find_unwind_entry(CORE_ADDR pc)
Definition: hppa-tdep.c:486
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
Definition: corefile.c:326
struct section_offsets * section_offsets
Definition: objfiles.h:396
void gdb_flush(struct ui_file *file)
Definition: ui-file.c:93
struct type * builtin_uint64
Definition: gdbtypes.h:1541
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype sw_breakpoint_from_kind)
Definition: gdbarch.c:2888
CORE_ADDR read_memory_typed_address(CORE_ADDR addr, struct type *type)
Definition: corefile.c:383
#define ALL_OBJFILES(obj)
Definition: objfiles.h:582
static CORE_ADDR hppa_find_global_pointer(struct gdbarch *gdbarch, struct value *function)
Definition: hppa-tdep.c:2768
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
Definition: corefile.c:394
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
Definition: gdbarch.c:2772
unsigned hppa_extract_5R_store(unsigned word)
Definition: hppa-tdep.c:147
static const int hppa32_num_regs
Definition: hppa-tdep.c:47
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
Definition: minsyms.c:311
static int hppa_match_insns(struct gdbarch *gdbarch, CORE_ADDR pc, struct insn_pattern *pattern, unsigned int *insn)
Definition: hppa-tdep.c:2868
unsigned int Entry_GR
Definition: hppa-tdep.h:136
enum bfd_endian byte_order
Definition: gdbarch.c:137
struct unwind_table_entry * table
Definition: hppa-tdep.c:66
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
Definition: gdbarch.c:2292
CORE_ADDR get_frame_func(struct frame_info *this_frame)
Definition: frame.c:1001
#define MASK_14
Definition: hppa-tdep.c:92
void error(const char *fmt,...)
Definition: errors.c:38
size_t size
Definition: go32-nat.c:242
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep *tdep)
Definition: gdbarch.c:361
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype inner_than)
Definition: gdbarch.c:2837
Definition: hppa-tdep.h:124
unsigned int Stack_Overflow_Check
Definition: hppa-tdep.h:141
static enum register_status hppa_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, gdb_byte *buf)
Definition: hppa-tdep.c:2750
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2691
unwind_stub_types
Definition: hppa-tdep.h:180
constexpr gdb_byte hppa_break_insn[]
Definition: hppa-tdep.c:607
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
Definition: regcache.c:873
#define HPPA_INSN_SIZE
Definition: hppa-tdep.h:82
static struct insn_pattern hppa_long_branch_stub[]
Definition: hppa-tdep.c:2806
int hppa_extract_21(unsigned word)
Definition: hppa-tdep.c:163
unsigned int Region_description
Definition: hppa-tdep.h:132
static void unwind_command(const char *exp, int from_tty)
Definition: hppa-tdep.c:2575
struct type * builtin_float
Definition: gdbtypes.h:1510
struct obj_section * sections_end
Definition: objfiles.h:424
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
Definition: defs.h:604
#define gdb_stdout
Definition: utils.h:340
unsigned int Args_stored
Definition: hppa-tdep.h:137