63183a4c0f1d3fd2a92160c86f7e4e45f6802440
[platform/upstream/binutils.git] / gdb / hppa-tdep.c
1 /* Target-dependent code for the HP PA architecture, for GDB.
2    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
3    Free Software Foundation, Inc.
4
5    Contributed by the Center for Software Science at the
6    University of Utah (pa-gdb-bugs@cs.utah.edu).
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "value.h"
28
29 /* For argument passing to the inferior */
30 #include "symtab.h"
31
32 #ifdef USG
33 #include <sys/types.h>
34 #endif
35
36 #include <sys/param.h>
37 #include <signal.h>
38
39 #ifdef COFF_ENCAPSULATE
40 #include "a.out.encap.h"
41 #else
42 #endif
43 #ifndef N_SET_MAGIC
44 #define N_SET_MAGIC(exec, val) ((exec).a_magic = (val))
45 #endif
46
47 /*#include <sys/user.h>         After a.out.h  */
48 #include <sys/file.h>
49 #include "gdb_stat.h"
50 #include "wait.h"
51
52 #include "gdbcore.h"
53 #include "gdbcmd.h"
54 #include "target.h"
55 #include "symfile.h"
56 #include "objfiles.h"
57
58 static int extract_5_load PARAMS ((unsigned int));
59
60 static unsigned extract_5R_store PARAMS ((unsigned int));
61
62 static unsigned extract_5r_store PARAMS ((unsigned int));
63
64 static void find_dummy_frame_regs PARAMS ((struct frame_info *,
65                                            struct frame_saved_regs *));
66
67 static int find_proc_framesize PARAMS ((CORE_ADDR));
68
69 static int find_return_regnum PARAMS ((CORE_ADDR));
70
71 struct unwind_table_entry *find_unwind_entry PARAMS ((CORE_ADDR));
72
73 static int extract_17 PARAMS ((unsigned int));
74
75 static unsigned deposit_21 PARAMS ((unsigned int, unsigned int));
76
77 static int extract_21 PARAMS ((unsigned));
78
79 static unsigned deposit_14 PARAMS ((int, unsigned int));
80
81 static int extract_14 PARAMS ((unsigned));
82
83 static void unwind_command PARAMS ((char *, int));
84
85 static int low_sign_extend PARAMS ((unsigned int, unsigned int));
86
87 static int sign_extend PARAMS ((unsigned int, unsigned int));
88
89 static int restore_pc_queue PARAMS ((struct frame_saved_regs *));
90
91 static int hppa_alignof PARAMS ((struct type *));
92
93 CORE_ADDR frame_saved_pc PARAMS ((struct frame_info *));
94
95 static int prologue_inst_adjust_sp PARAMS ((unsigned long));
96
97 static int is_branch PARAMS ((unsigned long));
98
99 static int inst_saves_gr PARAMS ((unsigned long));
100
101 static int inst_saves_fr PARAMS ((unsigned long));
102
103 static int pc_in_interrupt_handler PARAMS ((CORE_ADDR));
104
105 static int pc_in_linker_stub PARAMS ((CORE_ADDR));
106
107 static int compare_unwind_entries PARAMS ((const void *, const void *));
108
109 static void read_unwind_info PARAMS ((struct objfile *));
110
111 static void internalize_unwinds PARAMS ((struct objfile *,
112                                          struct unwind_table_entry *,
113                                          asection *, unsigned int,
114                                          unsigned int, CORE_ADDR));
115 static void pa_print_registers PARAMS ((char *, int, int));
116 static void pa_print_fp_reg PARAMS ((int));
117
118 \f
119 /* Routines to extract various sized constants out of hppa 
120    instructions. */
121
122 /* This assumes that no garbage lies outside of the lower bits of 
123    value. */
124
125 static int
126 sign_extend (val, bits)
127      unsigned val, bits;
128 {
129   return (int)(val >> (bits - 1) ? (-1 << bits) | val : val);
130 }
131
132 /* For many immediate values the sign bit is the low bit! */
133
134 static int
135 low_sign_extend (val, bits)
136      unsigned val, bits;
137 {
138   return (int)((val & 0x1 ? (-1 << (bits - 1)) : 0) | val >> 1);
139 }
140
141 /* extract the immediate field from a ld{bhw}s instruction */
142
143 #if 0
144
145 unsigned
146 get_field (val, from, to)
147      unsigned val, from, to;
148 {
149   val = val >> 31 - to;
150   return val & ((1 << 32 - from) - 1);
151 }
152
153 unsigned
154 set_field (val, from, to, new_val)
155      unsigned *val, from, to;
156 {
157   unsigned mask = ~((1 << (to - from + 1)) << (31 - from));
158   return *val = *val & mask | (new_val << (31 - from));
159 }
160
161 /* extract a 3-bit space register number from a be, ble, mtsp or mfsp */
162
163 int
164 extract_3 (word)
165      unsigned word;
166 {
167   return GET_FIELD (word, 18, 18) << 2 | GET_FIELD (word, 16, 17);
168 }
169
170 #endif
171
172 static int
173 extract_5_load (word)
174      unsigned word;
175 {
176   return low_sign_extend (word >> 16 & MASK_5, 5);
177 }
178
179 #if 0
180
181 /* extract the immediate field from a st{bhw}s instruction */
182
183 int
184 extract_5_store (word)
185      unsigned word;
186 {
187   return low_sign_extend (word & MASK_5, 5);
188 }
189
190 #endif  /* 0 */
191        
192 /* extract the immediate field from a break instruction */
193
194 static unsigned
195 extract_5r_store (word)
196      unsigned word;
197 {
198   return (word & MASK_5);
199 }
200
201 /* extract the immediate field from a {sr}sm instruction */
202
203 static unsigned
204 extract_5R_store (word)
205      unsigned word;
206 {
207   return (word >> 16 & MASK_5);
208 }
209
210 /* extract an 11 bit immediate field */
211
212 #if 0
213
214 int
215 extract_11 (word)
216      unsigned word;
217 {
218   return low_sign_extend (word & MASK_11, 11);
219 }
220
221 #endif
222
223 /* extract a 14 bit immediate field */
224
225 static int
226 extract_14 (word)
227      unsigned word;
228 {
229   return low_sign_extend (word & MASK_14, 14);
230 }
231
232 /* deposit a 14 bit constant in a word */
233
234 static unsigned
235 deposit_14 (opnd, word)
236      int opnd;
237      unsigned word;
238 {
239   unsigned sign = (opnd < 0 ? 1 : 0);
240
241   return word | ((unsigned)opnd << 1 & MASK_14)  | sign;
242 }
243
244 /* extract a 21 bit constant */
245
246 static int
247 extract_21 (word)
248      unsigned word;
249 {
250   int val;
251
252   word &= MASK_21;
253   word <<= 11;
254   val = GET_FIELD (word, 20, 20);
255   val <<= 11;
256   val |= GET_FIELD (word, 9, 19);
257   val <<= 2;
258   val |= GET_FIELD (word, 5, 6);
259   val <<= 5;
260   val |= GET_FIELD (word, 0, 4);
261   val <<= 2;
262   val |= GET_FIELD (word, 7, 8);
263   return sign_extend (val, 21) << 11;
264 }
265
266 /* deposit a 21 bit constant in a word. Although 21 bit constants are
267    usually the top 21 bits of a 32 bit constant, we assume that only
268    the low 21 bits of opnd are relevant */
269
270 static unsigned
271 deposit_21 (opnd, word)
272      unsigned opnd, word;
273 {
274   unsigned val = 0;
275
276   val |= GET_FIELD (opnd, 11 + 14, 11 + 18);
277   val <<= 2;
278   val |= GET_FIELD (opnd, 11 + 12, 11 + 13);
279   val <<= 2;
280   val |= GET_FIELD (opnd, 11 + 19, 11 + 20);
281   val <<= 11;
282   val |= GET_FIELD (opnd, 11 + 1, 11 + 11);
283   val <<= 1;
284   val |= GET_FIELD (opnd, 11 + 0, 11 + 0);
285   return word | val;
286 }
287
288 /* extract a 12 bit constant from branch instructions */
289
290 #if 0
291
292 int
293 extract_12 (word)
294      unsigned word;
295 {
296   return sign_extend (GET_FIELD (word, 19, 28) |
297                       GET_FIELD (word, 29, 29) << 10 |
298                       (word & 0x1) << 11, 12) << 2;
299 }
300
301 /* Deposit a 17 bit constant in an instruction (like bl). */
302
303 unsigned int
304 deposit_17 (opnd, word)
305      unsigned opnd, word;
306 {
307   word |= GET_FIELD (opnd, 15 + 0, 15 + 0); /* w */
308   word |= GET_FIELD (opnd, 15 + 1, 15 + 5) << 16; /* w1 */
309   word |= GET_FIELD (opnd, 15 + 6, 15 + 6) << 2; /* w2[10] */
310   word |= GET_FIELD (opnd, 15 + 7, 15 + 16) << 3; /* w2[0..9] */
311
312   return word;
313 }
314
315 #endif
316
317 /* extract a 17 bit constant from branch instructions, returning the
318    19 bit signed value. */
319
320 static int
321 extract_17 (word)
322      unsigned word;
323 {
324   return sign_extend (GET_FIELD (word, 19, 28) |
325                       GET_FIELD (word, 29, 29) << 10 |
326                       GET_FIELD (word, 11, 15) << 11 |
327                       (word & 0x1) << 16, 17) << 2;
328 }
329 \f
330
331 /* Compare the start address for two unwind entries returning 1 if 
332    the first address is larger than the second, -1 if the second is
333    larger than the first, and zero if they are equal.  */
334
335 static int
336 compare_unwind_entries (arg1, arg2)
337      const void *arg1;
338      const void *arg2;
339 {
340   const struct unwind_table_entry *a = arg1;
341   const struct unwind_table_entry *b = arg2;
342
343   if (a->region_start > b->region_start)
344     return 1;
345   else if (a->region_start < b->region_start)
346     return -1;
347   else
348     return 0;
349 }
350
351 static void
352 internalize_unwinds (objfile, table, section, entries, size, text_offset)
353      struct objfile *objfile;
354      struct unwind_table_entry *table;
355      asection *section;
356      unsigned int entries, size;
357      CORE_ADDR text_offset;
358 {
359   /* We will read the unwind entries into temporary memory, then
360      fill in the actual unwind table.  */
361   if (size > 0)
362     {
363       unsigned long tmp;
364       unsigned i;
365       char *buf = alloca (size);
366
367       bfd_get_section_contents (objfile->obfd, section, buf, 0, size);
368
369       /* Now internalize the information being careful to handle host/target
370          endian issues.  */
371       for (i = 0; i < entries; i++)
372         {
373           table[i].region_start = bfd_get_32 (objfile->obfd,
374                                                   (bfd_byte *)buf);
375           table[i].region_start += text_offset;
376           buf += 4;
377           table[i].region_end = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
378           table[i].region_end += text_offset;
379           buf += 4;
380           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
381           buf += 4;
382           table[i].Cannot_unwind = (tmp >> 31) & 0x1;
383           table[i].Millicode = (tmp >> 30) & 0x1;
384           table[i].Millicode_save_sr0 = (tmp >> 29) & 0x1;
385           table[i].Region_description = (tmp >> 27) & 0x3;
386           table[i].reserved1 = (tmp >> 26) & 0x1;
387           table[i].Entry_SR = (tmp >> 25) & 0x1;
388           table[i].Entry_FR = (tmp >> 21) & 0xf;
389           table[i].Entry_GR = (tmp >> 16) & 0x1f;
390           table[i].Args_stored = (tmp >> 15) & 0x1;
391           table[i].Variable_Frame = (tmp >> 14) & 0x1;
392           table[i].Separate_Package_Body = (tmp >> 13) & 0x1;
393           table[i].Frame_Extension_Millicode = (tmp >> 12 ) & 0x1;
394           table[i].Stack_Overflow_Check = (tmp >> 11) & 0x1;
395           table[i].Two_Instruction_SP_Increment = (tmp >> 10) & 0x1;
396           table[i].Ada_Region = (tmp >> 9) & 0x1;
397           table[i].reserved2 = (tmp >> 5) & 0xf;
398           table[i].Save_SP = (tmp >> 4) & 0x1;
399           table[i].Save_RP = (tmp >> 3) & 0x1;
400           table[i].Save_MRP_in_frame = (tmp >> 2) & 0x1;
401           table[i].extn_ptr_defined = (tmp >> 1) & 0x1;
402           table[i].Cleanup_defined = tmp & 0x1;
403           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
404           buf += 4;
405           table[i].MPE_XL_interrupt_marker = (tmp >> 31) & 0x1;
406           table[i].HP_UX_interrupt_marker = (tmp >> 30) & 0x1;
407           table[i].Large_frame = (tmp >> 29) & 0x1;
408           table[i].reserved4 = (tmp >> 27) & 0x3;
409           table[i].Total_frame_size = tmp & 0x7ffffff;
410         }
411     }
412 }
413
414 /* Read in the backtrace information stored in the `$UNWIND_START$' section of
415    the object file.  This info is used mainly by find_unwind_entry() to find
416    out the stack frame size and frame pointer used by procedures.  We put
417    everything on the psymbol obstack in the objfile so that it automatically
418    gets freed when the objfile is destroyed.  */
419
420 static void
421 read_unwind_info (objfile)
422      struct objfile *objfile;
423 {
424   asection *unwind_sec, *elf_unwind_sec, *stub_unwind_sec;
425   unsigned unwind_size, elf_unwind_size, stub_unwind_size, total_size;
426   unsigned index, unwind_entries, elf_unwind_entries;
427   unsigned stub_entries, total_entries;
428   CORE_ADDR text_offset;
429   struct obj_unwind_info *ui;
430
431   text_offset = ANOFFSET (objfile->section_offsets, 0);
432   ui = (struct obj_unwind_info *)obstack_alloc (&objfile->psymbol_obstack,
433                                                 sizeof (struct obj_unwind_info));
434
435   ui->table = NULL;
436   ui->cache = NULL;
437   ui->last = -1;
438
439   /* Get hooks to all unwind sections.   Note there is no linker-stub unwind
440      section in ELF at the moment.  */
441   unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_START$");
442   elf_unwind_sec = bfd_get_section_by_name (objfile->obfd, ".PARISC.unwind");
443   stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
444
445   /* Get sizes and unwind counts for all sections.  */
446   if (unwind_sec)
447     {
448       unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
449       unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
450     }
451   else
452     {
453       unwind_size = 0;
454       unwind_entries = 0;
455     }
456
457   if (elf_unwind_sec)
458     {
459       elf_unwind_size = bfd_section_size (objfile->obfd, elf_unwind_sec);
460       elf_unwind_entries = elf_unwind_size / UNWIND_ENTRY_SIZE;
461     }
462   else
463     {
464       elf_unwind_size = 0;
465       elf_unwind_entries = 0;
466     }
467
468   if (stub_unwind_sec)
469     {
470       stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
471       stub_entries = stub_unwind_size / STUB_UNWIND_ENTRY_SIZE;
472     }
473   else
474     {
475       stub_unwind_size = 0;
476       stub_entries = 0;
477     }
478
479   /* Compute total number of unwind entries and their total size.  */
480   total_entries = unwind_entries + elf_unwind_entries + stub_entries;
481   total_size = total_entries * sizeof (struct unwind_table_entry);
482
483   /* Allocate memory for the unwind table.  */
484   ui->table = obstack_alloc (&objfile->psymbol_obstack, total_size);
485   ui->last = total_entries - 1;
486
487   /* Internalize the standard unwind entries.  */
488   index = 0;
489   internalize_unwinds (objfile, &ui->table[index], unwind_sec,
490                        unwind_entries, unwind_size, text_offset);
491   index += unwind_entries;
492   internalize_unwinds (objfile, &ui->table[index], elf_unwind_sec,
493                        elf_unwind_entries, elf_unwind_size, text_offset);
494   index += elf_unwind_entries;
495
496   /* Now internalize the stub unwind entries.  */
497   if (stub_unwind_size > 0)
498     {
499       unsigned int i;
500       char *buf = alloca (stub_unwind_size);
501
502       /* Read in the stub unwind entries.  */
503       bfd_get_section_contents (objfile->obfd, stub_unwind_sec, buf,
504                                 0, stub_unwind_size);
505
506       /* Now convert them into regular unwind entries.  */
507       for (i = 0; i < stub_entries; i++, index++)
508         {
509           /* Clear out the next unwind entry.  */
510           memset (&ui->table[index], 0, sizeof (struct unwind_table_entry));
511
512           /* Convert offset & size into region_start and region_end.  
513              Stuff away the stub type into "reserved" fields.  */
514           ui->table[index].region_start = bfd_get_32 (objfile->obfd,
515                                                       (bfd_byte *) buf);
516           ui->table[index].region_start += text_offset;
517           buf += 4;
518           ui->table[index].stub_type = bfd_get_8 (objfile->obfd,
519                                                   (bfd_byte *) buf);
520           buf += 2;
521           ui->table[index].region_end
522             = ui->table[index].region_start + 4 * 
523               (bfd_get_16 (objfile->obfd, (bfd_byte *) buf) - 1);
524           buf += 2;
525         }
526
527     }
528
529   /* Unwind table needs to be kept sorted.  */
530   qsort (ui->table, total_entries, sizeof (struct unwind_table_entry),
531          compare_unwind_entries);
532
533   /* Keep a pointer to the unwind information.  */
534   objfile->obj_private = (PTR) ui;
535 }
536
537 /* Lookup the unwind (stack backtrace) info for the given PC.  We search all
538    of the objfiles seeking the unwind table entry for this PC.  Each objfile
539    contains a sorted list of struct unwind_table_entry.  Since we do a binary
540    search of the unwind tables, we depend upon them to be sorted.  */
541
542 struct unwind_table_entry *
543 find_unwind_entry(pc)
544      CORE_ADDR pc;
545 {
546   int first, middle, last;
547   struct objfile *objfile;
548
549   ALL_OBJFILES (objfile)
550     {
551       struct obj_unwind_info *ui;
552
553       ui = OBJ_UNWIND_INFO (objfile);
554
555       if (!ui)
556         {
557           read_unwind_info (objfile);
558           ui = OBJ_UNWIND_INFO (objfile);
559         }
560
561       /* First, check the cache */
562
563       if (ui->cache
564           && pc >= ui->cache->region_start
565           && pc <= ui->cache->region_end)
566         return ui->cache;
567
568       /* Not in the cache, do a binary search */
569
570       first = 0;
571       last = ui->last;
572
573       while (first <= last)
574         {
575           middle = (first + last) / 2;
576           if (pc >= ui->table[middle].region_start
577               && pc <= ui->table[middle].region_end)
578             {
579               ui->cache = &ui->table[middle];
580               return &ui->table[middle];
581             }
582
583           if (pc < ui->table[middle].region_start)
584             last = middle - 1;
585           else
586             first = middle + 1;
587         }
588     }                           /* ALL_OBJFILES() */
589   return NULL;
590 }
591
592 /* Return the adjustment necessary to make for addresses on the stack
593    as presented by hpread.c.
594
595    This is necessary because of the stack direction on the PA and the
596    bizarre way in which someone (?) decided they wanted to handle
597    frame pointerless code in GDB.  */
598 int
599 hpread_adjust_stack_address (func_addr)
600      CORE_ADDR func_addr;
601 {
602   struct unwind_table_entry *u;
603
604   u = find_unwind_entry (func_addr);
605   if (!u)
606     return 0;
607   else
608     return u->Total_frame_size << 3;
609 }
610
611 /* Called to determine if PC is in an interrupt handler of some
612    kind.  */
613
614 static int
615 pc_in_interrupt_handler (pc)
616      CORE_ADDR pc;
617 {
618   struct unwind_table_entry *u;
619   struct minimal_symbol *msym_us;
620
621   u = find_unwind_entry (pc);
622   if (!u)
623     return 0;
624
625   /* Oh joys.  HPUX sets the interrupt bit for _sigreturn even though
626      its frame isn't a pure interrupt frame.  Deal with this.  */
627   msym_us = lookup_minimal_symbol_by_pc (pc);
628
629   return u->HP_UX_interrupt_marker && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us));
630 }
631
632 /* Called when no unwind descriptor was found for PC.  Returns 1 if it
633    appears that PC is in a linker stub.  */
634
635 static int
636 pc_in_linker_stub (pc)
637      CORE_ADDR pc;
638 {
639   int found_magic_instruction = 0;
640   int i;
641   char buf[4];
642
643   /* If unable to read memory, assume pc is not in a linker stub.  */
644   if (target_read_memory (pc, buf, 4) != 0)
645     return 0;
646
647   /* We are looking for something like
648
649      ; $$dyncall jams RP into this special spot in the frame (RP')
650      ; before calling the "call stub"
651      ldw     -18(sp),rp
652
653      ldsid   (rp),r1         ; Get space associated with RP into r1
654      mtsp    r1,sp           ; Move it into space register 0
655      be,n    0(sr0),rp)      ; back to your regularly scheduled program
656      */
657
658   /* Maximum known linker stub size is 4 instructions.  Search forward
659      from the given PC, then backward.  */
660   for (i = 0; i < 4; i++)
661     {
662       /* If we hit something with an unwind, stop searching this direction.  */
663
664       if (find_unwind_entry (pc + i * 4) != 0)
665         break;
666
667       /* Check for ldsid (rp),r1 which is the magic instruction for a 
668          return from a cross-space function call.  */
669       if (read_memory_integer (pc + i * 4, 4) == 0x004010a1)
670         {
671           found_magic_instruction = 1;
672           break;
673         }
674       /* Add code to handle long call/branch and argument relocation stubs
675          here.  */
676     }
677
678   if (found_magic_instruction != 0)
679     return 1;
680
681   /* Now look backward.  */
682   for (i = 0; i < 4; i++)
683     {
684       /* If we hit something with an unwind, stop searching this direction.  */
685
686       if (find_unwind_entry (pc - i * 4) != 0)
687         break;
688
689       /* Check for ldsid (rp),r1 which is the magic instruction for a 
690          return from a cross-space function call.  */
691       if (read_memory_integer (pc - i * 4, 4) == 0x004010a1)
692         {
693           found_magic_instruction = 1;
694           break;
695         }
696       /* Add code to handle long call/branch and argument relocation stubs
697          here.  */
698     }
699   return found_magic_instruction;
700 }
701
702 static int
703 find_return_regnum(pc)
704      CORE_ADDR pc;
705 {
706   struct unwind_table_entry *u;
707
708   u = find_unwind_entry (pc);
709
710   if (!u)
711     return RP_REGNUM;
712
713   if (u->Millicode)
714     return 31;
715
716   return RP_REGNUM;
717 }
718
719 /* Return size of frame, or -1 if we should use a frame pointer.  */
720 static int
721 find_proc_framesize (pc)
722      CORE_ADDR pc;
723 {
724   struct unwind_table_entry *u;
725   struct minimal_symbol *msym_us;
726
727   u = find_unwind_entry (pc);
728
729   if (!u)
730     {
731       if (pc_in_linker_stub (pc))
732         /* Linker stubs have a zero size frame.  */
733         return 0;
734       else
735         return -1;
736     }
737
738   msym_us = lookup_minimal_symbol_by_pc (pc);
739
740   /* If Save_SP is set, and we're not in an interrupt or signal caller,
741      then we have a frame pointer.  Use it.  */
742   if (u->Save_SP && !pc_in_interrupt_handler (pc)
743       && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us)))
744     return -1;
745
746   return u->Total_frame_size << 3;
747 }
748
749 /* Return offset from sp at which rp is saved, or 0 if not saved.  */
750 static int rp_saved PARAMS ((CORE_ADDR));
751
752 static int
753 rp_saved (pc)
754      CORE_ADDR pc;
755 {
756   struct unwind_table_entry *u;
757
758   u = find_unwind_entry (pc);
759
760   if (!u)
761     {
762       if (pc_in_linker_stub (pc))
763         /* This is the so-called RP'.  */
764         return -24;
765       else
766         return 0;
767     }
768
769   if (u->Save_RP)
770     return -20;
771   else if (u->stub_type != 0)
772     {
773       switch (u->stub_type)
774         {
775         case EXPORT:
776         case IMPORT:
777           return -24;
778         case PARAMETER_RELOCATION:
779           return -8;
780         default:
781           return 0;
782         }
783     }
784   else
785     return 0;
786 }
787 \f
788 int
789 frameless_function_invocation (frame)
790      struct frame_info *frame;
791 {
792   struct unwind_table_entry *u;
793
794   u = find_unwind_entry (frame->pc);
795
796   if (u == 0)
797     return 0;
798
799   return (u->Total_frame_size == 0 && u->stub_type == 0);
800 }
801
802 CORE_ADDR
803 saved_pc_after_call (frame)
804      struct frame_info *frame;
805 {
806   int ret_regnum;
807   CORE_ADDR pc;
808   struct unwind_table_entry *u;
809
810   ret_regnum = find_return_regnum (get_frame_pc (frame));
811   pc = read_register (ret_regnum) & ~0x3;
812   
813   /* If PC is in a linker stub, then we need to dig the address
814      the stub will return to out of the stack.  */
815   u = find_unwind_entry (pc);
816   if (u && u->stub_type != 0)
817     return frame_saved_pc (frame);
818   else
819     return pc;
820 }
821 \f
822 CORE_ADDR
823 frame_saved_pc (frame)
824      struct frame_info *frame;
825 {
826   CORE_ADDR pc = get_frame_pc (frame);
827   struct unwind_table_entry *u;
828
829   /* BSD, HPUX & OSF1 all lay out the hardware state in the same manner
830      at the base of the frame in an interrupt handler.  Registers within
831      are saved in the exact same order as GDB numbers registers.  How
832      convienent.  */
833   if (pc_in_interrupt_handler (pc))
834     return read_memory_integer (frame->frame + PC_REGNUM * 4, 4) & ~0x3;
835
836 #ifdef FRAME_SAVED_PC_IN_SIGTRAMP
837   /* Deal with signal handler caller frames too.  */
838   if (frame->signal_handler_caller)
839     {
840       CORE_ADDR rp;
841       FRAME_SAVED_PC_IN_SIGTRAMP (frame, &rp);
842       return rp & ~0x3;
843     }
844 #endif
845
846   if (frameless_function_invocation (frame))
847     {
848       int ret_regnum;
849
850       ret_regnum = find_return_regnum (pc);
851
852       /* If the next frame is an interrupt frame or a signal
853          handler caller, then we need to look in the saved
854          register area to get the return pointer (the values
855          in the registers may not correspond to anything useful).  */
856       if (frame->next 
857           && (frame->next->signal_handler_caller
858               || pc_in_interrupt_handler (frame->next->pc)))
859         {
860           struct frame_saved_regs saved_regs;
861
862           get_frame_saved_regs (frame->next, &saved_regs);
863           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4) & 0x2)
864             {
865               pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
866
867               /* Syscalls are really two frames.  The syscall stub itself
868                  with a return pointer in %rp and the kernel call with
869                  a return pointer in %r31.  We return the %rp variant
870                  if %r31 is the same as frame->pc.  */
871               if (pc == frame->pc)
872                 pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
873             }
874           else
875             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
876         }
877       else
878         pc = read_register (ret_regnum) & ~0x3;
879     }
880   else
881     {
882       int rp_offset;
883
884 restart:
885       rp_offset = rp_saved (pc);
886       /* Similar to code in frameless function case.  If the next
887          frame is a signal or interrupt handler, then dig the right
888          information out of the saved register info.  */
889       if (rp_offset == 0
890           && frame->next
891           && (frame->next->signal_handler_caller
892               || pc_in_interrupt_handler (frame->next->pc)))
893         {
894           struct frame_saved_regs saved_regs;
895
896           get_frame_saved_regs (frame->next, &saved_regs);
897           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4) & 0x2)
898             {
899               pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
900
901               /* Syscalls are really two frames.  The syscall stub itself
902                  with a return pointer in %rp and the kernel call with
903                  a return pointer in %r31.  We return the %rp variant
904                  if %r31 is the same as frame->pc.  */
905               if (pc == frame->pc)
906                 pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
907             }
908           else
909             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
910         }
911       else if (rp_offset == 0)
912         pc = read_register (RP_REGNUM) & ~0x3;
913       else
914         pc = read_memory_integer (frame->frame + rp_offset, 4) & ~0x3;
915     }
916
917   /* If PC is inside a linker stub, then dig out the address the stub
918      will return to. 
919
920      Don't do this for long branch stubs.  Why?  For some unknown reason
921      _start is marked as a long branch stub in hpux10.  */
922   u = find_unwind_entry (pc);
923   if (u && u->stub_type != 0
924       && u->stub_type != LONG_BRANCH)
925     {
926       unsigned int insn;
927
928       /* If this is a dynamic executable, and we're in a signal handler,
929          then the call chain will eventually point us into the stub for
930          _sigreturn.  Unlike most cases, we'll be pointed to the branch
931          to the real sigreturn rather than the code after the real branch!. 
932
933          Else, try to dig the address the stub will return to in the normal
934          fashion.  */
935       insn = read_memory_integer (pc, 4);
936       if ((insn & 0xfc00e000) == 0xe8000000)
937         return (pc + extract_17 (insn) + 8) & ~0x3;
938       else
939         goto restart;
940     }
941
942   return pc;
943 }
944 \f
945 /* We need to correct the PC and the FP for the outermost frame when we are
946    in a system call.  */
947
948 void
949 init_extra_frame_info (fromleaf, frame)
950      int fromleaf;
951      struct frame_info *frame;
952 {
953   int flags;
954   int framesize;
955
956   if (frame->next && !fromleaf)
957     return;
958
959   /* If the next frame represents a frameless function invocation
960      then we have to do some adjustments that are normally done by
961      FRAME_CHAIN.  (FRAME_CHAIN is not called in this case.)  */
962   if (fromleaf)
963     {
964       /* Find the framesize of *this* frame without peeking at the PC
965          in the current frame structure (it isn't set yet).  */
966       framesize = find_proc_framesize (FRAME_SAVED_PC (get_next_frame (frame)));
967
968       /* Now adjust our base frame accordingly.  If we have a frame pointer
969          use it, else subtract the size of this frame from the current
970          frame.  (we always want frame->frame to point at the lowest address
971          in the frame).  */
972       if (framesize == -1)
973         frame->frame = read_register (FP_REGNUM);
974       else
975         frame->frame -= framesize;
976       return;
977     }
978
979   flags = read_register (FLAGS_REGNUM);
980   if (flags & 2)        /* In system call? */
981     frame->pc = read_register (31) & ~0x3;
982
983   /* The outermost frame is always derived from PC-framesize
984
985      One might think frameless innermost frames should have
986      a frame->frame that is the same as the parent's frame->frame.
987      That is wrong; frame->frame in that case should be the *high*
988      address of the parent's frame.  It's complicated as hell to
989      explain, but the parent *always* creates some stack space for
990      the child.  So the child actually does have a frame of some
991      sorts, and its base is the high address in its parent's frame.  */
992   framesize = find_proc_framesize(frame->pc);
993   if (framesize == -1)
994     frame->frame = read_register (FP_REGNUM);
995   else
996     frame->frame = read_register (SP_REGNUM) - framesize;
997 }
998 \f
999 /* Given a GDB frame, determine the address of the calling function's frame.
1000    This will be used to create a new GDB frame struct, and then
1001    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
1002
1003    This may involve searching through prologues for several functions
1004    at boundaries where GCC calls HP C code, or where code which has
1005    a frame pointer calls code without a frame pointer.  */
1006
1007 CORE_ADDR
1008 frame_chain (frame)
1009      struct frame_info *frame;
1010 {
1011   int my_framesize, caller_framesize;
1012   struct unwind_table_entry *u;
1013   CORE_ADDR frame_base;
1014   struct frame_info *tmp_frame;
1015
1016   /* Handle HPUX, BSD, and OSF1 style interrupt frames first.  These
1017      are easy; at *sp we have a full save state strucutre which we can
1018      pull the old stack pointer from.  Also see frame_saved_pc for
1019      code to dig a saved PC out of the save state structure.  */
1020   if (pc_in_interrupt_handler (frame->pc))
1021     frame_base = read_memory_integer (frame->frame + SP_REGNUM * 4, 4);
1022 #ifdef FRAME_BASE_BEFORE_SIGTRAMP
1023   else if (frame->signal_handler_caller)
1024     {
1025       FRAME_BASE_BEFORE_SIGTRAMP (frame, &frame_base);
1026     }
1027 #endif
1028   else
1029     frame_base = frame->frame;
1030
1031   /* Get frame sizes for the current frame and the frame of the 
1032      caller.  */
1033   my_framesize = find_proc_framesize (frame->pc);
1034   caller_framesize = find_proc_framesize (FRAME_SAVED_PC(frame));
1035
1036   /* If caller does not have a frame pointer, then its frame
1037      can be found at current_frame - caller_framesize.  */
1038   if (caller_framesize != -1)
1039     return frame_base - caller_framesize;
1040
1041   /* Both caller and callee have frame pointers and are GCC compiled
1042      (SAVE_SP bit in unwind descriptor is on for both functions.
1043      The previous frame pointer is found at the top of the current frame.  */
1044   if (caller_framesize == -1 && my_framesize == -1)
1045     return read_memory_integer (frame_base, 4);
1046
1047   /* Caller has a frame pointer, but callee does not.  This is a little
1048      more difficult as GCC and HP C lay out locals and callee register save
1049      areas very differently.
1050
1051      The previous frame pointer could be in a register, or in one of 
1052      several areas on the stack.
1053
1054      Walk from the current frame to the innermost frame examining 
1055      unwind descriptors to determine if %r3 ever gets saved into the
1056      stack.  If so return whatever value got saved into the stack.
1057      If it was never saved in the stack, then the value in %r3 is still
1058      valid, so use it. 
1059
1060      We use information from unwind descriptors to determine if %r3
1061      is saved into the stack (Entry_GR field has this information).  */
1062
1063   tmp_frame = frame;
1064   while (tmp_frame)
1065     {
1066       u = find_unwind_entry (tmp_frame->pc);
1067
1068       if (!u)
1069         {
1070           /* We could find this information by examining prologues.  I don't
1071              think anyone has actually written any tools (not even "strip")
1072              which leave them out of an executable, so maybe this is a moot
1073              point.  */
1074           warning ("Unable to find unwind for PC 0x%x -- Help!", tmp_frame->pc);
1075           return 0;
1076         }
1077
1078       /* Entry_GR specifies the number of callee-saved general registers
1079          saved in the stack.  It starts at %r3, so %r3 would be 1.  */
1080       if (u->Entry_GR >= 1 || u->Save_SP
1081           || tmp_frame->signal_handler_caller
1082           || pc_in_interrupt_handler (tmp_frame->pc))
1083         break;
1084       else
1085         tmp_frame = tmp_frame->next;
1086     }
1087
1088   if (tmp_frame)
1089     {
1090       /* We may have walked down the chain into a function with a frame
1091          pointer.  */
1092       if (u->Save_SP
1093           && !tmp_frame->signal_handler_caller
1094           && !pc_in_interrupt_handler (tmp_frame->pc))
1095         return read_memory_integer (tmp_frame->frame, 4);
1096       /* %r3 was saved somewhere in the stack.  Dig it out.  */
1097       else 
1098         {
1099           struct frame_saved_regs saved_regs;
1100
1101           /* Sick.
1102
1103              For optimization purposes many kernels don't have the
1104              callee saved registers into the save_state structure upon
1105              entry into the kernel for a syscall; the optimization
1106              is usually turned off if the process is being traced so
1107              that the debugger can get full register state for the
1108              process.
1109               
1110              This scheme works well except for two cases:
1111
1112                * Attaching to a process when the process is in the
1113                kernel performing a system call (debugger can't get
1114                full register state for the inferior process since
1115                the process wasn't being traced when it entered the
1116                system call).
1117
1118                * Register state is not complete if the system call
1119                causes the process to core dump.
1120
1121
1122              The following heinous code is an attempt to deal with
1123              the lack of register state in a core dump.  It will
1124              fail miserably if the function which performs the
1125              system call has a variable sized stack frame.  */
1126
1127           get_frame_saved_regs (tmp_frame, &saved_regs);
1128
1129           /* Abominable hack.  */
1130           if (current_target.to_has_execution == 0
1131               && ((saved_regs.regs[FLAGS_REGNUM]
1132                    && (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4)
1133                        & 0x2))
1134                   || (saved_regs.regs[FLAGS_REGNUM] == 0
1135                       && read_register (FLAGS_REGNUM) & 0x2)))
1136             {
1137               u = find_unwind_entry (FRAME_SAVED_PC (frame));
1138               if (!u)
1139                 return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
1140               else
1141                 return frame_base - (u->Total_frame_size << 3);
1142             }
1143         
1144           return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
1145         }
1146     }
1147   else
1148     {
1149       struct frame_saved_regs saved_regs;
1150
1151       /* Get the innermost frame.  */
1152       tmp_frame = frame;
1153       while (tmp_frame->next != NULL)
1154         tmp_frame = tmp_frame->next;
1155
1156       get_frame_saved_regs (tmp_frame, &saved_regs);
1157       /* Abominable hack.  See above.  */
1158       if (current_target.to_has_execution == 0
1159           && ((saved_regs.regs[FLAGS_REGNUM]
1160                && (read_memory_integer (saved_regs.regs[FLAGS_REGNUM], 4)
1161                    & 0x2))
1162               || (saved_regs.regs[FLAGS_REGNUM] == 0
1163                   && read_register (FLAGS_REGNUM)  & 0x2)))
1164         {
1165           u = find_unwind_entry (FRAME_SAVED_PC (frame));
1166           if (!u)
1167             return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
1168            else
1169             return frame_base - (u->Total_frame_size << 3);
1170         }
1171         
1172       /* The value in %r3 was never saved into the stack (thus %r3 still
1173          holds the value of the previous frame pointer).  */
1174       return read_register (FP_REGNUM);
1175     }
1176 }
1177
1178 \f
1179 /* To see if a frame chain is valid, see if the caller looks like it
1180    was compiled with gcc. */
1181
1182 int
1183 frame_chain_valid (chain, thisframe)
1184      CORE_ADDR chain;
1185      struct frame_info *thisframe;
1186 {
1187   struct minimal_symbol *msym_us;
1188   struct minimal_symbol *msym_start;
1189   struct unwind_table_entry *u, *next_u = NULL;
1190   struct frame_info *next;
1191
1192   if (!chain)
1193     return 0;
1194
1195   u = find_unwind_entry (thisframe->pc);
1196
1197   if (u == NULL)
1198     return 1;
1199
1200   /* We can't just check that the same of msym_us is "_start", because
1201      someone idiotically decided that they were going to make a Ltext_end
1202      symbol with the same address.  This Ltext_end symbol is totally
1203      indistinguishable (as nearly as I can tell) from the symbol for a function
1204      which is (legitimately, since it is in the user's namespace)
1205      named Ltext_end, so we can't just ignore it.  */
1206   msym_us = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
1207   msym_start = lookup_minimal_symbol ("_start", NULL, NULL);
1208   if (msym_us
1209       && msym_start
1210       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
1211     return 0;
1212
1213   /* Grrrr.  Some new idiot decided that they don't want _start for the
1214      PRO configurations; $START$ calls main directly....  Deal with it.  */
1215   msym_start = lookup_minimal_symbol ("$START$", NULL, NULL);
1216   if (msym_us
1217       && msym_start
1218       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
1219     return 0;
1220
1221   next = get_next_frame (thisframe);
1222   if (next)
1223     next_u = find_unwind_entry (next->pc);
1224
1225   /* If this frame does not save SP, has no stack, isn't a stub,
1226      and doesn't "call" an interrupt routine or signal handler caller,
1227      then its not valid.  */
1228   if (u->Save_SP || u->Total_frame_size || u->stub_type != 0
1229       || (thisframe->next && thisframe->next->signal_handler_caller)
1230       || (next_u && next_u->HP_UX_interrupt_marker))
1231     return 1;
1232
1233   if (pc_in_linker_stub (thisframe->pc))
1234     return 1;
1235
1236   return 0;
1237 }
1238
1239 /*
1240  * These functions deal with saving and restoring register state
1241  * around a function call in the inferior. They keep the stack
1242  * double-word aligned; eventually, on an hp700, the stack will have
1243  * to be aligned to a 64-byte boundary.
1244  */
1245
1246 void
1247 push_dummy_frame (inf_status)
1248      struct inferior_status *inf_status;
1249 {
1250   CORE_ADDR sp, pc, pcspace;
1251   register int regnum;
1252   int int_buffer;
1253   double freg_buffer;
1254
1255   /* Oh, what a hack.  If we're trying to perform an inferior call
1256      while the inferior is asleep, we have to make sure to clear
1257      the "in system call" bit in the flag register (the call will
1258      start after the syscall returns, so we're no longer in the system
1259      call!)  This state is kept in "inf_status", change it there.
1260
1261      We also need a number of horrid hacks to deal with lossage in the
1262      PC queue registers (apparently they're not valid when the in syscall
1263      bit is set).  */
1264   pc = target_read_pc (inferior_pid);
1265   int_buffer = read_register (FLAGS_REGNUM);
1266   if (int_buffer & 0x2)
1267     {
1268       unsigned int sid;
1269       int_buffer &= ~0x2;
1270       memcpy (inf_status->registers, &int_buffer, 4);
1271       memcpy (inf_status->registers + REGISTER_BYTE (PCOQ_HEAD_REGNUM), &pc, 4);
1272       pc += 4;
1273       memcpy (inf_status->registers + REGISTER_BYTE (PCOQ_TAIL_REGNUM), &pc, 4);
1274       pc -= 4;
1275       sid = (pc >> 30) & 0x3;
1276       if (sid == 0)
1277         pcspace = read_register (SR4_REGNUM);
1278       else
1279         pcspace = read_register (SR4_REGNUM + 4 + sid);
1280       memcpy (inf_status->registers + REGISTER_BYTE (PCSQ_HEAD_REGNUM),
1281               &pcspace, 4);
1282       memcpy (inf_status->registers + REGISTER_BYTE (PCSQ_TAIL_REGNUM),
1283               &pcspace, 4);
1284     }
1285   else
1286     pcspace = read_register (PCSQ_HEAD_REGNUM);
1287
1288   /* Space for "arguments"; the RP goes in here. */
1289   sp = read_register (SP_REGNUM) + 48;
1290   int_buffer = read_register (RP_REGNUM) | 0x3;
1291   write_memory (sp - 20, (char *)&int_buffer, 4);
1292
1293   int_buffer = read_register (FP_REGNUM);
1294   write_memory (sp, (char *)&int_buffer, 4);
1295
1296   write_register (FP_REGNUM, sp);
1297
1298   sp += 8;
1299
1300   for (regnum = 1; regnum < 32; regnum++)
1301     if (regnum != RP_REGNUM && regnum != FP_REGNUM)
1302       sp = push_word (sp, read_register (regnum));
1303
1304   sp += 4;
1305
1306   for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)
1307     {
1308       read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
1309       sp = push_bytes (sp, (char *)&freg_buffer, 8);
1310     }
1311   sp = push_word (sp, read_register (IPSW_REGNUM));
1312   sp = push_word (sp, read_register (SAR_REGNUM));
1313   sp = push_word (sp, pc);
1314   sp = push_word (sp, pcspace);
1315   sp = push_word (sp, pc + 4);
1316   sp = push_word (sp, pcspace);
1317   write_register (SP_REGNUM, sp);
1318 }
1319
1320 static void
1321 find_dummy_frame_regs (frame, frame_saved_regs)
1322      struct frame_info *frame;
1323      struct frame_saved_regs *frame_saved_regs;
1324 {
1325   CORE_ADDR fp = frame->frame;
1326   int i;
1327
1328   frame_saved_regs->regs[RP_REGNUM] = (fp - 20) & ~0x3;
1329   frame_saved_regs->regs[FP_REGNUM] = fp;
1330   frame_saved_regs->regs[1] = fp + 8;
1331
1332   for (fp += 12, i = 3; i < 32; i++)
1333     {
1334       if (i != FP_REGNUM)
1335         {
1336           frame_saved_regs->regs[i] = fp;
1337           fp += 4;
1338         }
1339     }
1340
1341   fp += 4;
1342   for (i = FP0_REGNUM; i < NUM_REGS; i++, fp += 8)
1343     frame_saved_regs->regs[i] = fp;
1344
1345   frame_saved_regs->regs[IPSW_REGNUM] = fp;
1346   frame_saved_regs->regs[SAR_REGNUM] = fp + 4;
1347   frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp + 8;
1348   frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp + 12;
1349   frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp + 16;
1350   frame_saved_regs->regs[PCSQ_TAIL_REGNUM] = fp + 20;
1351 }
1352
1353 void
1354 hppa_pop_frame ()
1355 {
1356   register struct frame_info *frame = get_current_frame ();
1357   register CORE_ADDR fp, npc, target_pc;
1358   register int regnum;
1359   struct frame_saved_regs fsr;
1360   double freg_buffer;
1361
1362   fp = FRAME_FP (frame);
1363   get_frame_saved_regs (frame, &fsr);
1364
1365 #ifndef NO_PC_SPACE_QUEUE_RESTORE
1366   if (fsr.regs[IPSW_REGNUM])    /* Restoring a call dummy frame */
1367     restore_pc_queue (&fsr);
1368 #endif
1369
1370   for (regnum = 31; regnum > 0; regnum--)
1371     if (fsr.regs[regnum])
1372       write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
1373
1374   for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)
1375     if (fsr.regs[regnum])
1376       {
1377         read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);
1378         write_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
1379       }
1380
1381   if (fsr.regs[IPSW_REGNUM])
1382     write_register (IPSW_REGNUM,
1383                     read_memory_integer (fsr.regs[IPSW_REGNUM], 4));
1384
1385   if (fsr.regs[SAR_REGNUM])
1386     write_register (SAR_REGNUM,
1387                     read_memory_integer (fsr.regs[SAR_REGNUM], 4));
1388
1389   /* If the PC was explicitly saved, then just restore it.  */
1390   if (fsr.regs[PCOQ_TAIL_REGNUM])
1391     {
1392       npc = read_memory_integer (fsr.regs[PCOQ_TAIL_REGNUM], 4);
1393       write_register (PCOQ_TAIL_REGNUM, npc);
1394     }
1395   /* Else use the value in %rp to set the new PC.  */
1396   else 
1397     {
1398       npc = read_register (RP_REGNUM);
1399       target_write_pc (npc, 0);
1400     }
1401
1402   write_register (FP_REGNUM, read_memory_integer (fp, 4));
1403
1404   if (fsr.regs[IPSW_REGNUM])    /* call dummy */
1405     write_register (SP_REGNUM, fp - 48);
1406   else
1407     write_register (SP_REGNUM, fp);
1408
1409   /* The PC we just restored may be inside a return trampoline.  If so
1410      we want to restart the inferior and run it through the trampoline.
1411
1412      Do this by setting a momentary breakpoint at the location the
1413      trampoline returns to. 
1414
1415      Don't skip through the trampoline if we're popping a dummy frame.  */
1416   target_pc = SKIP_TRAMPOLINE_CODE (npc & ~0x3) & ~0x3;
1417   if (target_pc && !fsr.regs[IPSW_REGNUM])
1418     {
1419       struct symtab_and_line sal;
1420       struct breakpoint *breakpoint;
1421       struct cleanup *old_chain;
1422
1423       /* Set up our breakpoint.   Set it to be silent as the MI code
1424          for "return_command" will print the frame we returned to.  */
1425       sal = find_pc_line (target_pc, 0);
1426       sal.pc = target_pc;
1427       breakpoint = set_momentary_breakpoint (sal, NULL, bp_finish);
1428       breakpoint->silent = 1;
1429
1430       /* So we can clean things up.  */
1431       old_chain = make_cleanup (delete_breakpoint, breakpoint);
1432
1433       /* Start up the inferior.  */
1434       clear_proceed_status ();
1435       proceed_to_finish = 1;
1436       proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1437
1438       /* Perform our cleanups.  */
1439       do_cleanups (old_chain);
1440     }
1441   flush_cached_frames ();
1442 }
1443
1444 /*
1445  * After returning to a dummy on the stack, restore the instruction
1446  * queue space registers. */
1447
1448 static int
1449 restore_pc_queue (fsr)
1450      struct frame_saved_regs *fsr;
1451 {
1452   CORE_ADDR pc = read_pc ();
1453   CORE_ADDR new_pc = read_memory_integer (fsr->regs[PCOQ_HEAD_REGNUM], 4);
1454   struct target_waitstatus w;
1455   int insn_count;
1456
1457   /* Advance past break instruction in the call dummy. */
1458   write_register (PCOQ_HEAD_REGNUM, pc + 4);
1459   write_register (PCOQ_TAIL_REGNUM, pc + 8);
1460
1461   /*
1462    * HPUX doesn't let us set the space registers or the space
1463    * registers of the PC queue through ptrace. Boo, hiss.
1464    * Conveniently, the call dummy has this sequence of instructions
1465    * after the break:
1466    *    mtsp r21, sr0
1467    *    ble,n 0(sr0, r22)
1468    *
1469    * So, load up the registers and single step until we are in the
1470    * right place.
1471    */
1472
1473   write_register (21, read_memory_integer (fsr->regs[PCSQ_HEAD_REGNUM], 4));
1474   write_register (22, new_pc);
1475
1476   for (insn_count = 0; insn_count < 3; insn_count++)
1477     {
1478       /* FIXME: What if the inferior gets a signal right now?  Want to
1479          merge this into wait_for_inferior (as a special kind of
1480          watchpoint?  By setting a breakpoint at the end?  Is there
1481          any other choice?  Is there *any* way to do this stuff with
1482          ptrace() or some equivalent?).  */
1483       resume (1, 0);
1484       target_wait (inferior_pid, &w);
1485
1486       if (w.kind == TARGET_WAITKIND_SIGNALLED)
1487         {
1488           stop_signal = w.value.sig;
1489           terminal_ours_for_output ();
1490           printf_unfiltered ("\nProgram terminated with signal %s, %s.\n",
1491                              target_signal_to_name (stop_signal),
1492                              target_signal_to_string (stop_signal));
1493           gdb_flush (gdb_stdout);
1494           return 0;
1495         }
1496     }
1497   target_terminal_ours ();
1498   target_fetch_registers (-1);
1499   return 1;
1500 }
1501
1502 CORE_ADDR
1503 hppa_push_arguments (nargs, args, sp, struct_return, struct_addr)
1504      int nargs;
1505      value_ptr *args;
1506      CORE_ADDR sp;
1507      int struct_return;
1508      CORE_ADDR struct_addr;
1509 {
1510   /* array of arguments' offsets */
1511   int *offset = (int *)alloca(nargs * sizeof (int));
1512   int cum = 0;
1513   int i, alignment;
1514   
1515   for (i = 0; i < nargs; i++)
1516     {
1517       cum += TYPE_LENGTH (VALUE_TYPE (args[i]));
1518
1519     /* value must go at proper alignment. Assume alignment is a
1520          power of two.*/
1521       alignment = hppa_alignof (VALUE_TYPE (args[i]));
1522       if (cum % alignment)
1523         cum = (cum + alignment) & -alignment;
1524       offset[i] = -cum;
1525     }
1526   sp += max ((cum + 7) & -8, 16);
1527
1528   for (i = 0; i < nargs; i++)
1529     write_memory (sp + offset[i], VALUE_CONTENTS (args[i]),
1530                   TYPE_LENGTH (VALUE_TYPE (args[i])));
1531
1532   if (struct_return)
1533     write_register (28, struct_addr);
1534   return sp + 32;
1535 }
1536
1537 /*
1538  * Insert the specified number of args and function address
1539  * into a call sequence of the above form stored at DUMMYNAME.
1540  *
1541  * On the hppa we need to call the stack dummy through $$dyncall.
1542  * Therefore our version of FIX_CALL_DUMMY takes an extra argument,
1543  * real_pc, which is the location where gdb should start up the
1544  * inferior to do the function call.
1545  */
1546
1547 CORE_ADDR
1548 hppa_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
1549      char *dummy;
1550      CORE_ADDR pc;
1551      CORE_ADDR fun;
1552      int nargs;
1553      value_ptr *args;
1554      struct type *type;
1555      int gcc_p;
1556 {
1557   CORE_ADDR dyncall_addr;
1558   struct minimal_symbol *msymbol;
1559   struct minimal_symbol *trampoline;
1560   int flags = read_register (FLAGS_REGNUM);
1561   struct unwind_table_entry *u;
1562
1563   trampoline = NULL;
1564   msymbol = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
1565   if (msymbol == NULL)
1566     error ("Can't find an address for $$dyncall trampoline");
1567
1568   dyncall_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1569
1570   /* FUN could be a procedure label, in which case we have to get
1571      its real address and the value of its GOT/DP.  */
1572   if (fun & 0x2)
1573     {
1574       /* Get the GOT/DP value for the target function.  It's
1575          at *(fun+4).  Note the call dummy is *NOT* allowed to
1576          trash %r19 before calling the target function.  */
1577       write_register (19, read_memory_integer ((fun & ~0x3) + 4, 4));
1578
1579       /* Now get the real address for the function we are calling, it's
1580          at *fun.  */
1581       fun = (CORE_ADDR) read_memory_integer (fun & ~0x3, 4);
1582     }
1583   else
1584     {
1585
1586 #ifndef GDB_TARGET_IS_PA_ELF
1587       /* FUN could be either an export stub, or the real address of a
1588          function in a shared library.  We must call an import stub
1589          rather than the export stub or real function for lazy binding
1590          to work correctly.  */
1591       if (som_solib_get_got_by_pc (fun))
1592         {
1593           struct objfile *objfile;
1594           struct minimal_symbol *funsymbol, *stub_symbol;
1595           CORE_ADDR newfun = 0;
1596
1597           funsymbol = lookup_minimal_symbol_by_pc (fun);
1598           if (!funsymbol)
1599             error ("Unable to find minimal symbol for target fucntion.\n");
1600
1601           /* Search all the object files for an import symbol with the
1602              right name. */
1603           ALL_OBJFILES (objfile)
1604             {
1605               stub_symbol = lookup_minimal_symbol (SYMBOL_NAME (funsymbol),
1606                                                    NULL, objfile);
1607               /* Found a symbol with the right name.  */
1608               if (stub_symbol)
1609                 {
1610                   struct unwind_table_entry *u;
1611                   /* It must be a shared library trampoline.  */
1612                   if (SYMBOL_TYPE (stub_symbol) != mst_solib_trampoline)
1613                     continue;
1614
1615                   /* It must also be an import stub.  */
1616                   u = find_unwind_entry (SYMBOL_VALUE (stub_symbol));
1617                   if (!u || u->stub_type != IMPORT)
1618                     continue;
1619
1620                   /* OK.  Looks like the correct import stub.  */
1621                   newfun = SYMBOL_VALUE (stub_symbol);
1622                   fun = newfun;
1623                 }
1624             }
1625           if (newfun == 0)
1626             write_register (19, som_solib_get_got_by_pc (fun));
1627         }
1628 #endif
1629     }
1630
1631   /* If we are calling an import stub (eg calling into a dynamic library)
1632      then have sr4export call the magic __d_plt_call routine which is linked
1633      in from end.o.  (You can't use _sr4export to call the import stub as
1634      the value in sp-24 will get fried and you end up returning to the
1635      wrong location.  You can't call the import stub directly as the code
1636      to bind the PLT entry to a function can't return to a stack address.)  */
1637   u = find_unwind_entry (fun);
1638   if (u && u->stub_type == IMPORT)
1639     {
1640       CORE_ADDR new_fun;
1641
1642       /* Prefer __gcc_plt_call over the HP supplied routine because
1643          __gcc_plt_call works for any number of arguments.  */
1644       trampoline = lookup_minimal_symbol ("__gcc_plt_call", NULL, NULL);
1645       if (trampoline == NULL)
1646         trampoline = lookup_minimal_symbol ("__d_plt_call", NULL, NULL);
1647
1648       if (trampoline == NULL)
1649         error ("Can't find an address for __d_plt_call or __gcc_plt_call trampoline");
1650
1651       /* This is where sr4export will jump to.  */
1652       new_fun = SYMBOL_VALUE_ADDRESS (trampoline);
1653
1654       if (strcmp (SYMBOL_NAME (trampoline), "__d_plt_call") == 0)
1655         {
1656           /* We have to store the address of the stub in __shlib_funcptr.  */
1657           msymbol = lookup_minimal_symbol ("__shlib_funcptr", NULL,
1658                                            (struct objfile *)NULL);
1659           if (msymbol == NULL)
1660             error ("Can't find an address for __shlib_funcptr");
1661
1662           target_write_memory (SYMBOL_VALUE_ADDRESS (msymbol), (char *)&fun, 4);
1663
1664           /* We want sr4export to call __d_plt_call, so we claim it is
1665              the final target.  Clear trampoline.  */
1666           fun = new_fun;
1667           trampoline = NULL;
1668         }
1669     }
1670
1671   /* Store upper 21 bits of function address into ldil.  fun will either be
1672      the final target (most cases) or __d_plt_call when calling into a shared
1673      library and __gcc_plt_call is not available.  */
1674   store_unsigned_integer
1675     (&dummy[FUNC_LDIL_OFFSET],
1676      INSTRUCTION_SIZE,
1677      deposit_21 (fun >> 11,
1678                  extract_unsigned_integer (&dummy[FUNC_LDIL_OFFSET],
1679                                            INSTRUCTION_SIZE)));
1680
1681   /* Store lower 11 bits of function address into ldo */
1682   store_unsigned_integer
1683     (&dummy[FUNC_LDO_OFFSET],
1684      INSTRUCTION_SIZE,
1685      deposit_14 (fun & MASK_11,
1686                  extract_unsigned_integer (&dummy[FUNC_LDO_OFFSET],
1687                                            INSTRUCTION_SIZE)));
1688 #ifdef SR4EXPORT_LDIL_OFFSET
1689
1690   {
1691     CORE_ADDR trampoline_addr;
1692
1693     /* We may still need sr4export's address too.  */
1694
1695     if (trampoline == NULL)
1696       {
1697         msymbol = lookup_minimal_symbol ("_sr4export", NULL, NULL);
1698         if (msymbol == NULL)
1699           error ("Can't find an address for _sr4export trampoline");
1700
1701         trampoline_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1702       }
1703     else
1704       trampoline_addr = SYMBOL_VALUE_ADDRESS (trampoline);
1705
1706
1707     /* Store upper 21 bits of trampoline's address into ldil */
1708     store_unsigned_integer
1709       (&dummy[SR4EXPORT_LDIL_OFFSET],
1710        INSTRUCTION_SIZE,
1711        deposit_21 (trampoline_addr >> 11,
1712                    extract_unsigned_integer (&dummy[SR4EXPORT_LDIL_OFFSET],
1713                                              INSTRUCTION_SIZE)));
1714
1715     /* Store lower 11 bits of trampoline's address into ldo */
1716     store_unsigned_integer
1717       (&dummy[SR4EXPORT_LDO_OFFSET],
1718        INSTRUCTION_SIZE,
1719        deposit_14 (trampoline_addr & MASK_11,
1720                    extract_unsigned_integer (&dummy[SR4EXPORT_LDO_OFFSET],
1721                                              INSTRUCTION_SIZE)));
1722   }
1723 #endif
1724
1725   write_register (22, pc);
1726
1727   /* If we are in a syscall, then we should call the stack dummy
1728      directly.  $$dyncall is not needed as the kernel sets up the
1729      space id registers properly based on the value in %r31.  In
1730      fact calling $$dyncall will not work because the value in %r22
1731      will be clobbered on the syscall exit path. 
1732
1733      Similarly if the current PC is in a shared library.  Note however,
1734      this scheme won't work if the shared library isn't mapped into
1735      the same space as the stack.  */
1736   if (flags & 2)
1737     return pc;
1738 #ifndef GDB_TARGET_IS_PA_ELF
1739   else if (som_solib_get_got_by_pc (target_read_pc (inferior_pid)))
1740     return pc;
1741 #endif
1742   else
1743     return dyncall_addr;
1744
1745 }
1746
1747 /* Get the PC from %r31 if currently in a syscall.  Also mask out privilege
1748    bits.  */
1749
1750 CORE_ADDR
1751 target_read_pc (pid)
1752      int pid;
1753 {
1754   int flags = read_register (FLAGS_REGNUM);
1755
1756   if (flags & 2) {
1757     return read_register (31) & ~0x3;
1758   }
1759   return read_register (PC_REGNUM) & ~0x3;
1760 }
1761
1762 /* Write out the PC.  If currently in a syscall, then also write the new
1763    PC value into %r31.  */
1764
1765 void
1766 target_write_pc (v, pid)
1767      CORE_ADDR v;
1768      int pid;
1769 {
1770   int flags = read_register (FLAGS_REGNUM);
1771
1772   /* If in a syscall, then set %r31.  Also make sure to get the 
1773      privilege bits set correctly.  */
1774   if (flags & 2)
1775     write_register (31, (long) (v | 0x3));
1776
1777   write_register (PC_REGNUM, (long) v);
1778   write_register (NPC_REGNUM, (long) v + 4);
1779 }
1780
1781 /* return the alignment of a type in bytes. Structures have the maximum
1782    alignment required by their fields. */
1783
1784 static int
1785 hppa_alignof (type)
1786      struct type *type;
1787 {
1788   int max_align, align, i;
1789   CHECK_TYPEDEF (type);
1790   switch (TYPE_CODE (type))
1791     {
1792     case TYPE_CODE_PTR:
1793     case TYPE_CODE_INT:
1794     case TYPE_CODE_FLT:
1795       return TYPE_LENGTH (type);
1796     case TYPE_CODE_ARRAY:
1797       return hppa_alignof (TYPE_FIELD_TYPE (type, 0));
1798     case TYPE_CODE_STRUCT:
1799     case TYPE_CODE_UNION:
1800       max_align = 2;
1801       for (i = 0; i < TYPE_NFIELDS (type); i++)
1802         {
1803           /* Bit fields have no real alignment. */
1804           if (!TYPE_FIELD_BITPOS (type, i))
1805             {
1806               align = hppa_alignof (TYPE_FIELD_TYPE (type, i));
1807               max_align = max (max_align, align);
1808             }
1809         }
1810       return max_align;
1811     default:
1812       return 4;
1813     }
1814 }
1815
1816 /* Print the register regnum, or all registers if regnum is -1 */
1817
1818 void
1819 pa_do_registers_info (regnum, fpregs)
1820      int regnum;
1821      int fpregs;
1822 {
1823   char raw_regs [REGISTER_BYTES];
1824   int i;
1825   
1826   for (i = 0; i < NUM_REGS; i++)
1827     read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
1828   if (regnum == -1)
1829     pa_print_registers (raw_regs, regnum, fpregs);
1830   else if (regnum < FP0_REGNUM)
1831     printf_unfiltered ("%s %x\n", reg_names[regnum], *(long *)(raw_regs +
1832                                                     REGISTER_BYTE (regnum)));
1833   else
1834     pa_print_fp_reg (regnum);
1835 }
1836
1837 static void
1838 pa_print_registers (raw_regs, regnum, fpregs)
1839      char *raw_regs;
1840      int regnum;
1841      int fpregs;
1842 {
1843   int i,j;
1844   long val;
1845
1846   for (i = 0; i < 18; i++)
1847     {
1848       for (j = 0; j < 4; j++)
1849         {
1850           val =
1851             extract_signed_integer (raw_regs + REGISTER_BYTE (i+(j*18)), 4);
1852           printf_unfiltered ("%8.8s: %8x  ", reg_names[i+(j*18)], val);
1853         }
1854       printf_unfiltered ("\n");
1855     }
1856   
1857   if (fpregs)
1858     for (i = 72; i < NUM_REGS; i++)
1859       pa_print_fp_reg (i);
1860 }
1861
1862 static void
1863 pa_print_fp_reg (i)
1864      int i;
1865 {
1866   unsigned char raw_buffer[MAX_REGISTER_RAW_SIZE];
1867   unsigned char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
1868
1869   /* Get 32bits of data.  */
1870   read_relative_register_raw_bytes (i, raw_buffer);
1871
1872   /* Put it in the buffer.  No conversions are ever necessary.  */
1873   memcpy (virtual_buffer, raw_buffer, REGISTER_RAW_SIZE (i));
1874
1875   fputs_filtered (reg_names[i], gdb_stdout);
1876   print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1877   fputs_filtered ("(single precision)     ", gdb_stdout);
1878
1879   val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, gdb_stdout, 0,
1880              1, 0, Val_pretty_default);
1881   printf_filtered ("\n");
1882
1883   /* If "i" is even, then this register can also be a double-precision
1884      FP register.  Dump it out as such.  */
1885   if ((i % 2) == 0)
1886     {
1887       /* Get the data in raw format for the 2nd half.  */
1888       read_relative_register_raw_bytes (i + 1, raw_buffer);
1889
1890       /* Copy it into the appropriate part of the virtual buffer.  */
1891       memcpy (virtual_buffer + REGISTER_RAW_SIZE (i), raw_buffer,
1892               REGISTER_RAW_SIZE (i));
1893
1894       /* Dump it as a double.  */
1895       fputs_filtered (reg_names[i], gdb_stdout);
1896       print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1897       fputs_filtered ("(double precision)     ", gdb_stdout);
1898
1899       val_print (builtin_type_double, virtual_buffer, 0, gdb_stdout, 0,
1900                  1, 0, Val_pretty_default);
1901       printf_filtered ("\n");
1902     }
1903 }
1904
1905 /* Return one if PC is in the call path of a trampoline, else return zero.
1906
1907    Note we return one for *any* call trampoline (long-call, arg-reloc), not
1908    just shared library trampolines (import, export).  */
1909
1910 int
1911 in_solib_call_trampoline (pc, name)
1912      CORE_ADDR pc;
1913      char *name;
1914 {
1915   struct minimal_symbol *minsym;
1916   struct unwind_table_entry *u;
1917   static CORE_ADDR dyncall = 0;
1918   static CORE_ADDR sr4export = 0;
1919
1920 /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
1921    new exec file */
1922
1923   /* First see if PC is in one of the two C-library trampolines.  */
1924   if (!dyncall)
1925     {
1926       minsym = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
1927       if (minsym)
1928         dyncall = SYMBOL_VALUE_ADDRESS (minsym);
1929       else
1930         dyncall = -1;
1931     }
1932
1933   if (!sr4export)
1934     {
1935       minsym = lookup_minimal_symbol ("_sr4export", NULL, NULL);
1936       if (minsym)
1937         sr4export = SYMBOL_VALUE_ADDRESS (minsym);
1938       else
1939         sr4export = -1;
1940     }
1941
1942   if (pc == dyncall || pc == sr4export)
1943     return 1;
1944
1945   /* Get the unwind descriptor corresponding to PC, return zero
1946      if no unwind was found.  */
1947   u = find_unwind_entry (pc);
1948   if (!u)
1949     return 0;
1950
1951   /* If this isn't a linker stub, then return now.  */
1952   if (u->stub_type == 0)
1953     return 0;
1954
1955   /* By definition a long-branch stub is a call stub.  */
1956   if (u->stub_type == LONG_BRANCH)
1957     return 1;
1958
1959   /* The call and return path execute the same instructions within
1960      an IMPORT stub!  So an IMPORT stub is both a call and return
1961      trampoline.  */
1962   if (u->stub_type == IMPORT)
1963     return 1;
1964
1965   /* Parameter relocation stubs always have a call path and may have a
1966      return path.  */
1967   if (u->stub_type == PARAMETER_RELOCATION
1968       || u->stub_type == EXPORT)
1969     {
1970       CORE_ADDR addr;
1971
1972       /* Search forward from the current PC until we hit a branch
1973          or the end of the stub.  */
1974       for (addr = pc; addr <= u->region_end; addr += 4)
1975         {
1976           unsigned long insn;
1977
1978           insn = read_memory_integer (addr, 4);
1979
1980           /* Does it look like a bl?  If so then it's the call path, if
1981              we find a bv or be first, then we're on the return path.  */
1982           if ((insn & 0xfc00e000) == 0xe8000000)
1983             return 1;
1984           else if ((insn & 0xfc00e001) == 0xe800c000
1985                    || (insn & 0xfc000000) == 0xe0000000)
1986             return 0;
1987         }
1988
1989       /* Should never happen.  */
1990       warning ("Unable to find branch in parameter relocation stub.\n");
1991       return 0;
1992     }
1993
1994   /* Unknown stub type.  For now, just return zero.  */
1995   return 0;
1996 }
1997
1998 /* Return one if PC is in the return path of a trampoline, else return zero.
1999
2000    Note we return one for *any* call trampoline (long-call, arg-reloc), not
2001    just shared library trampolines (import, export).  */
2002
2003 int
2004 in_solib_return_trampoline (pc, name)
2005      CORE_ADDR pc;
2006      char *name;
2007 {
2008   struct unwind_table_entry *u;
2009
2010   /* Get the unwind descriptor corresponding to PC, return zero
2011      if no unwind was found.  */
2012   u = find_unwind_entry (pc);
2013   if (!u)
2014     return 0;
2015
2016   /* If this isn't a linker stub or it's just a long branch stub, then
2017      return zero.  */
2018   if (u->stub_type == 0 || u->stub_type == LONG_BRANCH)
2019     return 0;
2020
2021   /* The call and return path execute the same instructions within
2022      an IMPORT stub!  So an IMPORT stub is both a call and return
2023      trampoline.  */
2024   if (u->stub_type == IMPORT)
2025     return 1;
2026
2027   /* Parameter relocation stubs always have a call path and may have a
2028      return path.  */
2029   if (u->stub_type == PARAMETER_RELOCATION
2030       || u->stub_type == EXPORT)
2031     {
2032       CORE_ADDR addr;
2033
2034       /* Search forward from the current PC until we hit a branch
2035          or the end of the stub.  */
2036       for (addr = pc; addr <= u->region_end; addr += 4)
2037         {
2038           unsigned long insn;
2039
2040           insn = read_memory_integer (addr, 4);
2041
2042           /* Does it look like a bl?  If so then it's the call path, if
2043              we find a bv or be first, then we're on the return path.  */
2044           if ((insn & 0xfc00e000) == 0xe8000000)
2045             return 0;
2046           else if ((insn & 0xfc00e001) == 0xe800c000
2047                    || (insn & 0xfc000000) == 0xe0000000)
2048             return 1;
2049         }
2050
2051       /* Should never happen.  */
2052       warning ("Unable to find branch in parameter relocation stub.\n");
2053       return 0;
2054     }
2055
2056   /* Unknown stub type.  For now, just return zero.  */
2057   return 0;
2058
2059 }
2060
2061 /* Figure out if PC is in a trampoline, and if so find out where
2062    the trampoline will jump to.  If not in a trampoline, return zero.
2063
2064    Simple code examination probably is not a good idea since the code
2065    sequences in trampolines can also appear in user code.
2066
2067    We use unwinds and information from the minimal symbol table to
2068    determine when we're in a trampoline.  This won't work for ELF
2069    (yet) since it doesn't create stub unwind entries.  Whether or
2070    not ELF will create stub unwinds or normal unwinds for linker
2071    stubs is still being debated.
2072
2073    This should handle simple calls through dyncall or sr4export,
2074    long calls, argument relocation stubs, and dyncall/sr4export
2075    calling an argument relocation stub.  It even handles some stubs
2076    used in dynamic executables.  */
2077
2078 CORE_ADDR
2079 skip_trampoline_code (pc, name)
2080      CORE_ADDR pc;
2081      char *name;
2082 {
2083   long orig_pc = pc;
2084   long prev_inst, curr_inst, loc;
2085   static CORE_ADDR dyncall = 0;
2086   static CORE_ADDR sr4export = 0;
2087   struct minimal_symbol *msym;
2088   struct unwind_table_entry *u;
2089
2090 /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
2091    new exec file */
2092
2093   if (!dyncall)
2094     {
2095       msym = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
2096       if (msym)
2097         dyncall = SYMBOL_VALUE_ADDRESS (msym);
2098       else
2099         dyncall = -1;
2100     }
2101
2102   if (!sr4export)
2103     {
2104       msym = lookup_minimal_symbol ("_sr4export", NULL, NULL);
2105       if (msym)
2106         sr4export = SYMBOL_VALUE_ADDRESS (msym);
2107       else
2108         sr4export = -1;
2109     }
2110
2111   /* Addresses passed to dyncall may *NOT* be the actual address
2112      of the function.  So we may have to do something special.  */
2113   if (pc == dyncall)
2114     {
2115       pc = (CORE_ADDR) read_register (22);
2116
2117       /* If bit 30 (counting from the left) is on, then pc is the address of
2118          the PLT entry for this function, not the address of the function
2119          itself.  Bit 31 has meaning too, but only for MPE.  */
2120       if (pc & 0x2)
2121         pc = (CORE_ADDR) read_memory_integer (pc & ~0x3, 4);
2122     }
2123   else if (pc == sr4export)
2124     pc = (CORE_ADDR) (read_register (22));
2125
2126   /* Get the unwind descriptor corresponding to PC, return zero
2127      if no unwind was found.  */
2128   u = find_unwind_entry (pc);
2129   if (!u)
2130     return 0;
2131
2132   /* If this isn't a linker stub, then return now.  */
2133   if (u->stub_type == 0)
2134     return orig_pc == pc ? 0 : pc & ~0x3;
2135
2136   /* It's a stub.  Search for a branch and figure out where it goes.
2137      Note we have to handle multi insn branch sequences like ldil;ble.
2138      Most (all?) other branches can be determined by examining the contents
2139      of certain registers and the stack.  */
2140   loc = pc;
2141   curr_inst = 0;
2142   prev_inst = 0;
2143   while (1)
2144     {
2145       /* Make sure we haven't walked outside the range of this stub.  */
2146       if (u != find_unwind_entry (loc))
2147         {
2148           warning ("Unable to find branch in linker stub");
2149           return orig_pc == pc ? 0 : pc & ~0x3;
2150         }
2151
2152       prev_inst = curr_inst;
2153       curr_inst = read_memory_integer (loc, 4);
2154
2155       /* Does it look like a branch external using %r1?  Then it's the
2156          branch from the stub to the actual function.  */
2157       if ((curr_inst & 0xffe0e000) == 0xe0202000)
2158         {
2159           /* Yup.  See if the previous instruction loaded
2160              a value into %r1.  If so compute and return the jump address.  */
2161           if ((prev_inst & 0xffe00000) == 0x20200000)
2162             return (extract_21 (prev_inst) + extract_17 (curr_inst)) & ~0x3;
2163           else
2164             {
2165               warning ("Unable to find ldil X,%%r1 before ble Y(%%sr4,%%r1).");
2166               return orig_pc == pc ? 0 : pc & ~0x3;
2167             }
2168         }
2169
2170       /* Does it look like a be 0(sr0,%r21)?  That's the branch from an
2171          import stub to an export stub.
2172
2173          It is impossible to determine the target of the branch via
2174          simple examination of instructions and/or data (consider
2175          that the address in the plabel may be the address of the
2176          bind-on-reference routine in the dynamic loader).
2177
2178          So we have try an alternative approach.
2179
2180          Get the name of the symbol at our current location; it should
2181          be a stub symbol with the same name as the symbol in the
2182          shared library.
2183
2184          Then lookup a minimal symbol with the same name; we should
2185          get the minimal symbol for the target routine in the shared
2186          library as those take precedence of import/export stubs.  */
2187       if (curr_inst == 0xe2a00000)
2188         {
2189           struct minimal_symbol *stubsym, *libsym;
2190
2191           stubsym = lookup_minimal_symbol_by_pc (loc);
2192           if (stubsym == NULL)
2193             {
2194               warning ("Unable to find symbol for 0x%x", loc);
2195               return orig_pc == pc ? 0 : pc & ~0x3;
2196             }
2197
2198           libsym = lookup_minimal_symbol (SYMBOL_NAME (stubsym), NULL, NULL);
2199           if (libsym == NULL)
2200             {
2201               warning ("Unable to find library symbol for %s\n",
2202                        SYMBOL_NAME (stubsym));
2203               return orig_pc == pc ? 0 : pc & ~0x3;
2204             }
2205
2206           return SYMBOL_VALUE (libsym);
2207         }
2208
2209       /* Does it look like bl X,%rp or bl X,%r0?  Another way to do a
2210          branch from the stub to the actual function.  */
2211       else if ((curr_inst & 0xffe0e000) == 0xe8400000
2212                || (curr_inst & 0xffe0e000) == 0xe8000000)
2213         return (loc + extract_17 (curr_inst) + 8) & ~0x3;
2214
2215       /* Does it look like bv (rp)?   Note this depends on the
2216          current stack pointer being the same as the stack
2217          pointer in the stub itself!  This is a branch on from the
2218          stub back to the original caller.  */
2219       else if ((curr_inst & 0xffe0e000) == 0xe840c000)
2220         {
2221           /* Yup.  See if the previous instruction loaded
2222              rp from sp - 8.  */
2223           if (prev_inst == 0x4bc23ff1)
2224             return (read_memory_integer
2225                     (read_register (SP_REGNUM) - 8, 4)) & ~0x3;
2226           else
2227             {
2228               warning ("Unable to find restore of %%rp before bv (%%rp).");
2229               return orig_pc == pc ? 0 : pc & ~0x3;
2230             }
2231         }
2232
2233       /* What about be,n 0(sr0,%rp)?  It's just another way we return to
2234          the original caller from the stub.  Used in dynamic executables.  */
2235       else if (curr_inst == 0xe0400002)
2236         {
2237           /* The value we jump to is sitting in sp - 24.  But that's
2238              loaded several instructions before the be instruction.
2239              I guess we could check for the previous instruction being
2240              mtsp %r1,%sr0 if we want to do sanity checking.  */
2241           return (read_memory_integer 
2242                   (read_register (SP_REGNUM) - 24, 4)) & ~0x3;
2243         }
2244
2245       /* Haven't found the branch yet, but we're still in the stub.
2246          Keep looking.  */
2247       loc += 4;
2248     }
2249 }
2250
2251 /* For the given instruction (INST), return any adjustment it makes
2252    to the stack pointer or zero for no adjustment. 
2253
2254    This only handles instructions commonly found in prologues.  */
2255
2256 static int
2257 prologue_inst_adjust_sp (inst)
2258      unsigned long inst;
2259 {
2260   /* This must persist across calls.  */
2261   static int save_high21;
2262
2263   /* The most common way to perform a stack adjustment ldo X(sp),sp */
2264   if ((inst & 0xffffc000) == 0x37de0000)
2265     return extract_14 (inst);
2266
2267   /* stwm X,D(sp) */
2268   if ((inst & 0xffe00000) == 0x6fc00000)
2269     return extract_14 (inst);
2270
2271   /* addil high21,%r1; ldo low11,(%r1),%r30)
2272      save high bits in save_high21 for later use.  */
2273   if ((inst & 0xffe00000) == 0x28200000)
2274     {
2275       save_high21 = extract_21 (inst);
2276       return 0;
2277     }
2278
2279   if ((inst & 0xffff0000) == 0x343e0000)
2280     return save_high21 + extract_14 (inst);
2281
2282   /* fstws as used by the HP compilers.  */
2283   if ((inst & 0xffffffe0) == 0x2fd01220)
2284     return extract_5_load (inst);
2285
2286   /* No adjustment.  */
2287   return 0;
2288 }
2289
2290 /* Return nonzero if INST is a branch of some kind, else return zero.  */
2291
2292 static int
2293 is_branch (inst)
2294      unsigned long inst;
2295 {
2296   switch (inst >> 26)
2297     {
2298     case 0x20:
2299     case 0x21:
2300     case 0x22:
2301     case 0x23:
2302     case 0x28:
2303     case 0x29:
2304     case 0x2a:
2305     case 0x2b:
2306     case 0x30:
2307     case 0x31:
2308     case 0x32:
2309     case 0x33:
2310     case 0x38:
2311     case 0x39:
2312     case 0x3a:
2313       return 1;
2314
2315     default:
2316       return 0;
2317     }
2318 }
2319
2320 /* Return the register number for a GR which is saved by INST or
2321    zero it INST does not save a GR.  */
2322
2323 static int
2324 inst_saves_gr (inst)
2325      unsigned long inst;
2326 {
2327   /* Does it look like a stw?  */
2328   if ((inst >> 26) == 0x1a)
2329     return extract_5R_store (inst);
2330
2331   /* Does it look like a stwm?  GCC & HPC may use this in prologues. */
2332   if ((inst >> 26) == 0x1b)
2333     return extract_5R_store (inst);
2334
2335   /* Does it look like sth or stb?  HPC versions 9.0 and later use these
2336      too.  */
2337   if ((inst >> 26) == 0x19 || (inst >> 26) == 0x18)
2338     return extract_5R_store (inst);
2339       
2340   return 0;
2341 }
2342
2343 /* Return the register number for a FR which is saved by INST or
2344    zero it INST does not save a FR.
2345
2346    Note we only care about full 64bit register stores (that's the only
2347    kind of stores the prologue will use).
2348
2349    FIXME: What about argument stores with the HP compiler in ANSI mode? */
2350
2351 static int
2352 inst_saves_fr (inst)
2353      unsigned long inst;
2354 {
2355   if ((inst & 0xfc00dfc0) == 0x2c001200)
2356     return extract_5r_store (inst);
2357   return 0;
2358 }
2359
2360 /* Advance PC across any function entry prologue instructions
2361    to reach some "real" code. 
2362
2363    Use information in the unwind table to determine what exactly should
2364    be in the prologue.  */
2365
2366 CORE_ADDR
2367 skip_prologue (pc)
2368      CORE_ADDR pc;
2369 {
2370   char buf[4];
2371   CORE_ADDR orig_pc = pc;
2372   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
2373   unsigned long args_stored, status, i, restart_gr, restart_fr;
2374   struct unwind_table_entry *u;
2375
2376   restart_gr = 0;
2377   restart_fr = 0;
2378
2379 restart:
2380   u = find_unwind_entry (pc);
2381   if (!u)
2382     return pc;
2383
2384   /* If we are not at the beginning of a function, then return now.  */
2385   if ((pc & ~0x3) != u->region_start)
2386     return pc;
2387
2388   /* This is how much of a frame adjustment we need to account for.  */
2389   stack_remaining = u->Total_frame_size << 3;
2390
2391   /* Magic register saves we want to know about.  */
2392   save_rp = u->Save_RP;
2393   save_sp = u->Save_SP;
2394
2395   /* An indication that args may be stored into the stack.  Unfortunately
2396      the HPUX compilers tend to set this in cases where no args were
2397      stored too!.  */
2398   args_stored = 1;
2399
2400   /* Turn the Entry_GR field into a bitmask.  */
2401   save_gr = 0;
2402   for (i = 3; i < u->Entry_GR + 3; i++)
2403     {
2404       /* Frame pointer gets saved into a special location.  */
2405       if (u->Save_SP && i == FP_REGNUM)
2406         continue;
2407
2408       save_gr |= (1 << i);
2409     }
2410   save_gr &= ~restart_gr;
2411
2412   /* Turn the Entry_FR field into a bitmask too.  */
2413   save_fr = 0;
2414   for (i = 12; i < u->Entry_FR + 12; i++)
2415     save_fr |= (1 << i);
2416   save_fr &= ~restart_fr;
2417
2418   /* Loop until we find everything of interest or hit a branch.
2419
2420      For unoptimized GCC code and for any HP CC code this will never ever
2421      examine any user instructions.
2422
2423      For optimzied GCC code we're faced with problems.  GCC will schedule
2424      its prologue and make prologue instructions available for delay slot
2425      filling.  The end result is user code gets mixed in with the prologue
2426      and a prologue instruction may be in the delay slot of the first branch
2427      or call.
2428
2429      Some unexpected things are expected with debugging optimized code, so
2430      we allow this routine to walk past user instructions in optimized
2431      GCC code.  */
2432   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0
2433          || args_stored)
2434     {
2435       unsigned int reg_num;
2436       unsigned long old_stack_remaining, old_save_gr, old_save_fr;
2437       unsigned long old_save_rp, old_save_sp, next_inst;
2438
2439       /* Save copies of all the triggers so we can compare them later
2440          (only for HPC).  */
2441       old_save_gr = save_gr;
2442       old_save_fr = save_fr;
2443       old_save_rp = save_rp;
2444       old_save_sp = save_sp;
2445       old_stack_remaining = stack_remaining;
2446
2447       status = target_read_memory (pc, buf, 4);
2448       inst = extract_unsigned_integer (buf, 4);
2449        
2450       /* Yow! */
2451       if (status != 0)
2452         return pc;
2453
2454       /* Note the interesting effects of this instruction.  */
2455       stack_remaining -= prologue_inst_adjust_sp (inst);
2456
2457       /* There is only one instruction used for saving RP into the stack.  */
2458       if (inst == 0x6bc23fd9)
2459         save_rp = 0;
2460
2461       /* This is the only way we save SP into the stack.  At this time
2462          the HP compilers never bother to save SP into the stack.  */
2463       if ((inst & 0xffffc000) == 0x6fc10000)
2464         save_sp = 0;
2465
2466       /* Account for general and floating-point register saves.  */
2467       reg_num = inst_saves_gr (inst);
2468       save_gr &= ~(1 << reg_num);
2469
2470       /* Ugh.  Also account for argument stores into the stack.
2471          Unfortunately args_stored only tells us that some arguments
2472          where stored into the stack.  Not how many or what kind!
2473
2474          This is a kludge as on the HP compiler sets this bit and it
2475          never does prologue scheduling.  So once we see one, skip past
2476          all of them.   We have similar code for the fp arg stores below.
2477
2478          FIXME.  Can still die if we have a mix of GR and FR argument
2479          stores!  */
2480       if (reg_num >= 23 && reg_num <= 26)
2481         {
2482           while (reg_num >= 23 && reg_num <= 26)
2483             {
2484               pc += 4;
2485               status = target_read_memory (pc, buf, 4);
2486               inst = extract_unsigned_integer (buf, 4);
2487               if (status != 0)
2488                 return pc;
2489               reg_num = inst_saves_gr (inst);
2490             }
2491           args_stored = 0;
2492           continue;
2493         }
2494
2495       reg_num = inst_saves_fr (inst);
2496       save_fr &= ~(1 << reg_num);
2497
2498       status = target_read_memory (pc + 4, buf, 4);
2499       next_inst = extract_unsigned_integer (buf, 4);
2500        
2501       /* Yow! */
2502       if (status != 0)
2503         return pc;
2504
2505       /* We've got to be read to handle the ldo before the fp register
2506          save.  */
2507       if ((inst & 0xfc000000) == 0x34000000
2508           && inst_saves_fr (next_inst) >= 4
2509           && inst_saves_fr (next_inst) <= 7)
2510         {
2511           /* So we drop into the code below in a reasonable state.  */
2512           reg_num = inst_saves_fr (next_inst);
2513           pc -= 4;
2514         }
2515
2516       /* Ugh.  Also account for argument stores into the stack.
2517          This is a kludge as on the HP compiler sets this bit and it
2518          never does prologue scheduling.  So once we see one, skip past
2519          all of them.  */
2520       if (reg_num >= 4 && reg_num <= 7)
2521         {
2522           while (reg_num >= 4 && reg_num <= 7)
2523             {
2524               pc += 8;
2525               status = target_read_memory (pc, buf, 4);
2526               inst = extract_unsigned_integer (buf, 4);
2527               if (status != 0)
2528                 return pc;
2529               if ((inst & 0xfc000000) != 0x34000000)
2530                 break;
2531               status = target_read_memory (pc + 4, buf, 4);
2532               next_inst = extract_unsigned_integer (buf, 4);
2533               if (status != 0)
2534                 return pc;
2535               reg_num = inst_saves_fr (next_inst);
2536             }
2537           args_stored = 0;
2538           continue;
2539         }
2540
2541       /* Quit if we hit any kind of branch.  This can happen if a prologue
2542          instruction is in the delay slot of the first call/branch.  */
2543       if (is_branch (inst))
2544         break;
2545
2546       /* What a crock.  The HP compilers set args_stored even if no
2547          arguments were stored into the stack (boo hiss).  This could
2548          cause this code to then skip a bunch of user insns (up to the
2549          first branch).
2550
2551          To combat this we try to identify when args_stored was bogusly
2552          set and clear it.   We only do this when args_stored is nonzero,
2553          all other resources are accounted for, and nothing changed on
2554          this pass.  */
2555       if (args_stored
2556           && ! (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
2557           && old_save_gr == save_gr && old_save_fr == save_fr
2558           && old_save_rp == save_rp && old_save_sp == save_sp
2559           && old_stack_remaining == stack_remaining)
2560         break;
2561       
2562       /* Bump the PC.  */
2563       pc += 4;
2564     }
2565
2566   /* We've got a tenative location for the end of the prologue.  However
2567      because of limitations in the unwind descriptor mechanism we may
2568      have went too far into user code looking for the save of a register
2569      that does not exist.  So, if there registers we expected to be saved
2570      but never were, mask them out and restart.
2571
2572      This should only happen in optimized code, and should be very rare.  */
2573   if (save_gr || (save_fr && ! (restart_fr || restart_gr)))
2574     {
2575       pc = orig_pc;
2576       restart_gr = save_gr;
2577       restart_fr = save_fr;
2578       goto restart;
2579     }
2580
2581   return pc;
2582 }
2583
2584 /* Put here the code to store, into a struct frame_saved_regs,
2585    the addresses of the saved registers of frame described by FRAME_INFO.
2586    This includes special registers such as pc and fp saved in special
2587    ways in the stack frame.  sp is even more special:
2588    the address we return for it IS the sp for the next frame.  */
2589
2590 void
2591 hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
2592      struct frame_info *frame_info;
2593      struct frame_saved_regs *frame_saved_regs;
2594 {
2595   CORE_ADDR pc;
2596   struct unwind_table_entry *u;
2597   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
2598   int status, i, reg;
2599   char buf[4];
2600   int fp_loc = -1;
2601
2602   /* Zero out everything.  */
2603   memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
2604
2605   /* Call dummy frames always look the same, so there's no need to
2606      examine the dummy code to determine locations of saved registers;
2607      instead, let find_dummy_frame_regs fill in the correct offsets
2608      for the saved registers.  */
2609   if ((frame_info->pc >= frame_info->frame
2610        && frame_info->pc <= (frame_info->frame + CALL_DUMMY_LENGTH
2611                              + 32 * 4 +  (NUM_REGS - FP0_REGNUM) * 8
2612                              + 6 * 4))) 
2613     find_dummy_frame_regs (frame_info, frame_saved_regs);
2614
2615   /* Interrupt handlers are special too.  They lay out the register
2616      state in the exact same order as the register numbers in GDB.  */
2617   if (pc_in_interrupt_handler (frame_info->pc))
2618     {
2619       for (i = 0; i < NUM_REGS; i++)
2620         {
2621           /* SP is a little special.  */
2622           if (i == SP_REGNUM)
2623             frame_saved_regs->regs[SP_REGNUM]
2624               = read_memory_integer (frame_info->frame + SP_REGNUM * 4, 4);
2625           else
2626             frame_saved_regs->regs[i] = frame_info->frame + i * 4;
2627         }
2628       return;
2629     }
2630
2631 #ifdef FRAME_FIND_SAVED_REGS_IN_SIGTRAMP
2632   /* Handle signal handler callers.  */
2633   if (frame_info->signal_handler_caller)
2634     {
2635       FRAME_FIND_SAVED_REGS_IN_SIGTRAMP (frame_info, frame_saved_regs);
2636       return;
2637     }
2638 #endif
2639
2640   /* Get the starting address of the function referred to by the PC
2641      saved in frame.  */
2642   pc = get_pc_function_start (frame_info->pc);
2643
2644   /* Yow! */
2645   u = find_unwind_entry (pc);
2646   if (!u)
2647     return;
2648
2649   /* This is how much of a frame adjustment we need to account for.  */
2650   stack_remaining = u->Total_frame_size << 3;
2651
2652   /* Magic register saves we want to know about.  */
2653   save_rp = u->Save_RP;
2654   save_sp = u->Save_SP;
2655
2656   /* Turn the Entry_GR field into a bitmask.  */
2657   save_gr = 0;
2658   for (i = 3; i < u->Entry_GR + 3; i++)
2659     {
2660       /* Frame pointer gets saved into a special location.  */
2661       if (u->Save_SP && i == FP_REGNUM)
2662         continue;
2663
2664       save_gr |= (1 << i);
2665     }
2666
2667   /* Turn the Entry_FR field into a bitmask too.  */
2668   save_fr = 0;
2669   for (i = 12; i < u->Entry_FR + 12; i++)
2670     save_fr |= (1 << i);
2671
2672   /* The frame always represents the value of %sp at entry to the
2673      current function (and is thus equivalent to the "saved" stack
2674      pointer.  */
2675   frame_saved_regs->regs[SP_REGNUM] = frame_info->frame;
2676
2677   /* Loop until we find everything of interest or hit a branch.
2678
2679      For unoptimized GCC code and for any HP CC code this will never ever
2680      examine any user instructions.
2681
2682      For optimzied GCC code we're faced with problems.  GCC will schedule
2683      its prologue and make prologue instructions available for delay slot
2684      filling.  The end result is user code gets mixed in with the prologue
2685      and a prologue instruction may be in the delay slot of the first branch
2686      or call.
2687
2688      Some unexpected things are expected with debugging optimized code, so
2689      we allow this routine to walk past user instructions in optimized
2690      GCC code.  */
2691   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
2692     {
2693       status = target_read_memory (pc, buf, 4);
2694       inst = extract_unsigned_integer (buf, 4);
2695
2696       /* Yow! */
2697       if (status != 0)
2698         return;
2699
2700       /* Note the interesting effects of this instruction.  */
2701       stack_remaining -= prologue_inst_adjust_sp (inst);
2702
2703       /* There is only one instruction used for saving RP into the stack.  */
2704       if (inst == 0x6bc23fd9)
2705         {
2706           save_rp = 0;
2707           frame_saved_regs->regs[RP_REGNUM] = frame_info->frame - 20;
2708         }
2709
2710       /* Just note that we found the save of SP into the stack.  The
2711          value for frame_saved_regs was computed above.  */
2712       if ((inst & 0xffffc000) == 0x6fc10000)
2713         save_sp = 0;
2714
2715       /* Account for general and floating-point register saves.  */
2716       reg = inst_saves_gr (inst);
2717       if (reg >= 3 && reg <= 18
2718           && (!u->Save_SP || reg != FP_REGNUM))
2719         {
2720           save_gr &= ~(1 << reg);
2721
2722           /* stwm with a positive displacement is a *post modify*.  */
2723           if ((inst >> 26) == 0x1b
2724               && extract_14 (inst) >= 0)
2725             frame_saved_regs->regs[reg] = frame_info->frame;
2726           else
2727             {
2728               /* Handle code with and without frame pointers.  */
2729               if (u->Save_SP)
2730                 frame_saved_regs->regs[reg]
2731                   = frame_info->frame + extract_14 (inst);
2732               else
2733                 frame_saved_regs->regs[reg]
2734                   = frame_info->frame + (u->Total_frame_size << 3)
2735                     + extract_14 (inst);
2736             }
2737         }
2738
2739
2740       /* GCC handles callee saved FP regs a little differently.  
2741
2742          It emits an instruction to put the value of the start of
2743          the FP store area into %r1.  It then uses fstds,ma with
2744          a basereg of %r1 for the stores.
2745
2746          HP CC emits them at the current stack pointer modifying
2747          the stack pointer as it stores each register.  */
2748
2749       /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
2750       if ((inst & 0xffffc000) == 0x34610000
2751           || (inst & 0xffffc000) == 0x37c10000)
2752         fp_loc = extract_14 (inst);
2753         
2754       reg = inst_saves_fr (inst);
2755       if (reg >= 12 && reg <= 21)
2756         {
2757           /* Note +4 braindamage below is necessary because the FP status
2758              registers are internally 8 registers rather than the expected
2759              4 registers.  */
2760           save_fr &= ~(1 << reg);
2761           if (fp_loc == -1)
2762             {
2763               /* 1st HP CC FP register store.  After this instruction
2764                  we've set enough state that the GCC and HPCC code are
2765                  both handled in the same manner.  */
2766               frame_saved_regs->regs[reg + FP4_REGNUM + 4] = frame_info->frame;
2767               fp_loc = 8;
2768             }
2769           else
2770             {
2771               frame_saved_regs->regs[reg + FP0_REGNUM + 4]
2772                 = frame_info->frame + fp_loc;
2773               fp_loc += 8;
2774             }
2775         }
2776
2777       /* Quit if we hit any kind of branch.  This can happen if a prologue
2778          instruction is in the delay slot of the first call/branch.  */
2779       if (is_branch (inst))
2780         break;
2781
2782       /* Bump the PC.  */
2783       pc += 4;
2784     }
2785 }
2786
2787 #ifdef MAINTENANCE_CMDS
2788
2789 static void
2790 unwind_command (exp, from_tty)
2791      char *exp;
2792      int from_tty;
2793 {
2794   CORE_ADDR address;
2795   struct unwind_table_entry *u;
2796
2797   /* If we have an expression, evaluate it and use it as the address.  */
2798
2799   if (exp != 0 && *exp != 0)
2800     address = parse_and_eval_address (exp);
2801   else
2802     return;
2803
2804   u = find_unwind_entry (address);
2805
2806   if (!u)
2807     {
2808       printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
2809       return;
2810     }
2811
2812   printf_unfiltered ("unwind_table_entry (0x%x):\n", u);
2813
2814   printf_unfiltered ("\tregion_start = ");
2815   print_address (u->region_start, gdb_stdout);
2816
2817   printf_unfiltered ("\n\tregion_end = ");
2818   print_address (u->region_end, gdb_stdout);
2819
2820 #ifdef __STDC__
2821 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
2822 #else
2823 #define pif(FLD) if (u->FLD) printf_unfiltered (" FLD");
2824 #endif
2825
2826   printf_unfiltered ("\n\tflags =");
2827   pif (Cannot_unwind);
2828   pif (Millicode);
2829   pif (Millicode_save_sr0);
2830   pif (Entry_SR);
2831   pif (Args_stored);
2832   pif (Variable_Frame);
2833   pif (Separate_Package_Body);
2834   pif (Frame_Extension_Millicode);
2835   pif (Stack_Overflow_Check);
2836   pif (Two_Instruction_SP_Increment);
2837   pif (Ada_Region);
2838   pif (Save_SP);
2839   pif (Save_RP);
2840   pif (Save_MRP_in_frame);
2841   pif (extn_ptr_defined);
2842   pif (Cleanup_defined);
2843   pif (MPE_XL_interrupt_marker);
2844   pif (HP_UX_interrupt_marker);
2845   pif (Large_frame);
2846
2847   putchar_unfiltered ('\n');
2848
2849 #ifdef __STDC__
2850 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
2851 #else
2852 #define pin(FLD) printf_unfiltered ("\tFLD = 0x%x\n", u->FLD);
2853 #endif
2854
2855   pin (Region_description);
2856   pin (Entry_FR);
2857   pin (Entry_GR);
2858   pin (Total_frame_size);
2859 }
2860 #endif /* MAINTENANCE_CMDS */
2861
2862 void
2863 _initialize_hppa_tdep ()
2864 {
2865   tm_print_insn = print_insn_hppa;
2866
2867 #ifdef MAINTENANCE_CMDS
2868   add_cmd ("unwind", class_maintenance, unwind_command,
2869            "Print unwind table entry at given address.",
2870            &maintenanceprintlist);
2871 #endif /* MAINTENANCE_CMDS */
2872 }