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