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