2005-12-09 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 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., 59 Temple Place - Suite 330,
25    Boston, MA 02111-1307, 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 static CORE_ADDR
901 hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
902                         struct regcache *regcache, CORE_ADDR bp_addr,
903                         int nargs, struct value **args, CORE_ADDR sp,
904                         int struct_return, CORE_ADDR struct_addr)
905 {
906   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
907   int i, offset = 0;
908   CORE_ADDR gp;
909
910   /* "The outgoing parameter area [...] must be aligned at a 16-byte
911      boundary."  */
912   sp = align_up (sp, 16);
913
914   for (i = 0; i < nargs; i++)
915     {
916       struct value *arg = args[i];
917       struct type *type = value_type (arg);
918       int len = TYPE_LENGTH (type);
919       const bfd_byte *valbuf;
920       int regnum;
921
922       /* "Each parameter begins on a 64-bit (8-byte) boundary."  */
923       offset = align_up (offset, 8);
924
925       if (hppa64_integral_or_pointer_p (type))
926         {
927           /* "Integral scalar parameters smaller than 64 bits are
928              padded on the left (i.e., the value is in the
929              least-significant bits of the 64-bit storage unit, and
930              the high-order bits are undefined)."  Therefore we can
931              safely sign-extend them.  */
932           if (len < 8)
933             {
934               arg = value_cast (builtin_type_int64, arg);
935               len = 8;
936             }
937         }
938       else if (hppa64_floating_p (type))
939         {
940           if (len > 8)
941             {
942               /* "Quad-precision (128-bit) floating-point scalar
943                  parameters are aligned on a 16-byte boundary."  */
944               offset = align_up (offset, 16);
945
946               /* "Double-extended- and quad-precision floating-point
947                  parameters within the first 64 bytes of the parameter
948                  list are always passed in general registers."  */
949             }
950           else
951             {
952               if (len == 4)
953                 {
954                   /* "Single-precision (32-bit) floating-point scalar
955                      parameters are padded on the left with 32 bits of
956                      garbage (i.e., the floating-point value is in the
957                      least-significant 32 bits of a 64-bit storage
958                      unit)."  */
959                   offset += 4;
960                 }
961
962               /* "Single- and double-precision floating-point
963                  parameters in this area are passed according to the
964                  available formal parameter information in a function
965                  prototype.  [...]  If no prototype is in scope,
966                  floating-point parameters must be passed both in the
967                  corresponding general registers and in the
968                  corresponding floating-point registers."  */
969               regnum = HPPA64_FP4_REGNUM + offset / 8;
970
971               if (regnum < HPPA64_FP4_REGNUM + 8)
972                 {
973                   /* "Single-precision floating-point parameters, when
974                      passed in floating-point registers, are passed in
975                      the right halves of the floating point registers;
976                      the left halves are unused."  */
977                   regcache_cooked_write_part (regcache, regnum, offset % 8,
978                                               len, value_contents (arg));
979                 }
980             }
981         }
982       else
983         {
984           if (len > 8)
985             {
986               /* "Aggregates larger than 8 bytes are aligned on a
987                  16-byte boundary, possibly leaving an unused argument
988                  slot, which is filled with garbage. If necessary,
989                  they are padded on the right (with garbage), to a
990                  multiple of 8 bytes."  */
991               offset = align_up (offset, 16);
992             }
993         }
994
995       /* Always store the argument in memory.  */
996       write_memory (sp + offset, value_contents (arg), len);
997
998       valbuf = value_contents (arg);
999       regnum = HPPA_ARG0_REGNUM - offset / 8;
1000       while (regnum > HPPA_ARG0_REGNUM - 8 && len > 0)
1001         {
1002           regcache_cooked_write_part (regcache, regnum,
1003                                       offset % 8, min (len, 8), valbuf);
1004           offset += min (len, 8);
1005           valbuf += min (len, 8);
1006           len -= min (len, 8);
1007           regnum--;
1008         }
1009
1010       offset += len;
1011     }
1012
1013   /* Set up GR29 (%ret1) to hold the argument pointer (ap).  */
1014   regcache_cooked_write_unsigned (regcache, HPPA_RET1_REGNUM, sp + 64);
1015
1016   /* Allocate the outgoing parameter area.  Make sure the outgoing
1017      parameter area is multiple of 16 bytes in length.  */
1018   sp += max (align_up (offset, 16), 64);
1019
1020   /* Allocate 32-bytes of scratch space.  The documentation doesn't
1021      mention this, but it seems to be needed.  */
1022   sp += 32;
1023
1024   /* Allocate the frame marker area.  */
1025   sp += 16;
1026
1027   /* If a structure has to be returned, set up GR 28 (%ret0) to hold
1028      its address.  */
1029   if (struct_return)
1030     regcache_cooked_write_unsigned (regcache, HPPA_RET0_REGNUM, struct_addr);
1031
1032   /* Set up GR27 (%dp) to hold the global pointer (gp).  */
1033   gp = tdep->find_global_pointer (function);
1034   if (gp != 0)
1035     regcache_cooked_write_unsigned (regcache, HPPA_DP_REGNUM, gp);
1036
1037   /* Set up GR2 (%rp) to hold the return pointer (rp).  */
1038   if (!gdbarch_push_dummy_code_p (gdbarch))
1039     regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr);
1040
1041   /* Set up GR30 to hold the stack pointer (sp).  */
1042   regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, sp);
1043
1044   return sp;
1045 }
1046 \f
1047
1048 /* Handle 32/64-bit struct return conventions.  */
1049
1050 static enum return_value_convention
1051 hppa32_return_value (struct gdbarch *gdbarch,
1052                      struct type *type, struct regcache *regcache,
1053                      gdb_byte *readbuf, const gdb_byte *writebuf)
1054 {
1055   if (TYPE_LENGTH (type) <= 2 * 4)
1056     {
1057       /* The value always lives in the right hand end of the register
1058          (or register pair)?  */
1059       int b;
1060       int reg = TYPE_CODE (type) == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28;
1061       int part = TYPE_LENGTH (type) % 4;
1062       /* The left hand register contains only part of the value,
1063          transfer that first so that the rest can be xfered as entire
1064          4-byte registers.  */
1065       if (part > 0)
1066         {
1067           if (readbuf != NULL)
1068             regcache_cooked_read_part (regcache, reg, 4 - part,
1069                                        part, readbuf);
1070           if (writebuf != NULL)
1071             regcache_cooked_write_part (regcache, reg, 4 - part,
1072                                         part, writebuf);
1073           reg++;
1074         }
1075       /* Now transfer the remaining register values.  */
1076       for (b = part; b < TYPE_LENGTH (type); b += 4)
1077         {
1078           if (readbuf != NULL)
1079             regcache_cooked_read (regcache, reg, readbuf + b);
1080           if (writebuf != NULL)
1081             regcache_cooked_write (regcache, reg, writebuf + b);
1082           reg++;
1083         }
1084       return RETURN_VALUE_REGISTER_CONVENTION;
1085     }
1086   else
1087     return RETURN_VALUE_STRUCT_CONVENTION;
1088 }
1089
1090 static enum return_value_convention
1091 hppa64_return_value (struct gdbarch *gdbarch,
1092                      struct type *type, struct regcache *regcache,
1093                      gdb_byte *readbuf, const gdb_byte *writebuf)
1094 {
1095   int len = TYPE_LENGTH (type);
1096   int regnum, offset;
1097
1098   if (len > 16)
1099     {
1100       /* All return values larget than 128 bits must be aggregate
1101          return values.  */
1102       gdb_assert (!hppa64_integral_or_pointer_p (type));
1103       gdb_assert (!hppa64_floating_p (type));
1104
1105       /* "Aggregate return values larger than 128 bits are returned in
1106          a buffer allocated by the caller.  The address of the buffer
1107          must be passed in GR 28."  */
1108       return RETURN_VALUE_STRUCT_CONVENTION;
1109     }
1110
1111   if (hppa64_integral_or_pointer_p (type))
1112     {
1113       /* "Integral return values are returned in GR 28.  Values
1114          smaller than 64 bits are padded on the left (with garbage)."  */
1115       regnum = HPPA_RET0_REGNUM;
1116       offset = 8 - len;
1117     }
1118   else if (hppa64_floating_p (type))
1119     {
1120       if (len > 8)
1121         {
1122           /* "Double-extended- and quad-precision floating-point
1123              values are returned in GRs 28 and 29.  The sign,
1124              exponent, and most-significant bits of the mantissa are
1125              returned in GR 28; the least-significant bits of the
1126              mantissa are passed in GR 29.  For double-extended
1127              precision values, GR 29 is padded on the right with 48
1128              bits of garbage."  */
1129           regnum = HPPA_RET0_REGNUM;
1130           offset = 0;
1131         }
1132       else
1133         {
1134           /* "Single-precision and double-precision floating-point
1135              return values are returned in FR 4R (single precision) or
1136              FR 4 (double-precision)."  */
1137           regnum = HPPA64_FP4_REGNUM;
1138           offset = 8 - len;
1139         }
1140     }
1141   else
1142     {
1143       /* "Aggregate return values up to 64 bits in size are returned
1144          in GR 28.  Aggregates smaller than 64 bits are left aligned
1145          in the register; the pad bits on the right are undefined."
1146
1147          "Aggregate return values between 65 and 128 bits are returned
1148          in GRs 28 and 29.  The first 64 bits are placed in GR 28, and
1149          the remaining bits are placed, left aligned, in GR 29.  The
1150          pad bits on the right of GR 29 (if any) are undefined."  */
1151       regnum = HPPA_RET0_REGNUM;
1152       offset = 0;
1153     }
1154
1155   if (readbuf)
1156     {
1157       while (len > 0)
1158         {
1159           regcache_cooked_read_part (regcache, regnum, offset,
1160                                      min (len, 8), readbuf);
1161           readbuf += min (len, 8);
1162           len -= min (len, 8);
1163           regnum++;
1164         }
1165     }
1166
1167   if (writebuf)
1168     {
1169       while (len > 0)
1170         {
1171           regcache_cooked_write_part (regcache, regnum, offset,
1172                                       min (len, 8), writebuf);
1173           writebuf += min (len, 8);
1174           len -= min (len, 8);
1175           regnum++;
1176         }
1177     }
1178
1179   return RETURN_VALUE_REGISTER_CONVENTION;
1180 }
1181 \f
1182
1183 static CORE_ADDR
1184 hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
1185                                    struct target_ops *targ)
1186 {
1187   if (addr & 2)
1188     {
1189       CORE_ADDR plabel = addr & ~3;
1190       return read_memory_typed_address (plabel, builtin_type_void_func_ptr);
1191     }
1192
1193   return addr;
1194 }
1195
1196 static CORE_ADDR
1197 hppa32_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1198 {
1199   /* HP frames are 64-byte (or cache line) aligned (yes that's _byte_
1200      and not _bit_)!  */
1201   return align_up (addr, 64);
1202 }
1203
1204 /* Force all frames to 16-byte alignment.  Better safe than sorry.  */
1205
1206 static CORE_ADDR
1207 hppa64_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1208 {
1209   /* Just always 16-byte align.  */
1210   return align_up (addr, 16);
1211 }
1212
1213 CORE_ADDR
1214 hppa_read_pc (ptid_t ptid)
1215 {
1216   ULONGEST ipsw;
1217   CORE_ADDR pc;
1218
1219   ipsw = read_register_pid (HPPA_IPSW_REGNUM, ptid);
1220   pc = read_register_pid (HPPA_PCOQ_HEAD_REGNUM, ptid);
1221
1222   /* If the current instruction is nullified, then we are effectively
1223      still executing the previous instruction.  Pretend we are still
1224      there.  This is needed when single stepping; if the nullified
1225      instruction is on a different line, we don't want GDB to think
1226      we've stepped onto that line.  */
1227   if (ipsw & 0x00200000)
1228     pc -= 4;
1229
1230   return pc & ~0x3;
1231 }
1232
1233 void
1234 hppa_write_pc (CORE_ADDR pc, ptid_t ptid)
1235 {
1236   write_register_pid (HPPA_PCOQ_HEAD_REGNUM, pc, ptid);
1237   write_register_pid (HPPA_PCOQ_TAIL_REGNUM, pc + 4, ptid);
1238 }
1239
1240 /* return the alignment of a type in bytes. Structures have the maximum
1241    alignment required by their fields. */
1242
1243 static int
1244 hppa_alignof (struct type *type)
1245 {
1246   int max_align, align, i;
1247   CHECK_TYPEDEF (type);
1248   switch (TYPE_CODE (type))
1249     {
1250     case TYPE_CODE_PTR:
1251     case TYPE_CODE_INT:
1252     case TYPE_CODE_FLT:
1253       return TYPE_LENGTH (type);
1254     case TYPE_CODE_ARRAY:
1255       return hppa_alignof (TYPE_FIELD_TYPE (type, 0));
1256     case TYPE_CODE_STRUCT:
1257     case TYPE_CODE_UNION:
1258       max_align = 1;
1259       for (i = 0; i < TYPE_NFIELDS (type); i++)
1260         {
1261           /* Bit fields have no real alignment. */
1262           /* if (!TYPE_FIELD_BITPOS (type, i)) */
1263           if (!TYPE_FIELD_BITSIZE (type, i))    /* elz: this should be bitsize */
1264             {
1265               align = hppa_alignof (TYPE_FIELD_TYPE (type, i));
1266               max_align = max (max_align, align);
1267             }
1268         }
1269       return max_align;
1270     default:
1271       return 4;
1272     }
1273 }
1274
1275 /* For the given instruction (INST), return any adjustment it makes
1276    to the stack pointer or zero for no adjustment. 
1277
1278    This only handles instructions commonly found in prologues.  */
1279
1280 static int
1281 prologue_inst_adjust_sp (unsigned long inst)
1282 {
1283   /* This must persist across calls.  */
1284   static int save_high21;
1285
1286   /* The most common way to perform a stack adjustment ldo X(sp),sp */
1287   if ((inst & 0xffffc000) == 0x37de0000)
1288     return hppa_extract_14 (inst);
1289
1290   /* stwm X,D(sp) */
1291   if ((inst & 0xffe00000) == 0x6fc00000)
1292     return hppa_extract_14 (inst);
1293
1294   /* std,ma X,D(sp) */
1295   if ((inst & 0xffe00008) == 0x73c00008)
1296     return (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
1297
1298   /* addil high21,%r30; ldo low11,(%r1),%r30)
1299      save high bits in save_high21 for later use.  */
1300   if ((inst & 0xffe00000) == 0x2bc00000)
1301     {
1302       save_high21 = hppa_extract_21 (inst);
1303       return 0;
1304     }
1305
1306   if ((inst & 0xffff0000) == 0x343e0000)
1307     return save_high21 + hppa_extract_14 (inst);
1308
1309   /* fstws as used by the HP compilers.  */
1310   if ((inst & 0xffffffe0) == 0x2fd01220)
1311     return hppa_extract_5_load (inst);
1312
1313   /* No adjustment.  */
1314   return 0;
1315 }
1316
1317 /* Return nonzero if INST is a branch of some kind, else return zero.  */
1318
1319 static int
1320 is_branch (unsigned long inst)
1321 {
1322   switch (inst >> 26)
1323     {
1324     case 0x20:
1325     case 0x21:
1326     case 0x22:
1327     case 0x23:
1328     case 0x27:
1329     case 0x28:
1330     case 0x29:
1331     case 0x2a:
1332     case 0x2b:
1333     case 0x2f:
1334     case 0x30:
1335     case 0x31:
1336     case 0x32:
1337     case 0x33:
1338     case 0x38:
1339     case 0x39:
1340     case 0x3a:
1341     case 0x3b:
1342       return 1;
1343
1344     default:
1345       return 0;
1346     }
1347 }
1348
1349 /* Return the register number for a GR which is saved by INST or
1350    zero it INST does not save a GR.  */
1351
1352 static int
1353 inst_saves_gr (unsigned long inst)
1354 {
1355   /* Does it look like a stw?  */
1356   if ((inst >> 26) == 0x1a || (inst >> 26) == 0x1b
1357       || (inst >> 26) == 0x1f
1358       || ((inst >> 26) == 0x1f
1359           && ((inst >> 6) == 0xa)))
1360     return hppa_extract_5R_store (inst);
1361
1362   /* Does it look like a std?  */
1363   if ((inst >> 26) == 0x1c
1364       || ((inst >> 26) == 0x03
1365           && ((inst >> 6) & 0xf) == 0xb))
1366     return hppa_extract_5R_store (inst);
1367
1368   /* Does it look like a stwm?  GCC & HPC may use this in prologues. */
1369   if ((inst >> 26) == 0x1b)
1370     return hppa_extract_5R_store (inst);
1371
1372   /* Does it look like sth or stb?  HPC versions 9.0 and later use these
1373      too.  */
1374   if ((inst >> 26) == 0x19 || (inst >> 26) == 0x18
1375       || ((inst >> 26) == 0x3
1376           && (((inst >> 6) & 0xf) == 0x8
1377               || (inst >> 6) & 0xf) == 0x9))
1378     return hppa_extract_5R_store (inst);
1379
1380   return 0;
1381 }
1382
1383 /* Return the register number for a FR which is saved by INST or
1384    zero it INST does not save a FR.
1385
1386    Note we only care about full 64bit register stores (that's the only
1387    kind of stores the prologue will use).
1388
1389    FIXME: What about argument stores with the HP compiler in ANSI mode? */
1390
1391 static int
1392 inst_saves_fr (unsigned long inst)
1393 {
1394   /* is this an FSTD ? */
1395   if ((inst & 0xfc00dfc0) == 0x2c001200)
1396     return hppa_extract_5r_store (inst);
1397   if ((inst & 0xfc000002) == 0x70000002)
1398     return hppa_extract_5R_store (inst);
1399   /* is this an FSTW ? */
1400   if ((inst & 0xfc00df80) == 0x24001200)
1401     return hppa_extract_5r_store (inst);
1402   if ((inst & 0xfc000002) == 0x7c000000)
1403     return hppa_extract_5R_store (inst);
1404   return 0;
1405 }
1406
1407 /* Advance PC across any function entry prologue instructions
1408    to reach some "real" code. 
1409
1410    Use information in the unwind table to determine what exactly should
1411    be in the prologue.  */
1412
1413
1414 static CORE_ADDR
1415 skip_prologue_hard_way (CORE_ADDR pc, int stop_before_branch)
1416 {
1417   char buf[4];
1418   CORE_ADDR orig_pc = pc;
1419   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1420   unsigned long args_stored, status, i, restart_gr, restart_fr;
1421   struct unwind_table_entry *u;
1422   int final_iteration;
1423
1424   restart_gr = 0;
1425   restart_fr = 0;
1426
1427 restart:
1428   u = find_unwind_entry (pc);
1429   if (!u)
1430     return pc;
1431
1432   /* If we are not at the beginning of a function, then return now. */
1433   if ((pc & ~0x3) != u->region_start)
1434     return pc;
1435
1436   /* This is how much of a frame adjustment we need to account for.  */
1437   stack_remaining = u->Total_frame_size << 3;
1438
1439   /* Magic register saves we want to know about.  */
1440   save_rp = u->Save_RP;
1441   save_sp = u->Save_SP;
1442
1443   /* An indication that args may be stored into the stack.  Unfortunately
1444      the HPUX compilers tend to set this in cases where no args were
1445      stored too!.  */
1446   args_stored = 1;
1447
1448   /* Turn the Entry_GR field into a bitmask.  */
1449   save_gr = 0;
1450   for (i = 3; i < u->Entry_GR + 3; i++)
1451     {
1452       /* Frame pointer gets saved into a special location.  */
1453       if (u->Save_SP && i == HPPA_FP_REGNUM)
1454         continue;
1455
1456       save_gr |= (1 << i);
1457     }
1458   save_gr &= ~restart_gr;
1459
1460   /* Turn the Entry_FR field into a bitmask too.  */
1461   save_fr = 0;
1462   for (i = 12; i < u->Entry_FR + 12; i++)
1463     save_fr |= (1 << i);
1464   save_fr &= ~restart_fr;
1465
1466   final_iteration = 0;
1467
1468   /* Loop until we find everything of interest or hit a branch.
1469
1470      For unoptimized GCC code and for any HP CC code this will never ever
1471      examine any user instructions.
1472
1473      For optimzied GCC code we're faced with problems.  GCC will schedule
1474      its prologue and make prologue instructions available for delay slot
1475      filling.  The end result is user code gets mixed in with the prologue
1476      and a prologue instruction may be in the delay slot of the first branch
1477      or call.
1478
1479      Some unexpected things are expected with debugging optimized code, so
1480      we allow this routine to walk past user instructions in optimized
1481      GCC code.  */
1482   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0
1483          || args_stored)
1484     {
1485       unsigned int reg_num;
1486       unsigned long old_stack_remaining, old_save_gr, old_save_fr;
1487       unsigned long old_save_rp, old_save_sp, next_inst;
1488
1489       /* Save copies of all the triggers so we can compare them later
1490          (only for HPC).  */
1491       old_save_gr = save_gr;
1492       old_save_fr = save_fr;
1493       old_save_rp = save_rp;
1494       old_save_sp = save_sp;
1495       old_stack_remaining = stack_remaining;
1496
1497       status = deprecated_read_memory_nobpt (pc, buf, 4);
1498       inst = extract_unsigned_integer (buf, 4);
1499
1500       /* Yow! */
1501       if (status != 0)
1502         return pc;
1503
1504       /* Note the interesting effects of this instruction.  */
1505       stack_remaining -= prologue_inst_adjust_sp (inst);
1506
1507       /* There are limited ways to store the return pointer into the
1508          stack.  */
1509       if (inst == 0x6bc23fd9 || inst == 0x0fc212c1 || inst == 0x73c23fe1)
1510         save_rp = 0;
1511
1512       /* These are the only ways we save SP into the stack.  At this time
1513          the HP compilers never bother to save SP into the stack.  */
1514       if ((inst & 0xffffc000) == 0x6fc10000
1515           || (inst & 0xffffc00c) == 0x73c10008)
1516         save_sp = 0;
1517
1518       /* Are we loading some register with an offset from the argument
1519          pointer?  */
1520       if ((inst & 0xffe00000) == 0x37a00000
1521           || (inst & 0xffffffe0) == 0x081d0240)
1522         {
1523           pc += 4;
1524           continue;
1525         }
1526
1527       /* Account for general and floating-point register saves.  */
1528       reg_num = inst_saves_gr (inst);
1529       save_gr &= ~(1 << reg_num);
1530
1531       /* Ugh.  Also account for argument stores into the stack.
1532          Unfortunately args_stored only tells us that some arguments
1533          where stored into the stack.  Not how many or what kind!
1534
1535          This is a kludge as on the HP compiler sets this bit and it
1536          never does prologue scheduling.  So once we see one, skip past
1537          all of them.   We have similar code for the fp arg stores below.
1538
1539          FIXME.  Can still die if we have a mix of GR and FR argument
1540          stores!  */
1541       if (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26)
1542         {
1543           while (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26)
1544             {
1545               pc += 4;
1546               status = deprecated_read_memory_nobpt (pc, buf, 4);
1547               inst = extract_unsigned_integer (buf, 4);
1548               if (status != 0)
1549                 return pc;
1550               reg_num = inst_saves_gr (inst);
1551             }
1552           args_stored = 0;
1553           continue;
1554         }
1555
1556       reg_num = inst_saves_fr (inst);
1557       save_fr &= ~(1 << reg_num);
1558
1559       status = deprecated_read_memory_nobpt (pc + 4, buf, 4);
1560       next_inst = extract_unsigned_integer (buf, 4);
1561
1562       /* Yow! */
1563       if (status != 0)
1564         return pc;
1565
1566       /* We've got to be read to handle the ldo before the fp register
1567          save.  */
1568       if ((inst & 0xfc000000) == 0x34000000
1569           && inst_saves_fr (next_inst) >= 4
1570           && inst_saves_fr (next_inst) <= (TARGET_PTR_BIT == 64 ? 11 : 7))
1571         {
1572           /* So we drop into the code below in a reasonable state.  */
1573           reg_num = inst_saves_fr (next_inst);
1574           pc -= 4;
1575         }
1576
1577       /* Ugh.  Also account for argument stores into the stack.
1578          This is a kludge as on the HP compiler sets this bit and it
1579          never does prologue scheduling.  So once we see one, skip past
1580          all of them.  */
1581       if (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7))
1582         {
1583           while (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7))
1584             {
1585               pc += 8;
1586               status = deprecated_read_memory_nobpt (pc, buf, 4);
1587               inst = extract_unsigned_integer (buf, 4);
1588               if (status != 0)
1589                 return pc;
1590               if ((inst & 0xfc000000) != 0x34000000)
1591                 break;
1592               status = deprecated_read_memory_nobpt (pc + 4, buf, 4);
1593               next_inst = extract_unsigned_integer (buf, 4);
1594               if (status != 0)
1595                 return pc;
1596               reg_num = inst_saves_fr (next_inst);
1597             }
1598           args_stored = 0;
1599           continue;
1600         }
1601
1602       /* Quit if we hit any kind of branch.  This can happen if a prologue
1603          instruction is in the delay slot of the first call/branch.  */
1604       if (is_branch (inst) && stop_before_branch)
1605         break;
1606
1607       /* What a crock.  The HP compilers set args_stored even if no
1608          arguments were stored into the stack (boo hiss).  This could
1609          cause this code to then skip a bunch of user insns (up to the
1610          first branch).
1611
1612          To combat this we try to identify when args_stored was bogusly
1613          set and clear it.   We only do this when args_stored is nonzero,
1614          all other resources are accounted for, and nothing changed on
1615          this pass.  */
1616       if (args_stored
1617        && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1618           && old_save_gr == save_gr && old_save_fr == save_fr
1619           && old_save_rp == save_rp && old_save_sp == save_sp
1620           && old_stack_remaining == stack_remaining)
1621         break;
1622
1623       /* Bump the PC.  */
1624       pc += 4;
1625
1626       /* !stop_before_branch, so also look at the insn in the delay slot 
1627          of the branch.  */
1628       if (final_iteration)
1629         break;
1630       if (is_branch (inst))
1631         final_iteration = 1;
1632     }
1633
1634   /* We've got a tenative location for the end of the prologue.  However
1635      because of limitations in the unwind descriptor mechanism we may
1636      have went too far into user code looking for the save of a register
1637      that does not exist.  So, if there registers we expected to be saved
1638      but never were, mask them out and restart.
1639
1640      This should only happen in optimized code, and should be very rare.  */
1641   if (save_gr || (save_fr && !(restart_fr || restart_gr)))
1642     {
1643       pc = orig_pc;
1644       restart_gr = save_gr;
1645       restart_fr = save_fr;
1646       goto restart;
1647     }
1648
1649   return pc;
1650 }
1651
1652
1653 /* Return the address of the PC after the last prologue instruction if
1654    we can determine it from the debug symbols.  Else return zero.  */
1655
1656 static CORE_ADDR
1657 after_prologue (CORE_ADDR pc)
1658 {
1659   struct symtab_and_line sal;
1660   CORE_ADDR func_addr, func_end;
1661   struct symbol *f;
1662
1663   /* If we can not find the symbol in the partial symbol table, then
1664      there is no hope we can determine the function's start address
1665      with this code.  */
1666   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
1667     return 0;
1668
1669   /* Get the line associated with FUNC_ADDR.  */
1670   sal = find_pc_line (func_addr, 0);
1671
1672   /* There are only two cases to consider.  First, the end of the source line
1673      is within the function bounds.  In that case we return the end of the
1674      source line.  Second is the end of the source line extends beyond the
1675      bounds of the current function.  We need to use the slow code to
1676      examine instructions in that case. 
1677
1678      Anything else is simply a bug elsewhere.  Fixing it here is absolutely
1679      the wrong thing to do.  In fact, it should be entirely possible for this
1680      function to always return zero since the slow instruction scanning code
1681      is supposed to *always* work.  If it does not, then it is a bug.  */
1682   if (sal.end < func_end)
1683     return sal.end;
1684   else
1685     return 0;
1686 }
1687
1688 /* To skip prologues, I use this predicate.  Returns either PC itself
1689    if the code at PC does not look like a function prologue; otherwise
1690    returns an address that (if we're lucky) follows the prologue.  
1691    
1692    hppa_skip_prologue is called by gdb to place a breakpoint in a function.
1693    It doesn't necessarily skips all the insns in the prologue. In fact
1694    we might not want to skip all the insns because a prologue insn may
1695    appear in the delay slot of the first branch, and we don't want to
1696    skip over the branch in that case.  */
1697
1698 static CORE_ADDR
1699 hppa_skip_prologue (CORE_ADDR pc)
1700 {
1701   unsigned long inst;
1702   int offset;
1703   CORE_ADDR post_prologue_pc;
1704   char buf[4];
1705
1706   /* See if we can determine the end of the prologue via the symbol table.
1707      If so, then return either PC, or the PC after the prologue, whichever
1708      is greater.  */
1709
1710   post_prologue_pc = after_prologue (pc);
1711
1712   /* If after_prologue returned a useful address, then use it.  Else
1713      fall back on the instruction skipping code.
1714
1715      Some folks have claimed this causes problems because the breakpoint
1716      may be the first instruction of the prologue.  If that happens, then
1717      the instruction skipping code has a bug that needs to be fixed.  */
1718   if (post_prologue_pc != 0)
1719     return max (pc, post_prologue_pc);
1720   else
1721     return (skip_prologue_hard_way (pc, 1));
1722 }
1723
1724 struct hppa_frame_cache
1725 {
1726   CORE_ADDR base;
1727   struct trad_frame_saved_reg *saved_regs;
1728 };
1729
1730 static struct hppa_frame_cache *
1731 hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
1732 {
1733   struct hppa_frame_cache *cache;
1734   long saved_gr_mask;
1735   long saved_fr_mask;
1736   CORE_ADDR this_sp;
1737   long frame_size;
1738   struct unwind_table_entry *u;
1739   CORE_ADDR prologue_end;
1740   int fp_in_r1 = 0;
1741   int i;
1742
1743   if (hppa_debug)
1744     fprintf_unfiltered (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ",
1745       frame_relative_level(next_frame));
1746
1747   if ((*this_cache) != NULL)
1748     {
1749       if (hppa_debug)
1750         fprintf_unfiltered (gdb_stdlog, "base=0x%s (cached) }", 
1751           paddr_nz (((struct hppa_frame_cache *)*this_cache)->base));
1752       return (*this_cache);
1753     }
1754   cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
1755   (*this_cache) = cache;
1756   cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
1757
1758   /* Yow! */
1759   u = find_unwind_entry (frame_pc_unwind (next_frame));
1760   if (!u)
1761     {
1762       if (hppa_debug)
1763         fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
1764       return (*this_cache);
1765     }
1766
1767   /* Turn the Entry_GR field into a bitmask.  */
1768   saved_gr_mask = 0;
1769   for (i = 3; i < u->Entry_GR + 3; i++)
1770     {
1771       /* Frame pointer gets saved into a special location.  */
1772       if (u->Save_SP && i == HPPA_FP_REGNUM)
1773         continue;
1774         
1775       saved_gr_mask |= (1 << i);
1776     }
1777
1778   /* Turn the Entry_FR field into a bitmask too.  */
1779   saved_fr_mask = 0;
1780   for (i = 12; i < u->Entry_FR + 12; i++)
1781     saved_fr_mask |= (1 << i);
1782
1783   /* Loop until we find everything of interest or hit a branch.
1784
1785      For unoptimized GCC code and for any HP CC code this will never ever
1786      examine any user instructions.
1787
1788      For optimized GCC code we're faced with problems.  GCC will schedule
1789      its prologue and make prologue instructions available for delay slot
1790      filling.  The end result is user code gets mixed in with the prologue
1791      and a prologue instruction may be in the delay slot of the first branch
1792      or call.
1793
1794      Some unexpected things are expected with debugging optimized code, so
1795      we allow this routine to walk past user instructions in optimized
1796      GCC code.  */
1797   {
1798     int final_iteration = 0;
1799     CORE_ADDR pc, end_pc;
1800     int looking_for_sp = u->Save_SP;
1801     int looking_for_rp = u->Save_RP;
1802     int fp_loc = -1;
1803
1804     /* We have to use skip_prologue_hard_way instead of just 
1805        skip_prologue_using_sal, in case we stepped into a function without
1806        symbol information.  hppa_skip_prologue also bounds the returned
1807        pc by the passed in pc, so it will not return a pc in the next
1808        function.  
1809        
1810        We used to call hppa_skip_prologue to find the end of the prologue,
1811        but if some non-prologue instructions get scheduled into the prologue,
1812        and the program is compiled with debug information, the "easy" way
1813        in hppa_skip_prologue will return a prologue end that is too early
1814        for us to notice any potential frame adjustments.  */
1815
1816     /* We used to use frame_func_unwind () to locate the beginning of the
1817        function to pass to skip_prologue ().  However, when objects are 
1818        compiled without debug symbols, frame_func_unwind can return the wrong 
1819        function (or 0).  We can do better than that by using unwind records.  */
1820
1821     prologue_end = skip_prologue_hard_way (u->region_start, 0);
1822     end_pc = frame_pc_unwind (next_frame);
1823
1824     if (prologue_end != 0 && end_pc > prologue_end)
1825       end_pc = prologue_end;
1826
1827     frame_size = 0;
1828
1829     for (pc = u->region_start;
1830          ((saved_gr_mask || saved_fr_mask
1831            || looking_for_sp || looking_for_rp
1832            || frame_size < (u->Total_frame_size << 3))
1833           && pc < end_pc);
1834          pc += 4)
1835       {
1836         int reg;
1837         char buf4[4];
1838         long inst;
1839
1840         if (!safe_frame_unwind_memory (next_frame, pc, buf4, 
1841                                        sizeof buf4)) 
1842           {
1843             error (_("Cannot read instruction at 0x%s."), paddr_nz (pc));
1844             return (*this_cache);
1845           }
1846
1847         inst = extract_unsigned_integer (buf4, sizeof buf4);
1848
1849         /* Note the interesting effects of this instruction.  */
1850         frame_size += prologue_inst_adjust_sp (inst);
1851         
1852         /* There are limited ways to store the return pointer into the
1853            stack.  */
1854         if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
1855           {
1856             looking_for_rp = 0;
1857             cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
1858           }
1859         else if (inst == 0x6bc23fd1) /* stw rp,-0x18(sr0,sp) */
1860           {
1861             looking_for_rp = 0;
1862             cache->saved_regs[HPPA_RP_REGNUM].addr = -24;
1863           }
1864         else if (inst == 0x0fc212c1 
1865                  || inst == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
1866           {
1867             looking_for_rp = 0;
1868             cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
1869           }
1870         
1871         /* Check to see if we saved SP into the stack.  This also
1872            happens to indicate the location of the saved frame
1873            pointer.  */
1874         if ((inst & 0xffffc000) == 0x6fc10000  /* stw,ma r1,N(sr0,sp) */
1875             || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
1876           {
1877             looking_for_sp = 0;
1878             cache->saved_regs[HPPA_FP_REGNUM].addr = 0;
1879           }
1880         else if (inst == 0x08030241) /* copy %r3, %r1 */
1881           {
1882             fp_in_r1 = 1;
1883           }
1884         
1885         /* Account for general and floating-point register saves.  */
1886         reg = inst_saves_gr (inst);
1887         if (reg >= 3 && reg <= 18
1888             && (!u->Save_SP || reg != HPPA_FP_REGNUM))
1889           {
1890             saved_gr_mask &= ~(1 << reg);
1891             if ((inst >> 26) == 0x1b && hppa_extract_14 (inst) >= 0)
1892               /* stwm with a positive displacement is a _post_
1893                  _modify_.  */
1894               cache->saved_regs[reg].addr = 0;
1895             else if ((inst & 0xfc00000c) == 0x70000008)
1896               /* A std has explicit post_modify forms.  */
1897               cache->saved_regs[reg].addr = 0;
1898             else
1899               {
1900                 CORE_ADDR offset;
1901                 
1902                 if ((inst >> 26) == 0x1c)
1903                   offset = (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
1904                 else if ((inst >> 26) == 0x03)
1905                   offset = hppa_low_hppa_sign_extend (inst & 0x1f, 5);
1906                 else
1907                   offset = hppa_extract_14 (inst);
1908                 
1909                 /* Handle code with and without frame pointers.  */
1910                 if (u->Save_SP)
1911                   cache->saved_regs[reg].addr = offset;
1912                 else
1913                   cache->saved_regs[reg].addr = (u->Total_frame_size << 3) + offset;
1914               }
1915           }
1916
1917         /* GCC handles callee saved FP regs a little differently.  
1918            
1919            It emits an instruction to put the value of the start of
1920            the FP store area into %r1.  It then uses fstds,ma with a
1921            basereg of %r1 for the stores.
1922
1923            HP CC emits them at the current stack pointer modifying the
1924            stack pointer as it stores each register.  */
1925         
1926         /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
1927         if ((inst & 0xffffc000) == 0x34610000
1928             || (inst & 0xffffc000) == 0x37c10000)
1929           fp_loc = hppa_extract_14 (inst);
1930         
1931         reg = inst_saves_fr (inst);
1932         if (reg >= 12 && reg <= 21)
1933           {
1934             /* Note +4 braindamage below is necessary because the FP
1935                status registers are internally 8 registers rather than
1936                the expected 4 registers.  */
1937             saved_fr_mask &= ~(1 << reg);
1938             if (fp_loc == -1)
1939               {
1940                 /* 1st HP CC FP register store.  After this
1941                    instruction we've set enough state that the GCC and
1942                    HPCC code are both handled in the same manner.  */
1943                 cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].addr = 0;
1944                 fp_loc = 8;
1945               }
1946             else
1947               {
1948                 cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc;
1949                 fp_loc += 8;
1950               }
1951           }
1952         
1953         /* Quit if we hit any kind of branch the previous iteration. */
1954         if (final_iteration)
1955           break;
1956         /* We want to look precisely one instruction beyond the branch
1957            if we have not found everything yet.  */
1958         if (is_branch (inst))
1959           final_iteration = 1;
1960       }
1961   }
1962
1963   {
1964     /* The frame base always represents the value of %sp at entry to
1965        the current function (and is thus equivalent to the "saved"
1966        stack pointer.  */
1967     CORE_ADDR this_sp = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM);
1968     CORE_ADDR fp;
1969
1970     if (hppa_debug)
1971       fprintf_unfiltered (gdb_stdlog, " (this_sp=0x%s, pc=0x%s, "
1972                           "prologue_end=0x%s) ",
1973                           paddr_nz (this_sp),
1974                           paddr_nz (frame_pc_unwind (next_frame)),
1975                           paddr_nz (prologue_end));
1976
1977      /* Check to see if a frame pointer is available, and use it for
1978         frame unwinding if it is.
1979  
1980         There are some situations where we need to rely on the frame
1981         pointer to do stack unwinding.  For example, if a function calls
1982         alloca (), the stack pointer can get adjusted inside the body of
1983         the function.  In this case, the ABI requires that the compiler
1984         maintain a frame pointer for the function.
1985  
1986         The unwind record has a flag (alloca_frame) that indicates that
1987         a function has a variable frame; unfortunately, gcc/binutils 
1988         does not set this flag.  Instead, whenever a frame pointer is used
1989         and saved on the stack, the Save_SP flag is set.  We use this to
1990         decide whether to use the frame pointer for unwinding.
1991         
1992         TODO: For the HP compiler, maybe we should use the alloca_frame flag 
1993         instead of Save_SP.  */
1994  
1995      fp = frame_unwind_register_unsigned (next_frame, HPPA_FP_REGNUM);
1996  
1997      if (frame_pc_unwind (next_frame) >= prologue_end
1998          && u->Save_SP && fp != 0)
1999       {
2000         cache->base = fp;
2001  
2002         if (hppa_debug)
2003           fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [frame pointer]",
2004             paddr_nz (cache->base));
2005       }
2006      else if (u->Save_SP 
2007               && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM))
2008       {
2009             /* Both we're expecting the SP to be saved and the SP has been
2010                saved.  The entry SP value is saved at this frame's SP
2011                address.  */
2012             cache->base = read_memory_integer (this_sp, TARGET_PTR_BIT / 8);
2013
2014             if (hppa_debug)
2015               fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [saved]",
2016                                   paddr_nz (cache->base));
2017       }
2018     else
2019       {
2020         /* The prologue has been slowly allocating stack space.  Adjust
2021            the SP back.  */
2022         cache->base = this_sp - frame_size;
2023         if (hppa_debug)
2024           fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [unwind adjust]",
2025                               paddr_nz (cache->base));
2026
2027       }
2028     trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2029   }
2030
2031   /* The PC is found in the "return register", "Millicode" uses "r31"
2032      as the return register while normal code uses "rp".  */
2033   if (u->Millicode)
2034     {
2035       if (trad_frame_addr_p (cache->saved_regs, 31))
2036         {
2037           cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
2038           if (hppa_debug)
2039             fprintf_unfiltered (gdb_stdlog, " (pc=r31) [stack] } ");
2040         }
2041       else
2042         {
2043           ULONGEST r31 = frame_unwind_register_unsigned (next_frame, 31);
2044           trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, r31);
2045           if (hppa_debug)
2046             fprintf_unfiltered (gdb_stdlog, " (pc=r31) [frame] } ");
2047         }
2048     }
2049   else
2050     {
2051       if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2052         {
2053           cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
2054             cache->saved_regs[HPPA_RP_REGNUM];
2055           if (hppa_debug)
2056             fprintf_unfiltered (gdb_stdlog, " (pc=rp) [stack] } ");
2057         }
2058       else
2059         {
2060           ULONGEST rp = frame_unwind_register_unsigned (next_frame, HPPA_RP_REGNUM);
2061           trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
2062           if (hppa_debug)
2063             fprintf_unfiltered (gdb_stdlog, " (pc=rp) [frame] } ");
2064         }
2065     }
2066
2067   /* If Save_SP is set, then we expect the frame pointer to be saved in the
2068      frame.  However, there is a one-insn window where we haven't saved it
2069      yet, but we've already clobbered it.  Detect this case and fix it up.
2070
2071      The prologue sequence for frame-pointer functions is:
2072         0: stw %rp, -20(%sp)
2073         4: copy %r3, %r1
2074         8: copy %sp, %r3
2075         c: stw,ma %r1, XX(%sp)
2076
2077      So if we are at offset c, the r3 value that we want is not yet saved
2078      on the stack, but it's been overwritten.  The prologue analyzer will
2079      set fp_in_r1 when it sees the copy insn so we know to get the value 
2080      from r1 instead.  */
2081   if (u->Save_SP && !trad_frame_addr_p (cache->saved_regs, HPPA_FP_REGNUM)
2082       && fp_in_r1)
2083     {
2084       ULONGEST r1 = frame_unwind_register_unsigned (next_frame, 1);
2085       trad_frame_set_value (cache->saved_regs, HPPA_FP_REGNUM, r1);
2086     }
2087
2088   {
2089     /* Convert all the offsets into addresses.  */
2090     int reg;
2091     for (reg = 0; reg < NUM_REGS; reg++)
2092       {
2093         if (trad_frame_addr_p (cache->saved_regs, reg))
2094           cache->saved_regs[reg].addr += cache->base;
2095       }
2096   }
2097
2098   {
2099     struct gdbarch *gdbarch;
2100     struct gdbarch_tdep *tdep;
2101
2102     gdbarch = get_frame_arch (next_frame);
2103     tdep = gdbarch_tdep (gdbarch);
2104
2105     if (tdep->unwind_adjust_stub)
2106       {
2107         tdep->unwind_adjust_stub (next_frame, cache->base, cache->saved_regs);
2108       }
2109   }
2110
2111   if (hppa_debug)
2112     fprintf_unfiltered (gdb_stdlog, "base=0x%s }", 
2113       paddr_nz (((struct hppa_frame_cache *)*this_cache)->base));
2114   return (*this_cache);
2115 }
2116
2117 static void
2118 hppa_frame_this_id (struct frame_info *next_frame, void **this_cache,
2119                            struct frame_id *this_id)
2120 {
2121   struct hppa_frame_cache *info;
2122   CORE_ADDR pc = frame_pc_unwind (next_frame);
2123   struct unwind_table_entry *u;
2124
2125   info = hppa_frame_cache (next_frame, this_cache);
2126   u = find_unwind_entry (pc);
2127
2128   (*this_id) = frame_id_build (info->base, u->region_start);
2129 }
2130
2131 static void
2132 hppa_frame_prev_register (struct frame_info *next_frame,
2133                           void **this_cache,
2134                           int regnum, int *optimizedp,
2135                           enum lval_type *lvalp, CORE_ADDR *addrp,
2136                           int *realnump, gdb_byte *valuep)
2137 {
2138   struct hppa_frame_cache *info = hppa_frame_cache (next_frame, this_cache);
2139   hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum,
2140                                    optimizedp, lvalp, addrp, realnump, valuep);
2141 }
2142
2143 static const struct frame_unwind hppa_frame_unwind =
2144 {
2145   NORMAL_FRAME,
2146   hppa_frame_this_id,
2147   hppa_frame_prev_register
2148 };
2149
2150 static const struct frame_unwind *
2151 hppa_frame_unwind_sniffer (struct frame_info *next_frame)
2152 {
2153   CORE_ADDR pc = frame_pc_unwind (next_frame);
2154
2155   if (find_unwind_entry (pc))
2156     return &hppa_frame_unwind;
2157
2158   return NULL;
2159 }
2160
2161 /* This is a generic fallback frame unwinder that kicks in if we fail all
2162    the other ones.  Normally we would expect the stub and regular unwinder
2163    to work, but in some cases we might hit a function that just doesn't
2164    have any unwind information available.  In this case we try to do
2165    unwinding solely based on code reading.  This is obviously going to be
2166    slow, so only use this as a last resort.  Currently this will only
2167    identify the stack and pc for the frame.  */
2168
2169 static struct hppa_frame_cache *
2170 hppa_fallback_frame_cache (struct frame_info *next_frame, void **this_cache)
2171 {
2172   struct hppa_frame_cache *cache;
2173   unsigned int frame_size = 0;
2174   int found_rp = 0;
2175   CORE_ADDR start_pc;
2176
2177   if (hppa_debug)
2178     fprintf_unfiltered (gdb_stdlog,
2179                         "{ hppa_fallback_frame_cache (frame=%d) -> ",
2180                         frame_relative_level (next_frame));
2181
2182   cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
2183   (*this_cache) = cache;
2184   cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2185
2186   start_pc = frame_func_unwind (next_frame);
2187   if (start_pc)
2188     {
2189       CORE_ADDR cur_pc = frame_pc_unwind (next_frame);
2190       CORE_ADDR pc;
2191
2192       for (pc = start_pc; pc < cur_pc; pc += 4)
2193         {
2194           unsigned int insn;
2195
2196           insn = read_memory_unsigned_integer (pc, 4);
2197           frame_size += prologue_inst_adjust_sp (insn);
2198
2199           /* There are limited ways to store the return pointer into the
2200              stack.  */
2201           if (insn == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
2202             {
2203               cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
2204               found_rp = 1;
2205             }
2206           else if (insn == 0x0fc212c1
2207                    || insn == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
2208             {
2209               cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
2210               found_rp = 1;
2211             }
2212         }
2213     }
2214
2215   if (hppa_debug)
2216     fprintf_unfiltered (gdb_stdlog, " frame_size=%d, found_rp=%d }\n",
2217                         frame_size, found_rp);
2218
2219   cache->base = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM);
2220   cache->base -= frame_size;
2221   trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
2222
2223   if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
2224     {
2225       cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base;
2226       cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
2227         cache->saved_regs[HPPA_RP_REGNUM];
2228     }
2229   else
2230     {
2231       ULONGEST rp;
2232       rp = frame_unwind_register_unsigned (next_frame, HPPA_RP_REGNUM);
2233       trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
2234     }
2235
2236   return cache;
2237 }
2238
2239 static void
2240 hppa_fallback_frame_this_id (struct frame_info *next_frame, void **this_cache,
2241                              struct frame_id *this_id)
2242 {
2243   struct hppa_frame_cache *info = 
2244     hppa_fallback_frame_cache (next_frame, this_cache);
2245   (*this_id) = frame_id_build (info->base, frame_func_unwind (next_frame));
2246 }
2247
2248 static void
2249 hppa_fallback_frame_prev_register (struct frame_info *next_frame,
2250                           void **this_cache,
2251                           int regnum, int *optimizedp,
2252                           enum lval_type *lvalp, CORE_ADDR *addrp,
2253                           int *realnump, gdb_byte *valuep)
2254 {
2255   struct hppa_frame_cache *info = 
2256     hppa_fallback_frame_cache (next_frame, this_cache);
2257   hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum,
2258                                    optimizedp, lvalp, addrp, realnump, valuep);
2259 }
2260
2261 static const struct frame_unwind hppa_fallback_frame_unwind =
2262 {
2263   NORMAL_FRAME,
2264   hppa_fallback_frame_this_id,
2265   hppa_fallback_frame_prev_register
2266 };
2267
2268 static const struct frame_unwind *
2269 hppa_fallback_unwind_sniffer (struct frame_info *next_frame)
2270 {
2271   return &hppa_fallback_frame_unwind;
2272 }
2273
2274 /* Stub frames, used for all kinds of call stubs.  */
2275 struct hppa_stub_unwind_cache
2276 {
2277   CORE_ADDR base;
2278   struct trad_frame_saved_reg *saved_regs;
2279 };
2280
2281 static struct hppa_stub_unwind_cache *
2282 hppa_stub_frame_unwind_cache (struct frame_info *next_frame,
2283                               void **this_cache)
2284 {
2285   struct gdbarch *gdbarch = get_frame_arch (next_frame);
2286   struct hppa_stub_unwind_cache *info;
2287   struct unwind_table_entry *u;
2288
2289   if (*this_cache)
2290     return *this_cache;
2291
2292   info = FRAME_OBSTACK_ZALLOC (struct hppa_stub_unwind_cache);
2293   *this_cache = info;
2294   info->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2295
2296   info->base = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM);
2297
2298   if (gdbarch_osabi (gdbarch) == GDB_OSABI_HPUX_SOM)
2299     {
2300       /* HPUX uses export stubs in function calls; the export stub clobbers
2301          the return value of the caller, and, later restores it from the
2302          stack.  */
2303       u = find_unwind_entry (frame_pc_unwind (next_frame));
2304
2305       if (u && u->stub_unwind.stub_type == EXPORT)
2306         {
2307           info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = info->base - 24;
2308
2309           return info;
2310         }
2311     }
2312
2313   /* By default we assume that stubs do not change the rp.  */
2314   info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM;
2315
2316   return info;
2317 }
2318
2319 static void
2320 hppa_stub_frame_this_id (struct frame_info *next_frame,
2321                          void **this_prologue_cache,
2322                          struct frame_id *this_id)
2323 {
2324   struct hppa_stub_unwind_cache *info
2325     = hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache);
2326
2327   if (info)
2328     *this_id = frame_id_build (info->base, frame_func_unwind (next_frame));
2329   else
2330     *this_id = null_frame_id;
2331 }
2332
2333 static void
2334 hppa_stub_frame_prev_register (struct frame_info *next_frame,
2335                                void **this_prologue_cache,
2336                                int regnum, int *optimizedp,
2337                                enum lval_type *lvalp, CORE_ADDR *addrp,
2338                                int *realnump, gdb_byte *valuep)
2339 {
2340   struct hppa_stub_unwind_cache *info
2341     = hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache);
2342
2343   if (info)
2344     hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum,
2345                                      optimizedp, lvalp, addrp, realnump, 
2346                                      valuep);
2347   else
2348     error (_("Requesting registers from null frame."));
2349 }
2350
2351 static const struct frame_unwind hppa_stub_frame_unwind = {
2352   NORMAL_FRAME,
2353   hppa_stub_frame_this_id,
2354   hppa_stub_frame_prev_register
2355 };
2356
2357 static const struct frame_unwind *
2358 hppa_stub_unwind_sniffer (struct frame_info *next_frame)
2359 {
2360   CORE_ADDR pc = frame_pc_unwind (next_frame);
2361   struct gdbarch *gdbarch = get_frame_arch (next_frame);
2362   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2363
2364   if (pc == 0
2365       || (tdep->in_solib_call_trampoline != NULL
2366           && tdep->in_solib_call_trampoline (pc, NULL))
2367       || IN_SOLIB_RETURN_TRAMPOLINE (pc, NULL))
2368     return &hppa_stub_frame_unwind;
2369   return NULL;
2370 }
2371
2372 static struct frame_id
2373 hppa_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
2374 {
2375   return frame_id_build (frame_unwind_register_unsigned (next_frame,
2376                                                          HPPA_SP_REGNUM),
2377                          frame_pc_unwind (next_frame));
2378 }
2379
2380 CORE_ADDR
2381 hppa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2382 {
2383   ULONGEST ipsw;
2384   CORE_ADDR pc;
2385
2386   ipsw = frame_unwind_register_unsigned (next_frame, HPPA_IPSW_REGNUM);
2387   pc = frame_unwind_register_unsigned (next_frame, HPPA_PCOQ_HEAD_REGNUM);
2388
2389   /* If the current instruction is nullified, then we are effectively
2390      still executing the previous instruction.  Pretend we are still
2391      there.  This is needed when single stepping; if the nullified
2392      instruction is on a different line, we don't want GDB to think
2393      we've stepped onto that line.  */
2394   if (ipsw & 0x00200000)
2395     pc -= 4;
2396
2397   return pc & ~0x3;
2398 }
2399
2400 /* Return the minimal symbol whose name is NAME and stub type is STUB_TYPE.
2401    Return NULL if no such symbol was found.  */
2402
2403 struct minimal_symbol *
2404 hppa_lookup_stub_minimal_symbol (const char *name,
2405                                  enum unwind_stub_types stub_type)
2406 {
2407   struct objfile *objfile;
2408   struct minimal_symbol *msym;
2409
2410   ALL_MSYMBOLS (objfile, msym)
2411     {
2412       if (strcmp (SYMBOL_LINKAGE_NAME (msym), name) == 0)
2413         {
2414           struct unwind_table_entry *u;
2415
2416           u = find_unwind_entry (SYMBOL_VALUE (msym));
2417           if (u != NULL && u->stub_unwind.stub_type == stub_type)
2418             return msym;
2419         }
2420     }
2421
2422   return NULL;
2423 }
2424
2425 static void
2426 unwind_command (char *exp, int from_tty)
2427 {
2428   CORE_ADDR address;
2429   struct unwind_table_entry *u;
2430
2431   /* If we have an expression, evaluate it and use it as the address.  */
2432
2433   if (exp != 0 && *exp != 0)
2434     address = parse_and_eval_address (exp);
2435   else
2436     return;
2437
2438   u = find_unwind_entry (address);
2439
2440   if (!u)
2441     {
2442       printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
2443       return;
2444     }
2445
2446   printf_unfiltered ("unwind_table_entry (0x%lx):\n", (unsigned long)u);
2447
2448   printf_unfiltered ("\tregion_start = ");
2449   print_address (u->region_start, gdb_stdout);
2450   gdb_flush (gdb_stdout);
2451
2452   printf_unfiltered ("\n\tregion_end = ");
2453   print_address (u->region_end, gdb_stdout);
2454   gdb_flush (gdb_stdout);
2455
2456 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
2457
2458   printf_unfiltered ("\n\tflags =");
2459   pif (Cannot_unwind);
2460   pif (Millicode);
2461   pif (Millicode_save_sr0);
2462   pif (Entry_SR);
2463   pif (Args_stored);
2464   pif (Variable_Frame);
2465   pif (Separate_Package_Body);
2466   pif (Frame_Extension_Millicode);
2467   pif (Stack_Overflow_Check);
2468   pif (Two_Instruction_SP_Increment);
2469   pif (Ada_Region);
2470   pif (Save_SP);
2471   pif (Save_RP);
2472   pif (Save_MRP_in_frame);
2473   pif (extn_ptr_defined);
2474   pif (Cleanup_defined);
2475   pif (MPE_XL_interrupt_marker);
2476   pif (HP_UX_interrupt_marker);
2477   pif (Large_frame);
2478
2479   putchar_unfiltered ('\n');
2480
2481 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
2482
2483   pin (Region_description);
2484   pin (Entry_FR);
2485   pin (Entry_GR);
2486   pin (Total_frame_size);
2487
2488   if (u->stub_unwind.stub_type)
2489     {
2490       printf_unfiltered ("\tstub type = ");
2491       switch (u->stub_unwind.stub_type)
2492         {
2493           case LONG_BRANCH:
2494             printf_unfiltered ("long branch\n");
2495             break;
2496           case PARAMETER_RELOCATION:
2497             printf_unfiltered ("parameter relocation\n");
2498             break;
2499           case EXPORT:
2500             printf_unfiltered ("export\n");
2501             break;
2502           case IMPORT:
2503             printf_unfiltered ("import\n");
2504             break;
2505           case IMPORT_SHLIB:
2506             printf_unfiltered ("import shlib\n");
2507             break;
2508           default:
2509             printf_unfiltered ("unknown (%d)\n", u->stub_unwind.stub_type);
2510         }
2511     }
2512 }
2513
2514 int
2515 hppa_pc_requires_run_before_use (CORE_ADDR pc)
2516 {
2517   /* Sometimes we may pluck out a minimal symbol that has a negative address.
2518   
2519      An example of this occurs when an a.out is linked against a foo.sl.
2520      The foo.sl defines a global bar(), and the a.out declares a signature
2521      for bar().  However, the a.out doesn't directly call bar(), but passes
2522      its address in another call.
2523   
2524      If you have this scenario and attempt to "break bar" before running,
2525      gdb will find a minimal symbol for bar() in the a.out.  But that
2526      symbol's address will be negative.  What this appears to denote is
2527      an index backwards from the base of the procedure linkage table (PLT)
2528      into the data linkage table (DLT), the end of which is contiguous
2529      with the start of the PLT.  This is clearly not a valid address for
2530      us to set a breakpoint on.
2531   
2532      Note that one must be careful in how one checks for a negative address.
2533      0xc0000000 is a legitimate address of something in a shared text
2534      segment, for example.  Since I don't know what the possible range
2535      is of these "really, truly negative" addresses that come from the
2536      minimal symbols, I'm resorting to the gross hack of checking the
2537      top byte of the address for all 1's.  Sigh.  */
2538
2539   return (!target_has_stack && (pc & 0xFF000000) == 0xFF000000);
2540 }
2541
2542 /* Return the GDB type object for the "standard" data type of data in
2543    register REGNUM.  */
2544
2545 static struct type *
2546 hppa32_register_type (struct gdbarch *gdbarch, int regnum)
2547 {
2548    if (regnum < HPPA_FP4_REGNUM)
2549      return builtin_type_uint32;
2550    else
2551      return builtin_type_ieee_single_big;
2552 }
2553
2554 static struct type *
2555 hppa64_register_type (struct gdbarch *gdbarch, int regnum)
2556 {
2557    if (regnum < HPPA64_FP4_REGNUM)
2558      return builtin_type_uint64;
2559    else
2560      return builtin_type_ieee_double_big;
2561 }
2562
2563 /* Return non-zero if REGNUM is not a register available to the user
2564    through ptrace/ttrace.  */
2565
2566 static int
2567 hppa32_cannot_store_register (int regnum)
2568 {
2569   return (regnum == 0
2570           || regnum == HPPA_PCSQ_HEAD_REGNUM
2571           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2572           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM));
2573 }
2574
2575 static int
2576 hppa64_cannot_store_register (int regnum)
2577 {
2578   return (regnum == 0
2579           || regnum == HPPA_PCSQ_HEAD_REGNUM
2580           || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
2581           || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM));
2582 }
2583
2584 static CORE_ADDR
2585 hppa_smash_text_address (CORE_ADDR addr)
2586 {
2587   /* The low two bits of the PC on the PA contain the privilege level.
2588      Some genius implementing a (non-GCC) compiler apparently decided
2589      this means that "addresses" in a text section therefore include a
2590      privilege level, and thus symbol tables should contain these bits.
2591      This seems like a bonehead thing to do--anyway, it seems to work
2592      for our purposes to just ignore those bits.  */
2593
2594   return (addr &= ~0x3);
2595 }
2596
2597 /* Get the ARGIth function argument for the current function.  */
2598
2599 static CORE_ADDR
2600 hppa_fetch_pointer_argument (struct frame_info *frame, int argi, 
2601                              struct type *type)
2602 {
2603   return get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 26 - argi);
2604 }
2605
2606 static void
2607 hppa_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2608                            int regnum, gdb_byte *buf)
2609 {
2610     ULONGEST tmp;
2611
2612     regcache_raw_read_unsigned (regcache, regnum, &tmp);
2613     if (regnum == HPPA_PCOQ_HEAD_REGNUM || regnum == HPPA_PCOQ_TAIL_REGNUM)
2614       tmp &= ~0x3;
2615     store_unsigned_integer (buf, sizeof tmp, tmp);
2616 }
2617
2618 static CORE_ADDR
2619 hppa_find_global_pointer (struct value *function)
2620 {
2621   return 0;
2622 }
2623
2624 void
2625 hppa_frame_prev_register_helper (struct frame_info *next_frame,
2626                                  struct trad_frame_saved_reg saved_regs[],
2627                                  int regnum, int *optimizedp,
2628                                  enum lval_type *lvalp, CORE_ADDR *addrp,
2629                                  int *realnump, gdb_byte *valuep)
2630 {
2631   struct gdbarch *arch = get_frame_arch (next_frame);
2632
2633   if (regnum == HPPA_PCOQ_TAIL_REGNUM)
2634     {
2635       if (valuep)
2636         {
2637           int size = register_size (arch, HPPA_PCOQ_HEAD_REGNUM);
2638           CORE_ADDR pc;
2639
2640           trad_frame_get_prev_register (next_frame, saved_regs,
2641                                         HPPA_PCOQ_HEAD_REGNUM, optimizedp,
2642                                         lvalp, addrp, realnump, valuep);
2643
2644           pc = extract_unsigned_integer (valuep, size);
2645           store_unsigned_integer (valuep, size, pc + 4);
2646         }
2647
2648       /* It's a computed value.  */
2649       *optimizedp = 0;
2650       *lvalp = not_lval;
2651       *addrp = 0;
2652       *realnump = -1;
2653       return;
2654     }
2655
2656   /* Make sure the "flags" register is zero in all unwound frames.
2657      The "flags" registers is a HP-UX specific wart, and only the code
2658      in hppa-hpux-tdep.c depends on it.  However, it is easier to deal
2659      with it here.  This shouldn't affect other systems since those
2660      should provide zero for the "flags" register anyway.  */
2661   if (regnum == HPPA_FLAGS_REGNUM)
2662     {
2663       if (valuep)
2664         store_unsigned_integer (valuep, register_size (arch, regnum), 0);
2665
2666       /* It's a computed value.  */
2667       *optimizedp = 0;
2668       *lvalp = not_lval;
2669       *addrp = 0;
2670       *realnump = -1;
2671       return;
2672     }
2673
2674   trad_frame_get_prev_register (next_frame, saved_regs, regnum,
2675                                 optimizedp, lvalp, addrp, realnump, valuep);
2676 }
2677 \f
2678
2679 /* Here is a table of C type sizes on hppa with various compiles
2680    and options.  I measured this on PA 9000/800 with HP-UX 11.11
2681    and these compilers:
2682
2683      /usr/ccs/bin/cc    HP92453-01 A.11.01.21
2684      /opt/ansic/bin/cc  HP92453-01 B.11.11.28706.GP
2685      /opt/aCC/bin/aCC   B3910B A.03.45
2686      gcc                gcc 3.3.2 native hppa2.0w-hp-hpux11.11
2687
2688      cc            : 1 2 4 4 8 : 4 8 -- : 4 4
2689      ansic +DA1.1  : 1 2 4 4 8 : 4 8 16 : 4 4
2690      ansic +DA2.0  : 1 2 4 4 8 : 4 8 16 : 4 4
2691      ansic +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
2692      acc   +DA1.1  : 1 2 4 4 8 : 4 8 16 : 4 4
2693      acc   +DA2.0  : 1 2 4 4 8 : 4 8 16 : 4 4
2694      acc   +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8
2695      gcc           : 1 2 4 4 8 : 4 8 16 : 4 4
2696
2697    Each line is:
2698
2699      compiler and options
2700      char, short, int, long, long long
2701      float, double, long double
2702      char *, void (*)()
2703
2704    So all these compilers use either ILP32 or LP64 model.
2705    TODO: gcc has more options so it needs more investigation.
2706
2707    For floating point types, see:
2708
2709      http://docs.hp.com/hpux/pdf/B3906-90006.pdf
2710      HP-UX floating-point guide, hpux 11.00
2711
2712    -- chastain 2003-12-18  */
2713
2714 static struct gdbarch *
2715 hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2716 {
2717   struct gdbarch_tdep *tdep;
2718   struct gdbarch *gdbarch;
2719   
2720   /* Try to determine the ABI of the object we are loading.  */
2721   if (info.abfd != NULL && info.osabi == GDB_OSABI_UNKNOWN)
2722     {
2723       /* If it's a SOM file, assume it's HP/UX SOM.  */
2724       if (bfd_get_flavour (info.abfd) == bfd_target_som_flavour)
2725         info.osabi = GDB_OSABI_HPUX_SOM;
2726     }
2727
2728   /* find a candidate among the list of pre-declared architectures.  */
2729   arches = gdbarch_list_lookup_by_info (arches, &info);
2730   if (arches != NULL)
2731     return (arches->gdbarch);
2732
2733   /* If none found, then allocate and initialize one.  */
2734   tdep = XZALLOC (struct gdbarch_tdep);
2735   gdbarch = gdbarch_alloc (&info, tdep);
2736
2737   /* Determine from the bfd_arch_info structure if we are dealing with
2738      a 32 or 64 bits architecture.  If the bfd_arch_info is not available,
2739      then default to a 32bit machine.  */
2740   if (info.bfd_arch_info != NULL)
2741     tdep->bytes_per_address =
2742       info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte;
2743   else
2744     tdep->bytes_per_address = 4;
2745
2746   tdep->find_global_pointer = hppa_find_global_pointer;
2747
2748   /* Some parts of the gdbarch vector depend on whether we are running
2749      on a 32 bits or 64 bits target.  */
2750   switch (tdep->bytes_per_address)
2751     {
2752       case 4:
2753         set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
2754         set_gdbarch_register_name (gdbarch, hppa32_register_name);
2755         set_gdbarch_register_type (gdbarch, hppa32_register_type);
2756         set_gdbarch_cannot_store_register (gdbarch,
2757                                            hppa32_cannot_store_register);
2758         set_gdbarch_cannot_fetch_register (gdbarch,
2759                                            hppa32_cannot_store_register);
2760         break;
2761       case 8:
2762         set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
2763         set_gdbarch_register_name (gdbarch, hppa64_register_name);
2764         set_gdbarch_register_type (gdbarch, hppa64_register_type);
2765         set_gdbarch_dwarf_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
2766         set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
2767         set_gdbarch_cannot_store_register (gdbarch,
2768                                            hppa64_cannot_store_register);
2769         set_gdbarch_cannot_fetch_register (gdbarch,
2770                                            hppa64_cannot_store_register);
2771         break;
2772       default:
2773         internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
2774                         tdep->bytes_per_address);
2775     }
2776
2777   set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
2778   set_gdbarch_ptr_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
2779
2780   /* The following gdbarch vector elements are the same in both ILP32
2781      and LP64, but might show differences some day.  */
2782   set_gdbarch_long_long_bit (gdbarch, 64);
2783   set_gdbarch_long_double_bit (gdbarch, 128);
2784   set_gdbarch_long_double_format (gdbarch, &floatformat_ia64_quad_big);
2785
2786   /* The following gdbarch vector elements do not depend on the address
2787      size, or in any other gdbarch element previously set.  */
2788   set_gdbarch_skip_prologue (gdbarch, hppa_skip_prologue);
2789   set_gdbarch_in_function_epilogue_p (gdbarch,
2790                                       hppa_in_function_epilogue_p);
2791   set_gdbarch_inner_than (gdbarch, core_addr_greaterthan);
2792   set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM);
2793   set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM);
2794   set_gdbarch_addr_bits_remove (gdbarch, hppa_smash_text_address);
2795   set_gdbarch_smash_text_address (gdbarch, hppa_smash_text_address);
2796   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2797   set_gdbarch_read_pc (gdbarch, hppa_read_pc);
2798   set_gdbarch_write_pc (gdbarch, hppa_write_pc);
2799
2800   /* Helper for function argument information.  */
2801   set_gdbarch_fetch_pointer_argument (gdbarch, hppa_fetch_pointer_argument);
2802
2803   set_gdbarch_print_insn (gdbarch, print_insn_hppa);
2804
2805   /* When a hardware watchpoint triggers, we'll move the inferior past
2806      it by removing all eventpoints; stepping past the instruction
2807      that caused the trigger; reinserting eventpoints; and checking
2808      whether any watched location changed.  */
2809   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
2810
2811   /* Inferior function call methods.  */
2812   switch (tdep->bytes_per_address)
2813     {
2814     case 4:
2815       set_gdbarch_push_dummy_call (gdbarch, hppa32_push_dummy_call);
2816       set_gdbarch_frame_align (gdbarch, hppa32_frame_align);
2817       set_gdbarch_convert_from_func_ptr_addr
2818         (gdbarch, hppa32_convert_from_func_ptr_addr);
2819       break;
2820     case 8:
2821       set_gdbarch_push_dummy_call (gdbarch, hppa64_push_dummy_call);
2822       set_gdbarch_frame_align (gdbarch, hppa64_frame_align);
2823       break;
2824     default:
2825       internal_error (__FILE__, __LINE__, _("bad switch"));
2826     }
2827       
2828   /* Struct return methods.  */
2829   switch (tdep->bytes_per_address)
2830     {
2831     case 4:
2832       set_gdbarch_return_value (gdbarch, hppa32_return_value);
2833       break;
2834     case 8:
2835       set_gdbarch_return_value (gdbarch, hppa64_return_value);
2836       break;
2837     default:
2838       internal_error (__FILE__, __LINE__, _("bad switch"));
2839     }
2840       
2841   set_gdbarch_breakpoint_from_pc (gdbarch, hppa_breakpoint_from_pc);
2842   set_gdbarch_pseudo_register_read (gdbarch, hppa_pseudo_register_read);
2843
2844   /* Frame unwind methods.  */
2845   set_gdbarch_unwind_dummy_id (gdbarch, hppa_unwind_dummy_id);
2846   set_gdbarch_unwind_pc (gdbarch, hppa_unwind_pc);
2847
2848   /* Hook in ABI-specific overrides, if they have been registered.  */
2849   gdbarch_init_osabi (info, gdbarch);
2850
2851   /* Hook in the default unwinders.  */
2852   frame_unwind_append_sniffer (gdbarch, hppa_stub_unwind_sniffer);
2853   frame_unwind_append_sniffer (gdbarch, hppa_frame_unwind_sniffer);
2854   frame_unwind_append_sniffer (gdbarch, hppa_fallback_unwind_sniffer);
2855
2856   return gdbarch;
2857 }
2858
2859 static void
2860 hppa_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
2861 {
2862   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2863
2864   fprintf_unfiltered (file, "bytes_per_address = %d\n", 
2865                       tdep->bytes_per_address);
2866   fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
2867 }
2868
2869 void
2870 _initialize_hppa_tdep (void)
2871 {
2872   struct cmd_list_element *c;
2873
2874   gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep);
2875
2876   hppa_objfile_priv_data = register_objfile_data ();
2877
2878   add_cmd ("unwind", class_maintenance, unwind_command,
2879            _("Print unwind table entry at given address."),
2880            &maintenanceprintlist);
2881
2882   /* Debug this files internals. */
2883   add_setshow_boolean_cmd ("hppa", class_maintenance, &hppa_debug, _("\
2884 Set whether hppa target specific debugging information should be displayed."),
2885                            _("\
2886 Show whether hppa target specific debugging information is displayed."), _("\
2887 This flag controls whether hppa target specific debugging information is\n\
2888 displayed.  This information is particularly useful for debugging frame\n\
2889 unwinding problems."),
2890                            NULL,
2891                            NULL, /* FIXME: i18n: hppa debug flag is %s.  */
2892                            &setdebuglist, &showdebuglist);
2893 }