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