OSDN Git Service

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