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