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