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