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