xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/hppa-tdep.c (revision e6c7e151de239c49d2e38720a061ed9d1fa99309)
1 /* Target-dependent code for the HP PA-RISC architecture.
2 
3    Copyright (C) 1986-2017 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  */
64 struct hppa_unwind_info
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 
71 struct hppa_objfile_private
72   {
73     struct hppa_unwind_info *unwind_info;	/* a pointer */
74     struct so_list *so_info;			/* a pointer  */
75     CORE_ADDR dp;
76 
77     int dummy_call_sequence_reg;
78     CORE_ADDR dummy_call_sequence_addr;
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 {
196   struct bound_minimal_symbol minsym;
197 
198   minsym = lookup_minimal_symbol (sym, NULL, NULL);
199   if (minsym.minsym)
200     return BMSYMBOL_VALUE_ADDRESS (minsym);
201   else
202     return (CORE_ADDR)-1;
203 }
204 
205 static struct hppa_objfile_private *
206 hppa_init_objfile_priv_data (struct objfile *objfile)
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
253 internalize_unwinds (struct objfile *objfile, struct unwind_table_entry *table,
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     {
262       struct gdbarch *gdbarch = get_objfile_arch (objfile);
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,
279 				 record_text_segment_lowaddr,
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
351 read_unwind_info (struct objfile *objfile)
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 
361   text_offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
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),
469 	 compare_unwind_entries);
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 *
486 find_unwind_entry (CORE_ADDR pc)
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 
504   ALL_OBJFILES (objfile)
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       {
515 	read_unwind_info (objfile);
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
575 hppa_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
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     "cr27",   "cr28",    "cr29",   "cr30",
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 *
657 hppa64_register_name (struct gdbarch *gdbarch, int i)
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
693 hppa64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
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)
863     regcache_cooked_write_unsigned (regcache, 19, gp);
864 
865   /* Set the return address.  */
866   if (!gdbarch_push_dummy_code_p (gdbarch))
867     regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr);
868 
869   /* Update the Stack Pointer.  */
870   regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, param_end);
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
883 hppa64_integral_or_pointer_p (const struct type *type)
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:
898     case TYPE_CODE_RVALUE_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
930 hppa64_convert_code_addr_to_fptr (struct gdbarch *gdbarch, CORE_ADDR code)
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 
1000       if (hppa64_integral_or_pointer_p (type))
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."  */
1044 	      regnum = HPPA64_FP4_REGNUM + offset / 8;
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."  */
1052 		  regcache_cooked_write_part (regcache, regnum, offset % 8,
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
1073           && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
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 	{
1094 	  regcache_cooked_write_part (regcache, regnum,
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).  */
1106   regcache_cooked_write_unsigned (regcache, HPPA_RET1_REGNUM, sp + 64);
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)
1122     regcache_cooked_write_unsigned (regcache, HPPA_RET0_REGNUM, struct_addr);
1123 
1124   /* Set up GR27 (%dp) to hold the global pointer (gp).  */
1125   gp = tdep->find_global_pointer (gdbarch, function);
1126   if (gp != 0)
1127     regcache_cooked_write_unsigned (regcache, HPPA_DP_REGNUM, gp);
1128 
1129   /* Set up GR2 (%rp) to hold the return pointer (rp).  */
1130   if (!gdbarch_push_dummy_code_p (gdbarch))
1131     regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr);
1132 
1133   /* Set up GR30 to hold the stack pointer (sp).  */
1134   regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, 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)
1160 	    regcache_cooked_read_part (regcache, reg, 4 - part,
1161 				       part, readbuf);
1162 	  if (writebuf != NULL)
1163 	    regcache_cooked_write_part (regcache, reg, 4 - part,
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 	}
1176       return RETURN_VALUE_REGISTER_CONVENTION;
1177     }
1178   else
1179     return RETURN_VALUE_STRUCT_CONVENTION;
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.  */
1194       gdb_assert (!hppa64_integral_or_pointer_p (type));
1195       gdb_assert (!hppa64_floating_p (type));
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."  */
1200       return RETURN_VALUE_STRUCT_CONVENTION;
1201     }
1202 
1203   if (hppa64_integral_or_pointer_p (type))
1204     {
1205       /* "Integral return values are returned in GR 28.  Values
1206          smaller than 64 bits are padded on the left (with garbage)."  */
1207       regnum = HPPA_RET0_REGNUM;
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."  */
1221 	  regnum = HPPA_RET0_REGNUM;
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)."  */
1229 	  regnum = HPPA64_FP4_REGNUM;
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."  */
1243       regnum = HPPA_RET0_REGNUM;
1244       offset = 0;
1245     }
1246 
1247   if (readbuf)
1248     {
1249       while (len > 0)
1250 	{
1251 	  regcache_cooked_read_part (regcache, regnum, offset,
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 	{
1263 	  regcache_cooked_write_part (regcache, regnum, offset,
1264 				      std::min (len, 8), writebuf);
1265 	  writebuf += std::min (len, 8);
1266 	  len -= std::min (len, 8);
1267 	  regnum++;
1268 	}
1269     }
1270 
1271   return RETURN_VALUE_REGISTER_CONVENTION;
1272 }
1273 
1274 
1275 static CORE_ADDR
1276 hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR 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
1290 hppa32_frame_align (struct gdbarch *gdbarch, CORE_ADDR 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
1300 hppa64_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1301 {
1302   /* Just always 16-byte align.  */
1303   return align_up (addr, 16);
1304 }
1305 
1306 CORE_ADDR
1307 hppa_read_pc (struct regcache *regcache)
1308 {
1309   ULONGEST ipsw;
1310   ULONGEST pc;
1311 
1312   regcache_cooked_read_unsigned (regcache, HPPA_IPSW_REGNUM, &ipsw);
1313   regcache_cooked_read_unsigned (regcache, HPPA_PCOQ_HEAD_REGNUM, &pc);
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
1327 hppa_write_pc (struct regcache *regcache, CORE_ADDR pc)
1328 {
1329   regcache_cooked_write_unsigned (regcache, HPPA_PCOQ_HEAD_REGNUM, pc);
1330   regcache_cooked_write_unsigned (regcache, HPPA_PCOQ_TAIL_REGNUM, pc + 4);
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
1542 skip_prologue_hard_way (struct gdbarch *gdbarch, CORE_ADDR pc,
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
1792 after_prologue (CORE_ADDR pc)
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
1833 hppa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
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 *
1858 hppa_find_unwind_entry_in_block (struct frame_info *this_frame)
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 
1872 struct hppa_frame_cache
1873 {
1874   CORE_ADDR base;
1875   struct trad_frame_saved_reg *saved_regs;
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 *
2294 hppa_frame_prev_register (struct frame_info *this_frame,
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
2304 hppa_frame_unwind_sniffer (const struct frame_unwind *self,
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,
2316   default_frame_unwind_stop_reason,
2317   hppa_frame_this_id,
2318   hppa_frame_prev_register,
2319   NULL,
2320   hppa_frame_unwind_sniffer
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)
2342     fprintf_unfiltered (gdb_stdlog,
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;
2385   trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2386 
2387   if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2388     {
2389       cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base;
2390       cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] =
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);
2397       trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
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 *
2414 hppa_fallback_frame_prev_register (struct frame_info *this_frame,
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 
2424 static const struct frame_unwind hppa_fallback_frame_unwind =
2425 {
2426   NORMAL_FRAME,
2427   default_frame_unwind_stop_reason,
2428   hppa_fallback_frame_this_id,
2429   hppa_fallback_frame_prev_register,
2430   NULL,
2431   default_frame_sniffer
2432 };
2433 
2434 /* Stub frames, used for all kinds of call stubs.  */
2435 struct hppa_stub_unwind_cache
2436 {
2437   CORE_ADDR base;
2438   struct trad_frame_saved_reg *saved_regs;
2439 };
2440 
2441 static struct hppa_stub_unwind_cache *
2442 hppa_stub_frame_unwind_cache (struct frame_info *this_frame,
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 
2452   info = FRAME_OBSTACK_ZALLOC (struct hppa_stub_unwind_cache);
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.  */
2459   info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM;
2460 
2461   return info;
2462 }
2463 
2464 static void
2465 hppa_stub_frame_this_id (struct frame_info *this_frame,
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 *
2477 hppa_stub_frame_prev_register (struct frame_info *this_frame,
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
2491 hppa_stub_unwind_sniffer (const struct frame_unwind *self,
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))
2502       || gdbarch_in_solib_return_trampoline (gdbarch, pc, NULL))
2503     return 1;
2504   return 0;
2505 }
2506 
2507 static const struct frame_unwind hppa_stub_frame_unwind = {
2508   NORMAL_FRAME,
2509   default_frame_unwind_stop_reason,
2510   hppa_stub_frame_this_id,
2511   hppa_stub_frame_prev_register,
2512   NULL,
2513   hppa_stub_unwind_sniffer
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);
2531   pc = frame_unwind_register_unsigned (next_frame, HPPA_PCOQ_HEAD_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
2548 hppa_lookup_stub_minimal_symbol (const char *name,
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 (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));
2598   gdb_flush (gdb_stdout);
2599 
2600   printf_unfiltered ("\tregion_end = %s\n", hex_string (u->region_end));
2601   gdb_flush (gdb_stdout);
2602 
2603 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
2604 
2605   printf_unfiltered ("\n\tflags =");
2606   pif (Cannot_unwind);
2607   pif (Millicode);
2608   pif (Millicode_save_sr0);
2609   pif (Entry_SR);
2610   pif (Args_stored);
2611   pif (Variable_Frame);
2612   pif (Separate_Package_Body);
2613   pif (Frame_Extension_Millicode);
2614   pif (Stack_Overflow_Check);
2615   pif (Two_Instruction_SP_Increment);
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);
2622   pif (Save_MRP_in_frame);
2623   pif (save_r19);
2624   pif (Cleanup_defined);
2625   pif (MPE_XL_interrupt_marker);
2626   pif (HP_UX_interrupt_marker);
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 
2634   pin (Region_description);
2635   pin (Entry_FR);
2636   pin (Entry_GR);
2637   pin (Total_frame_size);
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 *
2669 hppa32_register_type (struct gdbarch *gdbarch, int regnum)
2670 {
2671    if (regnum < HPPA_FP4_REGNUM)
2672      return builtin_type (gdbarch)->builtin_uint32;
2673    else
2674      return builtin_type (gdbarch)->builtin_float;
2675 }
2676 
2677 static struct type *
2678 hppa64_register_type (struct gdbarch *gdbarch, int regnum)
2679 {
2680    if (regnum < HPPA64_FP4_REGNUM)
2681      return builtin_type (gdbarch)->builtin_uint64;
2682    else
2683      return builtin_type (gdbarch)->builtin_double;
2684 }
2685 
2686 /* Return non-zero if REGNUM is not a register available to the user
2687    through ptrace/ttrace.  */
2688 
2689 static int
2690 hppa32_cannot_store_register (struct gdbarch *gdbarch, int regnum)
2691 {
2692   return (regnum == 0
2693           || regnum == HPPA_PCSQ_HEAD_REGNUM
2694           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2695           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM));
2696 }
2697 
2698 static int
2699 hppa32_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
2700 {
2701   /* cr26 and cr27 are readable (but not writable) from userspace.  */
2702   if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM)
2703     return 0;
2704   else
2705     return hppa32_cannot_store_register (gdbarch, regnum);
2706 }
2707 
2708 static int
2709 hppa64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
2710 {
2711   return (regnum == 0
2712           || regnum == HPPA_PCSQ_HEAD_REGNUM
2713           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2714           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM));
2715 }
2716 
2717 static int
2718 hppa64_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
2719 {
2720   /* cr26 and cr27 are readable (but not writable) from userspace.  */
2721   if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM)
2722     return 0;
2723   else
2724     return hppa64_cannot_store_register (gdbarch, regnum);
2725 }
2726 
2727 static CORE_ADDR
2728 hppa_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR 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
2750 hppa_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
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 
2757   status = regcache_raw_read_unsigned (regcache, regnum, &tmp);
2758   if (status == REG_VALID)
2759     {
2760       if (regnum == HPPA_PCOQ_HEAD_REGNUM || regnum == HPPA_PCOQ_TAIL_REGNUM)
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 *
2774 hppa_frame_prev_register_helper (struct frame_info *this_frame,
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 
2781   if (regnum == HPPA_PCOQ_TAIL_REGNUM)
2782     {
2783       int size = register_size (arch, HPPA_PCOQ_HEAD_REGNUM);
2784       CORE_ADDR pc;
2785       struct value *pcoq_val =
2786         trad_frame_get_prev_register (this_frame, saved_regs,
2787                                       HPPA_PCOQ_HEAD_REGNUM);
2788 
2789       pc = extract_unsigned_integer (value_contents_all (pcoq_val),
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 */
2806 static struct insn_pattern hppa_long_branch_stub[] = {
2807   /* ldil LR'xxx,%r1 */
2808   { 0x20200000, 0xffe00000 },
2809   /* be,n RR'xxx(%sr4,%r1) */
2810   { 0xe0202002, 0xffe02002 },
2811   { 0, 0 }
2812 };
2813 
2814 static struct insn_pattern hppa_long_branch_pic_stub[] = {
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 
2836 static struct insn_pattern hppa_import_pic_stub[] = {
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
2868 hppa_match_insns (struct gdbarch *gdbarch, CORE_ADDR pc,
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
2895 hppa_match_insns_relaxed (struct gdbarch *gdbarch, CORE_ADDR pc,
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++)
2904     if (hppa_match_insns (gdbarch, pc - offset * HPPA_INSN_SIZE,
2905 			  pattern, insn))
2906       return 1;
2907 
2908   return 0;
2909 }
2910 
2911 static int
2912 hppa_in_dyncall (CORE_ADDR pc)
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
2924 hppa_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc)
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
2941     (hppa_match_insns_relaxed (gdbarch, pc, hppa_import_stub, insn)
2942      || hppa_match_insns_relaxed (gdbarch, pc, hppa_import_pic_stub, insn)
2943      || hppa_match_insns_relaxed (gdbarch, pc, hppa_long_branch_stub, insn)
2944      || hppa_match_insns_relaxed (gdbarch, pc,
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
2952 hppa_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
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)
2979         pc += get_frame_register_unsigned (frame, HPPA_DP_REGNUM);
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)
3065     tdep->bytes_per_address =
3066       info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte;
3067   else
3068     tdep->bytes_per_address = 4;
3069 
3070   tdep->find_global_pointer = hppa_find_global_pointer;
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:
3077         set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
3078         set_gdbarch_register_name (gdbarch, hppa32_register_name);
3079         set_gdbarch_register_type (gdbarch, hppa32_register_type);
3080 	set_gdbarch_cannot_store_register (gdbarch,
3081 					   hppa32_cannot_store_register);
3082 	set_gdbarch_cannot_fetch_register (gdbarch,
3083 					   hppa32_cannot_fetch_register);
3084         break;
3085       case 8:
3086         set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
3087         set_gdbarch_register_name (gdbarch, hppa64_register_name);
3088         set_gdbarch_register_type (gdbarch, hppa64_register_type);
3089         set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
3090 	set_gdbarch_cannot_store_register (gdbarch,
3091 					   hppa64_cannot_store_register);
3092 	set_gdbarch_cannot_fetch_register (gdbarch,
3093 					   hppa64_cannot_fetch_register);
3094         break;
3095       default:
3096         internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
3097                         tdep->bytes_per_address);
3098     }
3099 
3100   set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
3101   set_gdbarch_ptr_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
3102 
3103   /* The following gdbarch vector elements are the same in both ILP32
3104      and LP64, but might show differences some day.  */
3105   set_gdbarch_long_long_bit (gdbarch, 64);
3106   set_gdbarch_long_double_bit (gdbarch, 128);
3107   set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3108 
3109   /* The following gdbarch vector elements do not depend on the address
3110      size, or in any other gdbarch element previously set.  */
3111   set_gdbarch_skip_prologue (gdbarch, hppa_skip_prologue);
3112   set_gdbarch_stack_frame_destroyed_p (gdbarch,
3113 				       hppa_stack_frame_destroyed_p);
3114   set_gdbarch_inner_than (gdbarch, core_addr_greaterthan);
3115   set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM);
3116   set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM);
3117   set_gdbarch_addr_bits_remove (gdbarch, hppa_addr_bits_remove);
3118   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3119   set_gdbarch_read_pc (gdbarch, hppa_read_pc);
3120   set_gdbarch_write_pc (gdbarch, hppa_write_pc);
3121 
3122   /* Helper for function argument information.  */
3123   set_gdbarch_fetch_pointer_argument (gdbarch, hppa_fetch_pointer_argument);
3124 
3125   set_gdbarch_print_insn (gdbarch, print_insn_hppa);
3126 
3127   /* When a hardware watchpoint triggers, we'll move the inferior past
3128      it by removing all eventpoints; stepping past the instruction
3129      that caused the trigger; reinserting eventpoints; and checking
3130      whether any watched location changed.  */
3131   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3132 
3133   /* Inferior function call methods.  */
3134   switch (tdep->bytes_per_address)
3135     {
3136     case 4:
3137       set_gdbarch_push_dummy_call (gdbarch, hppa32_push_dummy_call);
3138       set_gdbarch_frame_align (gdbarch, hppa32_frame_align);
3139       set_gdbarch_convert_from_func_ptr_addr
3140         (gdbarch, hppa32_convert_from_func_ptr_addr);
3141       break;
3142     case 8:
3143       set_gdbarch_push_dummy_call (gdbarch, hppa64_push_dummy_call);
3144       set_gdbarch_frame_align (gdbarch, hppa64_frame_align);
3145       break;
3146     default:
3147       internal_error (__FILE__, __LINE__, _("bad switch"));
3148     }
3149 
3150   /* Struct return methods.  */
3151   switch (tdep->bytes_per_address)
3152     {
3153     case 4:
3154       set_gdbarch_return_value (gdbarch, hppa32_return_value);
3155       break;
3156     case 8:
3157       set_gdbarch_return_value (gdbarch, hppa64_return_value);
3158       break;
3159     default:
3160       internal_error (__FILE__, __LINE__, _("bad switch"));
3161     }
3162 
3163   set_gdbarch_breakpoint_kind_from_pc (gdbarch, hppa_breakpoint::kind_from_pc);
3164   set_gdbarch_sw_breakpoint_from_kind (gdbarch, hppa_breakpoint::bp_from_kind);
3165   set_gdbarch_pseudo_register_read (gdbarch, hppa_pseudo_register_read);
3166 
3167   /* Frame unwind methods.  */
3168   set_gdbarch_dummy_id (gdbarch, hppa_dummy_id);
3169   set_gdbarch_unwind_pc (gdbarch, hppa_unwind_pc);
3170 
3171   /* Hook in ABI-specific overrides, if they have been registered.  */
3172   gdbarch_init_osabi (info, gdbarch);
3173 
3174   /* Hook in the default unwinders.  */
3175   frame_unwind_append_unwinder (gdbarch, &hppa_stub_frame_unwind);
3176   frame_unwind_append_unwinder (gdbarch, &hppa_frame_unwind);
3177   frame_unwind_append_unwinder (gdbarch, &hppa_fallback_frame_unwind);
3178 
3179   return gdbarch;
3180 }
3181 
3182 static void
3183 hppa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3184 {
3185   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3186 
3187   fprintf_unfiltered (file, "bytes_per_address = %d\n",
3188                       tdep->bytes_per_address);
3189   fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
3190 }
3191 
3192 /* Provide a prototype to silence -Wmissing-prototypes.  */
3193 extern initialize_file_ftype _initialize_hppa_tdep;
3194 
3195 void
3196 _initialize_hppa_tdep (void)
3197 {
3198   gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep);
3199 
3200   hppa_objfile_priv_data = register_objfile_data ();
3201 
3202   add_cmd ("unwind", class_maintenance, unwind_command,
3203 	   _("Print unwind table entry at given address."),
3204 	   &maintenanceprintlist);
3205 
3206   /* Debug this files internals.  */
3207   add_setshow_boolean_cmd ("hppa", class_maintenance, &hppa_debug, _("\
3208 Set whether hppa target specific debugging information should be displayed."),
3209 			   _("\
3210 Show whether hppa target specific debugging information is displayed."), _("\
3211 This flag controls whether hppa target specific debugging information is\n\
3212 displayed.  This information is particularly useful for debugging frame\n\
3213 unwinding problems."),
3214 			   NULL,
3215 			   NULL, /* FIXME: i18n: hppa debug flag is %s.  */
3216 			   &setdebuglist, &showdebuglist);
3217 }
3218