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