Use XOBNEW/XOBNEWVEC/OBSTACK_ZALLOC when possible
[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                         int struct_return, CORE_ADDR struct_addr)
718 {
719   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
720
721   /* Stack base address at which any pass-by-reference parameters are
722      stored.  */
723   CORE_ADDR struct_end = 0;
724   /* Stack base address at which the first parameter is stored.  */
725   CORE_ADDR param_end = 0;
726
727   /* Two passes.  First pass computes the location of everything,
728      second pass writes the bytes out.  */
729   int write_pass;
730
731   /* Global pointer (r19) of the function we are trying to call.  */
732   CORE_ADDR gp;
733
734   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
735
736   for (write_pass = 0; write_pass < 2; write_pass++)
737     {
738       CORE_ADDR struct_ptr = 0;
739       /* The first parameter goes into sp-36, each stack slot is 4-bytes.
740          struct_ptr is adjusted for each argument below, so the first
741          argument will end up at sp-36.  */
742       CORE_ADDR param_ptr = 32;
743       int i;
744       int small_struct = 0;
745
746       for (i = 0; i < nargs; i++)
747         {
748           struct value *arg = args[i];
749           struct type *type = check_typedef (value_type (arg));
750           /* The corresponding parameter that is pushed onto the
751              stack, and [possibly] passed in a register.  */
752           gdb_byte param_val[8];
753           int param_len;
754           memset (param_val, 0, sizeof param_val);
755           if (TYPE_LENGTH (type) > 8)
756             {
757               /* Large parameter, pass by reference.  Store the value
758                  in "struct" area and then pass its address.  */
759               param_len = 4;
760               struct_ptr += align_up (TYPE_LENGTH (type), 8);
761               if (write_pass)
762                 write_memory (struct_end - struct_ptr, value_contents (arg),
763                               TYPE_LENGTH (type));
764               store_unsigned_integer (param_val, 4, byte_order,
765                                       struct_end - struct_ptr);
766             }
767           else if (TYPE_CODE (type) == TYPE_CODE_INT
768                    || TYPE_CODE (type) == TYPE_CODE_ENUM)
769             {
770               /* Integer value store, right aligned.  "unpack_long"
771                  takes care of any sign-extension problems.  */
772               param_len = align_up (TYPE_LENGTH (type), 4);
773               store_unsigned_integer (param_val, param_len, byte_order,
774                                       unpack_long (type,
775                                                    value_contents (arg)));
776             }
777           else if (TYPE_CODE (type) == TYPE_CODE_FLT)
778             {
779               /* Floating point value store, right aligned.  */
780               param_len = align_up (TYPE_LENGTH (type), 4);
781               memcpy (param_val, value_contents (arg), param_len);
782             }
783           else
784             {
785               param_len = align_up (TYPE_LENGTH (type), 4);
786
787               /* Small struct value are stored right-aligned.  */
788               memcpy (param_val + param_len - TYPE_LENGTH (type),
789                       value_contents (arg), TYPE_LENGTH (type));
790
791               /* Structures of size 5, 6 and 7 bytes are special in that
792                  the higher-ordered word is stored in the lower-ordered
793                  argument, and even though it is a 8-byte quantity the
794                  registers need not be 8-byte aligned.  */
795               if (param_len > 4 && param_len < 8)
796                 small_struct = 1;
797             }
798
799           param_ptr += param_len;
800           if (param_len == 8 && !small_struct)
801             param_ptr = align_up (param_ptr, 8);
802
803           /* First 4 non-FP arguments are passed in gr26-gr23.
804              First 4 32-bit FP arguments are passed in fr4L-fr7L.
805              First 2 64-bit FP arguments are passed in fr5 and fr7.
806
807              The rest go on the stack, starting at sp-36, towards lower
808              addresses.  8-byte arguments must be aligned to a 8-byte
809              stack boundary.  */
810           if (write_pass)
811             {
812               write_memory (param_end - param_ptr, param_val, param_len);
813
814               /* There are some cases when we don't know the type
815                  expected by the callee (e.g. for variadic functions), so 
816                  pass the parameters in both general and fp regs.  */
817               if (param_ptr <= 48)
818                 {
819                   int grreg = 26 - (param_ptr - 36) / 4;
820                   int fpLreg = 72 + (param_ptr - 36) / 4 * 2;
821                   int fpreg = 74 + (param_ptr - 32) / 8 * 4;
822
823                   regcache_cooked_write (regcache, grreg, param_val);
824                   regcache_cooked_write (regcache, fpLreg, param_val);
825
826                   if (param_len > 4)
827                     {
828                       regcache_cooked_write (regcache, grreg + 1, 
829                                              param_val + 4);
830
831                       regcache_cooked_write (regcache, fpreg, param_val);
832                       regcache_cooked_write (regcache, fpreg + 1, 
833                                              param_val + 4);
834                     }
835                 }
836             }
837         }
838
839       /* Update the various stack pointers.  */
840       if (!write_pass)
841         {
842           struct_end = sp + align_up (struct_ptr, 64);
843           /* PARAM_PTR already accounts for all the arguments passed
844              by the user.  However, the ABI mandates minimum stack
845              space allocations for outgoing arguments.  The ABI also
846              mandates minimum stack alignments which we must
847              preserve.  */
848           param_end = struct_end + align_up (param_ptr, 64);
849         }
850     }
851
852   /* If a structure has to be returned, set up register 28 to hold its
853      address.  */
854   if (struct_return)
855     regcache_cooked_write_unsigned (regcache, 28, struct_addr);
856
857   gp = tdep->find_global_pointer (gdbarch, function);
858
859   if (gp != 0)
860     regcache_cooked_write_unsigned (regcache, 19, gp);
861
862   /* Set the return address.  */
863   if (!gdbarch_push_dummy_code_p (gdbarch))
864     regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr);
865
866   /* Update the Stack Pointer.  */
867   regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, param_end);
868
869   return param_end;
870 }
871
872 /* The 64-bit PA-RISC calling conventions are documented in "64-Bit
873    Runtime Architecture for PA-RISC 2.0", which is distributed as part
874    as of the HP-UX Software Transition Kit (STK).  This implementation
875    is based on version 3.3, dated October 6, 1997.  */
876
877 /* Check whether TYPE is an "Integral or Pointer Scalar Type".  */
878
879 static int
880 hppa64_integral_or_pointer_p (const struct type *type)
881 {
882   switch (TYPE_CODE (type))
883     {
884     case TYPE_CODE_INT:
885     case TYPE_CODE_BOOL:
886     case TYPE_CODE_CHAR:
887     case TYPE_CODE_ENUM:
888     case TYPE_CODE_RANGE:
889       {
890         int len = TYPE_LENGTH (type);
891         return (len == 1 || len == 2 || len == 4 || len == 8);
892       }
893     case TYPE_CODE_PTR:
894     case TYPE_CODE_REF:
895     case TYPE_CODE_RVALUE_REF:
896       return (TYPE_LENGTH (type) == 8);
897     default:
898       break;
899     }
900
901   return 0;
902 }
903
904 /* Check whether TYPE is a "Floating Scalar Type".  */
905
906 static int
907 hppa64_floating_p (const struct type *type)
908 {
909   switch (TYPE_CODE (type))
910     {
911     case TYPE_CODE_FLT:
912       {
913         int len = TYPE_LENGTH (type);
914         return (len == 4 || len == 8 || len == 16);
915       }
916     default:
917       break;
918     }
919
920   return 0;
921 }
922
923 /* If CODE points to a function entry address, try to look up the corresponding
924    function descriptor and return its address instead.  If CODE is not a
925    function entry address, then just return it unchanged.  */
926 static CORE_ADDR
927 hppa64_convert_code_addr_to_fptr (struct gdbarch *gdbarch, CORE_ADDR code)
928 {
929   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
930   struct obj_section *sec, *opd;
931
932   sec = find_pc_section (code);
933
934   if (!sec)
935     return code;
936
937   /* If CODE is in a data section, assume it's already a fptr.  */
938   if (!(sec->the_bfd_section->flags & SEC_CODE))
939     return code;
940
941   ALL_OBJFILE_OSECTIONS (sec->objfile, opd)
942     {
943       if (strcmp (opd->the_bfd_section->name, ".opd") == 0)
944         break;
945     }
946
947   if (opd < sec->objfile->sections_end)
948     {
949       CORE_ADDR addr;
950
951       for (addr = obj_section_addr (opd);
952            addr < obj_section_endaddr (opd);
953            addr += 2 * 8)
954         {
955           ULONGEST opdaddr;
956           gdb_byte tmp[8];
957
958           if (target_read_memory (addr, tmp, sizeof (tmp)))
959               break;
960           opdaddr = extract_unsigned_integer (tmp, sizeof (tmp), byte_order);
961
962           if (opdaddr == code)
963             return addr - 16;
964         }
965     }
966
967   return code;
968 }
969
970 static CORE_ADDR
971 hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
972                         struct regcache *regcache, CORE_ADDR bp_addr,
973                         int nargs, struct value **args, CORE_ADDR sp,
974                         int struct_return, 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 (regcache, regnum, offset % 8,
1050                                               len, 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 (regcache, regnum,
1092                                       offset % 8, std::min (len, 8), 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 (struct_return)
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 (regcache, reg, 4 - part,
1158                                        part, readbuf);
1159           if (writebuf != NULL)
1160             regcache_cooked_write_part (regcache, reg, 4 - part,
1161                                         part, writebuf);
1162           reg++;
1163         }
1164       /* Now transfer the remaining register values.  */
1165       for (b = part; b < TYPE_LENGTH (type); b += 4)
1166         {
1167           if (readbuf != NULL)
1168             regcache_cooked_read (regcache, reg, readbuf + b);
1169           if (writebuf != NULL)
1170             regcache_cooked_write (regcache, reg, writebuf + b);
1171           reg++;
1172         }
1173       return RETURN_VALUE_REGISTER_CONVENTION;
1174     }
1175   else
1176     return RETURN_VALUE_STRUCT_CONVENTION;
1177 }
1178
1179 static enum return_value_convention
1180 hppa64_return_value (struct gdbarch *gdbarch, struct value *function,
1181                      struct type *type, struct regcache *regcache,
1182                      gdb_byte *readbuf, const gdb_byte *writebuf)
1183 {
1184   int len = TYPE_LENGTH (type);
1185   int regnum, offset;
1186
1187   if (len > 16)
1188     {
1189       /* All return values larget than 128 bits must be aggregate
1190          return values.  */
1191       gdb_assert (!hppa64_integral_or_pointer_p (type));
1192       gdb_assert (!hppa64_floating_p (type));
1193
1194       /* "Aggregate return values larger than 128 bits are returned in
1195          a buffer allocated by the caller.  The address of the buffer
1196          must be passed in GR 28."  */
1197       return RETURN_VALUE_STRUCT_CONVENTION;
1198     }
1199
1200   if (hppa64_integral_or_pointer_p (type))
1201     {
1202       /* "Integral return values are returned in GR 28.  Values
1203          smaller than 64 bits are padded on the left (with garbage)."  */
1204       regnum = HPPA_RET0_REGNUM;
1205       offset = 8 - len;
1206     }
1207   else if (hppa64_floating_p (type))
1208     {
1209       if (len > 8)
1210         {
1211           /* "Double-extended- and quad-precision floating-point
1212              values are returned in GRs 28 and 29.  The sign,
1213              exponent, and most-significant bits of the mantissa are
1214              returned in GR 28; the least-significant bits of the
1215              mantissa are passed in GR 29.  For double-extended
1216              precision values, GR 29 is padded on the right with 48
1217              bits of garbage."  */
1218           regnum = HPPA_RET0_REGNUM;
1219           offset = 0;
1220         }
1221       else
1222         {
1223           /* "Single-precision and double-precision floating-point
1224              return values are returned in FR 4R (single precision) or
1225              FR 4 (double-precision)."  */
1226           regnum = HPPA64_FP4_REGNUM;
1227           offset = 8 - len;
1228         }
1229     }
1230   else
1231     {
1232       /* "Aggregate return values up to 64 bits in size are returned
1233          in GR 28.  Aggregates smaller than 64 bits are left aligned
1234          in the register; the pad bits on the right are undefined."
1235
1236          "Aggregate return values between 65 and 128 bits are returned
1237          in GRs 28 and 29.  The first 64 bits are placed in GR 28, and
1238          the remaining bits are placed, left aligned, in GR 29.  The
1239          pad bits on the right of GR 29 (if any) are undefined."  */
1240       regnum = HPPA_RET0_REGNUM;
1241       offset = 0;
1242     }
1243
1244   if (readbuf)
1245     {
1246       while (len > 0)
1247         {
1248           regcache_cooked_read_part (regcache, regnum, offset,
1249                                      std::min (len, 8), readbuf);
1250           readbuf += std::min (len, 8);
1251           len -= std::min (len, 8);
1252           regnum++;
1253         }
1254     }
1255
1256   if (writebuf)
1257     {
1258       while (len > 0)
1259         {
1260           regcache_cooked_write_part (regcache, regnum, offset,
1261                                       std::min (len, 8), writebuf);
1262           writebuf += std::min (len, 8);
1263           len -= std::min (len, 8);
1264           regnum++;
1265         }
1266     }
1267
1268   return RETURN_VALUE_REGISTER_CONVENTION;
1269 }
1270 \f
1271
1272 static CORE_ADDR
1273 hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
1274                                    struct target_ops *targ)
1275 {
1276   if (addr & 2)
1277     {
1278       struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
1279       CORE_ADDR plabel = addr & ~3;
1280       return read_memory_typed_address (plabel, func_ptr_type);
1281     }
1282
1283   return addr;
1284 }
1285
1286 static CORE_ADDR
1287 hppa32_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1288 {
1289   /* HP frames are 64-byte (or cache line) aligned (yes that's _byte_
1290      and not _bit_)!  */
1291   return align_up (addr, 64);
1292 }
1293
1294 /* Force all frames to 16-byte alignment.  Better safe than sorry.  */
1295
1296 static CORE_ADDR
1297 hppa64_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1298 {
1299   /* Just always 16-byte align.  */
1300   return align_up (addr, 16);
1301 }
1302
1303 CORE_ADDR
1304 hppa_read_pc (readable_regcache *regcache)
1305 {
1306   ULONGEST ipsw;
1307   ULONGEST pc;
1308
1309   regcache->cooked_read (HPPA_IPSW_REGNUM, &ipsw);
1310   regcache->cooked_read (HPPA_PCOQ_HEAD_REGNUM, &pc);
1311
1312   /* If the current instruction is nullified, then we are effectively
1313      still executing the previous instruction.  Pretend we are still
1314      there.  This is needed when single stepping; if the nullified
1315      instruction is on a different line, we don't want GDB to think
1316      we've stepped onto that line.  */
1317   if (ipsw & 0x00200000)
1318     pc -= 4;
1319
1320   return pc & ~0x3;
1321 }
1322
1323 void
1324 hppa_write_pc (struct regcache *regcache, CORE_ADDR pc)
1325 {
1326   regcache_cooked_write_unsigned (regcache, HPPA_PCOQ_HEAD_REGNUM, pc);
1327   regcache_cooked_write_unsigned (regcache, HPPA_PCOQ_TAIL_REGNUM, pc + 4);
1328 }
1329
1330 /* For the given instruction (INST), return any adjustment it makes
1331    to the stack pointer or zero for no adjustment.
1332
1333    This only handles instructions commonly found in prologues.  */
1334
1335 static int
1336 prologue_inst_adjust_sp (unsigned long inst)
1337 {
1338   /* This must persist across calls.  */
1339   static int save_high21;
1340
1341   /* The most common way to perform a stack adjustment ldo X(sp),sp */
1342   if ((inst & 0xffffc000) == 0x37de0000)
1343     return hppa_extract_14 (inst);
1344
1345   /* stwm X,D(sp) */
1346   if ((inst & 0xffe00000) == 0x6fc00000)
1347     return hppa_extract_14 (inst);
1348
1349   /* std,ma X,D(sp) */
1350   if ((inst & 0xffe00008) == 0x73c00008)
1351     return (inst & 0x1 ? -(1 << 13) : 0) | (((inst >> 4) & 0x3ff) << 3);
1352
1353   /* addil high21,%r30; ldo low11,(%r1),%r30)
1354      save high bits in save_high21 for later use.  */
1355   if ((inst & 0xffe00000) == 0x2bc00000)
1356     {
1357       save_high21 = hppa_extract_21 (inst);
1358       return 0;
1359     }
1360
1361   if ((inst & 0xffff0000) == 0x343e0000)
1362     return save_high21 + hppa_extract_14 (inst);
1363
1364   /* fstws as used by the HP compilers.  */
1365   if ((inst & 0xffffffe0) == 0x2fd01220)
1366     return hppa_extract_5_load (inst);
1367
1368   /* No adjustment.  */
1369   return 0;
1370 }
1371
1372 /* Return nonzero if INST is a branch of some kind, else return zero.  */
1373
1374 static int
1375 is_branch (unsigned long inst)
1376 {
1377   switch (inst >> 26)
1378     {
1379     case 0x20:
1380     case 0x21:
1381     case 0x22:
1382     case 0x23:
1383     case 0x27:
1384     case 0x28:
1385     case 0x29:
1386     case 0x2a:
1387     case 0x2b:
1388     case 0x2f:
1389     case 0x30:
1390     case 0x31:
1391     case 0x32:
1392     case 0x33:
1393     case 0x38:
1394     case 0x39:
1395     case 0x3a:
1396     case 0x3b:
1397       return 1;
1398
1399     default:
1400       return 0;
1401     }
1402 }
1403
1404 /* Return the register number for a GR which is saved by INST or
1405    zero if INST does not save a GR.
1406
1407    Referenced from:
1408
1409      parisc 1.1:
1410      https://parisc.wiki.kernel.org/images-parisc/6/68/Pa11_acd.pdf
1411
1412      parisc 2.0:
1413      https://parisc.wiki.kernel.org/images-parisc/7/73/Parisc2.0.pdf
1414
1415      According to Table 6-5 of Chapter 6 (Memory Reference Instructions)
1416      on page 106 in parisc 2.0, all instructions for storing values from
1417      the general registers are:
1418
1419        Store:          stb, sth, stw, std (according to Chapter 7, they
1420                        are only in both "inst >> 26" and "inst >> 6".
1421        Store Absolute: stwa, stda (according to Chapter 7, they are only
1422                        in "inst >> 6".
1423        Store Bytes:    stby, stdby (according to Chapter 7, they are
1424                        only in "inst >> 6").
1425
1426    For (inst >> 26), according to Chapter 7:
1427
1428      The effective memory reference address is formed by the addition
1429      of an immediate displacement to a base value.
1430
1431     - stb: 0x18, store a byte from a general register.
1432
1433     - sth: 0x19, store a halfword from a general register.
1434
1435     - stw: 0x1a, store a word from a general register.
1436
1437     - stwm: 0x1b, store a word from a general register and perform base
1438       register modification (2.0 will still treate it as stw).
1439
1440     - std: 0x1c, store a doubleword from a general register (2.0 only).
1441
1442     - stw: 0x1f, store a word from a general register (2.0 only).
1443
1444    For (inst >> 6) when ((inst >> 26) == 0x03), according to Chapter 7:
1445
1446      The effective memory reference address is formed by the addition
1447      of an index value to a base value specified in the instruction.
1448
1449     - stb: 0x08, store a byte from a general register (1.1 calls stbs).
1450
1451     - sth: 0x09, store a halfword from a general register (1.1 calls
1452       sths).
1453
1454     - stw: 0x0a, store a word from a general register (1.1 calls stws).
1455
1456     - std: 0x0b: store a doubleword from a general register (2.0 only)
1457
1458      Implement fast byte moves (stores) to unaligned word or doubleword
1459      destination.
1460
1461     - stby: 0x0c, for unaligned word (1.1 calls stbys).
1462
1463     - stdby: 0x0d for unaligned doubleword (2.0 only).
1464
1465      Store a word or doubleword using an absolute memory address formed
1466      using short or long displacement or indexed
1467
1468     - stwa: 0x0e, store a word from a general register to an absolute
1469       address (1.0 calls stwas).
1470
1471     - stda: 0x0f, store a doubleword from a general register to an
1472       absolute address (2.0 only).  */
1473
1474 static int
1475 inst_saves_gr (unsigned long inst)
1476 {
1477   switch ((inst >> 26) & 0x0f)
1478     {
1479       case 0x03:
1480         switch ((inst >> 6) & 0x0f)
1481           {
1482             case 0x08:
1483             case 0x09:
1484             case 0x0a:
1485             case 0x0b:
1486             case 0x0c:
1487             case 0x0d:
1488             case 0x0e:
1489             case 0x0f:
1490               return hppa_extract_5R_store (inst);
1491             default:
1492               return 0;
1493           }
1494       case 0x18:
1495       case 0x19:
1496       case 0x1a:
1497       case 0x1b:
1498       case 0x1c:
1499       /* no 0x1d or 0x1e -- according to parisc 2.0 document */
1500       case 0x1f:
1501         return hppa_extract_5R_store (inst);
1502       default:
1503         return 0;
1504     }
1505 }
1506
1507 /* Return the register number for a FR which is saved by INST or
1508    zero it INST does not save a FR.
1509
1510    Note we only care about full 64bit register stores (that's the only
1511    kind of stores the prologue will use).
1512
1513    FIXME: What about argument stores with the HP compiler in ANSI mode? */
1514
1515 static int
1516 inst_saves_fr (unsigned long inst)
1517 {
1518   /* Is this an FSTD?  */
1519   if ((inst & 0xfc00dfc0) == 0x2c001200)
1520     return hppa_extract_5r_store (inst);
1521   if ((inst & 0xfc000002) == 0x70000002)
1522     return hppa_extract_5R_store (inst);
1523   /* Is this an FSTW?  */
1524   if ((inst & 0xfc00df80) == 0x24001200)
1525     return hppa_extract_5r_store (inst);
1526   if ((inst & 0xfc000002) == 0x7c000000)
1527     return hppa_extract_5R_store (inst);
1528   return 0;
1529 }
1530
1531 /* Advance PC across any function entry prologue instructions
1532    to reach some "real" code.
1533
1534    Use information in the unwind table to determine what exactly should
1535    be in the prologue.  */
1536
1537
1538 static CORE_ADDR
1539 skip_prologue_hard_way (struct gdbarch *gdbarch, CORE_ADDR pc,
1540                         int stop_before_branch)
1541 {
1542   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1543   gdb_byte buf[4];
1544   CORE_ADDR orig_pc = pc;
1545   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1546   unsigned long args_stored, status, i, restart_gr, restart_fr;
1547   struct unwind_table_entry *u;
1548   int final_iteration;
1549
1550   restart_gr = 0;
1551   restart_fr = 0;
1552
1553 restart:
1554   u = find_unwind_entry (pc);
1555   if (!u)
1556     return pc;
1557
1558   /* If we are not at the beginning of a function, then return now.  */
1559   if ((pc & ~0x3) != u->region_start)
1560     return pc;
1561
1562   /* This is how much of a frame adjustment we need to account for.  */
1563   stack_remaining = u->Total_frame_size << 3;
1564
1565   /* Magic register saves we want to know about.  */
1566   save_rp = u->Save_RP;
1567   save_sp = u->Save_SP;
1568
1569   /* An indication that args may be stored into the stack.  Unfortunately
1570      the HPUX compilers tend to set this in cases where no args were
1571      stored too!.  */
1572   args_stored = 1;
1573
1574   /* Turn the Entry_GR field into a bitmask.  */
1575   save_gr = 0;
1576   for (i = 3; i < u->Entry_GR + 3; i++)
1577     {
1578       /* Frame pointer gets saved into a special location.  */
1579       if (u->Save_SP && i == HPPA_FP_REGNUM)
1580         continue;
1581
1582       save_gr |= (1 << i);
1583     }
1584   save_gr &= ~restart_gr;
1585
1586   /* Turn the Entry_FR field into a bitmask too.  */
1587   save_fr = 0;
1588   for (i = 12; i < u->Entry_FR + 12; i++)
1589     save_fr |= (1 << i);
1590   save_fr &= ~restart_fr;
1591
1592   final_iteration = 0;
1593
1594   /* Loop until we find everything of interest or hit a branch.
1595
1596      For unoptimized GCC code and for any HP CC code this will never ever
1597      examine any user instructions.
1598
1599      For optimzied GCC code we're faced with problems.  GCC will schedule
1600      its prologue and make prologue instructions available for delay slot
1601      filling.  The end result is user code gets mixed in with the prologue
1602      and a prologue instruction may be in the delay slot of the first branch
1603      or call.
1604
1605      Some unexpected things are expected with debugging optimized code, so
1606      we allow this routine to walk past user instructions in optimized
1607      GCC code.  */
1608   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0
1609          || args_stored)
1610     {
1611       unsigned int reg_num;
1612       unsigned long old_stack_remaining, old_save_gr, old_save_fr;
1613       unsigned long old_save_rp, old_save_sp, next_inst;
1614
1615       /* Save copies of all the triggers so we can compare them later
1616          (only for HPC).  */
1617       old_save_gr = save_gr;
1618       old_save_fr = save_fr;
1619       old_save_rp = save_rp;
1620       old_save_sp = save_sp;
1621       old_stack_remaining = stack_remaining;
1622
1623       status = target_read_memory (pc, buf, 4);
1624       inst = extract_unsigned_integer (buf, 4, byte_order);
1625
1626       /* Yow! */
1627       if (status != 0)
1628         return pc;
1629
1630       /* Note the interesting effects of this instruction.  */
1631       stack_remaining -= prologue_inst_adjust_sp (inst);
1632
1633       /* There are limited ways to store the return pointer into the
1634          stack.  */
1635       if (inst == 0x6bc23fd9 || inst == 0x0fc212c1 || inst == 0x73c23fe1)
1636         save_rp = 0;
1637
1638       /* These are the only ways we save SP into the stack.  At this time
1639          the HP compilers never bother to save SP into the stack.  */
1640       if ((inst & 0xffffc000) == 0x6fc10000
1641           || (inst & 0xffffc00c) == 0x73c10008)
1642         save_sp = 0;
1643
1644       /* Are we loading some register with an offset from the argument
1645          pointer?  */
1646       if ((inst & 0xffe00000) == 0x37a00000
1647           || (inst & 0xffffffe0) == 0x081d0240)
1648         {
1649           pc += 4;
1650           continue;
1651         }
1652
1653       /* Account for general and floating-point register saves.  */
1654       reg_num = inst_saves_gr (inst);
1655       save_gr &= ~(1 << reg_num);
1656
1657       /* Ugh.  Also account for argument stores into the stack.
1658          Unfortunately args_stored only tells us that some arguments
1659          where stored into the stack.  Not how many or what kind!
1660
1661          This is a kludge as on the HP compiler sets this bit and it
1662          never does prologue scheduling.  So once we see one, skip past
1663          all of them.   We have similar code for the fp arg stores below.
1664
1665          FIXME.  Can still die if we have a mix of GR and FR argument
1666          stores!  */
1667       if (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
1668           && reg_num <= 26)
1669         {
1670           while (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
1671                  && reg_num <= 26)
1672             {
1673               pc += 4;
1674               status = target_read_memory (pc, buf, 4);
1675               inst = extract_unsigned_integer (buf, 4, byte_order);
1676               if (status != 0)
1677                 return pc;
1678               reg_num = inst_saves_gr (inst);
1679             }
1680           args_stored = 0;
1681           continue;
1682         }
1683
1684       reg_num = inst_saves_fr (inst);
1685       save_fr &= ~(1 << reg_num);
1686
1687       status = target_read_memory (pc + 4, buf, 4);
1688       next_inst = extract_unsigned_integer (buf, 4, byte_order);
1689
1690       /* Yow! */
1691       if (status != 0)
1692         return pc;
1693
1694       /* We've got to be read to handle the ldo before the fp register
1695          save.  */
1696       if ((inst & 0xfc000000) == 0x34000000
1697           && inst_saves_fr (next_inst) >= 4
1698           && inst_saves_fr (next_inst)
1699                <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1700         {
1701           /* So we drop into the code below in a reasonable state.  */
1702           reg_num = inst_saves_fr (next_inst);
1703           pc -= 4;
1704         }
1705
1706       /* Ugh.  Also account for argument stores into the stack.
1707          This is a kludge as on the HP compiler sets this bit and it
1708          never does prologue scheduling.  So once we see one, skip past
1709          all of them.  */
1710       if (reg_num >= 4
1711           && reg_num <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1712         {
1713           while (reg_num >= 4
1714                  && reg_num
1715                       <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
1716             {
1717               pc += 8;
1718               status = target_read_memory (pc, buf, 4);
1719               inst = extract_unsigned_integer (buf, 4, byte_order);
1720               if (status != 0)
1721                 return pc;
1722               if ((inst & 0xfc000000) != 0x34000000)
1723                 break;
1724               status = target_read_memory (pc + 4, buf, 4);
1725               next_inst = extract_unsigned_integer (buf, 4, byte_order);
1726               if (status != 0)
1727                 return pc;
1728               reg_num = inst_saves_fr (next_inst);
1729             }
1730           args_stored = 0;
1731           continue;
1732         }
1733
1734       /* Quit if we hit any kind of branch.  This can happen if a prologue
1735          instruction is in the delay slot of the first call/branch.  */
1736       if (is_branch (inst) && stop_before_branch)
1737         break;
1738
1739       /* What a crock.  The HP compilers set args_stored even if no
1740          arguments were stored into the stack (boo hiss).  This could
1741          cause this code to then skip a bunch of user insns (up to the
1742          first branch).
1743
1744          To combat this we try to identify when args_stored was bogusly
1745          set and clear it.   We only do this when args_stored is nonzero,
1746          all other resources are accounted for, and nothing changed on
1747          this pass.  */
1748       if (args_stored
1749        && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1750           && old_save_gr == save_gr && old_save_fr == save_fr
1751           && old_save_rp == save_rp && old_save_sp == save_sp
1752           && old_stack_remaining == stack_remaining)
1753         break;
1754
1755       /* Bump the PC.  */
1756       pc += 4;
1757
1758       /* !stop_before_branch, so also look at the insn in the delay slot 
1759          of the branch.  */
1760       if (final_iteration)
1761         break;
1762       if (is_branch (inst))
1763         final_iteration = 1;
1764     }
1765
1766   /* We've got a tenative location for the end of the prologue.  However
1767      because of limitations in the unwind descriptor mechanism we may
1768      have went too far into user code looking for the save of a register
1769      that does not exist.  So, if there registers we expected to be saved
1770      but never were, mask them out and restart.
1771
1772      This should only happen in optimized code, and should be very rare.  */
1773   if (save_gr || (save_fr && !(restart_fr || restart_gr)))
1774     {
1775       pc = orig_pc;
1776       restart_gr = save_gr;
1777       restart_fr = save_fr;
1778       goto restart;
1779     }
1780
1781   return pc;
1782 }
1783
1784
1785 /* Return the address of the PC after the last prologue instruction if
1786    we can determine it from the debug symbols.  Else return zero.  */
1787
1788 static CORE_ADDR
1789 after_prologue (CORE_ADDR pc)
1790 {
1791   struct symtab_and_line sal;
1792   CORE_ADDR func_addr, func_end;
1793
1794   /* If we can not find the symbol in the partial symbol table, then
1795      there is no hope we can determine the function's start address
1796      with this code.  */
1797   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
1798     return 0;
1799
1800   /* Get the line associated with FUNC_ADDR.  */
1801   sal = find_pc_line (func_addr, 0);
1802
1803   /* There are only two cases to consider.  First, the end of the source line
1804      is within the function bounds.  In that case we return the end of the
1805      source line.  Second is the end of the source line extends beyond the
1806      bounds of the current function.  We need to use the slow code to
1807      examine instructions in that case.
1808
1809      Anything else is simply a bug elsewhere.  Fixing it here is absolutely
1810      the wrong thing to do.  In fact, it should be entirely possible for this
1811      function to always return zero since the slow instruction scanning code
1812      is supposed to *always* work.  If it does not, then it is a bug.  */
1813   if (sal.end < func_end)
1814     return sal.end;
1815   else
1816     return 0;
1817 }
1818
1819 /* To skip prologues, I use this predicate.  Returns either PC itself
1820    if the code at PC does not look like a function prologue; otherwise
1821    returns an address that (if we're lucky) follows the prologue.
1822    
1823    hppa_skip_prologue is called by gdb to place a breakpoint in a function.
1824    It doesn't necessarily skips all the insns in the prologue.  In fact
1825    we might not want to skip all the insns because a prologue insn may
1826    appear in the delay slot of the first branch, and we don't want to
1827    skip over the branch in that case.  */
1828
1829 static CORE_ADDR
1830 hppa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1831 {
1832   CORE_ADDR post_prologue_pc;
1833
1834   /* See if we can determine the end of the prologue via the symbol table.
1835      If so, then return either PC, or the PC after the prologue, whichever
1836      is greater.  */
1837
1838   post_prologue_pc = after_prologue (pc);
1839
1840   /* If after_prologue returned a useful address, then use it.  Else
1841      fall back on the instruction skipping code.
1842
1843      Some folks have claimed this causes problems because the breakpoint
1844      may be the first instruction of the prologue.  If that happens, then
1845      the instruction skipping code has a bug that needs to be fixed.  */
1846   if (post_prologue_pc != 0)
1847     return std::max (pc, post_prologue_pc);
1848   else
1849     return (skip_prologue_hard_way (gdbarch, pc, 1));
1850 }
1851
1852 /* Return an unwind entry that falls within the frame's code block.  */
1853
1854 static struct unwind_table_entry *
1855 hppa_find_unwind_entry_in_block (struct frame_info *this_frame)
1856 {
1857   CORE_ADDR pc = get_frame_address_in_block (this_frame);
1858
1859   /* FIXME drow/20070101: Calling gdbarch_addr_bits_remove on the
1860      result of get_frame_address_in_block implies a problem.
1861      The bits should have been removed earlier, before the return
1862      value of gdbarch_unwind_pc.  That might be happening already;
1863      if it isn't, it should be fixed.  Then this call can be
1864      removed.  */
1865   pc = gdbarch_addr_bits_remove (get_frame_arch (this_frame), pc);
1866   return find_unwind_entry (pc);
1867 }
1868
1869 struct hppa_frame_cache
1870 {
1871   CORE_ADDR base;
1872   struct trad_frame_saved_reg *saved_regs;
1873 };
1874
1875 static struct hppa_frame_cache *
1876 hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
1877 {
1878   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1879   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1880   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1881   struct hppa_frame_cache *cache;
1882   long saved_gr_mask;
1883   long saved_fr_mask;
1884   long frame_size;
1885   struct unwind_table_entry *u;
1886   CORE_ADDR prologue_end;
1887   int fp_in_r1 = 0;
1888   int i;
1889
1890   if (hppa_debug)
1891     fprintf_unfiltered (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ",
1892       frame_relative_level(this_frame));
1893
1894   if ((*this_cache) != NULL)
1895     {
1896       if (hppa_debug)
1897         fprintf_unfiltered (gdb_stdlog, "base=%s (cached) }",
1898           paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
1899       return (struct hppa_frame_cache *) (*this_cache);
1900     }
1901   cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
1902   (*this_cache) = cache;
1903   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1904
1905   /* Yow! */
1906   u = hppa_find_unwind_entry_in_block (this_frame);
1907   if (!u)
1908     {
1909       if (hppa_debug)
1910         fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
1911       return (struct hppa_frame_cache *) (*this_cache);
1912     }
1913
1914   /* Turn the Entry_GR field into a bitmask.  */
1915   saved_gr_mask = 0;
1916   for (i = 3; i < u->Entry_GR + 3; i++)
1917     {
1918       /* Frame pointer gets saved into a special location.  */
1919       if (u->Save_SP && i == HPPA_FP_REGNUM)
1920         continue;
1921         
1922       saved_gr_mask |= (1 << i);
1923     }
1924
1925   /* Turn the Entry_FR field into a bitmask too.  */
1926   saved_fr_mask = 0;
1927   for (i = 12; i < u->Entry_FR + 12; i++)
1928     saved_fr_mask |= (1 << i);
1929
1930   /* Loop until we find everything of interest or hit a branch.
1931
1932      For unoptimized GCC code and for any HP CC code this will never ever
1933      examine any user instructions.
1934
1935      For optimized GCC code we're faced with problems.  GCC will schedule
1936      its prologue and make prologue instructions available for delay slot
1937      filling.  The end result is user code gets mixed in with the prologue
1938      and a prologue instruction may be in the delay slot of the first branch
1939      or call.
1940
1941      Some unexpected things are expected with debugging optimized code, so
1942      we allow this routine to walk past user instructions in optimized
1943      GCC code.  */
1944   {
1945     int final_iteration = 0;
1946     CORE_ADDR pc, start_pc, end_pc;
1947     int looking_for_sp = u->Save_SP;
1948     int looking_for_rp = u->Save_RP;
1949     int fp_loc = -1;
1950
1951     /* We have to use skip_prologue_hard_way instead of just 
1952        skip_prologue_using_sal, in case we stepped into a function without
1953        symbol information.  hppa_skip_prologue also bounds the returned
1954        pc by the passed in pc, so it will not return a pc in the next
1955        function.
1956        
1957        We used to call hppa_skip_prologue to find the end of the prologue,
1958        but if some non-prologue instructions get scheduled into the prologue,
1959        and the program is compiled with debug information, the "easy" way
1960        in hppa_skip_prologue will return a prologue end that is too early
1961        for us to notice any potential frame adjustments.  */
1962
1963     /* We used to use get_frame_func to locate the beginning of the
1964        function to pass to skip_prologue.  However, when objects are
1965        compiled without debug symbols, get_frame_func can return the wrong
1966        function (or 0).  We can do better than that by using unwind records.
1967        This only works if the Region_description of the unwind record
1968        indicates that it includes the entry point of the function.
1969        HP compilers sometimes generate unwind records for regions that
1970        do not include the entry or exit point of a function.  GNU tools
1971        do not do this.  */
1972
1973     if ((u->Region_description & 0x2) == 0)
1974       start_pc = u->region_start;
1975     else
1976       start_pc = get_frame_func (this_frame);
1977
1978     prologue_end = skip_prologue_hard_way (gdbarch, start_pc, 0);
1979     end_pc = get_frame_pc (this_frame);
1980
1981     if (prologue_end != 0 && end_pc > prologue_end)
1982       end_pc = prologue_end;
1983
1984     frame_size = 0;
1985
1986     for (pc = start_pc;
1987          ((saved_gr_mask || saved_fr_mask
1988            || looking_for_sp || looking_for_rp
1989            || frame_size < (u->Total_frame_size << 3))
1990           && pc < end_pc);
1991          pc += 4)
1992       {
1993         int reg;
1994         gdb_byte buf4[4];
1995         long inst;
1996
1997         if (!safe_frame_unwind_memory (this_frame, pc, buf4, sizeof buf4)) 
1998           {
1999             error (_("Cannot read instruction at %s."),
2000                    paddress (gdbarch, pc));
2001             return (struct hppa_frame_cache *) (*this_cache);
2002           }
2003
2004         inst = extract_unsigned_integer (buf4, sizeof buf4, byte_order);
2005
2006         /* Note the interesting effects of this instruction.  */
2007         frame_size += prologue_inst_adjust_sp (inst);
2008         
2009         /* There are limited ways to store the return pointer into the
2010            stack.  */
2011         if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
2012           {
2013             looking_for_rp = 0;
2014             cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
2015           }
2016         else if (inst == 0x6bc23fd1) /* stw rp,-0x18(sr0,sp) */
2017           {
2018             looking_for_rp = 0;
2019             cache->saved_regs[HPPA_RP_REGNUM].addr = -24;
2020           }
2021         else if (inst == 0x0fc212c1 
2022                  || inst == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
2023           {
2024             looking_for_rp = 0;
2025             cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
2026           }
2027         
2028         /* Check to see if we saved SP into the stack.  This also
2029            happens to indicate the location of the saved frame
2030            pointer.  */
2031         if ((inst & 0xffffc000) == 0x6fc10000  /* stw,ma r1,N(sr0,sp) */
2032             || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
2033           {
2034             looking_for_sp = 0;
2035             cache->saved_regs[HPPA_FP_REGNUM].addr = 0;
2036           }
2037         else if (inst == 0x08030241) /* copy %r3, %r1 */
2038           {
2039             fp_in_r1 = 1;
2040           }
2041         
2042         /* Account for general and floating-point register saves.  */
2043         reg = inst_saves_gr (inst);
2044         if (reg >= 3 && reg <= 18
2045             && (!u->Save_SP || reg != HPPA_FP_REGNUM))
2046           {
2047             saved_gr_mask &= ~(1 << reg);
2048             if ((inst >> 26) == 0x1b && hppa_extract_14 (inst) >= 0)
2049               /* stwm with a positive displacement is a _post_
2050                  _modify_.  */
2051               cache->saved_regs[reg].addr = 0;
2052             else if ((inst & 0xfc00000c) == 0x70000008)
2053               /* A std has explicit post_modify forms.  */
2054               cache->saved_regs[reg].addr = 0;
2055             else
2056               {
2057                 CORE_ADDR offset;
2058                 
2059                 if ((inst >> 26) == 0x1c)
2060                   offset = (inst & 0x1 ? -(1 << 13) : 0)
2061                     | (((inst >> 4) & 0x3ff) << 3);
2062                 else if ((inst >> 26) == 0x03)
2063                   offset = hppa_low_hppa_sign_extend (inst & 0x1f, 5);
2064                 else
2065                   offset = hppa_extract_14 (inst);
2066                 
2067                 /* Handle code with and without frame pointers.  */
2068                 if (u->Save_SP)
2069                   cache->saved_regs[reg].addr = offset;
2070                 else
2071                   cache->saved_regs[reg].addr
2072                     = (u->Total_frame_size << 3) + offset;
2073               }
2074           }
2075
2076         /* GCC handles callee saved FP regs a little differently.  
2077            
2078            It emits an instruction to put the value of the start of
2079            the FP store area into %r1.  It then uses fstds,ma with a
2080            basereg of %r1 for the stores.
2081
2082            HP CC emits them at the current stack pointer modifying the
2083            stack pointer as it stores each register.  */
2084         
2085         /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
2086         if ((inst & 0xffffc000) == 0x34610000
2087             || (inst & 0xffffc000) == 0x37c10000)
2088           fp_loc = hppa_extract_14 (inst);
2089         
2090         reg = inst_saves_fr (inst);
2091         if (reg >= 12 && reg <= 21)
2092           {
2093             /* Note +4 braindamage below is necessary because the FP
2094                status registers are internally 8 registers rather than
2095                the expected 4 registers.  */
2096             saved_fr_mask &= ~(1 << reg);
2097             if (fp_loc == -1)
2098               {
2099                 /* 1st HP CC FP register store.  After this
2100                    instruction we've set enough state that the GCC and
2101                    HPCC code are both handled in the same manner.  */
2102                 cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].addr = 0;
2103                 fp_loc = 8;
2104               }
2105             else
2106               {
2107                 cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc;
2108                 fp_loc += 8;
2109               }
2110           }
2111         
2112         /* Quit if we hit any kind of branch the previous iteration.  */
2113         if (final_iteration)
2114           break;
2115         /* We want to look precisely one instruction beyond the branch
2116            if we have not found everything yet.  */
2117         if (is_branch (inst))
2118           final_iteration = 1;
2119       }
2120   }
2121
2122   {
2123     /* The frame base always represents the value of %sp at entry to
2124        the current function (and is thus equivalent to the "saved"
2125        stack pointer.  */
2126     CORE_ADDR this_sp = get_frame_register_unsigned (this_frame,
2127                                                      HPPA_SP_REGNUM);
2128     CORE_ADDR fp;
2129
2130     if (hppa_debug)
2131       fprintf_unfiltered (gdb_stdlog, " (this_sp=%s, pc=%s, "
2132                           "prologue_end=%s) ",
2133                           paddress (gdbarch, this_sp),
2134                           paddress (gdbarch, get_frame_pc (this_frame)),
2135                           paddress (gdbarch, prologue_end));
2136
2137      /* Check to see if a frame pointer is available, and use it for
2138         frame unwinding if it is.
2139  
2140         There are some situations where we need to rely on the frame
2141         pointer to do stack unwinding.  For example, if a function calls
2142         alloca (), the stack pointer can get adjusted inside the body of
2143         the function.  In this case, the ABI requires that the compiler
2144         maintain a frame pointer for the function.
2145  
2146         The unwind record has a flag (alloca_frame) that indicates that
2147         a function has a variable frame; unfortunately, gcc/binutils 
2148         does not set this flag.  Instead, whenever a frame pointer is used
2149         and saved on the stack, the Save_SP flag is set.  We use this to
2150         decide whether to use the frame pointer for unwinding.
2151         
2152         TODO: For the HP compiler, maybe we should use the alloca_frame flag 
2153         instead of Save_SP.  */
2154  
2155      fp = get_frame_register_unsigned (this_frame, HPPA_FP_REGNUM);
2156
2157      if (u->alloca_frame)
2158        fp -= u->Total_frame_size << 3;
2159  
2160      if (get_frame_pc (this_frame) >= prologue_end
2161          && (u->Save_SP || u->alloca_frame) && fp != 0)
2162       {
2163         cache->base = fp;
2164  
2165         if (hppa_debug)
2166           fprintf_unfiltered (gdb_stdlog, " (base=%s) [frame pointer]",
2167                               paddress (gdbarch, cache->base));
2168       }
2169      else if (u->Save_SP 
2170               && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM))
2171       {
2172             /* Both we're expecting the SP to be saved and the SP has been
2173                saved.  The entry SP value is saved at this frame's SP
2174                address.  */
2175             cache->base = read_memory_integer (this_sp, word_size, byte_order);
2176
2177             if (hppa_debug)
2178               fprintf_unfiltered (gdb_stdlog, " (base=%s) [saved]",
2179                                   paddress (gdbarch, cache->base));
2180       }
2181     else
2182       {
2183         /* The prologue has been slowly allocating stack space.  Adjust
2184            the SP back.  */
2185         cache->base = this_sp - frame_size;
2186         if (hppa_debug)
2187           fprintf_unfiltered (gdb_stdlog, " (base=%s) [unwind adjust]",
2188                               paddress (gdbarch, cache->base));
2189
2190       }
2191     trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2192   }
2193
2194   /* The PC is found in the "return register", "Millicode" uses "r31"
2195      as the return register while normal code uses "rp".  */
2196   if (u->Millicode)
2197     {
2198       if (trad_frame_addr_p (cache->saved_regs, 31))
2199         {
2200           cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
2201           if (hppa_debug)
2202             fprintf_unfiltered (gdb_stdlog, " (pc=r31) [stack] } ");
2203         }
2204       else
2205         {
2206           ULONGEST r31 = get_frame_register_unsigned (this_frame, 31);
2207           trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, r31);
2208           if (hppa_debug)
2209             fprintf_unfiltered (gdb_stdlog, " (pc=r31) [frame] } ");
2210         }
2211     }
2212   else
2213     {
2214       if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2215         {
2216           cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
2217             cache->saved_regs[HPPA_RP_REGNUM];
2218           if (hppa_debug)
2219             fprintf_unfiltered (gdb_stdlog, " (pc=rp) [stack] } ");
2220         }
2221       else
2222         {
2223           ULONGEST rp = get_frame_register_unsigned (this_frame,
2224                                                      HPPA_RP_REGNUM);
2225           trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
2226           if (hppa_debug)
2227             fprintf_unfiltered (gdb_stdlog, " (pc=rp) [frame] } ");
2228         }
2229     }
2230
2231   /* If Save_SP is set, then we expect the frame pointer to be saved in the
2232      frame.  However, there is a one-insn window where we haven't saved it
2233      yet, but we've already clobbered it.  Detect this case and fix it up.
2234
2235      The prologue sequence for frame-pointer functions is:
2236         0: stw %rp, -20(%sp)
2237         4: copy %r3, %r1
2238         8: copy %sp, %r3
2239         c: stw,ma %r1, XX(%sp)
2240
2241      So if we are at offset c, the r3 value that we want is not yet saved
2242      on the stack, but it's been overwritten.  The prologue analyzer will
2243      set fp_in_r1 when it sees the copy insn so we know to get the value 
2244      from r1 instead.  */
2245   if (u->Save_SP && !trad_frame_addr_p (cache->saved_regs, HPPA_FP_REGNUM)
2246       && fp_in_r1)
2247     {
2248       ULONGEST r1 = get_frame_register_unsigned (this_frame, 1);
2249       trad_frame_set_value (cache->saved_regs, HPPA_FP_REGNUM, r1);
2250     }
2251
2252   {
2253     /* Convert all the offsets into addresses.  */
2254     int reg;
2255     for (reg = 0; reg < gdbarch_num_regs (gdbarch); reg++)
2256       {
2257         if (trad_frame_addr_p (cache->saved_regs, reg))
2258           cache->saved_regs[reg].addr += cache->base;
2259       }
2260   }
2261
2262   {
2263     struct gdbarch_tdep *tdep;
2264
2265     tdep = gdbarch_tdep (gdbarch);
2266
2267     if (tdep->unwind_adjust_stub)
2268       tdep->unwind_adjust_stub (this_frame, cache->base, cache->saved_regs);
2269   }
2270
2271   if (hppa_debug)
2272     fprintf_unfiltered (gdb_stdlog, "base=%s }",
2273       paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
2274   return (struct hppa_frame_cache *) (*this_cache);
2275 }
2276
2277 static void
2278 hppa_frame_this_id (struct frame_info *this_frame, void **this_cache,
2279                     struct frame_id *this_id)
2280 {
2281   struct hppa_frame_cache *info;
2282   struct unwind_table_entry *u;
2283
2284   info = hppa_frame_cache (this_frame, this_cache);
2285   u = hppa_find_unwind_entry_in_block (this_frame);
2286
2287   (*this_id) = frame_id_build (info->base, u->region_start);
2288 }
2289
2290 static struct value *
2291 hppa_frame_prev_register (struct frame_info *this_frame,
2292                           void **this_cache, int regnum)
2293 {
2294   struct hppa_frame_cache *info = hppa_frame_cache (this_frame, this_cache);
2295
2296   return hppa_frame_prev_register_helper (this_frame,
2297                                           info->saved_regs, regnum);
2298 }
2299
2300 static int
2301 hppa_frame_unwind_sniffer (const struct frame_unwind *self,
2302                            struct frame_info *this_frame, void **this_cache)
2303 {
2304   if (hppa_find_unwind_entry_in_block (this_frame))
2305     return 1;
2306
2307   return 0;
2308 }
2309
2310 static const struct frame_unwind hppa_frame_unwind =
2311 {
2312   NORMAL_FRAME,
2313   default_frame_unwind_stop_reason,
2314   hppa_frame_this_id,
2315   hppa_frame_prev_register,
2316   NULL,
2317   hppa_frame_unwind_sniffer
2318 };
2319
2320 /* This is a generic fallback frame unwinder that kicks in if we fail all
2321    the other ones.  Normally we would expect the stub and regular unwinder
2322    to work, but in some cases we might hit a function that just doesn't
2323    have any unwind information available.  In this case we try to do
2324    unwinding solely based on code reading.  This is obviously going to be
2325    slow, so only use this as a last resort.  Currently this will only
2326    identify the stack and pc for the frame.  */
2327
2328 static struct hppa_frame_cache *
2329 hppa_fallback_frame_cache (struct frame_info *this_frame, void **this_cache)
2330 {
2331   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2332   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2333   struct hppa_frame_cache *cache;
2334   unsigned int frame_size = 0;
2335   int found_rp = 0;
2336   CORE_ADDR start_pc;
2337
2338   if (hppa_debug)
2339     fprintf_unfiltered (gdb_stdlog,
2340                         "{ hppa_fallback_frame_cache (frame=%d) -> ",
2341                         frame_relative_level (this_frame));
2342
2343   cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
2344   (*this_cache) = cache;
2345   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2346
2347   start_pc = get_frame_func (this_frame);
2348   if (start_pc)
2349     {
2350       CORE_ADDR cur_pc = get_frame_pc (this_frame);
2351       CORE_ADDR pc;
2352
2353       for (pc = start_pc; pc < cur_pc; pc += 4)
2354         {
2355           unsigned int insn;
2356
2357           insn = read_memory_unsigned_integer (pc, 4, byte_order);
2358           frame_size += prologue_inst_adjust_sp (insn);
2359
2360           /* There are limited ways to store the return pointer into the
2361              stack.  */
2362           if (insn == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
2363             {
2364               cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
2365               found_rp = 1;
2366             }
2367           else if (insn == 0x0fc212c1
2368                    || insn == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
2369             {
2370               cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
2371               found_rp = 1;
2372             }
2373         }
2374     }
2375
2376   if (hppa_debug)
2377     fprintf_unfiltered (gdb_stdlog, " frame_size=%d, found_rp=%d }\n",
2378                         frame_size, found_rp);
2379
2380   cache->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
2381   cache->base -= frame_size;
2382   trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2383
2384   if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2385     {
2386       cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base;
2387       cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
2388         cache->saved_regs[HPPA_RP_REGNUM];
2389     }
2390   else
2391     {
2392       ULONGEST rp;
2393       rp = get_frame_register_unsigned (this_frame, HPPA_RP_REGNUM);
2394       trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
2395     }
2396
2397   return cache;
2398 }
2399
2400 static void
2401 hppa_fallback_frame_this_id (struct frame_info *this_frame, void **this_cache,
2402                              struct frame_id *this_id)
2403 {
2404   struct hppa_frame_cache *info = 
2405     hppa_fallback_frame_cache (this_frame, this_cache);
2406
2407   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
2408 }
2409
2410 static struct value *
2411 hppa_fallback_frame_prev_register (struct frame_info *this_frame,
2412                                    void **this_cache, int regnum)
2413 {
2414   struct hppa_frame_cache *info
2415     = hppa_fallback_frame_cache (this_frame, this_cache);
2416
2417   return hppa_frame_prev_register_helper (this_frame,
2418                                           info->saved_regs, regnum);
2419 }
2420
2421 static const struct frame_unwind hppa_fallback_frame_unwind =
2422 {
2423   NORMAL_FRAME,
2424   default_frame_unwind_stop_reason,
2425   hppa_fallback_frame_this_id,
2426   hppa_fallback_frame_prev_register,
2427   NULL,
2428   default_frame_sniffer
2429 };
2430
2431 /* Stub frames, used for all kinds of call stubs.  */
2432 struct hppa_stub_unwind_cache
2433 {
2434   CORE_ADDR base;
2435   struct trad_frame_saved_reg *saved_regs;
2436 };
2437
2438 static struct hppa_stub_unwind_cache *
2439 hppa_stub_frame_unwind_cache (struct frame_info *this_frame,
2440                               void **this_cache)
2441 {
2442   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2443   struct hppa_stub_unwind_cache *info;
2444   struct unwind_table_entry *u;
2445
2446   if (*this_cache)
2447     return (struct hppa_stub_unwind_cache *) *this_cache;
2448
2449   info = FRAME_OBSTACK_ZALLOC (struct hppa_stub_unwind_cache);
2450   *this_cache = info;
2451   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2452
2453   info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
2454
2455   /* By default we assume that stubs do not change the rp.  */
2456   info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM;
2457
2458   return info;
2459 }
2460
2461 static void
2462 hppa_stub_frame_this_id (struct frame_info *this_frame,
2463                          void **this_prologue_cache,
2464                          struct frame_id *this_id)
2465 {
2466   struct hppa_stub_unwind_cache *info
2467     = hppa_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2468
2469   if (info)
2470     *this_id = frame_id_build (info->base, get_frame_func (this_frame));
2471 }
2472
2473 static struct value *
2474 hppa_stub_frame_prev_register (struct frame_info *this_frame,
2475                                void **this_prologue_cache, int regnum)
2476 {
2477   struct hppa_stub_unwind_cache *info
2478     = hppa_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2479
2480   if (info == NULL)
2481     error (_("Requesting registers from null frame."));
2482
2483   return hppa_frame_prev_register_helper (this_frame,
2484                                           info->saved_regs, regnum);
2485 }
2486
2487 static int
2488 hppa_stub_unwind_sniffer (const struct frame_unwind *self,
2489                           struct frame_info *this_frame,
2490                           void **this_cache)
2491 {
2492   CORE_ADDR pc = get_frame_address_in_block (this_frame);
2493   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2494   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2495
2496   if (pc == 0
2497       || (tdep->in_solib_call_trampoline != NULL
2498           && tdep->in_solib_call_trampoline (gdbarch, pc))
2499       || gdbarch_in_solib_return_trampoline (gdbarch, pc, NULL))
2500     return 1;
2501   return 0;
2502 }
2503
2504 static const struct frame_unwind hppa_stub_frame_unwind = {
2505   NORMAL_FRAME,
2506   default_frame_unwind_stop_reason,
2507   hppa_stub_frame_this_id,
2508   hppa_stub_frame_prev_register,
2509   NULL,
2510   hppa_stub_unwind_sniffer
2511 };
2512
2513 static struct frame_id
2514 hppa_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2515 {
2516   return frame_id_build (get_frame_register_unsigned (this_frame,
2517                                                       HPPA_SP_REGNUM),
2518                          get_frame_pc (this_frame));
2519 }
2520
2521 CORE_ADDR
2522 hppa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2523 {
2524   ULONGEST ipsw;
2525   CORE_ADDR pc;
2526
2527   ipsw = frame_unwind_register_unsigned (next_frame, HPPA_IPSW_REGNUM);
2528   pc = frame_unwind_register_unsigned (next_frame, HPPA_PCOQ_HEAD_REGNUM);
2529
2530   /* If the current instruction is nullified, then we are effectively
2531      still executing the previous instruction.  Pretend we are still
2532      there.  This is needed when single stepping; if the nullified
2533      instruction is on a different line, we don't want GDB to think
2534      we've stepped onto that line.  */
2535   if (ipsw & 0x00200000)
2536     pc -= 4;
2537
2538   return pc & ~0x3;
2539 }
2540
2541 /* Return the minimal symbol whose name is NAME and stub type is STUB_TYPE.
2542    Return NULL if no such symbol was found.  */
2543
2544 struct bound_minimal_symbol
2545 hppa_lookup_stub_minimal_symbol (const char *name,
2546                                  enum unwind_stub_types stub_type)
2547 {
2548   struct objfile *objfile;
2549   struct minimal_symbol *msym;
2550   struct bound_minimal_symbol result = { NULL, NULL };
2551
2552   ALL_MSYMBOLS (objfile, msym)
2553     {
2554       if (strcmp (MSYMBOL_LINKAGE_NAME (msym), name) == 0)
2555         {
2556           struct unwind_table_entry *u;
2557
2558           u = find_unwind_entry (MSYMBOL_VALUE (msym));
2559           if (u != NULL && u->stub_unwind.stub_type == stub_type)
2560             {
2561               result.objfile = objfile;
2562               result.minsym = msym;
2563               return result;
2564             }
2565         }
2566     }
2567
2568   return result;
2569 }
2570
2571 static void
2572 unwind_command (const char *exp, int from_tty)
2573 {
2574   CORE_ADDR address;
2575   struct unwind_table_entry *u;
2576
2577   /* If we have an expression, evaluate it and use it as the address.  */
2578
2579   if (exp != 0 && *exp != 0)
2580     address = parse_and_eval_address (exp);
2581   else
2582     return;
2583
2584   u = find_unwind_entry (address);
2585
2586   if (!u)
2587     {
2588       printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
2589       return;
2590     }
2591
2592   printf_unfiltered ("unwind_table_entry (%s):\n", host_address_to_string (u));
2593
2594   printf_unfiltered ("\tregion_start = %s\n", hex_string (u->region_start));
2595   gdb_flush (gdb_stdout);
2596
2597   printf_unfiltered ("\tregion_end = %s\n", hex_string (u->region_end));
2598   gdb_flush (gdb_stdout);
2599
2600 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
2601
2602   printf_unfiltered ("\n\tflags =");
2603   pif (Cannot_unwind);
2604   pif (Millicode);
2605   pif (Millicode_save_sr0);
2606   pif (Entry_SR);
2607   pif (Args_stored);
2608   pif (Variable_Frame);
2609   pif (Separate_Package_Body);
2610   pif (Frame_Extension_Millicode);
2611   pif (Stack_Overflow_Check);
2612   pif (Two_Instruction_SP_Increment);
2613   pif (sr4export);
2614   pif (cxx_info);
2615   pif (cxx_try_catch);
2616   pif (sched_entry_seq);
2617   pif (Save_SP);
2618   pif (Save_RP);
2619   pif (Save_MRP_in_frame);
2620   pif (save_r19);
2621   pif (Cleanup_defined);
2622   pif (MPE_XL_interrupt_marker);
2623   pif (HP_UX_interrupt_marker);
2624   pif (Large_frame);
2625   pif (alloca_frame);
2626
2627   putchar_unfiltered ('\n');
2628
2629 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
2630
2631   pin (Region_description);
2632   pin (Entry_FR);
2633   pin (Entry_GR);
2634   pin (Total_frame_size);
2635
2636   if (u->stub_unwind.stub_type)
2637     {
2638       printf_unfiltered ("\tstub type = ");
2639       switch (u->stub_unwind.stub_type)
2640         {
2641           case LONG_BRANCH:
2642             printf_unfiltered ("long branch\n");
2643             break;
2644           case PARAMETER_RELOCATION:
2645             printf_unfiltered ("parameter relocation\n");
2646             break;
2647           case EXPORT:
2648             printf_unfiltered ("export\n");
2649             break;
2650           case IMPORT:
2651             printf_unfiltered ("import\n");
2652             break;
2653           case IMPORT_SHLIB:
2654             printf_unfiltered ("import shlib\n");
2655             break;
2656           default:
2657             printf_unfiltered ("unknown (%d)\n", u->stub_unwind.stub_type);
2658         }
2659     }
2660 }
2661
2662 /* Return the GDB type object for the "standard" data type of data in
2663    register REGNUM.  */
2664
2665 static struct type *
2666 hppa32_register_type (struct gdbarch *gdbarch, int regnum)
2667 {
2668    if (regnum < HPPA_FP4_REGNUM)
2669      return builtin_type (gdbarch)->builtin_uint32;
2670    else
2671      return builtin_type (gdbarch)->builtin_float;
2672 }
2673
2674 static struct type *
2675 hppa64_register_type (struct gdbarch *gdbarch, int regnum)
2676 {
2677    if (regnum < HPPA64_FP4_REGNUM)
2678      return builtin_type (gdbarch)->builtin_uint64;
2679    else
2680      return builtin_type (gdbarch)->builtin_double;
2681 }
2682
2683 /* Return non-zero if REGNUM is not a register available to the user
2684    through ptrace/ttrace.  */
2685
2686 static int
2687 hppa32_cannot_store_register (struct gdbarch *gdbarch, int regnum)
2688 {
2689   return (regnum == 0
2690           || regnum == HPPA_PCSQ_HEAD_REGNUM
2691           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2692           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM));
2693 }
2694
2695 static int
2696 hppa32_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
2697 {
2698   /* cr26 and cr27 are readable (but not writable) from userspace.  */
2699   if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM)
2700     return 0;
2701   else
2702     return hppa32_cannot_store_register (gdbarch, regnum);
2703 }
2704
2705 static int
2706 hppa64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
2707 {
2708   return (regnum == 0
2709           || regnum == HPPA_PCSQ_HEAD_REGNUM
2710           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2711           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM));
2712 }
2713
2714 static int
2715 hppa64_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
2716 {
2717   /* cr26 and cr27 are readable (but not writable) from userspace.  */
2718   if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM)
2719     return 0;
2720   else
2721     return hppa64_cannot_store_register (gdbarch, regnum);
2722 }
2723
2724 static CORE_ADDR
2725 hppa_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2726 {
2727   /* The low two bits of the PC on the PA contain the privilege level.
2728      Some genius implementing a (non-GCC) compiler apparently decided
2729      this means that "addresses" in a text section therefore include a
2730      privilege level, and thus symbol tables should contain these bits.
2731      This seems like a bonehead thing to do--anyway, it seems to work
2732      for our purposes to just ignore those bits.  */
2733
2734   return (addr &= ~0x3);
2735 }
2736
2737 /* Get the ARGIth function argument for the current function.  */
2738
2739 static CORE_ADDR
2740 hppa_fetch_pointer_argument (struct frame_info *frame, int argi, 
2741                              struct type *type)
2742 {
2743   return get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 26 - argi);
2744 }
2745
2746 static enum register_status
2747 hppa_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2748                            int regnum, gdb_byte *buf)
2749 {
2750   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2751   ULONGEST tmp;
2752   enum register_status status;
2753
2754   status = regcache->raw_read (regnum, &tmp);
2755   if (status == REG_VALID)
2756     {
2757       if (regnum == HPPA_PCOQ_HEAD_REGNUM || regnum == HPPA_PCOQ_TAIL_REGNUM)
2758         tmp &= ~0x3;
2759       store_unsigned_integer (buf, sizeof tmp, byte_order, tmp);
2760     }
2761   return status;
2762 }
2763
2764 static CORE_ADDR
2765 hppa_find_global_pointer (struct gdbarch *gdbarch, struct value *function)
2766 {
2767   return 0;
2768 }
2769
2770 struct value *
2771 hppa_frame_prev_register_helper (struct frame_info *this_frame,
2772                                  struct trad_frame_saved_reg saved_regs[],
2773                                  int regnum)
2774 {
2775   struct gdbarch *arch = get_frame_arch (this_frame);
2776   enum bfd_endian byte_order = gdbarch_byte_order (arch);
2777
2778   if (regnum == HPPA_PCOQ_TAIL_REGNUM)
2779     {
2780       int size = register_size (arch, HPPA_PCOQ_HEAD_REGNUM);
2781       CORE_ADDR pc;
2782       struct value *pcoq_val =
2783         trad_frame_get_prev_register (this_frame, saved_regs,
2784                                       HPPA_PCOQ_HEAD_REGNUM);
2785
2786       pc = extract_unsigned_integer (value_contents_all (pcoq_val),
2787                                      size, byte_order);
2788       return frame_unwind_got_constant (this_frame, regnum, pc + 4);
2789     }
2790
2791   return trad_frame_get_prev_register (this_frame, saved_regs, regnum);
2792 }
2793 \f
2794
2795 /* An instruction to match.  */
2796 struct insn_pattern
2797 {
2798   unsigned int data;            /* See if it matches this....  */
2799   unsigned int mask;            /* ... with this mask.  */
2800 };
2801
2802 /* See bfd/elf32-hppa.c */
2803 static struct insn_pattern hppa_long_branch_stub[] = {
2804   /* ldil LR'xxx,%r1 */
2805   { 0x20200000, 0xffe00000 },
2806   /* be,n RR'xxx(%sr4,%r1) */
2807   { 0xe0202002, 0xffe02002 }, 
2808   { 0, 0 }
2809 };
2810
2811 static struct insn_pattern hppa_long_branch_pic_stub[] = {
2812   /* b,l .+8, %r1 */
2813   { 0xe8200000, 0xffe00000 },
2814   /* addil LR'xxx - ($PIC_pcrel$0 - 4), %r1 */
2815   { 0x28200000, 0xffe00000 },
2816   /* be,n RR'xxxx - ($PIC_pcrel$0 - 8)(%sr4, %r1) */
2817   { 0xe0202002, 0xffe02002 }, 
2818   { 0, 0 }
2819 };
2820
2821 static struct insn_pattern hppa_import_stub[] = {
2822   /* addil LR'xxx, %dp */
2823   { 0x2b600000, 0xffe00000 },
2824   /* ldw RR'xxx(%r1), %r21 */
2825   { 0x48350000, 0xffffb000 },
2826   /* bv %r0(%r21) */
2827   { 0xeaa0c000, 0xffffffff },
2828   /* ldw RR'xxx+4(%r1), %r19 */
2829   { 0x48330000, 0xffffb000 },
2830   { 0, 0 }
2831 };
2832
2833 static struct insn_pattern hppa_import_pic_stub[] = {
2834   /* addil LR'xxx,%r19 */
2835   { 0x2a600000, 0xffe00000 },
2836   /* ldw RR'xxx(%r1),%r21 */
2837   { 0x48350000, 0xffffb000 },
2838   /* bv %r0(%r21) */
2839   { 0xeaa0c000, 0xffffffff },
2840   /* ldw RR'xxx+4(%r1),%r19 */
2841   { 0x48330000, 0xffffb000 },
2842   { 0, 0 },
2843 };
2844
2845 static struct insn_pattern hppa_plt_stub[] = {
2846   /* b,l 1b, %r20 - 1b is 3 insns before here */
2847   { 0xea9f1fdd, 0xffffffff },
2848   /* depi 0,31,2,%r20 */
2849   { 0xd6801c1e, 0xffffffff },
2850   { 0, 0 }
2851 };
2852
2853 /* Maximum number of instructions on the patterns above.  */
2854 #define HPPA_MAX_INSN_PATTERN_LEN       4
2855
2856 /* Return non-zero if the instructions at PC match the series
2857    described in PATTERN, or zero otherwise.  PATTERN is an array of
2858    'struct insn_pattern' objects, terminated by an entry whose mask is
2859    zero.
2860
2861    When the match is successful, fill INSN[i] with what PATTERN[i]
2862    matched.  */
2863
2864 static int
2865 hppa_match_insns (struct gdbarch *gdbarch, CORE_ADDR pc,
2866                   struct insn_pattern *pattern, unsigned int *insn)
2867 {
2868   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2869   CORE_ADDR npc = pc;
2870   int i;
2871
2872   for (i = 0; pattern[i].mask; i++)
2873     {
2874       gdb_byte buf[HPPA_INSN_SIZE];
2875
2876       target_read_memory (npc, buf, HPPA_INSN_SIZE);
2877       insn[i] = extract_unsigned_integer (buf, HPPA_INSN_SIZE, byte_order);
2878       if ((insn[i] & pattern[i].mask) == pattern[i].data)
2879         npc += 4;
2880       else
2881         return 0;
2882     }
2883
2884   return 1;
2885 }
2886
2887 /* This relaxed version of the insstruction matcher allows us to match
2888    from somewhere inside the pattern, by looking backwards in the
2889    instruction scheme.  */
2890
2891 static int
2892 hppa_match_insns_relaxed (struct gdbarch *gdbarch, CORE_ADDR pc,
2893                           struct insn_pattern *pattern, unsigned int *insn)
2894 {
2895   int offset, len = 0;
2896
2897   while (pattern[len].mask)
2898     len++;
2899
2900   for (offset = 0; offset < len; offset++)
2901     if (hppa_match_insns (gdbarch, pc - offset * HPPA_INSN_SIZE,
2902                           pattern, insn))
2903       return 1;
2904
2905   return 0;
2906 }
2907
2908 static int
2909 hppa_in_dyncall (CORE_ADDR pc)
2910 {
2911   struct unwind_table_entry *u;
2912
2913   u = find_unwind_entry (hppa_symbol_address ("$$dyncall"));
2914   if (!u)
2915     return 0;
2916
2917   return (pc >= u->region_start && pc <= u->region_end);
2918 }
2919
2920 int
2921 hppa_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc)
2922 {
2923   unsigned int insn[HPPA_MAX_INSN_PATTERN_LEN];
2924   struct unwind_table_entry *u;
2925
2926   if (in_plt_section (pc) || hppa_in_dyncall (pc))
2927     return 1;
2928
2929   /* The GNU toolchain produces linker stubs without unwind
2930      information.  Since the pattern matching for linker stubs can be
2931      quite slow, so bail out if we do have an unwind entry.  */
2932
2933   u = find_unwind_entry (pc);
2934   if (u != NULL)
2935     return 0;
2936
2937   return
2938     (hppa_match_insns_relaxed (gdbarch, pc, hppa_import_stub, insn)
2939      || hppa_match_insns_relaxed (gdbarch, pc, hppa_import_pic_stub, insn)
2940      || hppa_match_insns_relaxed (gdbarch, pc, hppa_long_branch_stub, insn)
2941      || hppa_match_insns_relaxed (gdbarch, pc,
2942                                   hppa_long_branch_pic_stub, insn));
2943 }
2944
2945 /* This code skips several kind of "trampolines" used on PA-RISC
2946    systems: $$dyncall, import stubs and PLT stubs.  */
2947
2948 CORE_ADDR
2949 hppa_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2950 {
2951   struct gdbarch *gdbarch = get_frame_arch (frame);
2952   struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
2953
2954   unsigned int insn[HPPA_MAX_INSN_PATTERN_LEN];
2955   int dp_rel;
2956
2957   /* $$dyncall handles both PLABELs and direct addresses.  */
2958   if (hppa_in_dyncall (pc))
2959     {
2960       pc = get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 22);
2961
2962       /* PLABELs have bit 30 set; if it's a PLABEL, then dereference it.  */
2963       if (pc & 0x2)
2964         pc = read_memory_typed_address (pc & ~0x3, func_ptr_type);
2965
2966       return pc;
2967     }
2968
2969   dp_rel = hppa_match_insns (gdbarch, pc, hppa_import_stub, insn);
2970   if (dp_rel || hppa_match_insns (gdbarch, pc, hppa_import_pic_stub, insn))
2971     {
2972       /* Extract the target address from the addil/ldw sequence.  */
2973       pc = hppa_extract_21 (insn[0]) + hppa_extract_14 (insn[1]);
2974
2975       if (dp_rel)
2976         pc += get_frame_register_unsigned (frame, HPPA_DP_REGNUM);
2977       else
2978         pc += get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 19);
2979
2980       /* fallthrough */
2981     }
2982
2983   if (in_plt_section (pc))
2984     {
2985       pc = read_memory_typed_address (pc, func_ptr_type);
2986
2987       /* If the PLT slot has not yet been resolved, the target will be
2988          the PLT stub.  */
2989       if (in_plt_section (pc))
2990         {
2991           /* Sanity check: are we pointing to the PLT stub?  */
2992           if (!hppa_match_insns (gdbarch, pc, hppa_plt_stub, insn))
2993             {
2994               warning (_("Cannot resolve PLT stub at %s."),
2995                        paddress (gdbarch, pc));
2996               return 0;
2997             }
2998
2999           /* This should point to the fixup routine.  */
3000           pc = read_memory_typed_address (pc + 8, func_ptr_type);
3001         }
3002     }
3003
3004   return pc;
3005 }
3006 \f
3007
3008 /* Here is a table of C type sizes on hppa with various compiles
3009    and options.  I measured this on PA 9000/800 with HP-UX 11.11
3010    and these compilers:
3011
3012      /usr/ccs/bin/cc    HP92453-01 A.11.01.21
3013      /opt/ansic/bin/cc  HP92453-01 B.11.11.28706.GP
3014      /opt/aCC/bin/aCC   B3910B A.03.45
3015      gcc                gcc 3.3.2 native hppa2.0w-hp-hpux11.11
3016
3017      cc            : 1 2 4 4 8 : 4 8 -- : 4 4
3018      ansic +DA1.1  : 1 2 4 4 8 : 4 8 16 : 4 4
3019      ansic +DA2.0  : 1 2 4 4 8 : 4 8 16 : 4 4
3020      ansic +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
3021      acc   +DA1.1  : 1 2 4 4 8 : 4 8 16 : 4 4
3022      acc   +DA2.0  : 1 2 4 4 8 : 4 8 16 : 4 4
3023      acc   +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
3024      gcc           : 1 2 4 4 8 : 4 8 16 : 4 4
3025
3026    Each line is:
3027
3028      compiler and options
3029      char, short, int, long, long long
3030      float, double, long double
3031      char *, void (*)()
3032
3033    So all these compilers use either ILP32 or LP64 model.
3034    TODO: gcc has more options so it needs more investigation.
3035
3036    For floating point types, see:
3037
3038      http://docs.hp.com/hpux/pdf/B3906-90006.pdf
3039      HP-UX floating-point guide, hpux 11.00
3040
3041    -- chastain 2003-12-18  */
3042
3043 static struct gdbarch *
3044 hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3045 {
3046   struct gdbarch_tdep *tdep;
3047   struct gdbarch *gdbarch;
3048
3049   /* find a candidate among the list of pre-declared architectures.  */
3050   arches = gdbarch_list_lookup_by_info (arches, &info);
3051   if (arches != NULL)
3052     return (arches->gdbarch);
3053
3054   /* If none found, then allocate and initialize one.  */
3055   tdep = XCNEW (struct gdbarch_tdep);
3056   gdbarch = gdbarch_alloc (&info, tdep);
3057
3058   /* Determine from the bfd_arch_info structure if we are dealing with
3059      a 32 or 64 bits architecture.  If the bfd_arch_info is not available,
3060      then default to a 32bit machine.  */
3061   if (info.bfd_arch_info != NULL)
3062     tdep->bytes_per_address =
3063       info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte;
3064   else
3065     tdep->bytes_per_address = 4;
3066
3067   tdep->find_global_pointer = hppa_find_global_pointer;
3068
3069   /* Some parts of the gdbarch vector depend on whether we are running
3070      on a 32 bits or 64 bits target.  */
3071   switch (tdep->bytes_per_address)
3072     {
3073       case 4:
3074         set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
3075         set_gdbarch_register_name (gdbarch, hppa32_register_name);
3076         set_gdbarch_register_type (gdbarch, hppa32_register_type);
3077         set_gdbarch_cannot_store_register (gdbarch,
3078                                            hppa32_cannot_store_register);
3079         set_gdbarch_cannot_fetch_register (gdbarch,
3080                                            hppa32_cannot_fetch_register);
3081         break;
3082       case 8:
3083         set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
3084         set_gdbarch_register_name (gdbarch, hppa64_register_name);
3085         set_gdbarch_register_type (gdbarch, hppa64_register_type);
3086         set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
3087         set_gdbarch_cannot_store_register (gdbarch,
3088                                            hppa64_cannot_store_register);
3089         set_gdbarch_cannot_fetch_register (gdbarch,
3090                                            hppa64_cannot_fetch_register);
3091         break;
3092       default:
3093         internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
3094                         tdep->bytes_per_address);
3095     }
3096
3097   set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
3098   set_gdbarch_ptr_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
3099
3100   /* The following gdbarch vector elements are the same in both ILP32
3101      and LP64, but might show differences some day.  */
3102   set_gdbarch_long_long_bit (gdbarch, 64);
3103   set_gdbarch_long_double_bit (gdbarch, 128);
3104   set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3105
3106   /* The following gdbarch vector elements do not depend on the address
3107      size, or in any other gdbarch element previously set.  */
3108   set_gdbarch_skip_prologue (gdbarch, hppa_skip_prologue);
3109   set_gdbarch_stack_frame_destroyed_p (gdbarch,
3110                                        hppa_stack_frame_destroyed_p);
3111   set_gdbarch_inner_than (gdbarch, core_addr_greaterthan);
3112   set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM);
3113   set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM);
3114   set_gdbarch_addr_bits_remove (gdbarch, hppa_addr_bits_remove);
3115   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3116   set_gdbarch_read_pc (gdbarch, hppa_read_pc);
3117   set_gdbarch_write_pc (gdbarch, hppa_write_pc);
3118
3119   /* Helper for function argument information.  */
3120   set_gdbarch_fetch_pointer_argument (gdbarch, hppa_fetch_pointer_argument);
3121
3122   /* When a hardware watchpoint triggers, we'll move the inferior past
3123      it by removing all eventpoints; stepping past the instruction
3124      that caused the trigger; reinserting eventpoints; and checking
3125      whether any watched location changed.  */
3126   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3127
3128   /* Inferior function call methods.  */
3129   switch (tdep->bytes_per_address)
3130     {
3131     case 4:
3132       set_gdbarch_push_dummy_call (gdbarch, hppa32_push_dummy_call);
3133       set_gdbarch_frame_align (gdbarch, hppa32_frame_align);
3134       set_gdbarch_convert_from_func_ptr_addr
3135         (gdbarch, hppa32_convert_from_func_ptr_addr);
3136       break;
3137     case 8:
3138       set_gdbarch_push_dummy_call (gdbarch, hppa64_push_dummy_call);
3139       set_gdbarch_frame_align (gdbarch, hppa64_frame_align);
3140       break;
3141     default:
3142       internal_error (__FILE__, __LINE__, _("bad switch"));
3143     }
3144       
3145   /* Struct return methods.  */
3146   switch (tdep->bytes_per_address)
3147     {
3148     case 4:
3149       set_gdbarch_return_value (gdbarch, hppa32_return_value);
3150       break;
3151     case 8:
3152       set_gdbarch_return_value (gdbarch, hppa64_return_value);
3153       break;
3154     default:
3155       internal_error (__FILE__, __LINE__, _("bad switch"));
3156     }
3157       
3158   set_gdbarch_breakpoint_kind_from_pc (gdbarch, hppa_breakpoint::kind_from_pc);
3159   set_gdbarch_sw_breakpoint_from_kind (gdbarch, hppa_breakpoint::bp_from_kind);
3160   set_gdbarch_pseudo_register_read (gdbarch, hppa_pseudo_register_read);
3161
3162   /* Frame unwind methods.  */
3163   set_gdbarch_dummy_id (gdbarch, hppa_dummy_id);
3164   set_gdbarch_unwind_pc (gdbarch, hppa_unwind_pc);
3165
3166   /* Hook in ABI-specific overrides, if they have been registered.  */
3167   gdbarch_init_osabi (info, gdbarch);
3168
3169   /* Hook in the default unwinders.  */
3170   frame_unwind_append_unwinder (gdbarch, &hppa_stub_frame_unwind);
3171   frame_unwind_append_unwinder (gdbarch, &hppa_frame_unwind);
3172   frame_unwind_append_unwinder (gdbarch, &hppa_fallback_frame_unwind);
3173
3174   return gdbarch;
3175 }
3176
3177 static void
3178 hppa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3179 {
3180   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3181
3182   fprintf_unfiltered (file, "bytes_per_address = %d\n", 
3183                       tdep->bytes_per_address);
3184   fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
3185 }
3186
3187 void
3188 _initialize_hppa_tdep (void)
3189 {
3190   gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep);
3191
3192   hppa_objfile_priv_data = register_objfile_data ();
3193
3194   add_cmd ("unwind", class_maintenance, unwind_command,
3195            _("Print unwind table entry at given address."),
3196            &maintenanceprintlist);
3197
3198   /* Debug this files internals.  */
3199   add_setshow_boolean_cmd ("hppa", class_maintenance, &hppa_debug, _("\
3200 Set whether hppa target specific debugging information should be displayed."),
3201                            _("\
3202 Show whether hppa target specific debugging information is displayed."), _("\
3203 This flag controls whether hppa target specific debugging information is\n\
3204 displayed.  This information is particularly useful for debugging frame\n\
3205 unwinding problems."),
3206                            NULL,
3207                            NULL, /* FIXME: i18n: hppa debug flag is %s.  */
3208                            &setdebuglist, &showdebuglist);
3209 }