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