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