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