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