* hppa-tdep.c (skip_trampoline_code): Handle argument relocation
[external/binutils.git] / gdb / hppa-tdep.c
1 /* Machine-dependent code which would otherwise be in inflow.c and core.c,
2    for GDB, the GNU debugger.  This code is for the HP PA-RISC cpu.
3    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993 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., 675 Mass Ave, Cambridge, MA 02139, 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 <sys/dir.h>
38 #include <signal.h>
39 #include <sys/ioctl.h>
40
41 #ifdef COFF_ENCAPSULATE
42 #include "a.out.encap.h"
43 #else
44 #include <a.out.h>
45 #endif
46 #ifndef N_SET_MAGIC
47 #define N_SET_MAGIC(exec, val) ((exec).a_magic = (val))
48 #endif
49
50 /*#include <sys/user.h>         After a.out.h  */
51 #include <sys/file.h>
52 #include <sys/stat.h>
53 #include <machine/psl.h>
54 #include "wait.h"
55
56 #include "gdbcore.h"
57 #include "gdbcmd.h"
58 #include "target.h"
59 #include "symfile.h"
60 #include "objfiles.h"
61
62 static int restore_pc_queue PARAMS ((struct frame_saved_regs *fsr));
63 static int hppa_alignof PARAMS ((struct type *arg));
64 CORE_ADDR frame_saved_pc PARAMS ((FRAME frame));
65 static int prologue_inst_adjust_sp PARAMS ((unsigned long));
66 static int is_branch PARAMS ((unsigned long));
67 static int inst_saves_gr PARAMS ((unsigned long));
68 static int inst_saves_fr PARAMS ((unsigned long));
69 static int pc_in_interrupt_handler PARAMS ((CORE_ADDR));
70 static int pc_in_linker_stub PARAMS ((CORE_ADDR));
71 static int compare_unwind_entries PARAMS ((struct unwind_table_entry *,   
72                                            struct unwind_table_entry *));
73 static void read_unwind_info PARAMS ((struct objfile *));
74 static void internalize_unwinds PARAMS ((struct objfile *,
75                                          struct unwind_table_entry *,
76                                          asection *, unsigned int,
77                                          unsigned int));
78
79 \f
80 /* Routines to extract various sized constants out of hppa 
81    instructions. */
82
83 /* This assumes that no garbage lies outside of the lower bits of 
84    value. */
85
86 int
87 sign_extend (val, bits)
88      unsigned val, bits;
89 {
90   return (int)(val >> bits - 1 ? (-1 << bits) | val : val);
91 }
92
93 /* For many immediate values the sign bit is the low bit! */
94
95 int
96 low_sign_extend (val, bits)
97      unsigned val, bits;
98 {
99   return (int)((val & 0x1 ? (-1 << (bits - 1)) : 0) | val >> 1);
100 }
101 /* extract the immediate field from a ld{bhw}s instruction */
102
103 unsigned
104 get_field (val, from, to)
105      unsigned val, from, to;
106 {
107   val = val >> 31 - to;
108   return val & ((1 << 32 - from) - 1);
109 }
110
111 unsigned
112 set_field (val, from, to, new_val)
113      unsigned *val, from, to;
114 {
115   unsigned mask = ~((1 << (to - from + 1)) << (31 - from));
116   return *val = *val & mask | (new_val << (31 - from));
117 }
118
119 /* extract a 3-bit space register number from a be, ble, mtsp or mfsp */
120
121 extract_3 (word)
122      unsigned word;
123 {
124   return GET_FIELD (word, 18, 18) << 2 | GET_FIELD (word, 16, 17);
125 }
126        
127 extract_5_load (word)
128      unsigned word;
129 {
130   return low_sign_extend (word >> 16 & MASK_5, 5);
131 }
132
133 /* extract the immediate field from a st{bhw}s instruction */
134
135 int
136 extract_5_store (word)
137      unsigned word;
138 {
139   return low_sign_extend (word & MASK_5, 5);
140 }
141
142 /* extract the immediate field from a break instruction */
143
144 unsigned
145 extract_5r_store (word)
146      unsigned word;
147 {
148   return (word & MASK_5);
149 }
150
151 /* extract the immediate field from a {sr}sm instruction */
152
153 unsigned
154 extract_5R_store (word)
155      unsigned word;
156 {
157   return (word >> 16 & MASK_5);
158 }
159
160 /* extract an 11 bit immediate field */
161
162 int
163 extract_11 (word)
164      unsigned word;
165 {
166   return low_sign_extend (word & MASK_11, 11);
167 }
168
169 /* extract a 14 bit immediate field */
170
171 int
172 extract_14 (word)
173      unsigned word;
174 {
175   return low_sign_extend (word & MASK_14, 14);
176 }
177
178 /* deposit a 14 bit constant in a word */
179
180 unsigned
181 deposit_14 (opnd, word)
182      int opnd;
183      unsigned word;
184 {
185   unsigned sign = (opnd < 0 ? 1 : 0);
186
187   return word | ((unsigned)opnd << 1 & MASK_14)  | sign;
188 }
189
190 /* extract a 21 bit constant */
191
192 int
193 extract_21 (word)
194      unsigned word;
195 {
196   int val;
197
198   word &= MASK_21;
199   word <<= 11;
200   val = GET_FIELD (word, 20, 20);
201   val <<= 11;
202   val |= GET_FIELD (word, 9, 19);
203   val <<= 2;
204   val |= GET_FIELD (word, 5, 6);
205   val <<= 5;
206   val |= GET_FIELD (word, 0, 4);
207   val <<= 2;
208   val |= GET_FIELD (word, 7, 8);
209   return sign_extend (val, 21) << 11;
210 }
211
212 /* deposit a 21 bit constant in a word. Although 21 bit constants are
213    usually the top 21 bits of a 32 bit constant, we assume that only
214    the low 21 bits of opnd are relevant */
215
216 unsigned
217 deposit_21 (opnd, word)
218      unsigned opnd, word;
219 {
220   unsigned val = 0;
221
222   val |= GET_FIELD (opnd, 11 + 14, 11 + 18);
223   val <<= 2;
224   val |= GET_FIELD (opnd, 11 + 12, 11 + 13);
225   val <<= 2;
226   val |= GET_FIELD (opnd, 11 + 19, 11 + 20);
227   val <<= 11;
228   val |= GET_FIELD (opnd, 11 + 1, 11 + 11);
229   val <<= 1;
230   val |= GET_FIELD (opnd, 11 + 0, 11 + 0);
231   return word | val;
232 }
233
234 /* extract a 12 bit constant from branch instructions */
235
236 int
237 extract_12 (word)
238      unsigned word;
239 {
240   return sign_extend (GET_FIELD (word, 19, 28) |
241                       GET_FIELD (word, 29, 29) << 10 |
242                       (word & 0x1) << 11, 12) << 2;
243 }
244
245 /* extract a 17 bit constant from branch instructions, returning the
246    19 bit signed value. */
247
248 int
249 extract_17 (word)
250      unsigned word;
251 {
252   return sign_extend (GET_FIELD (word, 19, 28) |
253                       GET_FIELD (word, 29, 29) << 10 |
254                       GET_FIELD (word, 11, 15) << 11 |
255                       (word & 0x1) << 16, 17) << 2;
256 }
257 \f
258
259 /* Compare the start address for two unwind entries returning 1 if 
260    the first address is larger than the second, -1 if the second is
261    larger than the first, and zero if they are equal.  */
262
263 static int
264 compare_unwind_entries (a, b)
265      struct unwind_table_entry *a;
266      struct unwind_table_entry *b;
267 {
268   if (a->region_start > b->region_start)
269     return 1;
270   else if (a->region_start < b->region_start)
271     return -1;
272   else
273     return 0;
274 }
275
276 static void
277 internalize_unwinds (objfile, table, section, entries, size)
278      struct objfile *objfile;
279      struct unwind_table_entry *table;
280      asection *section;
281      unsigned int entries, size;
282 {
283   /* We will read the unwind entries into temporary memory, then
284      fill in the actual unwind table.  */
285   if (size > 0)
286     {
287       unsigned long tmp;
288       unsigned i;
289       char *buf = alloca (size);
290
291       bfd_get_section_contents (objfile->obfd, section, buf, 0, size);
292
293       /* Now internalize the information being careful to handle host/target
294          endian issues.  */
295       for (i = 0; i < entries; i++)
296         {
297           table[i].region_start = bfd_get_32 (objfile->obfd,
298                                                   (bfd_byte *)buf);
299           buf += 4;
300           table[i].region_end = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
301           buf += 4;
302           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
303           buf += 4;
304           table[i].Cannot_unwind = (tmp >> 31) & 0x1;;
305           table[i].Millicode = (tmp >> 30) & 0x1;
306           table[i].Millicode_save_sr0 = (tmp >> 29) & 0x1;
307           table[i].Region_description = (tmp >> 27) & 0x3;
308           table[i].reserved1 = (tmp >> 26) & 0x1;
309           table[i].Entry_SR = (tmp >> 25) & 0x1;
310           table[i].Entry_FR = (tmp >> 21) & 0xf;
311           table[i].Entry_GR = (tmp >> 16) & 0x1f;
312           table[i].Args_stored = (tmp >> 15) & 0x1;
313           table[i].Variable_Frame = (tmp >> 14) & 0x1;
314           table[i].Separate_Package_Body = (tmp >> 13) & 0x1;
315           table[i].Frame_Extension_Millicode = (tmp >> 12 ) & 0x1;
316           table[i].Stack_Overflow_Check = (tmp >> 11) & 0x1;
317           table[i].Two_Instruction_SP_Increment = (tmp >> 10) & 0x1;
318           table[i].Ada_Region = (tmp >> 9) & 0x1;
319           table[i].reserved2 = (tmp >> 5) & 0xf;
320           table[i].Save_SP = (tmp >> 4) & 0x1;
321           table[i].Save_RP = (tmp >> 3) & 0x1;
322           table[i].Save_MRP_in_frame = (tmp >> 2) & 0x1;
323           table[i].extn_ptr_defined = (tmp >> 1) & 0x1;
324           table[i].Cleanup_defined = tmp & 0x1;
325           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *)buf);
326           buf += 4;
327           table[i].MPE_XL_interrupt_marker = (tmp >> 31) & 0x1;
328           table[i].HP_UX_interrupt_marker = (tmp >> 30) & 0x1;
329           table[i].Large_frame = (tmp >> 29) & 0x1;
330           table[i].reserved4 = (tmp >> 27) & 0x3;
331           table[i].Total_frame_size = tmp & 0x7ffffff;
332         }
333     }
334 }
335
336 /* Read in the backtrace information stored in the `$UNWIND_START$' section of
337    the object file.  This info is used mainly by find_unwind_entry() to find
338    out the stack frame size and frame pointer used by procedures.  We put
339    everything on the psymbol obstack in the objfile so that it automatically
340    gets freed when the objfile is destroyed.  */
341
342 static void
343 read_unwind_info (objfile)
344      struct objfile *objfile;
345 {
346   asection *unwind_sec, *elf_unwind_sec, *stub_unwind_sec;
347   unsigned unwind_size, elf_unwind_size, stub_unwind_size, total_size;
348   unsigned index, unwind_entries, elf_unwind_entries;
349   unsigned stub_entries, total_entries;
350   struct obj_unwind_info *ui;
351
352   ui = obstack_alloc (&objfile->psymbol_obstack,
353                       sizeof (struct obj_unwind_info));
354
355   ui->table = NULL;
356   ui->cache = NULL;
357   ui->last = -1;
358
359   /* Get hooks to all unwind sections.   Note there is no linker-stub unwind
360      section in ELF at the moment.  */
361   unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_START$");
362   elf_unwind_sec = bfd_get_section_by_name (objfile->obfd, ".hppa_unwind");
363   stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
364
365   /* Get sizes and unwind counts for all sections.  */
366   if (unwind_sec)
367     {
368       unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
369       unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
370     }
371   else
372     {
373       unwind_size = 0;
374       unwind_entries = 0;
375     }
376
377   if (elf_unwind_sec)
378     {
379       elf_unwind_size = bfd_section_size (objfile->obfd, elf_unwind_sec);
380       elf_unwind_entries = elf_unwind_size / UNWIND_ENTRY_SIZE;
381     }
382
383   if (stub_unwind_sec)
384     {
385       stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
386       stub_entries = stub_unwind_size / STUB_UNWIND_ENTRY_SIZE;
387     }
388   else
389     {
390       stub_unwind_size = 0;
391       stub_entries = 0;
392     }
393
394   /* Compute total number of unwind entries and their total size.  */
395   total_entries = unwind_entries + elf_unwind_entries + stub_entries;
396   total_size = total_entries * sizeof (struct unwind_table_entry);
397
398   /* Allocate memory for the unwind table.  */
399   ui->table = obstack_alloc (&objfile->psymbol_obstack, total_size);
400   ui->last = total_entries - 1;
401
402   /* Internalize the standard unwind entries.  */
403   index = 0;
404   internalize_unwinds (objfile, &ui->table[index], unwind_sec,
405                        unwind_entries, unwind_size);
406   index += unwind_entries;
407   internalize_unwinds (objfile, &ui->table[index], elf_unwind_sec,
408                        elf_unwind_entries, elf_unwind_size);
409   index += elf_unwind_entries;
410
411   /* Now internalize the stub unwind entries.  */
412   if (stub_unwind_size > 0)
413     {
414       unsigned int i;
415       char *buf = alloca (stub_unwind_size);
416
417       /* Read in the stub unwind entries.  */
418       bfd_get_section_contents (objfile->obfd, stub_unwind_sec, buf,
419                                 0, stub_unwind_size);
420
421       /* Now convert them into regular unwind entries.  */
422       for (i = 0; i < stub_entries; i++, index++)
423         {
424           /* Clear out the next unwind entry.  */
425           memset (&ui->table[index], 0, sizeof (struct unwind_table_entry));
426
427           /* Convert offset & size into region_start and region_end.  
428              Stuff away the stub type into "reserved" fields.  */
429           ui->table[index].region_start = bfd_get_32 (objfile->obfd,
430                                                       (bfd_byte *) buf);
431           buf += 4;
432           ui->table[index].stub_type = bfd_get_8 (objfile->obfd,
433                                                   (bfd_byte *) buf);
434           buf += 2;
435           ui->table[index].region_end
436             = ui->table[index].region_start + 4 * 
437               (bfd_get_16 (objfile->obfd, (bfd_byte *) buf) - 1);
438           buf += 2;
439         }
440
441     }
442
443   /* Unwind table needs to be kept sorted.  */
444   qsort (ui->table, total_entries, sizeof (struct unwind_table_entry),
445          compare_unwind_entries);
446
447   /* Keep a pointer to the unwind information.  */
448   objfile->obj_private = (PTR) ui;
449 }
450
451 /* Lookup the unwind (stack backtrace) info for the given PC.  We search all
452    of the objfiles seeking the unwind table entry for this PC.  Each objfile
453    contains a sorted list of struct unwind_table_entry.  Since we do a binary
454    search of the unwind tables, we depend upon them to be sorted.  */
455
456 static struct unwind_table_entry *
457 find_unwind_entry(pc)
458      CORE_ADDR pc;
459 {
460   int first, middle, last;
461   struct objfile *objfile;
462
463   ALL_OBJFILES (objfile)
464     {
465       struct obj_unwind_info *ui;
466
467       ui = OBJ_UNWIND_INFO (objfile);
468
469       if (!ui)
470         {
471           read_unwind_info (objfile);
472           ui = OBJ_UNWIND_INFO (objfile);
473         }
474
475       /* First, check the cache */
476
477       if (ui->cache
478           && pc >= ui->cache->region_start
479           && pc <= ui->cache->region_end)
480         return ui->cache;
481
482       /* Not in the cache, do a binary search */
483
484       first = 0;
485       last = ui->last;
486
487       while (first <= last)
488         {
489           middle = (first + last) / 2;
490           if (pc >= ui->table[middle].region_start
491               && pc <= ui->table[middle].region_end)
492             {
493               ui->cache = &ui->table[middle];
494               return &ui->table[middle];
495             }
496
497           if (pc < ui->table[middle].region_start)
498             last = middle - 1;
499           else
500             first = middle + 1;
501         }
502     }                           /* ALL_OBJFILES() */
503   return NULL;
504 }
505
506 /* Called to determine if PC is in an interrupt handler of some
507    kind.  */
508
509 static int
510 pc_in_interrupt_handler (pc)
511      CORE_ADDR pc;
512 {
513   struct unwind_table_entry *u;
514   struct minimal_symbol *msym_us;
515
516   u = find_unwind_entry (pc);
517   if (!u)
518     return 0;
519
520   /* Oh joys.  HPUX sets the interrupt bit for _sigreturn even though
521      its frame isn't a pure interrupt frame.  Deal with this.  */
522   msym_us = lookup_minimal_symbol_by_pc (pc);
523
524   return u->HP_UX_interrupt_marker && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us));
525 }
526
527 /* Called when no unwind descriptor was found for PC.  Returns 1 if it
528    appears that PC is in a linker stub.  */
529
530 static int
531 pc_in_linker_stub (pc)
532      CORE_ADDR pc;
533 {
534   int found_magic_instruction = 0;
535   int i;
536   char buf[4];
537
538   /* If unable to read memory, assume pc is not in a linker stub.  */
539   if (target_read_memory (pc, buf, 4) != 0)
540     return 0;
541
542   /* We are looking for something like
543
544      ; $$dyncall jams RP into this special spot in the frame (RP')
545      ; before calling the "call stub"
546      ldw     -18(sp),rp
547
548      ldsid   (rp),r1         ; Get space associated with RP into r1
549      mtsp    r1,sp           ; Move it into space register 0
550      be,n    0(sr0),rp)      ; back to your regularly scheduled program
551      */
552
553   /* Maximum known linker stub size is 4 instructions.  Search forward
554      from the given PC, then backward.  */
555   for (i = 0; i < 4; i++)
556     {
557       /* If we hit something with an unwind, stop searching this direction.  */
558
559       if (find_unwind_entry (pc + i * 4) != 0)
560         break;
561
562       /* Check for ldsid (rp),r1 which is the magic instruction for a 
563          return from a cross-space function call.  */
564       if (read_memory_integer (pc + i * 4, 4) == 0x004010a1)
565         {
566           found_magic_instruction = 1;
567           break;
568         }
569       /* Add code to handle long call/branch and argument relocation stubs
570          here.  */
571     }
572
573   if (found_magic_instruction != 0)
574     return 1;
575
576   /* Now look backward.  */
577   for (i = 0; i < 4; i++)
578     {
579       /* If we hit something with an unwind, stop searching this direction.  */
580
581       if (find_unwind_entry (pc - i * 4) != 0)
582         break;
583
584       /* Check for ldsid (rp),r1 which is the magic instruction for a 
585          return from a cross-space function call.  */
586       if (read_memory_integer (pc - i * 4, 4) == 0x004010a1)
587         {
588           found_magic_instruction = 1;
589           break;
590         }
591       /* Add code to handle long call/branch and argument relocation stubs
592          here.  */
593     }
594   return found_magic_instruction;
595 }
596
597 static int
598 find_return_regnum(pc)
599      CORE_ADDR pc;
600 {
601   struct unwind_table_entry *u;
602
603   u = find_unwind_entry (pc);
604
605   if (!u)
606     return RP_REGNUM;
607
608   if (u->Millicode)
609     return 31;
610
611   return RP_REGNUM;
612 }
613
614 /* Return size of frame, or -1 if we should use a frame pointer.  */
615 int
616 find_proc_framesize (pc)
617      CORE_ADDR pc;
618 {
619   struct unwind_table_entry *u;
620   struct minimal_symbol *msym_us;
621
622   u = find_unwind_entry (pc);
623
624   if (!u)
625     {
626       if (pc_in_linker_stub (pc))
627         /* Linker stubs have a zero size frame.  */
628         return 0;
629       else
630         return -1;
631     }
632
633   msym_us = lookup_minimal_symbol_by_pc (pc);
634
635   /* If Save_SP is set, and we're not in an interrupt or signal caller,
636      then we have a frame pointer.  Use it.  */
637   if (u->Save_SP && !pc_in_interrupt_handler (pc)
638       && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us)))
639     return -1;
640
641   return u->Total_frame_size << 3;
642 }
643
644 /* Return offset from sp at which rp is saved, or 0 if not saved.  */
645 static int rp_saved PARAMS ((CORE_ADDR));
646
647 static int
648 rp_saved (pc)
649      CORE_ADDR pc;
650 {
651   struct unwind_table_entry *u;
652
653   u = find_unwind_entry (pc);
654
655   if (!u)
656     {
657       if (pc_in_linker_stub (pc))
658         /* This is the so-called RP'.  */
659         return -24;
660       else
661         return 0;
662     }
663
664   if (u->Save_RP)
665     return -20;
666   else if (u->stub_type != 0)
667     {
668       switch (u->stub_type)
669         {
670         case EXPORT:
671           return -24;
672         case PARAMETER_RELOCATION:
673           return -8;
674         default:
675           return 0;
676         }
677     }
678   else
679     return 0;
680 }
681 \f
682 int
683 frameless_function_invocation (frame)
684      FRAME frame;
685 {
686   struct unwind_table_entry *u;
687
688   u = find_unwind_entry (frame->pc);
689
690   if (u == 0)
691     return 0;
692
693   return (u->Total_frame_size == 0 && u->stub_type == 0);
694 }
695
696 CORE_ADDR
697 saved_pc_after_call (frame)
698      FRAME frame;
699 {
700   int ret_regnum;
701
702   ret_regnum = find_return_regnum (get_frame_pc (frame));
703
704   return read_register (ret_regnum) & ~0x3;
705 }
706 \f
707 CORE_ADDR
708 frame_saved_pc (frame)
709      FRAME frame;
710 {
711   CORE_ADDR pc = get_frame_pc (frame);
712   struct unwind_table_entry *u;
713
714   /* BSD, HPUX & OSF1 all lay out the hardware state in the same manner
715      at the base of the frame in an interrupt handler.  Registers within
716      are saved in the exact same order as GDB numbers registers.  How
717      convienent.  */
718   if (pc_in_interrupt_handler (pc))
719     return read_memory_integer (frame->frame + PC_REGNUM * 4, 4) & ~0x3;
720
721   /* Deal with signal handler caller frames too.  */
722   if (frame->signal_handler_caller)
723     {
724       CORE_ADDR rp;
725       FRAME_SAVED_PC_IN_SIGTRAMP (frame, &rp);
726       return rp;
727     }
728
729 restart:
730   if (frameless_function_invocation (frame))
731     {
732       int ret_regnum;
733
734       ret_regnum = find_return_regnum (pc);
735
736       /* If the next frame is an interrupt frame or a signal
737          handler caller, then we need to look in the saved
738          register area to get the return pointer (the values
739          in the registers may not correspond to anything useful).  */
740       if (frame->next 
741           && (frame->next->signal_handler_caller
742               || pc_in_interrupt_handler (frame->next->pc)))
743         {
744           struct frame_info *fi;
745           struct frame_saved_regs saved_regs;
746
747           fi = get_frame_info (frame->next);
748           get_frame_saved_regs (fi, &saved_regs);
749           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM] & 0x2, 4))
750             pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
751           else
752             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
753         }
754       else
755         pc = read_register (ret_regnum) & ~0x3;
756     }
757   else
758     {
759       int rp_offset = rp_saved (pc);
760
761       /* Similar to code in frameless function case.  If the next
762          frame is a signal or interrupt handler, then dig the right
763          information out of the saved register info.  */
764       if (rp_offset == 0
765           && frame->next
766           && (frame->next->signal_handler_caller
767               || pc_in_interrupt_handler (frame->next->pc)))
768         {
769           struct frame_info *fi;
770           struct frame_saved_regs saved_regs;
771
772           fi = get_frame_info (frame->next);
773           get_frame_saved_regs (fi, &saved_regs);
774           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM] & 0x2, 4))
775             pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
776           else
777             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
778         }
779       else if (rp_offset == 0)
780         pc = read_register (RP_REGNUM) & ~0x3;
781       else
782         pc = read_memory_integer (frame->frame + rp_offset, 4) & ~0x3;
783     }
784
785   /* If PC is inside a linker stub, then dig out the address the stub
786      will return to.  */
787   u = find_unwind_entry (pc);
788   if (u && u->stub_type != 0)
789     goto restart;
790
791   return pc;
792 }
793 \f
794 /* We need to correct the PC and the FP for the outermost frame when we are
795    in a system call.  */
796
797 void
798 init_extra_frame_info (fromleaf, frame)
799      int fromleaf;
800      struct frame_info *frame;
801 {
802   int flags;
803   int framesize;
804
805   if (frame->next && !fromleaf)
806     return;
807
808   /* If the next frame represents a frameless function invocation
809      then we have to do some adjustments that are normally done by
810      FRAME_CHAIN.  (FRAME_CHAIN is not called in this case.)  */
811   if (fromleaf)
812     {
813       /* Find the framesize of *this* frame without peeking at the PC
814          in the current frame structure (it isn't set yet).  */
815       framesize = find_proc_framesize (FRAME_SAVED_PC (get_next_frame (frame)));
816
817       /* Now adjust our base frame accordingly.  If we have a frame pointer
818          use it, else subtract the size of this frame from the current
819          frame.  (we always want frame->frame to point at the lowest address
820          in the frame).  */
821       if (framesize == -1)
822         frame->frame = read_register (FP_REGNUM);
823       else
824         frame->frame -= framesize;
825       return;
826     }
827
828   flags = read_register (FLAGS_REGNUM);
829   if (flags & 2)        /* In system call? */
830     frame->pc = read_register (31) & ~0x3;
831
832   /* The outermost frame is always derived from PC-framesize
833
834      One might think frameless innermost frames should have
835      a frame->frame that is the same as the parent's frame->frame.
836      That is wrong; frame->frame in that case should be the *high*
837      address of the parent's frame.  It's complicated as hell to
838      explain, but the parent *always* creates some stack space for
839      the child.  So the child actually does have a frame of some
840      sorts, and its base is the high address in its parent's frame.  */
841   framesize = find_proc_framesize(frame->pc);
842   if (framesize == -1)
843     frame->frame = read_register (FP_REGNUM);
844   else
845     frame->frame = read_register (SP_REGNUM) - framesize;
846 }
847 \f
848 /* Given a GDB frame, determine the address of the calling function's frame.
849    This will be used to create a new GDB frame struct, and then
850    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
851
852    This may involve searching through prologues for several functions
853    at boundaries where GCC calls HP C code, or where code which has
854    a frame pointer calls code without a frame pointer.  */
855   
856
857 FRAME_ADDR
858 frame_chain (frame)
859      struct frame_info *frame;
860 {
861   int my_framesize, caller_framesize;
862   struct unwind_table_entry *u;
863   CORE_ADDR frame_base;
864
865   /* Handle HPUX, BSD, and OSF1 style interrupt frames first.  These
866      are easy; at *sp we have a full save state strucutre which we can
867      pull the old stack pointer from.  Also see frame_saved_pc for
868      code to dig a saved PC out of the save state structure.  */
869   if (pc_in_interrupt_handler (frame->pc))
870     frame_base = read_memory_integer (frame->frame + SP_REGNUM * 4, 4);
871   else if (frame->signal_handler_caller)
872     {
873       FRAME_BASE_BEFORE_SIGTRAMP (frame, &frame_base);
874     }
875   else
876     frame_base = frame->frame;
877
878   /* Get frame sizes for the current frame and the frame of the 
879      caller.  */
880   my_framesize = find_proc_framesize (frame->pc);
881   caller_framesize = find_proc_framesize (FRAME_SAVED_PC(frame));
882
883   /* If caller does not have a frame pointer, then its frame
884      can be found at current_frame - caller_framesize.  */
885   if (caller_framesize != -1)
886     return frame_base - caller_framesize;
887
888   /* Both caller and callee have frame pointers and are GCC compiled
889      (SAVE_SP bit in unwind descriptor is on for both functions.
890      The previous frame pointer is found at the top of the current frame.  */
891   if (caller_framesize == -1 && my_framesize == -1)
892     return read_memory_integer (frame_base, 4);
893
894   /* Caller has a frame pointer, but callee does not.  This is a little
895      more difficult as GCC and HP C lay out locals and callee register save
896      areas very differently.
897
898      The previous frame pointer could be in a register, or in one of 
899      several areas on the stack.
900
901      Walk from the current frame to the innermost frame examining 
902      unwind descriptors to determine if %r3 ever gets saved into the
903      stack.  If so return whatever value got saved into the stack.
904      If it was never saved in the stack, then the value in %r3 is still
905      valid, so use it. 
906
907      We use information from unwind descriptors to determine if %r3
908      is saved into the stack (Entry_GR field has this information).  */
909
910   while (frame)
911     {
912       u = find_unwind_entry (frame->pc);
913
914       if (!u)
915         {
916           /* We could find this information by examining prologues.  I don't
917              think anyone has actually written any tools (not even "strip")
918              which leave them out of an executable, so maybe this is a moot
919              point.  */
920           warning ("Unable to find unwind for PC 0x%x -- Help!", frame->pc);
921           return 0;
922         }
923
924       /* Entry_GR specifies the number of callee-saved general registers
925          saved in the stack.  It starts at %r3, so %r3 would be 1.  */
926       if (u->Entry_GR >= 1 || u->Save_SP
927           || frame->signal_handler_caller
928           || pc_in_interrupt_handler (frame->pc))
929         break;
930       else
931         frame = frame->next;
932     }
933
934   if (frame)
935     {
936       /* We may have walked down the chain into a function with a frame
937          pointer.  */
938       if (u->Save_SP
939           && !frame->signal_handler_caller
940           && !pc_in_interrupt_handler (frame->pc))
941         return read_memory_integer (frame->frame, 4);
942       /* %r3 was saved somewhere in the stack.  Dig it out.  */
943       else 
944         {
945           struct frame_info *fi;
946           struct frame_saved_regs saved_regs;
947
948           fi = get_frame_info (frame);
949           get_frame_saved_regs (fi, &saved_regs);
950           return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
951         }
952     }
953   else
954     {
955       /* The value in %r3 was never saved into the stack (thus %r3 still
956          holds the value of the previous frame pointer).  */
957       return read_register (FP_REGNUM);
958     }
959 }
960
961 \f
962 /* To see if a frame chain is valid, see if the caller looks like it
963    was compiled with gcc. */
964
965 int
966 frame_chain_valid (chain, thisframe)
967      FRAME_ADDR chain;
968      FRAME thisframe;
969 {
970   struct minimal_symbol *msym_us;
971   struct minimal_symbol *msym_start;
972   struct unwind_table_entry *u, *next_u = NULL;
973   FRAME next;
974
975   if (!chain)
976     return 0;
977
978   u = find_unwind_entry (thisframe->pc);
979
980   if (u == NULL)
981     return 1;
982
983   /* We can't just check that the same of msym_us is "_start", because
984      someone idiotically decided that they were going to make a Ltext_end
985      symbol with the same address.  This Ltext_end symbol is totally
986      indistinguishable (as nearly as I can tell) from the symbol for a function
987      which is (legitimately, since it is in the user's namespace)
988      named Ltext_end, so we can't just ignore it.  */
989   msym_us = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
990   msym_start = lookup_minimal_symbol ("_start", NULL);
991   if (msym_us
992       && msym_start
993       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
994     return 0;
995
996   next = get_next_frame (thisframe);
997   if (next)
998     next_u = find_unwind_entry (next->pc);
999
1000   /* If this frame does not save SP, has no stack, isn't a stub,
1001      and doesn't "call" an interrupt routine or signal handler caller,
1002      then its not valid.  */
1003   if (u->Save_SP || u->Total_frame_size || u->stub_type != 0
1004       || (thisframe->next && thisframe->next->signal_handler_caller)
1005       || (next_u && next_u->HP_UX_interrupt_marker))
1006     return 1;
1007
1008   if (pc_in_linker_stub (thisframe->pc))
1009     return 1;
1010
1011   return 0;
1012 }
1013
1014 /*
1015  * These functions deal with saving and restoring register state
1016  * around a function call in the inferior. They keep the stack
1017  * double-word aligned; eventually, on an hp700, the stack will have
1018  * to be aligned to a 64-byte boundary.
1019  */
1020
1021 int
1022 push_dummy_frame ()
1023 {
1024   register CORE_ADDR sp;
1025   register int regnum;
1026   int int_buffer;
1027   double freg_buffer;
1028
1029   /* Space for "arguments"; the RP goes in here. */
1030   sp = read_register (SP_REGNUM) + 48;
1031   int_buffer = read_register (RP_REGNUM) | 0x3;
1032   write_memory (sp - 20, (char *)&int_buffer, 4);
1033
1034   int_buffer = read_register (FP_REGNUM);
1035   write_memory (sp, (char *)&int_buffer, 4);
1036
1037   write_register (FP_REGNUM, sp);
1038
1039   sp += 8;
1040
1041   for (regnum = 1; regnum < 32; regnum++)
1042     if (regnum != RP_REGNUM && regnum != FP_REGNUM)
1043       sp = push_word (sp, read_register (regnum));
1044
1045   sp += 4;
1046
1047   for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)
1048     {
1049       read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
1050       sp = push_bytes (sp, (char *)&freg_buffer, 8);
1051     }
1052   sp = push_word (sp, read_register (IPSW_REGNUM));
1053   sp = push_word (sp, read_register (SAR_REGNUM));
1054   sp = push_word (sp, read_register (PCOQ_HEAD_REGNUM));
1055   sp = push_word (sp, read_register (PCSQ_HEAD_REGNUM));
1056   sp = push_word (sp, read_register (PCOQ_TAIL_REGNUM));
1057   sp = push_word (sp, read_register (PCSQ_TAIL_REGNUM));
1058   write_register (SP_REGNUM, sp);
1059 }
1060
1061 find_dummy_frame_regs (frame, frame_saved_regs)
1062      struct frame_info *frame;
1063      struct frame_saved_regs *frame_saved_regs;
1064 {
1065   CORE_ADDR fp = frame->frame;
1066   int i;
1067
1068   frame_saved_regs->regs[RP_REGNUM] = fp - 20 & ~0x3;
1069   frame_saved_regs->regs[FP_REGNUM] = fp;
1070   frame_saved_regs->regs[1] = fp + 8;
1071
1072   for (fp += 12, i = 3; i < 32; i++)
1073     {
1074       if (i != FP_REGNUM)
1075         {
1076           frame_saved_regs->regs[i] = fp;
1077           fp += 4;
1078         }
1079     }
1080
1081   fp += 4;
1082   for (i = FP0_REGNUM; i < NUM_REGS; i++, fp += 8)
1083     frame_saved_regs->regs[i] = fp;
1084
1085   frame_saved_regs->regs[IPSW_REGNUM] = fp;
1086   frame_saved_regs->regs[SAR_REGNUM] = fp + 4;
1087   frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp + 8;
1088   frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp + 12;
1089   frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp + 16;
1090   frame_saved_regs->regs[PCSQ_TAIL_REGNUM] = fp + 20;
1091 }
1092
1093 int
1094 hppa_pop_frame ()
1095 {
1096   register FRAME frame = get_current_frame ();
1097   register CORE_ADDR fp;
1098   register int regnum;
1099   struct frame_saved_regs fsr;
1100   struct frame_info *fi;
1101   double freg_buffer;
1102
1103   fi = get_frame_info (frame);
1104   fp = fi->frame;
1105   get_frame_saved_regs (fi, &fsr);
1106
1107 #ifndef NO_PC_SPACE_QUEUE_RESTORE
1108   if (fsr.regs[IPSW_REGNUM])    /* Restoring a call dummy frame */
1109     restore_pc_queue (&fsr);
1110 #endif
1111
1112   for (regnum = 31; regnum > 0; regnum--)
1113     if (fsr.regs[regnum])
1114       write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
1115
1116   for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)
1117     if (fsr.regs[regnum])
1118       {
1119         read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);
1120         write_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
1121       }
1122
1123   if (fsr.regs[IPSW_REGNUM])
1124     write_register (IPSW_REGNUM,
1125                     read_memory_integer (fsr.regs[IPSW_REGNUM], 4));
1126
1127   if (fsr.regs[SAR_REGNUM])
1128     write_register (SAR_REGNUM,
1129                     read_memory_integer (fsr.regs[SAR_REGNUM], 4));
1130
1131   /* If the PC was explicitly saved, then just restore it.  */
1132   if (fsr.regs[PCOQ_TAIL_REGNUM])
1133     write_register (PCOQ_TAIL_REGNUM,
1134                     read_memory_integer (fsr.regs[PCOQ_TAIL_REGNUM], 4));
1135
1136   /* Else use the value in %rp to set the new PC.  */
1137   else 
1138     target_write_pc (read_register (RP_REGNUM));
1139
1140   write_register (FP_REGNUM, read_memory_integer (fp, 4));
1141
1142   if (fsr.regs[IPSW_REGNUM])    /* call dummy */
1143     write_register (SP_REGNUM, fp - 48);
1144   else
1145     write_register (SP_REGNUM, fp);
1146
1147   flush_cached_frames ();
1148   set_current_frame (create_new_frame (read_register (FP_REGNUM),
1149                                        read_pc ()));
1150 }
1151
1152 /*
1153  * After returning to a dummy on the stack, restore the instruction
1154  * queue space registers. */
1155
1156 static int
1157 restore_pc_queue (fsr)
1158      struct frame_saved_regs *fsr;
1159 {
1160   CORE_ADDR pc = read_pc ();
1161   CORE_ADDR new_pc = read_memory_integer (fsr->regs[PCOQ_HEAD_REGNUM], 4);
1162   int pid;
1163   struct target_waitstatus w;
1164   int insn_count;
1165
1166   /* Advance past break instruction in the call dummy. */
1167   write_register (PCOQ_HEAD_REGNUM, pc + 4);
1168   write_register (PCOQ_TAIL_REGNUM, pc + 8);
1169
1170   /*
1171    * HPUX doesn't let us set the space registers or the space
1172    * registers of the PC queue through ptrace. Boo, hiss.
1173    * Conveniently, the call dummy has this sequence of instructions
1174    * after the break:
1175    *    mtsp r21, sr0
1176    *    ble,n 0(sr0, r22)
1177    *
1178    * So, load up the registers and single step until we are in the
1179    * right place.
1180    */
1181
1182   write_register (21, read_memory_integer (fsr->regs[PCSQ_HEAD_REGNUM], 4));
1183   write_register (22, new_pc);
1184
1185   for (insn_count = 0; insn_count < 3; insn_count++)
1186     {
1187       /* FIXME: What if the inferior gets a signal right now?  Want to
1188          merge this into wait_for_inferior (as a special kind of
1189          watchpoint?  By setting a breakpoint at the end?  Is there
1190          any other choice?  Is there *any* way to do this stuff with
1191          ptrace() or some equivalent?).  */
1192       resume (1, 0);
1193       target_wait (inferior_pid, &w);
1194
1195       if (w.kind == TARGET_WAITKIND_SIGNALLED)
1196         {
1197           stop_signal = w.value.sig;
1198           terminal_ours_for_output ();
1199           printf_unfiltered ("\nProgram terminated with signal %s, %s.\n",
1200                              target_signal_to_name (stop_signal),
1201                              target_signal_to_string (stop_signal));
1202           gdb_flush (gdb_stdout);
1203           return 0;
1204         }
1205     }
1206   target_terminal_ours ();
1207   (current_target->to_fetch_registers) (-1);
1208   return 1;
1209 }
1210
1211 CORE_ADDR
1212 hppa_push_arguments (nargs, args, sp, struct_return, struct_addr)
1213      int nargs;
1214      value_ptr *args;
1215      CORE_ADDR sp;
1216      int struct_return;
1217      CORE_ADDR struct_addr;
1218 {
1219   /* array of arguments' offsets */
1220   int *offset = (int *)alloca(nargs * sizeof (int));
1221   int cum = 0;
1222   int i, alignment;
1223   
1224   for (i = 0; i < nargs; i++)
1225     {
1226       /* Coerce chars to int & float to double if necessary */
1227       args[i] = value_arg_coerce (args[i]);
1228
1229       cum += TYPE_LENGTH (VALUE_TYPE (args[i]));
1230
1231     /* value must go at proper alignment. Assume alignment is a
1232          power of two.*/
1233       alignment = hppa_alignof (VALUE_TYPE (args[i]));
1234       if (cum % alignment)
1235         cum = (cum + alignment) & -alignment;
1236       offset[i] = -cum;
1237     }
1238   sp += max ((cum + 7) & -8, 16);
1239
1240   for (i = 0; i < nargs; i++)
1241     write_memory (sp + offset[i], VALUE_CONTENTS (args[i]),
1242                   TYPE_LENGTH (VALUE_TYPE (args[i])));
1243
1244   if (struct_return)
1245     write_register (28, struct_addr);
1246   return sp + 32;
1247 }
1248
1249 /*
1250  * Insert the specified number of args and function address
1251  * into a call sequence of the above form stored at DUMMYNAME.
1252  *
1253  * On the hppa we need to call the stack dummy through $$dyncall.
1254  * Therefore our version of FIX_CALL_DUMMY takes an extra argument,
1255  * real_pc, which is the location where gdb should start up the
1256  * inferior to do the function call.
1257  */
1258
1259 CORE_ADDR
1260 hppa_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
1261      char *dummy;
1262      CORE_ADDR pc;
1263      CORE_ADDR fun;
1264      int nargs;
1265      value_ptr *args;
1266      struct type *type;
1267      int gcc_p;
1268 {
1269   CORE_ADDR dyncall_addr, sr4export_addr;
1270   struct minimal_symbol *msymbol;
1271   int flags = read_register (FLAGS_REGNUM);
1272   struct unwind_table_entry *u;
1273
1274   msymbol = lookup_minimal_symbol ("$$dyncall", (struct objfile *) NULL);
1275   if (msymbol == NULL)
1276     error ("Can't find an address for $$dyncall trampoline");
1277
1278   dyncall_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1279
1280   /* FUN could be a procedure label, in which case we have to get
1281      its real address and the value of its GOT/DP.  */
1282   if (fun & 0x2)
1283     {
1284       /* Get the GOT/DP value for the target function.  It's
1285          at *(fun+4).  Note the call dummy is *NOT* allowed to
1286          trash %r19 before calling the target function.  */
1287       write_register (19, read_memory_integer ((fun & ~0x3) + 4, 4));
1288
1289       /* Now get the real address for the function we are calling, it's
1290          at *fun.  */
1291       fun = (CORE_ADDR) read_memory_integer (fun & ~0x3, 4);
1292     }
1293
1294   /* If we are calling an import stub (eg calling into a dynamic library)
1295      then have sr4export call the magic __d_plt_call routine which is linked
1296      in from end.o.  (You can't use _sr4export to call the import stub as
1297      the value in sp-24 will get fried and you end up returning to the
1298      wrong location.  You can't call the import stub directly as the code
1299      to bind the PLT entry to a function can't return to a stack address.)  */
1300   u = find_unwind_entry (fun);
1301   if (u && u->stub_type == IMPORT)
1302     {
1303       CORE_ADDR new_fun;
1304       msymbol = lookup_minimal_symbol ("__d_plt_call", (struct objfile *) NULL);
1305       if (msymbol == NULL)
1306         error ("Can't find an address for __d_plt_call trampoline");
1307
1308       /* This is where sr4export will jump to.  */
1309       new_fun = SYMBOL_VALUE_ADDRESS (msymbol);
1310
1311       /* We have to store the address of the stub in __shlib_funcptr.  */
1312       msymbol = lookup_minimal_symbol ("__shlib_funcptr",
1313                                        (struct objfile *)NULL);
1314       if (msymbol == NULL)
1315         error ("Can't find an address for __shlib_funcptr");
1316
1317       target_write_memory (SYMBOL_VALUE_ADDRESS (msymbol), (char *)&fun, 4);
1318       fun = new_fun;
1319
1320     }
1321
1322   /* We still need sr4export's address too.  */
1323   msymbol = lookup_minimal_symbol ("_sr4export", (struct objfile *) NULL);
1324   if (msymbol == NULL)
1325     error ("Can't find an address for _sr4export trampoline");
1326
1327   sr4export_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1328
1329   store_unsigned_integer
1330     (&dummy[9*REGISTER_SIZE],
1331      REGISTER_SIZE,
1332      deposit_21 (fun >> 11,
1333                  extract_unsigned_integer (&dummy[9*REGISTER_SIZE],
1334                                            REGISTER_SIZE)));
1335   store_unsigned_integer
1336     (&dummy[10*REGISTER_SIZE],
1337      REGISTER_SIZE,
1338      deposit_14 (fun & MASK_11,
1339                  extract_unsigned_integer (&dummy[10*REGISTER_SIZE],
1340                                            REGISTER_SIZE)));
1341   store_unsigned_integer
1342     (&dummy[12*REGISTER_SIZE],
1343      REGISTER_SIZE,
1344      deposit_21 (sr4export_addr >> 11,
1345                  extract_unsigned_integer (&dummy[12*REGISTER_SIZE],
1346                                            REGISTER_SIZE)));
1347   store_unsigned_integer
1348     (&dummy[13*REGISTER_SIZE],
1349      REGISTER_SIZE,
1350      deposit_14 (sr4export_addr & MASK_11,
1351                  extract_unsigned_integer (&dummy[13*REGISTER_SIZE],
1352                                            REGISTER_SIZE)));
1353
1354   write_register (22, pc);
1355
1356   /* If we are in a syscall, then we should call the stack dummy
1357      directly.  $$dyncall is not needed as the kernel sets up the
1358      space id registers properly based on the value in %r31.  In
1359      fact calling $$dyncall will not work because the value in %r22
1360      will be clobbered on the syscall exit path.  */
1361   if (flags & 2)
1362     return pc;
1363   else
1364     return dyncall_addr;
1365
1366 }
1367
1368 /* Get the PC from %r31 if currently in a syscall.  Also mask out privilege
1369    bits.  */
1370 CORE_ADDR
1371 target_read_pc ()
1372 {
1373   int flags = read_register (FLAGS_REGNUM);
1374
1375   if (flags & 2)
1376     return read_register (31) & ~0x3;
1377   return read_register (PC_REGNUM) & ~0x3;
1378 }
1379
1380 /* Write out the PC.  If currently in a syscall, then also write the new
1381    PC value into %r31.  */
1382 void
1383 target_write_pc (v)
1384      CORE_ADDR v;
1385 {
1386   int flags = read_register (FLAGS_REGNUM);
1387
1388   /* If in a syscall, then set %r31.  Also make sure to get the 
1389      privilege bits set correctly.  */
1390   if (flags & 2)
1391     write_register (31, (long) (v | 0x3));
1392
1393   write_register (PC_REGNUM, (long) v);
1394   write_register (NPC_REGNUM, (long) v + 4);
1395 }
1396
1397 /* return the alignment of a type in bytes. Structures have the maximum
1398    alignment required by their fields. */
1399
1400 static int
1401 hppa_alignof (arg)
1402      struct type *arg;
1403 {
1404   int max_align, align, i;
1405   switch (TYPE_CODE (arg))
1406     {
1407     case TYPE_CODE_PTR:
1408     case TYPE_CODE_INT:
1409     case TYPE_CODE_FLT:
1410       return TYPE_LENGTH (arg);
1411     case TYPE_CODE_ARRAY:
1412       return hppa_alignof (TYPE_FIELD_TYPE (arg, 0));
1413     case TYPE_CODE_STRUCT:
1414     case TYPE_CODE_UNION:
1415       max_align = 2;
1416       for (i = 0; i < TYPE_NFIELDS (arg); i++)
1417         {
1418           /* Bit fields have no real alignment. */
1419           if (!TYPE_FIELD_BITPOS (arg, i))
1420             {
1421               align = hppa_alignof (TYPE_FIELD_TYPE (arg, i));
1422               max_align = max (max_align, align);
1423             }
1424         }
1425       return max_align;
1426     default:
1427       return 4;
1428     }
1429 }
1430
1431 /* Print the register regnum, or all registers if regnum is -1 */
1432
1433 pa_do_registers_info (regnum, fpregs)
1434      int regnum;
1435      int fpregs;
1436 {
1437   char raw_regs [REGISTER_BYTES];
1438   int i;
1439   
1440   for (i = 0; i < NUM_REGS; i++)
1441     read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
1442   if (regnum == -1)
1443     pa_print_registers (raw_regs, regnum, fpregs);
1444   else if (regnum < FP0_REGNUM)
1445     printf_unfiltered ("%s %x\n", reg_names[regnum], *(long *)(raw_regs +
1446                                                     REGISTER_BYTE (regnum)));
1447   else
1448     pa_print_fp_reg (regnum);
1449 }
1450
1451 pa_print_registers (raw_regs, regnum, fpregs)
1452      char *raw_regs;
1453      int regnum;
1454      int fpregs;
1455 {
1456   int i;
1457
1458   for (i = 0; i < 18; i++)
1459     printf_unfiltered ("%8.8s: %8x  %8.8s: %8x  %8.8s: %8x  %8.8s: %8x\n",
1460             reg_names[i],
1461             *(int *)(raw_regs + REGISTER_BYTE (i)),
1462             reg_names[i + 18],
1463             *(int *)(raw_regs + REGISTER_BYTE (i + 18)),
1464             reg_names[i + 36],
1465             *(int *)(raw_regs + REGISTER_BYTE (i + 36)),
1466             reg_names[i + 54],
1467             *(int *)(raw_regs + REGISTER_BYTE (i + 54)));
1468
1469   if (fpregs)
1470     for (i = 72; i < NUM_REGS; i++)
1471       pa_print_fp_reg (i);
1472 }
1473
1474 pa_print_fp_reg (i)
1475      int i;
1476 {
1477   unsigned char raw_buffer[MAX_REGISTER_RAW_SIZE];
1478   unsigned char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
1479
1480   /* Get 32bits of data.  */
1481   read_relative_register_raw_bytes (i, raw_buffer);
1482
1483   /* Put it in the buffer.  No conversions are ever necessary.  */
1484   memcpy (virtual_buffer, raw_buffer, REGISTER_RAW_SIZE (i));
1485
1486   fputs_filtered (reg_names[i], gdb_stdout);
1487   print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1488   fputs_filtered ("(single precision)     ", gdb_stdout);
1489
1490   val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, gdb_stdout, 0,
1491              1, 0, Val_pretty_default);
1492   printf_filtered ("\n");
1493
1494   /* If "i" is even, then this register can also be a double-precision
1495      FP register.  Dump it out as such.  */
1496   if ((i % 2) == 0)
1497     {
1498       /* Get the data in raw format for the 2nd half.  */
1499       read_relative_register_raw_bytes (i + 1, raw_buffer);
1500
1501       /* Copy it into the appropriate part of the virtual buffer.  */
1502       memcpy (virtual_buffer + REGISTER_RAW_SIZE (i), raw_buffer,
1503               REGISTER_RAW_SIZE (i));
1504
1505       /* Dump it as a double.  */
1506       fputs_filtered (reg_names[i], gdb_stdout);
1507       print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1508       fputs_filtered ("(double precision)     ", gdb_stdout);
1509
1510       val_print (builtin_type_double, virtual_buffer, 0, gdb_stdout, 0,
1511                  1, 0, Val_pretty_default);
1512       printf_filtered ("\n");
1513     }
1514 }
1515
1516 /* Figure out if PC is in a trampoline, and if so find out where
1517    the trampoline will jump to.  If not in a trampoline, return zero.
1518
1519    Simple code examination probably is not a good idea since the code
1520    sequences in trampolines can also appear in user code.
1521
1522    We use unwinds and information from the minimal symbol table to
1523    determine when we're in a trampoline.  This won't work for ELF
1524    (yet) since it doesn't create stub unwind entries.  Whether or
1525    not ELF will create stub unwinds or normal unwinds for linker
1526    stubs is still being debated.
1527
1528    This should handle simple calls through dyncall or sr4export,
1529    long calls, argument relocation stubs, and dyncall/sr4export
1530    calling an argument relocation stub.  It even handles some stubs
1531    used in dynamic executables.  */
1532
1533 CORE_ADDR
1534 skip_trampoline_code (pc, name)
1535      CORE_ADDR pc;
1536      char *name;
1537 {
1538   long orig_pc = pc;
1539   long prev_inst, curr_inst, loc;
1540   static CORE_ADDR dyncall = 0;
1541   static CORE_ADDR sr4export = 0;
1542   struct minimal_symbol *msym;
1543   struct unwind_table_entry *u;
1544
1545 /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
1546    new exec file */
1547
1548   if (!dyncall)
1549     {
1550       msym = lookup_minimal_symbol ("$$dyncall", NULL);
1551       if (msym)
1552         dyncall = SYMBOL_VALUE_ADDRESS (msym);
1553       else
1554         dyncall = -1;
1555     }
1556
1557   if (!sr4export)
1558     {
1559       msym = lookup_minimal_symbol ("_sr4export", NULL);
1560       if (msym)
1561         sr4export = SYMBOL_VALUE_ADDRESS (msym);
1562       else
1563         sr4export = -1;
1564     }
1565
1566   /* Addresses passed to dyncall may *NOT* be the actual address
1567      of the funtion.  So we may have to do something special.  */
1568   if (pc == dyncall)
1569     {
1570       pc = (CORE_ADDR) read_register (22);
1571
1572       /* If bit 30 (counting from the left) is on, then pc is the address of
1573          the PLT entry for this function, not the address of the function
1574          itself.  Bit 31 has meaning too, but only for MPE.  */
1575       if (pc & 0x2)
1576         pc = (CORE_ADDR) read_memory_integer (pc & ~0x3, 4);
1577     }
1578   else if (pc == sr4export)
1579     pc = (CORE_ADDR) (read_register (22));
1580
1581   /* Get the unwind descriptor corresponding to PC, return zero
1582      if no unwind was found.  */
1583   u = find_unwind_entry (pc);
1584   if (!u)
1585     return 0;
1586
1587   /* If this isn't a linker stub, then return now.  */
1588   if (u->stub_type == 0)
1589     return orig_pc == pc ? 0 : pc & ~0x3;
1590
1591   /* It's a stub.  Search for a branch and figure out where it goes.
1592      Note we have to handle multi insn branch sequences like ldil;ble.
1593      Most (all?) other branches can be determined by examining the contents
1594      of certain registers and the stack.  */
1595   loc = pc;
1596   curr_inst = 0;
1597   prev_inst = 0;
1598   while (1)
1599     {
1600       /* Make sure we haven't walked outside the range of this stub.  */
1601       if (u != find_unwind_entry (loc))
1602         {
1603           warning ("Unable to find branch in linker stub");
1604           return orig_pc == pc ? 0 : pc & ~0x3;
1605         }
1606
1607       prev_inst = curr_inst;
1608       curr_inst = read_memory_integer (loc, 4);
1609
1610       /* Does it look like a branch external using %r1?  Then it's the
1611          branch from the stub to the actual function.  */
1612       if ((curr_inst & 0xffe0e000) == 0xe0202000)
1613         {
1614           /* Yup.  See if the previous instruction loaded
1615              a value into %r1.  If so compute and return the jump address.  */
1616           if ((prev_inst & 0xffe00000) == 0x20202000)
1617             return (extract_21 (prev_inst) + extract_17 (curr_inst)) & ~0x3;
1618           else
1619             {
1620               warning ("Unable to find ldil X,%%r1 before ble Y(%%sr4,%%r1).");
1621               return orig_pc == pc ? 0 : pc & ~0x3;
1622             }
1623         }
1624
1625       /* Does it look like bl X,%rp or bl X,%r0?  Another way to do a
1626          branch from the stub to the actual function.  */
1627       else if ((curr_inst & 0xffe0e000) == 0xe8400000
1628                || (curr_inst & 0xffe0e000) == 0xe8000000)
1629         return (loc + extract_17 (curr_inst) + 8) & ~0x3;
1630
1631       /* Does it look like bv (rp)?   Note this depends on the
1632          current stack pointer being the same as the stack
1633          pointer in the stub itself!  This is a branch on from the
1634          stub back to the original caller.  */
1635       else if ((curr_inst & 0xffe0e000) == 0xe840c000)
1636         {
1637           /* Yup.  See if the previous instruction loaded
1638              rp from sp - 8.  */
1639           if (prev_inst == 0x4bc23ff1)
1640             return (read_memory_integer
1641                     (read_register (SP_REGNUM) - 8, 4)) & ~0x3;
1642           else
1643             {
1644               warning ("Unable to find restore of %%rp before bv (%%rp).");
1645               return orig_pc == pc ? 0 : pc & ~0x3;
1646             }
1647         }
1648
1649       /* What about be,n 0(sr0,%rp)?  It's just another way we return to
1650          the original caller from the stub.  Used in dynamic executables.  */
1651       else if (curr_inst == 0xe0400002)
1652         {
1653           /* The value we jump to is sitting in sp - 24.  But that's
1654              loaded several instructions before the be instruction.
1655              I guess we could check for the previous instruction being
1656              mtsp %r1,%sr0 if we want to do sanity checking.  */
1657           return (read_memory_integer 
1658                   (read_register (SP_REGNUM) - 24, 4)) & ~0x3;
1659         }
1660
1661       /* Haven't found the branch yet, but we're still in the stub.
1662          Keep looking.  */
1663       loc += 4;
1664     }
1665 }
1666
1667 /* For the given instruction (INST), return any adjustment it makes
1668    to the stack pointer or zero for no adjustment. 
1669
1670    This only handles instructions commonly found in prologues.  */
1671
1672 static int
1673 prologue_inst_adjust_sp (inst)
1674      unsigned long inst;
1675 {
1676   /* This must persist across calls.  */
1677   static int save_high21;
1678
1679   /* The most common way to perform a stack adjustment ldo X(sp),sp */
1680   if ((inst & 0xffffc000) == 0x37de0000)
1681     return extract_14 (inst);
1682
1683   /* stwm X,D(sp) */
1684   if ((inst & 0xffe00000) == 0x6fc00000)
1685     return extract_14 (inst);
1686
1687   /* addil high21,%r1; ldo low11,(%r1),%r30)
1688      save high bits in save_high21 for later use.  */
1689   if ((inst & 0xffe00000) == 0x28200000)
1690     {
1691       save_high21 = extract_21 (inst);
1692       return 0;
1693     }
1694
1695   if ((inst & 0xffff0000) == 0x343e0000)
1696     return save_high21 + extract_14 (inst);
1697
1698   /* fstws as used by the HP compilers.  */
1699   if ((inst & 0xffffffe0) == 0x2fd01220)
1700     return extract_5_load (inst);
1701
1702   /* No adjustment.  */
1703   return 0;
1704 }
1705
1706 /* Return nonzero if INST is a branch of some kind, else return zero.  */
1707
1708 static int
1709 is_branch (inst)
1710      unsigned long inst;
1711 {
1712   switch (inst >> 26)
1713     {
1714     case 0x20:
1715     case 0x21:
1716     case 0x22:
1717     case 0x23:
1718     case 0x28:
1719     case 0x29:
1720     case 0x2a:
1721     case 0x2b:
1722     case 0x30:
1723     case 0x31:
1724     case 0x32:
1725     case 0x33:
1726     case 0x38:
1727     case 0x39:
1728     case 0x3a:
1729       return 1;
1730
1731     default:
1732       return 0;
1733     }
1734 }
1735
1736 /* Return the register number for a GR which is saved by INST or
1737    zero it INST does not save a GR.
1738
1739    Note we only care about full 32bit register stores (that's the only
1740    kind of stores the prologue will use).  */
1741
1742 static int
1743 inst_saves_gr (inst)
1744      unsigned long inst;
1745 {
1746   /* Does it look like a stw?  */
1747   if ((inst >> 26) == 0x1a)
1748     return extract_5R_store (inst);
1749
1750   /* Does it look like a stwm?  */
1751   if ((inst >> 26) == 0x1b)
1752     return extract_5R_store (inst);
1753
1754   return 0;
1755 }
1756
1757 /* Return the register number for a FR which is saved by INST or
1758    zero it INST does not save a FR.
1759
1760    Note we only care about full 64bit register stores (that's the only
1761    kind of stores the prologue will use).  */
1762
1763 static int
1764 inst_saves_fr (inst)
1765      unsigned long inst;
1766 {
1767   if ((inst & 0xfc1fffe0) == 0x2c101220)
1768     return extract_5r_store (inst);
1769   return 0;
1770 }
1771
1772 /* Advance PC across any function entry prologue instructions
1773    to reach some "real" code. 
1774
1775    Use information in the unwind table to determine what exactly should
1776    be in the prologue.  */
1777
1778 CORE_ADDR
1779 skip_prologue (pc)
1780      CORE_ADDR pc;
1781 {
1782   char buf[4];
1783   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1784   int status, i;
1785   struct unwind_table_entry *u;
1786
1787   u = find_unwind_entry (pc);
1788   if (!u)
1789     return pc;
1790
1791   /* If we are not at the beginning of a function, then return now.  */
1792   if ((pc & ~0x3) != u->region_start)
1793     return pc;
1794
1795   /* This is how much of a frame adjustment we need to account for.  */
1796   stack_remaining = u->Total_frame_size << 3;
1797
1798   /* Magic register saves we want to know about.  */
1799   save_rp = u->Save_RP;
1800   save_sp = u->Save_SP;
1801
1802   /* Turn the Entry_GR field into a bitmask.  */
1803   save_gr = 0;
1804   for (i = 3; i < u->Entry_GR + 3; i++)
1805     {
1806       /* Frame pointer gets saved into a special location.  */
1807       if (u->Save_SP && i == FP_REGNUM)
1808         continue;
1809
1810       save_gr |= (1 << i);
1811     }
1812
1813   /* Turn the Entry_FR field into a bitmask too.  */
1814   save_fr = 0;
1815   for (i = 12; i < u->Entry_FR + 12; i++)
1816     save_fr |= (1 << i);
1817
1818   /* Loop until we find everything of interest or hit a branch.
1819
1820      For unoptimized GCC code and for any HP CC code this will never ever
1821      examine any user instructions.
1822
1823      For optimzied GCC code we're faced with problems.  GCC will schedule
1824      its prologue and make prologue instructions available for delay slot
1825      filling.  The end result is user code gets mixed in with the prologue
1826      and a prologue instruction may be in the delay slot of the first branch
1827      or call.
1828
1829      Some unexpected things are expected with debugging optimized code, so
1830      we allow this routine to walk past user instructions in optimized
1831      GCC code.  */
1832   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1833     {
1834       status = target_read_memory (pc, buf, 4);
1835       inst = extract_unsigned_integer (buf, 4);
1836
1837       /* Yow! */
1838       if (status != 0)
1839         return pc;
1840
1841       /* Note the interesting effects of this instruction.  */
1842       stack_remaining -= prologue_inst_adjust_sp (inst);
1843
1844       /* There is only one instruction used for saving RP into the stack.  */
1845       if (inst == 0x6bc23fd9)
1846         save_rp = 0;
1847
1848       /* This is the only way we save SP into the stack.  At this time
1849          the HP compilers never bother to save SP into the stack.  */
1850       if ((inst & 0xffffc000) == 0x6fc10000)
1851         save_sp = 0;
1852
1853       /* Account for general and floating-point register saves.  */
1854       save_gr &= ~(1 << inst_saves_gr (inst));
1855       save_fr &= ~(1 << inst_saves_fr (inst));
1856
1857       /* Quit if we hit any kind of branch.  This can happen if a prologue
1858          instruction is in the delay slot of the first call/branch.  */
1859       if (is_branch (inst))
1860         break;
1861
1862       /* Bump the PC.  */
1863       pc += 4;
1864     }
1865
1866   return pc;
1867 }
1868
1869 /* Put here the code to store, into a struct frame_saved_regs,
1870    the addresses of the saved registers of frame described by FRAME_INFO.
1871    This includes special registers such as pc and fp saved in special
1872    ways in the stack frame.  sp is even more special:
1873    the address we return for it IS the sp for the next frame.  */
1874
1875 void
1876 hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
1877      struct frame_info *frame_info;
1878      struct frame_saved_regs *frame_saved_regs;
1879 {
1880   CORE_ADDR pc;
1881   struct unwind_table_entry *u;
1882   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1883   int status, i, reg;
1884   char buf[4];
1885   int fp_loc = -1;
1886
1887   /* Zero out everything.  */
1888   memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
1889
1890   /* Call dummy frames always look the same, so there's no need to
1891      examine the dummy code to determine locations of saved registers;
1892      instead, let find_dummy_frame_regs fill in the correct offsets
1893      for the saved registers.  */
1894   if ((frame_info->pc >= frame_info->frame
1895        && frame_info->pc <= (frame_info->frame + CALL_DUMMY_LENGTH
1896                              + 32 * 4 + (NUM_REGS - FP0_REGNUM) * 8
1897                              + 6 * 4)))
1898     find_dummy_frame_regs (frame_info, frame_saved_regs);
1899
1900   /* Interrupt handlers are special too.  They lay out the register
1901      state in the exact same order as the register numbers in GDB.  */
1902   if (pc_in_interrupt_handler (frame_info->pc))
1903     {
1904       for (i = 0; i < NUM_REGS; i++)
1905         {
1906           /* SP is a little special.  */
1907           if (i == SP_REGNUM)
1908             frame_saved_regs->regs[SP_REGNUM]
1909               = read_memory_integer (frame_info->frame + SP_REGNUM * 4, 4);
1910           else
1911             frame_saved_regs->regs[i] = frame_info->frame + i * 4;
1912         }
1913       return;
1914     }
1915
1916   /* Handle signal handler callers.  */
1917   if (frame_info->signal_handler_caller)
1918     {
1919       FRAME_FIND_SAVED_REGS_IN_SIGTRAMP (frame_info, frame_saved_regs);
1920       return;
1921     }
1922
1923   /* Get the starting address of the function referred to by the PC
1924      saved in frame_info.  */
1925   pc = get_pc_function_start (frame_info->pc);
1926
1927   /* Yow! */
1928   u = find_unwind_entry (pc);
1929   if (!u)
1930     return;
1931
1932   /* This is how much of a frame adjustment we need to account for.  */
1933   stack_remaining = u->Total_frame_size << 3;
1934
1935   /* Magic register saves we want to know about.  */
1936   save_rp = u->Save_RP;
1937   save_sp = u->Save_SP;
1938
1939   /* Turn the Entry_GR field into a bitmask.  */
1940   save_gr = 0;
1941   for (i = 3; i < u->Entry_GR + 3; i++)
1942     {
1943       /* Frame pointer gets saved into a special location.  */
1944       if (u->Save_SP && i == FP_REGNUM)
1945         continue;
1946
1947       save_gr |= (1 << i);
1948     }
1949
1950   /* Turn the Entry_FR field into a bitmask too.  */
1951   save_fr = 0;
1952   for (i = 12; i < u->Entry_FR + 12; i++)
1953     save_fr |= (1 << i);
1954
1955   /* The frame always represents the value of %sp at entry to the
1956      current function (and is thus equivalent to the "saved" stack
1957      pointer.  */
1958   frame_saved_regs->regs[SP_REGNUM] = frame_info->frame;
1959
1960   /* Loop until we find everything of interest or hit a branch.
1961
1962      For unoptimized GCC code and for any HP CC code this will never ever
1963      examine any user instructions.
1964
1965      For optimzied GCC code we're faced with problems.  GCC will schedule
1966      its prologue and make prologue instructions available for delay slot
1967      filling.  The end result is user code gets mixed in with the prologue
1968      and a prologue instruction may be in the delay slot of the first branch
1969      or call.
1970
1971      Some unexpected things are expected with debugging optimized code, so
1972      we allow this routine to walk past user instructions in optimized
1973      GCC code.  */
1974   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1975     {
1976       status = target_read_memory (pc, buf, 4);
1977       inst = extract_unsigned_integer (buf, 4);
1978
1979       /* Yow! */
1980       if (status != 0)
1981         return;
1982
1983       /* Note the interesting effects of this instruction.  */
1984       stack_remaining -= prologue_inst_adjust_sp (inst);
1985
1986       /* There is only one instruction used for saving RP into the stack.  */
1987       if (inst == 0x6bc23fd9)
1988         {
1989           save_rp = 0;
1990           frame_saved_regs->regs[RP_REGNUM] = frame_info->frame - 20;
1991         }
1992
1993       /* Just note that we found the save of SP into the stack.  The
1994          value for frame_saved_regs was computed above.  */
1995       if ((inst & 0xffffc000) == 0x6fc10000)
1996         save_sp = 0;
1997
1998       /* Account for general and floating-point register saves.  */
1999       reg = inst_saves_gr (inst);
2000       if (reg >= 3 && reg <= 18
2001           && (!u->Save_SP || reg != FP_REGNUM))
2002         {
2003           save_gr &= ~(1 << reg);
2004
2005           /* stwm with a positive displacement is a *post modify*.  */
2006           if ((inst >> 26) == 0x1b
2007               && extract_14 (inst) >= 0)
2008             frame_saved_regs->regs[reg] = frame_info->frame;
2009           else
2010             {
2011               /* Handle code with and without frame pointers.  */
2012               if (u->Save_SP)
2013                 frame_saved_regs->regs[reg]
2014                   = frame_info->frame + extract_14 (inst);
2015               else
2016                 frame_saved_regs->regs[reg]
2017                   = frame_info->frame + (u->Total_frame_size << 3)
2018                     + extract_14 (inst);
2019             }
2020         }
2021
2022
2023       /* GCC handles callee saved FP regs a little differently.  
2024
2025          It emits an instruction to put the value of the start of
2026          the FP store area into %r1.  It then uses fstds,ma with
2027          a basereg of %r1 for the stores.
2028
2029          HP CC emits them at the current stack pointer modifying
2030          the stack pointer as it stores each register.  */
2031
2032       /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
2033       if ((inst & 0xffffc000) == 0x34610000
2034           || (inst & 0xffffc000) == 0x37c10000)
2035         fp_loc = extract_14 (inst);
2036         
2037       reg = inst_saves_fr (inst);
2038       if (reg >= 12 && reg <= 21)
2039         {
2040           /* Note +4 braindamage below is necessary because the FP status
2041              registers are internally 8 registers rather than the expected
2042              4 registers.  */
2043           save_fr &= ~(1 << reg);
2044           if (fp_loc == -1)
2045             {
2046               /* 1st HP CC FP register store.  After this instruction
2047                  we've set enough state that the GCC and HPCC code are
2048                  both handled in the same manner.  */
2049               frame_saved_regs->regs[reg + FP4_REGNUM + 4] = frame_info->frame;
2050               fp_loc = 8;
2051             }
2052           else
2053             {
2054               frame_saved_regs->regs[reg + FP0_REGNUM + 4]
2055                 = frame_info->frame + fp_loc;
2056               fp_loc += 8;
2057             }
2058         }
2059
2060       /* Quit if we hit any kind of branch.  This can happen if a prologue
2061          instruction is in the delay slot of the first call/branch.  */
2062       if (is_branch (inst))
2063         break;
2064
2065       /* Bump the PC.  */
2066       pc += 4;
2067     }
2068 }
2069
2070 #ifdef MAINTENANCE_CMDS
2071
2072 static void
2073 unwind_command (exp, from_tty)
2074      char *exp;
2075      int from_tty;
2076 {
2077   CORE_ADDR address;
2078   union
2079     {
2080       int *foo;
2081       struct unwind_table_entry *u;
2082     } xxx;
2083
2084   /* If we have an expression, evaluate it and use it as the address.  */
2085
2086   if (exp != 0 && *exp != 0)
2087     address = parse_and_eval_address (exp);
2088   else
2089     return;
2090
2091   xxx.u = find_unwind_entry (address);
2092
2093   if (!xxx.u)
2094     {
2095       printf_unfiltered ("Can't find unwind table entry for PC 0x%x\n", address);
2096       return;
2097     }
2098
2099   printf_unfiltered ("%08x\n%08X\n%08X\n%08X\n", xxx.foo[0], xxx.foo[1], xxx.foo[2],
2100           xxx.foo[3]);
2101 }
2102 #endif /* MAINTENANCE_CMDS */
2103
2104 void
2105 _initialize_hppa_tdep ()
2106 {
2107 #ifdef MAINTENANCE_CMDS
2108   add_cmd ("unwind", class_maintenance, unwind_command,
2109            "Print unwind table entry at given address.",
2110            &maintenanceprintlist);
2111 #endif /* MAINTENANCE_CMDS */
2112 }