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