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