hppa-tdep.c revision 1.2
1/* Target-dependent code for the HP PA architecture, for GDB.
2   Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
3   Free Software Foundation, Inc.
4
5   Contributed by the Center for Software Science at the
6   University of Utah (pa-gdb-bugs@cs.utah.edu).
7
8This file is part of GDB.
9
10This program is free software; you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation; either version 2 of the License, or
13(at your option) any later version.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program; if not, write to the Free Software
22Foundation, 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
58static int extract_5_load PARAMS ((unsigned int));
59
60static unsigned extract_5R_store PARAMS ((unsigned int));
61
62static unsigned extract_5r_store PARAMS ((unsigned int));
63
64static void find_dummy_frame_regs PARAMS ((struct frame_info *,
65					   struct frame_saved_regs *));
66
67static int find_proc_framesize PARAMS ((CORE_ADDR));
68
69static int find_return_regnum PARAMS ((CORE_ADDR));
70
71struct unwind_table_entry *find_unwind_entry PARAMS ((CORE_ADDR));
72
73static int extract_17 PARAMS ((unsigned int));
74
75static unsigned deposit_21 PARAMS ((unsigned int, unsigned int));
76
77static int extract_21 PARAMS ((unsigned));
78
79static unsigned deposit_14 PARAMS ((int, unsigned int));
80
81static int extract_14 PARAMS ((unsigned));
82
83static void unwind_command PARAMS ((char *, int));
84
85static int low_sign_extend PARAMS ((unsigned int, unsigned int));
86
87static int sign_extend PARAMS ((unsigned int, unsigned int));
88
89static int restore_pc_queue PARAMS ((struct frame_saved_regs *));
90
91static int hppa_alignof PARAMS ((struct type *));
92
93static int prologue_inst_adjust_sp PARAMS ((unsigned long));
94
95static int is_branch PARAMS ((unsigned long));
96
97static int inst_saves_gr PARAMS ((unsigned long));
98
99static int inst_saves_fr PARAMS ((unsigned long));
100
101static int pc_in_interrupt_handler PARAMS ((CORE_ADDR));
102
103static int pc_in_linker_stub PARAMS ((CORE_ADDR));
104
105static int compare_unwind_entries PARAMS ((const void *, const void *));
106
107static void read_unwind_info PARAMS ((struct objfile *));
108
109static void internalize_unwinds PARAMS ((struct objfile *,
110					 struct unwind_table_entry *,
111					 asection *, unsigned int,
112					 unsigned int, CORE_ADDR));
113static void pa_print_registers PARAMS ((char *, int, int));
114static void pa_print_fp_reg PARAMS ((int));
115
116
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
123static int
124sign_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
132static int
133low_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
143unsigned
144get_field (val, from, to)
145     unsigned val, from, to;
146{
147  val = val >> 31 - to;
148  return val & ((1 << 32 - from) - 1);
149}
150
151unsigned
152set_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
161int
162extract_3 (word)
163     unsigned word;
164{
165  return GET_FIELD (word, 18, 18) << 2 | GET_FIELD (word, 16, 17);
166}
167
168#endif
169
170static int
171extract_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
181int
182extract_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
192static unsigned
193extract_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
201static unsigned
202extract_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
212int
213extract_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
223static int
224extract_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
232static unsigned
233deposit_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
244static int
245extract_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
268static unsigned
269deposit_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
290int
291extract_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
301unsigned int
302deposit_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
318static int
319extract_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
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
333static int
334compare_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
349static void
350internalize_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
418static void
419read_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
540struct unwind_table_entry *
541find_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.  */
596int
597hpread_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
612static int
613pc_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
633static int
634pc_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
700static int
701find_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.  */
718static int
719find_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.  */
748static int rp_saved PARAMS ((CORE_ADDR));
749
750static int
751rp_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
786int
787frameless_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
800CORE_ADDR
801saved_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
820CORE_ADDR
821hppa_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
882restart:
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
943/* We need to correct the PC and the FP for the outermost frame when we are
944   in a system call.  */
945
946void
947init_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
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
1005CORE_ADDR
1006frame_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
1177/* To see if a frame chain is valid, see if the caller looks like it
1178   was compiled with gcc. */
1179
1180int
1181frame_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
1244void
1245push_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
1318static void
1319find_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
1351void
1352hppa_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
1446static int
1447restore_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
1500CORE_ADDR
1501hppa_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
1545CORE_ADDR
1546hppa_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
1748CORE_ADDR
1749target_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
1766void
1767target_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
1788static int
1789hppa_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
1822void
1823pa_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
1841static void
1842pa_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
1866static void
1867pa_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
1914int
1915in_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
2007int
2008in_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
2082CORE_ADDR
2083skip_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
2260static int
2261prologue_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
2296static int
2297is_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
2327static int
2328inst_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
2355static int
2356inst_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
2370CORE_ADDR
2371skip_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
2383restart:
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
2594void
2595hppa_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
2793static void
2794unwind_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
2866void
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}
2877