3b5ee347db98657f95bad8ca2e1a229e1fa30d49
[external/binutils.git] / gdb / hppa-tdep.c
1 /* Target-dependent code for the HP PA architecture, for GDB.
2    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
3    1998, 1999, 2000, 2001 Free Software Foundation, Inc.
4
5    Contributed by the Center for Software Science at the
6    University of Utah (pa-gdb-bugs@cs.utah.edu).
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place - Suite 330,
23    Boston, MA 02111-1307, USA.  */
24
25 #include "defs.h"
26 #include "frame.h"
27 #include "bfd.h"
28 #include "inferior.h"
29 #include "value.h"
30 #include "regcache.h"
31
32 /* For argument passing to the inferior */
33 #include "symtab.h"
34
35 #ifdef USG
36 #include <sys/types.h>
37 #endif
38
39 #include <dl.h>
40 #include <sys/param.h>
41 #include <signal.h>
42
43 #include <sys/ptrace.h>
44 #include <machine/save_state.h>
45
46 #ifdef COFF_ENCAPSULATE
47 #include "a.out.encap.h"
48 #else
49 #endif
50
51 /*#include <sys/user.h>         After a.out.h  */
52 #include <sys/file.h>
53 #include "gdb_stat.h"
54 #include "gdb_wait.h"
55
56 #include "gdbcore.h"
57 #include "gdbcmd.h"
58 #include "target.h"
59 #include "symfile.h"
60 #include "objfiles.h"
61
62 /* To support detection of the pseudo-initial frame
63    that threads have. */
64 #define THREAD_INITIAL_FRAME_SYMBOL  "__pthread_exit"
65 #define THREAD_INITIAL_FRAME_SYM_LEN  sizeof(THREAD_INITIAL_FRAME_SYMBOL)
66
67 static int extract_5_load (unsigned int);
68
69 static unsigned extract_5R_store (unsigned int);
70
71 static unsigned extract_5r_store (unsigned int);
72
73 static void find_dummy_frame_regs (struct frame_info *,
74                                    struct frame_saved_regs *);
75
76 static int find_proc_framesize (CORE_ADDR);
77
78 static int find_return_regnum (CORE_ADDR);
79
80 struct unwind_table_entry *find_unwind_entry (CORE_ADDR);
81
82 static int extract_17 (unsigned int);
83
84 static unsigned deposit_21 (unsigned int, unsigned int);
85
86 static int extract_21 (unsigned);
87
88 static unsigned deposit_14 (int, unsigned int);
89
90 static int extract_14 (unsigned);
91
92 static void unwind_command (char *, int);
93
94 static int low_sign_extend (unsigned int, unsigned int);
95
96 static int sign_extend (unsigned int, unsigned int);
97
98 static int restore_pc_queue (struct frame_saved_regs *);
99
100 static int hppa_alignof (struct type *);
101
102 /* To support multi-threading and stepping. */
103 int hppa_prepare_to_proceed ();
104
105 static int prologue_inst_adjust_sp (unsigned long);
106
107 static int is_branch (unsigned long);
108
109 static int inst_saves_gr (unsigned long);
110
111 static int inst_saves_fr (unsigned long);
112
113 static int pc_in_interrupt_handler (CORE_ADDR);
114
115 static int pc_in_linker_stub (CORE_ADDR);
116
117 static int compare_unwind_entries (const void *, const void *);
118
119 static void read_unwind_info (struct objfile *);
120
121 static void internalize_unwinds (struct objfile *,
122                                  struct unwind_table_entry *,
123                                  asection *, unsigned int,
124                                  unsigned int, CORE_ADDR);
125 static void pa_print_registers (char *, int, int);
126 static void pa_strcat_registers (char *, int, int, struct ui_file *);
127 static void pa_register_look_aside (char *, int, long *);
128 static void pa_print_fp_reg (int);
129 static void pa_strcat_fp_reg (int, struct ui_file *, enum precision_type);
130 static void record_text_segment_lowaddr (bfd *, asection *, void *);
131
132 typedef struct
133   {
134     struct minimal_symbol *msym;
135     CORE_ADDR solib_handle;
136     CORE_ADDR return_val;
137   }
138 args_for_find_stub;
139
140 static int cover_find_stub_with_shl_get (PTR);
141
142 static int is_pa_2 = 0;         /* False */
143
144 /* This is declared in symtab.c; set to 1 in hp-symtab-read.c */
145 extern int hp_som_som_object_present;
146
147 /* In breakpoint.c */
148 extern int exception_catchpoints_are_fragile;
149
150 /* This is defined in valops.c. */
151 extern value_ptr find_function_in_inferior (char *);
152
153 /* Should call_function allocate stack space for a struct return?  */
154 int
155 hppa_use_struct_convention (int gcc_p, struct type *type)
156 {
157   return (TYPE_LENGTH (type) > 2 * REGISTER_SIZE);
158 }
159 \f
160
161 /* Routines to extract various sized constants out of hppa 
162    instructions. */
163
164 /* This assumes that no garbage lies outside of the lower bits of 
165    value. */
166
167 static int
168 sign_extend (unsigned val, unsigned bits)
169 {
170   return (int) (val >> (bits - 1) ? (-1 << bits) | val : val);
171 }
172
173 /* For many immediate values the sign bit is the low bit! */
174
175 static int
176 low_sign_extend (unsigned val, unsigned bits)
177 {
178   return (int) ((val & 0x1 ? (-1 << (bits - 1)) : 0) | val >> 1);
179 }
180
181 /* extract the immediate field from a ld{bhw}s instruction */
182
183 static int
184 extract_5_load (unsigned word)
185 {
186   return low_sign_extend (word >> 16 & MASK_5, 5);
187 }
188
189 /* extract the immediate field from a break instruction */
190
191 static unsigned
192 extract_5r_store (unsigned word)
193 {
194   return (word & MASK_5);
195 }
196
197 /* extract the immediate field from a {sr}sm instruction */
198
199 static unsigned
200 extract_5R_store (unsigned word)
201 {
202   return (word >> 16 & MASK_5);
203 }
204
205 /* extract a 14 bit immediate field */
206
207 static int
208 extract_14 (unsigned word)
209 {
210   return low_sign_extend (word & MASK_14, 14);
211 }
212
213 /* deposit a 14 bit constant in a word */
214
215 static unsigned
216 deposit_14 (int opnd, unsigned word)
217 {
218   unsigned sign = (opnd < 0 ? 1 : 0);
219
220   return word | ((unsigned) opnd << 1 & MASK_14) | sign;
221 }
222
223 /* extract a 21 bit constant */
224
225 static int
226 extract_21 (unsigned word)
227 {
228   int val;
229
230   word &= MASK_21;
231   word <<= 11;
232   val = GET_FIELD (word, 20, 20);
233   val <<= 11;
234   val |= GET_FIELD (word, 9, 19);
235   val <<= 2;
236   val |= GET_FIELD (word, 5, 6);
237   val <<= 5;
238   val |= GET_FIELD (word, 0, 4);
239   val <<= 2;
240   val |= GET_FIELD (word, 7, 8);
241   return sign_extend (val, 21) << 11;
242 }
243
244 /* deposit a 21 bit constant in a word. Although 21 bit constants are
245    usually the top 21 bits of a 32 bit constant, we assume that only
246    the low 21 bits of opnd are relevant */
247
248 static unsigned
249 deposit_21 (unsigned opnd, unsigned word)
250 {
251   unsigned val = 0;
252
253   val |= GET_FIELD (opnd, 11 + 14, 11 + 18);
254   val <<= 2;
255   val |= GET_FIELD (opnd, 11 + 12, 11 + 13);
256   val <<= 2;
257   val |= GET_FIELD (opnd, 11 + 19, 11 + 20);
258   val <<= 11;
259   val |= GET_FIELD (opnd, 11 + 1, 11 + 11);
260   val <<= 1;
261   val |= GET_FIELD (opnd, 11 + 0, 11 + 0);
262   return word | val;
263 }
264
265 /* extract a 17 bit constant from branch instructions, returning the
266    19 bit signed value. */
267
268 static int
269 extract_17 (unsigned word)
270 {
271   return sign_extend (GET_FIELD (word, 19, 28) |
272                       GET_FIELD (word, 29, 29) << 10 |
273                       GET_FIELD (word, 11, 15) << 11 |
274                       (word & 0x1) << 16, 17) << 2;
275 }
276 \f
277
278 /* Compare the start address for two unwind entries returning 1 if 
279    the first address is larger than the second, -1 if the second is
280    larger than the first, and zero if they are equal.  */
281
282 static int
283 compare_unwind_entries (const void *arg1, const void *arg2)
284 {
285   const struct unwind_table_entry *a = arg1;
286   const struct unwind_table_entry *b = arg2;
287
288   if (a->region_start > b->region_start)
289     return 1;
290   else if (a->region_start < b->region_start)
291     return -1;
292   else
293     return 0;
294 }
295
296 static CORE_ADDR low_text_segment_address;
297
298 static void
299 record_text_segment_lowaddr (bfd *abfd, asection *section, void *ignored)
300 {
301   if ((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
302        == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
303       && section->vma < low_text_segment_address)
304     low_text_segment_address = section->vma;
305 }
306
307 static void
308 internalize_unwinds (struct objfile *objfile, struct unwind_table_entry *table,
309                      asection *section, unsigned int entries, unsigned int size,
310                      CORE_ADDR text_offset)
311 {
312   /* We will read the unwind entries into temporary memory, then
313      fill in the actual unwind table.  */
314   if (size > 0)
315     {
316       unsigned long tmp;
317       unsigned i;
318       char *buf = alloca (size);
319
320       low_text_segment_address = -1;
321
322       /* If addresses are 64 bits wide, then unwinds are supposed to
323          be segment relative offsets instead of absolute addresses. 
324
325          Note that when loading a shared library (text_offset != 0) the
326          unwinds are already relative to the text_offset that will be
327          passed in.  */
328       if (TARGET_PTR_BIT == 64 && text_offset == 0)
329         {
330           bfd_map_over_sections (objfile->obfd,
331                                  record_text_segment_lowaddr, (PTR) NULL);
332
333           /* ?!? Mask off some low bits.  Should this instead subtract
334              out the lowest section's filepos or something like that?
335              This looks very hokey to me.  */
336           low_text_segment_address &= ~0xfff;
337           text_offset += low_text_segment_address;
338         }
339
340       bfd_get_section_contents (objfile->obfd, section, buf, 0, size);
341
342       /* Now internalize the information being careful to handle host/target
343          endian issues.  */
344       for (i = 0; i < entries; i++)
345         {
346           table[i].region_start = bfd_get_32 (objfile->obfd,
347                                               (bfd_byte *) buf);
348           table[i].region_start += text_offset;
349           buf += 4;
350           table[i].region_end = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
351           table[i].region_end += text_offset;
352           buf += 4;
353           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
354           buf += 4;
355           table[i].Cannot_unwind = (tmp >> 31) & 0x1;
356           table[i].Millicode = (tmp >> 30) & 0x1;
357           table[i].Millicode_save_sr0 = (tmp >> 29) & 0x1;
358           table[i].Region_description = (tmp >> 27) & 0x3;
359           table[i].reserved1 = (tmp >> 26) & 0x1;
360           table[i].Entry_SR = (tmp >> 25) & 0x1;
361           table[i].Entry_FR = (tmp >> 21) & 0xf;
362           table[i].Entry_GR = (tmp >> 16) & 0x1f;
363           table[i].Args_stored = (tmp >> 15) & 0x1;
364           table[i].Variable_Frame = (tmp >> 14) & 0x1;
365           table[i].Separate_Package_Body = (tmp >> 13) & 0x1;
366           table[i].Frame_Extension_Millicode = (tmp >> 12) & 0x1;
367           table[i].Stack_Overflow_Check = (tmp >> 11) & 0x1;
368           table[i].Two_Instruction_SP_Increment = (tmp >> 10) & 0x1;
369           table[i].Ada_Region = (tmp >> 9) & 0x1;
370           table[i].cxx_info = (tmp >> 8) & 0x1;
371           table[i].cxx_try_catch = (tmp >> 7) & 0x1;
372           table[i].sched_entry_seq = (tmp >> 6) & 0x1;
373           table[i].reserved2 = (tmp >> 5) & 0x1;
374           table[i].Save_SP = (tmp >> 4) & 0x1;
375           table[i].Save_RP = (tmp >> 3) & 0x1;
376           table[i].Save_MRP_in_frame = (tmp >> 2) & 0x1;
377           table[i].extn_ptr_defined = (tmp >> 1) & 0x1;
378           table[i].Cleanup_defined = tmp & 0x1;
379           tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf);
380           buf += 4;
381           table[i].MPE_XL_interrupt_marker = (tmp >> 31) & 0x1;
382           table[i].HP_UX_interrupt_marker = (tmp >> 30) & 0x1;
383           table[i].Large_frame = (tmp >> 29) & 0x1;
384           table[i].Pseudo_SP_Set = (tmp >> 28) & 0x1;
385           table[i].reserved4 = (tmp >> 27) & 0x1;
386           table[i].Total_frame_size = tmp & 0x7ffffff;
387
388           /* Stub unwinds are handled elsewhere. */
389           table[i].stub_unwind.stub_type = 0;
390           table[i].stub_unwind.padding = 0;
391         }
392     }
393 }
394
395 /* Read in the backtrace information stored in the `$UNWIND_START$' section of
396    the object file.  This info is used mainly by find_unwind_entry() to find
397    out the stack frame size and frame pointer used by procedures.  We put
398    everything on the psymbol obstack in the objfile so that it automatically
399    gets freed when the objfile is destroyed.  */
400
401 static void
402 read_unwind_info (struct objfile *objfile)
403 {
404   asection *unwind_sec, *stub_unwind_sec;
405   unsigned unwind_size, stub_unwind_size, total_size;
406   unsigned index, unwind_entries;
407   unsigned stub_entries, total_entries;
408   CORE_ADDR text_offset;
409   struct obj_unwind_info *ui;
410   obj_private_data_t *obj_private;
411
412   text_offset = ANOFFSET (objfile->section_offsets, 0);
413   ui = (struct obj_unwind_info *) obstack_alloc (&objfile->psymbol_obstack,
414                                            sizeof (struct obj_unwind_info));
415
416   ui->table = NULL;
417   ui->cache = NULL;
418   ui->last = -1;
419
420   /* For reasons unknown the HP PA64 tools generate multiple unwinder
421      sections in a single executable.  So we just iterate over every
422      section in the BFD looking for unwinder sections intead of trying
423      to do a lookup with bfd_get_section_by_name. 
424
425      First determine the total size of the unwind tables so that we
426      can allocate memory in a nice big hunk.  */
427   total_entries = 0;
428   for (unwind_sec = objfile->obfd->sections;
429        unwind_sec;
430        unwind_sec = unwind_sec->next)
431     {
432       if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
433           || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
434         {
435           unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
436           unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
437
438           total_entries += unwind_entries;
439         }
440     }
441
442   /* Now compute the size of the stub unwinds.  Note the ELF tools do not
443      use stub unwinds at the curren time.  */
444   stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
445
446   if (stub_unwind_sec)
447     {
448       stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
449       stub_entries = stub_unwind_size / STUB_UNWIND_ENTRY_SIZE;
450     }
451   else
452     {
453       stub_unwind_size = 0;
454       stub_entries = 0;
455     }
456
457   /* Compute total number of unwind entries and their total size.  */
458   total_entries += stub_entries;
459   total_size = total_entries * sizeof (struct unwind_table_entry);
460
461   /* Allocate memory for the unwind table.  */
462   ui->table = (struct unwind_table_entry *)
463     obstack_alloc (&objfile->psymbol_obstack, total_size);
464   ui->last = total_entries - 1;
465
466   /* Now read in each unwind section and internalize the standard unwind
467      entries.  */
468   index = 0;
469   for (unwind_sec = objfile->obfd->sections;
470        unwind_sec;
471        unwind_sec = unwind_sec->next)
472     {
473       if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
474           || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
475         {
476           unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
477           unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
478
479           internalize_unwinds (objfile, &ui->table[index], unwind_sec,
480                                unwind_entries, unwind_size, text_offset);
481           index += unwind_entries;
482         }
483     }
484
485   /* Now read in and internalize the stub unwind entries.  */
486   if (stub_unwind_size > 0)
487     {
488       unsigned int i;
489       char *buf = alloca (stub_unwind_size);
490
491       /* Read in the stub unwind entries.  */
492       bfd_get_section_contents (objfile->obfd, stub_unwind_sec, buf,
493                                 0, stub_unwind_size);
494
495       /* Now convert them into regular unwind entries.  */
496       for (i = 0; i < stub_entries; i++, index++)
497         {
498           /* Clear out the next unwind entry.  */
499           memset (&ui->table[index], 0, sizeof (struct unwind_table_entry));
500
501           /* Convert offset & size into region_start and region_end.  
502              Stuff away the stub type into "reserved" fields.  */
503           ui->table[index].region_start = bfd_get_32 (objfile->obfd,
504                                                       (bfd_byte *) buf);
505           ui->table[index].region_start += text_offset;
506           buf += 4;
507           ui->table[index].stub_unwind.stub_type = bfd_get_8 (objfile->obfd,
508                                                           (bfd_byte *) buf);
509           buf += 2;
510           ui->table[index].region_end
511             = ui->table[index].region_start + 4 *
512             (bfd_get_16 (objfile->obfd, (bfd_byte *) buf) - 1);
513           buf += 2;
514         }
515
516     }
517
518   /* Unwind table needs to be kept sorted.  */
519   qsort (ui->table, total_entries, sizeof (struct unwind_table_entry),
520          compare_unwind_entries);
521
522   /* Keep a pointer to the unwind information.  */
523   if (objfile->obj_private == NULL)
524     {
525       obj_private = (obj_private_data_t *)
526         obstack_alloc (&objfile->psymbol_obstack,
527                        sizeof (obj_private_data_t));
528       obj_private->unwind_info = NULL;
529       obj_private->so_info = NULL;
530       obj_private->dp = 0;
531
532       objfile->obj_private = (PTR) obj_private;
533     }
534   obj_private = (obj_private_data_t *) objfile->obj_private;
535   obj_private->unwind_info = ui;
536 }
537
538 /* Lookup the unwind (stack backtrace) info for the given PC.  We search all
539    of the objfiles seeking the unwind table entry for this PC.  Each objfile
540    contains a sorted list of struct unwind_table_entry.  Since we do a binary
541    search of the unwind tables, we depend upon them to be sorted.  */
542
543 struct unwind_table_entry *
544 find_unwind_entry (CORE_ADDR pc)
545 {
546   int first, middle, last;
547   struct objfile *objfile;
548
549   /* A function at address 0?  Not in HP-UX! */
550   if (pc == (CORE_ADDR) 0)
551     return NULL;
552
553   ALL_OBJFILES (objfile)
554   {
555     struct obj_unwind_info *ui;
556     ui = NULL;
557     if (objfile->obj_private)
558       ui = ((obj_private_data_t *) (objfile->obj_private))->unwind_info;
559
560     if (!ui)
561       {
562         read_unwind_info (objfile);
563         if (objfile->obj_private == NULL)
564           error ("Internal error reading unwind information.");
565         ui = ((obj_private_data_t *) (objfile->obj_private))->unwind_info;
566       }
567
568     /* First, check the cache */
569
570     if (ui->cache
571         && pc >= ui->cache->region_start
572         && pc <= ui->cache->region_end)
573       return ui->cache;
574
575     /* Not in the cache, do a binary search */
576
577     first = 0;
578     last = ui->last;
579
580     while (first <= last)
581       {
582         middle = (first + last) / 2;
583         if (pc >= ui->table[middle].region_start
584             && pc <= ui->table[middle].region_end)
585           {
586             ui->cache = &ui->table[middle];
587             return &ui->table[middle];
588           }
589
590         if (pc < ui->table[middle].region_start)
591           last = middle - 1;
592         else
593           first = middle + 1;
594       }
595   }                             /* ALL_OBJFILES() */
596   return NULL;
597 }
598
599 /* Return the adjustment necessary to make for addresses on the stack
600    as presented by hpread.c.
601
602    This is necessary because of the stack direction on the PA and the
603    bizarre way in which someone (?) decided they wanted to handle
604    frame pointerless code in GDB.  */
605 int
606 hpread_adjust_stack_address (CORE_ADDR func_addr)
607 {
608   struct unwind_table_entry *u;
609
610   u = find_unwind_entry (func_addr);
611   if (!u)
612     return 0;
613   else
614     return u->Total_frame_size << 3;
615 }
616
617 /* Called to determine if PC is in an interrupt handler of some
618    kind.  */
619
620 static int
621 pc_in_interrupt_handler (CORE_ADDR pc)
622 {
623   struct unwind_table_entry *u;
624   struct minimal_symbol *msym_us;
625
626   u = find_unwind_entry (pc);
627   if (!u)
628     return 0;
629
630   /* Oh joys.  HPUX sets the interrupt bit for _sigreturn even though
631      its frame isn't a pure interrupt frame.  Deal with this.  */
632   msym_us = lookup_minimal_symbol_by_pc (pc);
633
634   return u->HP_UX_interrupt_marker && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us));
635 }
636
637 /* Called when no unwind descriptor was found for PC.  Returns 1 if it
638    appears that PC is in a linker stub.
639
640    ?!? Need to handle stubs which appear in PA64 code.  */
641
642 static int
643 pc_in_linker_stub (CORE_ADDR pc)
644 {
645   int found_magic_instruction = 0;
646   int i;
647   char buf[4];
648
649   /* If unable to read memory, assume pc is not in a linker stub.  */
650   if (target_read_memory (pc, buf, 4) != 0)
651     return 0;
652
653   /* We are looking for something like
654
655      ; $$dyncall jams RP into this special spot in the frame (RP')
656      ; before calling the "call stub"
657      ldw     -18(sp),rp
658
659      ldsid   (rp),r1         ; Get space associated with RP into r1
660      mtsp    r1,sp           ; Move it into space register 0
661      be,n    0(sr0),rp)      ; back to your regularly scheduled program */
662
663   /* Maximum known linker stub size is 4 instructions.  Search forward
664      from the given PC, then backward.  */
665   for (i = 0; i < 4; i++)
666     {
667       /* If we hit something with an unwind, stop searching this direction.  */
668
669       if (find_unwind_entry (pc + i * 4) != 0)
670         break;
671
672       /* Check for ldsid (rp),r1 which is the magic instruction for a 
673          return from a cross-space function call.  */
674       if (read_memory_integer (pc + i * 4, 4) == 0x004010a1)
675         {
676           found_magic_instruction = 1;
677           break;
678         }
679       /* Add code to handle long call/branch and argument relocation stubs
680          here.  */
681     }
682
683   if (found_magic_instruction != 0)
684     return 1;
685
686   /* Now look backward.  */
687   for (i = 0; i < 4; i++)
688     {
689       /* If we hit something with an unwind, stop searching this direction.  */
690
691       if (find_unwind_entry (pc - i * 4) != 0)
692         break;
693
694       /* Check for ldsid (rp),r1 which is the magic instruction for a 
695          return from a cross-space function call.  */
696       if (read_memory_integer (pc - i * 4, 4) == 0x004010a1)
697         {
698           found_magic_instruction = 1;
699           break;
700         }
701       /* Add code to handle long call/branch and argument relocation stubs
702          here.  */
703     }
704   return found_magic_instruction;
705 }
706
707 static int
708 find_return_regnum (CORE_ADDR pc)
709 {
710   struct unwind_table_entry *u;
711
712   u = find_unwind_entry (pc);
713
714   if (!u)
715     return RP_REGNUM;
716
717   if (u->Millicode)
718     return 31;
719
720   return RP_REGNUM;
721 }
722
723 /* Return size of frame, or -1 if we should use a frame pointer.  */
724 static int
725 find_proc_framesize (CORE_ADDR pc)
726 {
727   struct unwind_table_entry *u;
728   struct minimal_symbol *msym_us;
729
730   /* This may indicate a bug in our callers... */
731   if (pc == (CORE_ADDR) 0)
732     return -1;
733
734   u = find_unwind_entry (pc);
735
736   if (!u)
737     {
738       if (pc_in_linker_stub (pc))
739         /* Linker stubs have a zero size frame.  */
740         return 0;
741       else
742         return -1;
743     }
744
745   msym_us = lookup_minimal_symbol_by_pc (pc);
746
747   /* If Save_SP is set, and we're not in an interrupt or signal caller,
748      then we have a frame pointer.  Use it.  */
749   if (u->Save_SP && !pc_in_interrupt_handler (pc)
750       && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us)))
751     return -1;
752
753   return u->Total_frame_size << 3;
754 }
755
756 /* Return offset from sp at which rp is saved, or 0 if not saved.  */
757 static int rp_saved (CORE_ADDR);
758
759 static int
760 rp_saved (CORE_ADDR pc)
761 {
762   struct unwind_table_entry *u;
763
764   /* A function at, and thus a return PC from, address 0?  Not in HP-UX! */
765   if (pc == (CORE_ADDR) 0)
766     return 0;
767
768   u = find_unwind_entry (pc);
769
770   if (!u)
771     {
772       if (pc_in_linker_stub (pc))
773         /* This is the so-called RP'.  */
774         return -24;
775       else
776         return 0;
777     }
778
779   if (u->Save_RP)
780     return (TARGET_PTR_BIT == 64 ? -16 : -20);
781   else if (u->stub_unwind.stub_type != 0)
782     {
783       switch (u->stub_unwind.stub_type)
784         {
785         case EXPORT:
786         case IMPORT:
787           return -24;
788         case PARAMETER_RELOCATION:
789           return -8;
790         default:
791           return 0;
792         }
793     }
794   else
795     return 0;
796 }
797 \f
798 int
799 frameless_function_invocation (struct frame_info *frame)
800 {
801   struct unwind_table_entry *u;
802
803   u = find_unwind_entry (frame->pc);
804
805   if (u == 0)
806     return 0;
807
808   return (u->Total_frame_size == 0 && u->stub_unwind.stub_type == 0);
809 }
810
811 CORE_ADDR
812 saved_pc_after_call (struct frame_info *frame)
813 {
814   int ret_regnum;
815   CORE_ADDR pc;
816   struct unwind_table_entry *u;
817
818   ret_regnum = find_return_regnum (get_frame_pc (frame));
819   pc = read_register (ret_regnum) & ~0x3;
820
821   /* If PC is in a linker stub, then we need to dig the address
822      the stub will return to out of the stack.  */
823   u = find_unwind_entry (pc);
824   if (u && u->stub_unwind.stub_type != 0)
825     return FRAME_SAVED_PC (frame);
826   else
827     return pc;
828 }
829 \f
830 CORE_ADDR
831 hppa_frame_saved_pc (struct frame_info *frame)
832 {
833   CORE_ADDR pc = get_frame_pc (frame);
834   struct unwind_table_entry *u;
835   CORE_ADDR old_pc;
836   int spun_around_loop = 0;
837   int rp_offset = 0;
838
839   /* BSD, HPUX & OSF1 all lay out the hardware state in the same manner
840      at the base of the frame in an interrupt handler.  Registers within
841      are saved in the exact same order as GDB numbers registers.  How
842      convienent.  */
843   if (pc_in_interrupt_handler (pc))
844     return read_memory_integer (frame->frame + PC_REGNUM * 4,
845                                 TARGET_PTR_BIT / 8) & ~0x3;
846
847   if ((frame->pc >= frame->frame
848        && frame->pc <= (frame->frame
849                         /* A call dummy is sized in words, but it is
850                            actually a series of instructions.  Account
851                            for that scaling factor.  */
852                         + ((REGISTER_SIZE / INSTRUCTION_SIZE)
853                            * CALL_DUMMY_LENGTH)
854                         /* Similarly we have to account for 64bit
855                            wide register saves.  */
856                         + (32 * REGISTER_SIZE)
857                         /* We always consider FP regs 8 bytes long.  */
858                         + (NUM_REGS - FP0_REGNUM) * 8
859                         /* Similarly we have to account for 64bit
860                            wide register saves.  */
861                         + (6 * REGISTER_SIZE))))
862     {
863       return read_memory_integer ((frame->frame
864                                    + (TARGET_PTR_BIT == 64 ? -16 : -20)),
865                                   TARGET_PTR_BIT / 8) & ~0x3;
866     }
867
868 #ifdef FRAME_SAVED_PC_IN_SIGTRAMP
869   /* Deal with signal handler caller frames too.  */
870   if (frame->signal_handler_caller)
871     {
872       CORE_ADDR rp;
873       FRAME_SAVED_PC_IN_SIGTRAMP (frame, &rp);
874       return rp & ~0x3;
875     }
876 #endif
877
878   if (frameless_function_invocation (frame))
879     {
880       int ret_regnum;
881
882       ret_regnum = find_return_regnum (pc);
883
884       /* If the next frame is an interrupt frame or a signal
885          handler caller, then we need to look in the saved
886          register area to get the return pointer (the values
887          in the registers may not correspond to anything useful).  */
888       if (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],
896                                    TARGET_PTR_BIT / 8) & 0x2)
897             {
898               pc = read_memory_integer (saved_regs.regs[31],
899                                         TARGET_PTR_BIT / 8) & ~0x3;
900
901               /* Syscalls are really two frames.  The syscall stub itself
902                  with a return pointer in %rp and the kernel call with
903                  a return pointer in %r31.  We return the %rp variant
904                  if %r31 is the same as frame->pc.  */
905               if (pc == frame->pc)
906                 pc = read_memory_integer (saved_regs.regs[RP_REGNUM],
907                                           TARGET_PTR_BIT / 8) & ~0x3;
908             }
909           else
910             pc = read_memory_integer (saved_regs.regs[RP_REGNUM],
911                                       TARGET_PTR_BIT / 8) & ~0x3;
912         }
913       else
914         pc = read_register (ret_regnum) & ~0x3;
915     }
916   else
917     {
918       spun_around_loop = 0;
919       old_pc = pc;
920
921     restart:
922       rp_offset = rp_saved (pc);
923
924       /* Similar to code in frameless function case.  If the next
925          frame is a signal or interrupt handler, then dig the right
926          information out of the saved register info.  */
927       if (rp_offset == 0
928           && frame->next
929           && (frame->next->signal_handler_caller
930               || pc_in_interrupt_handler (frame->next->pc)))
931         {
932           struct frame_saved_regs saved_regs;
933
934           get_frame_saved_regs (frame->next, &saved_regs);
935           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM],
936                                    TARGET_PTR_BIT / 8) & 0x2)
937             {
938               pc = read_memory_integer (saved_regs.regs[31],
939                                         TARGET_PTR_BIT / 8) & ~0x3;
940
941               /* Syscalls are really two frames.  The syscall stub itself
942                  with a return pointer in %rp and the kernel call with
943                  a return pointer in %r31.  We return the %rp variant
944                  if %r31 is the same as frame->pc.  */
945               if (pc == frame->pc)
946                 pc = read_memory_integer (saved_regs.regs[RP_REGNUM],
947                                           TARGET_PTR_BIT / 8) & ~0x3;
948             }
949           else
950             pc = read_memory_integer (saved_regs.regs[RP_REGNUM],
951                                       TARGET_PTR_BIT / 8) & ~0x3;
952         }
953       else if (rp_offset == 0)
954         {
955           old_pc = pc;
956           pc = read_register (RP_REGNUM) & ~0x3;
957         }
958       else
959         {
960           old_pc = pc;
961           pc = read_memory_integer (frame->frame + rp_offset,
962                                     TARGET_PTR_BIT / 8) & ~0x3;
963         }
964     }
965
966   /* If PC is inside a linker stub, then dig out the address the stub
967      will return to. 
968
969      Don't do this for long branch stubs.  Why?  For some unknown reason
970      _start is marked as a long branch stub in hpux10.  */
971   u = find_unwind_entry (pc);
972   if (u && u->stub_unwind.stub_type != 0
973       && u->stub_unwind.stub_type != LONG_BRANCH)
974     {
975       unsigned int insn;
976
977       /* If this is a dynamic executable, and we're in a signal handler,
978          then the call chain will eventually point us into the stub for
979          _sigreturn.  Unlike most cases, we'll be pointed to the branch
980          to the real sigreturn rather than the code after the real branch!. 
981
982          Else, try to dig the address the stub will return to in the normal
983          fashion.  */
984       insn = read_memory_integer (pc, 4);
985       if ((insn & 0xfc00e000) == 0xe8000000)
986         return (pc + extract_17 (insn) + 8) & ~0x3;
987       else
988         {
989           if (old_pc == pc)
990             spun_around_loop++;
991
992           if (spun_around_loop > 1)
993             {
994               /* We're just about to go around the loop again with
995                  no more hope of success.  Die. */
996               error ("Unable to find return pc for this frame");
997             }
998           else
999             goto restart;
1000         }
1001     }
1002
1003   return pc;
1004 }
1005 \f
1006 /* We need to correct the PC and the FP for the outermost frame when we are
1007    in a system call.  */
1008
1009 void
1010 init_extra_frame_info (int fromleaf, struct frame_info *frame)
1011 {
1012   int flags;
1013   int framesize;
1014
1015   if (frame->next && !fromleaf)
1016     return;
1017
1018   /* If the next frame represents a frameless function invocation
1019      then we have to do some adjustments that are normally done by
1020      FRAME_CHAIN.  (FRAME_CHAIN is not called in this case.)  */
1021   if (fromleaf)
1022     {
1023       /* Find the framesize of *this* frame without peeking at the PC
1024          in the current frame structure (it isn't set yet).  */
1025       framesize = find_proc_framesize (FRAME_SAVED_PC (get_next_frame (frame)));
1026
1027       /* Now adjust our base frame accordingly.  If we have a frame pointer
1028          use it, else subtract the size of this frame from the current
1029          frame.  (we always want frame->frame to point at the lowest address
1030          in the frame).  */
1031       if (framesize == -1)
1032         frame->frame = TARGET_READ_FP ();
1033       else
1034         frame->frame -= framesize;
1035       return;
1036     }
1037
1038   flags = read_register (FLAGS_REGNUM);
1039   if (flags & 2)                /* In system call? */
1040     frame->pc = read_register (31) & ~0x3;
1041
1042   /* The outermost frame is always derived from PC-framesize
1043
1044      One might think frameless innermost frames should have
1045      a frame->frame that is the same as the parent's frame->frame.
1046      That is wrong; frame->frame in that case should be the *high*
1047      address of the parent's frame.  It's complicated as hell to
1048      explain, but the parent *always* creates some stack space for
1049      the child.  So the child actually does have a frame of some
1050      sorts, and its base is the high address in its parent's frame.  */
1051   framesize = find_proc_framesize (frame->pc);
1052   if (framesize == -1)
1053     frame->frame = TARGET_READ_FP ();
1054   else
1055     frame->frame = read_register (SP_REGNUM) - framesize;
1056 }
1057 \f
1058 /* Given a GDB frame, determine the address of the calling function's frame.
1059    This will be used to create a new GDB frame struct, and then
1060    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
1061
1062    This may involve searching through prologues for several functions
1063    at boundaries where GCC calls HP C code, or where code which has
1064    a frame pointer calls code without a frame pointer.  */
1065
1066 CORE_ADDR
1067 frame_chain (struct frame_info *frame)
1068 {
1069   int my_framesize, caller_framesize;
1070   struct unwind_table_entry *u;
1071   CORE_ADDR frame_base;
1072   struct frame_info *tmp_frame;
1073
1074   /* A frame in the current frame list, or zero.  */
1075   struct frame_info *saved_regs_frame = 0;
1076   /* Where the registers were saved in saved_regs_frame.
1077      If saved_regs_frame is zero, this is garbage.  */
1078   struct frame_saved_regs saved_regs;
1079
1080   CORE_ADDR caller_pc;
1081
1082   struct minimal_symbol *min_frame_symbol;
1083   struct symbol *frame_symbol;
1084   char *frame_symbol_name;
1085
1086   /* If this is a threaded application, and we see the
1087      routine "__pthread_exit", treat it as the stack root
1088      for this thread. */
1089   min_frame_symbol = lookup_minimal_symbol_by_pc (frame->pc);
1090   frame_symbol = find_pc_function (frame->pc);
1091
1092   if ((min_frame_symbol != 0) /* && (frame_symbol == 0) */ )
1093     {
1094       /* The test above for "no user function name" would defend
1095          against the slim likelihood that a user might define a
1096          routine named "__pthread_exit" and then try to debug it.
1097
1098          If it weren't commented out, and you tried to debug the
1099          pthread library itself, you'd get errors.
1100
1101          So for today, we don't make that check. */
1102       frame_symbol_name = SYMBOL_NAME (min_frame_symbol);
1103       if (frame_symbol_name != 0)
1104         {
1105           if (0 == strncmp (frame_symbol_name,
1106                             THREAD_INITIAL_FRAME_SYMBOL,
1107                             THREAD_INITIAL_FRAME_SYM_LEN))
1108             {
1109               /* Pretend we've reached the bottom of the stack. */
1110               return (CORE_ADDR) 0;
1111             }
1112         }
1113     }                           /* End of hacky code for threads. */
1114
1115   /* Handle HPUX, BSD, and OSF1 style interrupt frames first.  These
1116      are easy; at *sp we have a full save state strucutre which we can
1117      pull the old stack pointer from.  Also see frame_saved_pc for
1118      code to dig a saved PC out of the save state structure.  */
1119   if (pc_in_interrupt_handler (frame->pc))
1120     frame_base = read_memory_integer (frame->frame + SP_REGNUM * 4,
1121                                       TARGET_PTR_BIT / 8);
1122 #ifdef FRAME_BASE_BEFORE_SIGTRAMP
1123   else if (frame->signal_handler_caller)
1124     {
1125       FRAME_BASE_BEFORE_SIGTRAMP (frame, &frame_base);
1126     }
1127 #endif
1128   else
1129     frame_base = frame->frame;
1130
1131   /* Get frame sizes for the current frame and the frame of the 
1132      caller.  */
1133   my_framesize = find_proc_framesize (frame->pc);
1134   caller_pc = FRAME_SAVED_PC (frame);
1135
1136   /* If we can't determine the caller's PC, then it's not likely we can
1137      really determine anything meaningful about its frame.  We'll consider
1138      this to be stack bottom. */
1139   if (caller_pc == (CORE_ADDR) 0)
1140     return (CORE_ADDR) 0;
1141
1142   caller_framesize = find_proc_framesize (FRAME_SAVED_PC (frame));
1143
1144   /* If caller does not have a frame pointer, then its frame
1145      can be found at current_frame - caller_framesize.  */
1146   if (caller_framesize != -1)
1147     {
1148       return frame_base - caller_framesize;
1149     }
1150   /* Both caller and callee have frame pointers and are GCC compiled
1151      (SAVE_SP bit in unwind descriptor is on for both functions.
1152      The previous frame pointer is found at the top of the current frame.  */
1153   if (caller_framesize == -1 && my_framesize == -1)
1154     {
1155       return read_memory_integer (frame_base, TARGET_PTR_BIT / 8);
1156     }
1157   /* Caller has a frame pointer, but callee does not.  This is a little
1158      more difficult as GCC and HP C lay out locals and callee register save
1159      areas very differently.
1160
1161      The previous frame pointer could be in a register, or in one of 
1162      several areas on the stack.
1163
1164      Walk from the current frame to the innermost frame examining 
1165      unwind descriptors to determine if %r3 ever gets saved into the
1166      stack.  If so return whatever value got saved into the stack.
1167      If it was never saved in the stack, then the value in %r3 is still
1168      valid, so use it. 
1169
1170      We use information from unwind descriptors to determine if %r3
1171      is saved into the stack (Entry_GR field has this information).  */
1172
1173   for (tmp_frame = frame; tmp_frame; tmp_frame = tmp_frame->next)
1174     {
1175       u = find_unwind_entry (tmp_frame->pc);
1176
1177       if (!u)
1178         {
1179           /* We could find this information by examining prologues.  I don't
1180              think anyone has actually written any tools (not even "strip")
1181              which leave them out of an executable, so maybe this is a moot
1182              point.  */
1183           /* ??rehrauer: Actually, it's quite possible to stepi your way into
1184              code that doesn't have unwind entries.  For example, stepping into
1185              the dynamic linker will give you a PC that has none.  Thus, I've
1186              disabled this warning. */
1187 #if 0
1188           warning ("Unable to find unwind for PC 0x%x -- Help!", tmp_frame->pc);
1189 #endif
1190           return (CORE_ADDR) 0;
1191         }
1192
1193       if (u->Save_SP
1194           || tmp_frame->signal_handler_caller
1195           || pc_in_interrupt_handler (tmp_frame->pc))
1196         break;
1197
1198       /* Entry_GR specifies the number of callee-saved general registers
1199          saved in the stack.  It starts at %r3, so %r3 would be 1.  */
1200       if (u->Entry_GR >= 1)
1201         {
1202           /* The unwind entry claims that r3 is saved here.  However,
1203              in optimized code, GCC often doesn't actually save r3.
1204              We'll discover this if we look at the prologue.  */
1205           get_frame_saved_regs (tmp_frame, &saved_regs);
1206           saved_regs_frame = tmp_frame;
1207
1208           /* If we have an address for r3, that's good.  */
1209           if (saved_regs.regs[FP_REGNUM])
1210             break;
1211         }
1212     }
1213
1214   if (tmp_frame)
1215     {
1216       /* We may have walked down the chain into a function with a frame
1217          pointer.  */
1218       if (u->Save_SP
1219           && !tmp_frame->signal_handler_caller
1220           && !pc_in_interrupt_handler (tmp_frame->pc))
1221         {
1222           return read_memory_integer (tmp_frame->frame, TARGET_PTR_BIT / 8);
1223         }
1224       /* %r3 was saved somewhere in the stack.  Dig it out.  */
1225       else
1226         {
1227           /* Sick.
1228
1229              For optimization purposes many kernels don't have the
1230              callee saved registers into the save_state structure upon
1231              entry into the kernel for a syscall; the optimization
1232              is usually turned off if the process is being traced so
1233              that the debugger can get full register state for the
1234              process.
1235
1236              This scheme works well except for two cases:
1237
1238              * Attaching to a process when the process is in the
1239              kernel performing a system call (debugger can't get
1240              full register state for the inferior process since
1241              the process wasn't being traced when it entered the
1242              system call).
1243
1244              * Register state is not complete if the system call
1245              causes the process to core dump.
1246
1247
1248              The following heinous code is an attempt to deal with
1249              the lack of register state in a core dump.  It will
1250              fail miserably if the function which performs the
1251              system call has a variable sized stack frame.  */
1252
1253           if (tmp_frame != saved_regs_frame)
1254             get_frame_saved_regs (tmp_frame, &saved_regs);
1255
1256           /* Abominable hack.  */
1257           if (current_target.to_has_execution == 0
1258               && ((saved_regs.regs[FLAGS_REGNUM]
1259                    && (read_memory_integer (saved_regs.regs[FLAGS_REGNUM],
1260                                             TARGET_PTR_BIT / 8)
1261                        & 0x2))
1262                   || (saved_regs.regs[FLAGS_REGNUM] == 0
1263                       && read_register (FLAGS_REGNUM) & 0x2)))
1264             {
1265               u = find_unwind_entry (FRAME_SAVED_PC (frame));
1266               if (!u)
1267                 {
1268                   return read_memory_integer (saved_regs.regs[FP_REGNUM],
1269                                               TARGET_PTR_BIT / 8);
1270                 }
1271               else
1272                 {
1273                   return frame_base - (u->Total_frame_size << 3);
1274                 }
1275             }
1276
1277           return read_memory_integer (saved_regs.regs[FP_REGNUM],
1278                                       TARGET_PTR_BIT / 8);
1279         }
1280     }
1281   else
1282     {
1283       /* Get the innermost frame.  */
1284       tmp_frame = frame;
1285       while (tmp_frame->next != NULL)
1286         tmp_frame = tmp_frame->next;
1287
1288       if (tmp_frame != saved_regs_frame)
1289         get_frame_saved_regs (tmp_frame, &saved_regs);
1290
1291       /* Abominable hack.  See above.  */
1292       if (current_target.to_has_execution == 0
1293           && ((saved_regs.regs[FLAGS_REGNUM]
1294                && (read_memory_integer (saved_regs.regs[FLAGS_REGNUM],
1295                                         TARGET_PTR_BIT / 8)
1296                    & 0x2))
1297               || (saved_regs.regs[FLAGS_REGNUM] == 0
1298                   && read_register (FLAGS_REGNUM) & 0x2)))
1299         {
1300           u = find_unwind_entry (FRAME_SAVED_PC (frame));
1301           if (!u)
1302             {
1303               return read_memory_integer (saved_regs.regs[FP_REGNUM],
1304                                           TARGET_PTR_BIT / 8);
1305             }
1306           else
1307             {
1308               return frame_base - (u->Total_frame_size << 3);
1309             }
1310         }
1311
1312       /* The value in %r3 was never saved into the stack (thus %r3 still
1313          holds the value of the previous frame pointer).  */
1314       return TARGET_READ_FP ();
1315     }
1316 }
1317 \f
1318
1319 /* To see if a frame chain is valid, see if the caller looks like it
1320    was compiled with gcc. */
1321
1322 int
1323 hppa_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
1324 {
1325   struct minimal_symbol *msym_us;
1326   struct minimal_symbol *msym_start;
1327   struct unwind_table_entry *u, *next_u = NULL;
1328   struct frame_info *next;
1329
1330   if (!chain)
1331     return 0;
1332
1333   u = find_unwind_entry (thisframe->pc);
1334
1335   if (u == NULL)
1336     return 1;
1337
1338   /* We can't just check that the same of msym_us is "_start", because
1339      someone idiotically decided that they were going to make a Ltext_end
1340      symbol with the same address.  This Ltext_end symbol is totally
1341      indistinguishable (as nearly as I can tell) from the symbol for a function
1342      which is (legitimately, since it is in the user's namespace)
1343      named Ltext_end, so we can't just ignore it.  */
1344   msym_us = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
1345   msym_start = lookup_minimal_symbol ("_start", NULL, NULL);
1346   if (msym_us
1347       && msym_start
1348       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
1349     return 0;
1350
1351   /* Grrrr.  Some new idiot decided that they don't want _start for the
1352      PRO configurations; $START$ calls main directly....  Deal with it.  */
1353   msym_start = lookup_minimal_symbol ("$START$", NULL, NULL);
1354   if (msym_us
1355       && msym_start
1356       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
1357     return 0;
1358
1359   next = get_next_frame (thisframe);
1360   if (next)
1361     next_u = find_unwind_entry (next->pc);
1362
1363   /* If this frame does not save SP, has no stack, isn't a stub,
1364      and doesn't "call" an interrupt routine or signal handler caller,
1365      then its not valid.  */
1366   if (u->Save_SP || u->Total_frame_size || u->stub_unwind.stub_type != 0
1367       || (thisframe->next && thisframe->next->signal_handler_caller)
1368       || (next_u && next_u->HP_UX_interrupt_marker))
1369     return 1;
1370
1371   if (pc_in_linker_stub (thisframe->pc))
1372     return 1;
1373
1374   return 0;
1375 }
1376
1377 /*
1378    These functions deal with saving and restoring register state
1379    around a function call in the inferior. They keep the stack
1380    double-word aligned; eventually, on an hp700, the stack will have
1381    to be aligned to a 64-byte boundary. */
1382
1383 void
1384 push_dummy_frame (struct inferior_status *inf_status)
1385 {
1386   CORE_ADDR sp, pc, pcspace;
1387   register int regnum;
1388   CORE_ADDR int_buffer;
1389   double freg_buffer;
1390
1391   /* Oh, what a hack.  If we're trying to perform an inferior call
1392      while the inferior is asleep, we have to make sure to clear
1393      the "in system call" bit in the flag register (the call will
1394      start after the syscall returns, so we're no longer in the system
1395      call!)  This state is kept in "inf_status", change it there.
1396
1397      We also need a number of horrid hacks to deal with lossage in the
1398      PC queue registers (apparently they're not valid when the in syscall
1399      bit is set).  */
1400   pc = target_read_pc (inferior_pid);
1401   int_buffer = read_register (FLAGS_REGNUM);
1402   if (int_buffer & 0x2)
1403     {
1404       unsigned int sid;
1405       int_buffer &= ~0x2;
1406       write_inferior_status_register (inf_status, 0, int_buffer);
1407       write_inferior_status_register (inf_status, PCOQ_HEAD_REGNUM, pc + 0);
1408       write_inferior_status_register (inf_status, PCOQ_TAIL_REGNUM, pc + 4);
1409       sid = (pc >> 30) & 0x3;
1410       if (sid == 0)
1411         pcspace = read_register (SR4_REGNUM);
1412       else
1413         pcspace = read_register (SR4_REGNUM + 4 + sid);
1414       write_inferior_status_register (inf_status, PCSQ_HEAD_REGNUM, pcspace);
1415       write_inferior_status_register (inf_status, PCSQ_TAIL_REGNUM, pcspace);
1416     }
1417   else
1418     pcspace = read_register (PCSQ_HEAD_REGNUM);
1419
1420   /* Space for "arguments"; the RP goes in here. */
1421   sp = read_register (SP_REGNUM) + 48;
1422   int_buffer = read_register (RP_REGNUM) | 0x3;
1423
1424   /* The 32bit and 64bit ABIs save the return pointer into different
1425      stack slots.  */
1426   if (REGISTER_SIZE == 8)
1427     write_memory (sp - 16, (char *) &int_buffer, REGISTER_SIZE);
1428   else
1429     write_memory (sp - 20, (char *) &int_buffer, REGISTER_SIZE);
1430
1431   int_buffer = TARGET_READ_FP ();
1432   write_memory (sp, (char *) &int_buffer, REGISTER_SIZE);
1433
1434   write_register (FP_REGNUM, sp);
1435
1436   sp += 2 * REGISTER_SIZE;
1437
1438   for (regnum = 1; regnum < 32; regnum++)
1439     if (regnum != RP_REGNUM && regnum != FP_REGNUM)
1440       sp = push_word (sp, read_register (regnum));
1441
1442   /* This is not necessary for the 64bit ABI.  In fact it is dangerous.  */
1443   if (REGISTER_SIZE != 8)
1444     sp += 4;
1445
1446   for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)
1447     {
1448       read_register_bytes (REGISTER_BYTE (regnum), (char *) &freg_buffer, 8);
1449       sp = push_bytes (sp, (char *) &freg_buffer, 8);
1450     }
1451   sp = push_word (sp, read_register (IPSW_REGNUM));
1452   sp = push_word (sp, read_register (SAR_REGNUM));
1453   sp = push_word (sp, pc);
1454   sp = push_word (sp, pcspace);
1455   sp = push_word (sp, pc + 4);
1456   sp = push_word (sp, pcspace);
1457   write_register (SP_REGNUM, sp);
1458 }
1459
1460 static void
1461 find_dummy_frame_regs (struct frame_info *frame,
1462                        struct frame_saved_regs *frame_saved_regs)
1463 {
1464   CORE_ADDR fp = frame->frame;
1465   int i;
1466
1467   /* The 32bit and 64bit ABIs save RP into different locations.  */
1468   if (REGISTER_SIZE == 8)
1469     frame_saved_regs->regs[RP_REGNUM] = (fp - 16) & ~0x3;
1470   else
1471     frame_saved_regs->regs[RP_REGNUM] = (fp - 20) & ~0x3;
1472
1473   frame_saved_regs->regs[FP_REGNUM] = fp;
1474
1475   frame_saved_regs->regs[1] = fp + (2 * REGISTER_SIZE);
1476
1477   for (fp += 3 * REGISTER_SIZE, i = 3; i < 32; i++)
1478     {
1479       if (i != FP_REGNUM)
1480         {
1481           frame_saved_regs->regs[i] = fp;
1482           fp += REGISTER_SIZE;
1483         }
1484     }
1485
1486   /* This is not necessary or desirable for the 64bit ABI.  */
1487   if (REGISTER_SIZE != 8)
1488     fp += 4;
1489
1490   for (i = FP0_REGNUM; i < NUM_REGS; i++, fp += 8)
1491     frame_saved_regs->regs[i] = fp;
1492
1493   frame_saved_regs->regs[IPSW_REGNUM] = fp;
1494   frame_saved_regs->regs[SAR_REGNUM] = fp + REGISTER_SIZE;
1495   frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp + 2 * REGISTER_SIZE;
1496   frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp + 3 * REGISTER_SIZE;
1497   frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp + 4 * REGISTER_SIZE;
1498   frame_saved_regs->regs[PCSQ_TAIL_REGNUM] = fp + 5 * REGISTER_SIZE;
1499 }
1500
1501 void
1502 hppa_pop_frame (void)
1503 {
1504   register struct frame_info *frame = get_current_frame ();
1505   register CORE_ADDR fp, npc, target_pc;
1506   register int regnum;
1507   struct frame_saved_regs fsr;
1508   double freg_buffer;
1509
1510   fp = FRAME_FP (frame);
1511   get_frame_saved_regs (frame, &fsr);
1512
1513 #ifndef NO_PC_SPACE_QUEUE_RESTORE
1514   if (fsr.regs[IPSW_REGNUM])    /* Restoring a call dummy frame */
1515     restore_pc_queue (&fsr);
1516 #endif
1517
1518   for (regnum = 31; regnum > 0; regnum--)
1519     if (fsr.regs[regnum])
1520       write_register (regnum, read_memory_integer (fsr.regs[regnum],
1521                       REGISTER_SIZE));
1522
1523   for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM; regnum--)
1524     if (fsr.regs[regnum])
1525       {
1526         read_memory (fsr.regs[regnum], (char *) &freg_buffer, 8);
1527         write_register_bytes (REGISTER_BYTE (regnum), (char *) &freg_buffer, 8);
1528       }
1529
1530   if (fsr.regs[IPSW_REGNUM])
1531     write_register (IPSW_REGNUM,
1532                     read_memory_integer (fsr.regs[IPSW_REGNUM],
1533                                          REGISTER_SIZE));
1534
1535   if (fsr.regs[SAR_REGNUM])
1536     write_register (SAR_REGNUM,
1537                     read_memory_integer (fsr.regs[SAR_REGNUM],
1538                                          REGISTER_SIZE));
1539
1540   /* If the PC was explicitly saved, then just restore it.  */
1541   if (fsr.regs[PCOQ_TAIL_REGNUM])
1542     {
1543       npc = read_memory_integer (fsr.regs[PCOQ_TAIL_REGNUM],
1544                                  REGISTER_SIZE);
1545       write_register (PCOQ_TAIL_REGNUM, npc);
1546     }
1547   /* Else use the value in %rp to set the new PC.  */
1548   else
1549     {
1550       npc = read_register (RP_REGNUM);
1551       write_pc (npc);
1552     }
1553
1554   write_register (FP_REGNUM, read_memory_integer (fp, REGISTER_SIZE));
1555
1556   if (fsr.regs[IPSW_REGNUM])    /* call dummy */
1557     write_register (SP_REGNUM, fp - 48);
1558   else
1559     write_register (SP_REGNUM, fp);
1560
1561   /* The PC we just restored may be inside a return trampoline.  If so
1562      we want to restart the inferior and run it through the trampoline.
1563
1564      Do this by setting a momentary breakpoint at the location the
1565      trampoline returns to. 
1566
1567      Don't skip through the trampoline if we're popping a dummy frame.  */
1568   target_pc = SKIP_TRAMPOLINE_CODE (npc & ~0x3) & ~0x3;
1569   if (target_pc && !fsr.regs[IPSW_REGNUM])
1570     {
1571       struct symtab_and_line sal;
1572       struct breakpoint *breakpoint;
1573       struct cleanup *old_chain;
1574
1575       /* Set up our breakpoint.   Set it to be silent as the MI code
1576          for "return_command" will print the frame we returned to.  */
1577       sal = find_pc_line (target_pc, 0);
1578       sal.pc = target_pc;
1579       breakpoint = set_momentary_breakpoint (sal, NULL, bp_finish);
1580       breakpoint->silent = 1;
1581
1582       /* So we can clean things up.  */
1583       old_chain = make_cleanup_delete_breakpoint (breakpoint);
1584
1585       /* Start up the inferior.  */
1586       clear_proceed_status ();
1587       proceed_to_finish = 1;
1588       proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1589
1590       /* Perform our cleanups.  */
1591       do_cleanups (old_chain);
1592     }
1593   flush_cached_frames ();
1594 }
1595
1596 /* After returning to a dummy on the stack, restore the instruction
1597    queue space registers. */
1598
1599 static int
1600 restore_pc_queue (struct frame_saved_regs *fsr)
1601 {
1602   CORE_ADDR pc = read_pc ();
1603   CORE_ADDR new_pc = read_memory_integer (fsr->regs[PCOQ_HEAD_REGNUM],
1604                                           TARGET_PTR_BIT / 8);
1605   struct target_waitstatus w;
1606   int insn_count;
1607
1608   /* Advance past break instruction in the call dummy. */
1609   write_register (PCOQ_HEAD_REGNUM, pc + 4);
1610   write_register (PCOQ_TAIL_REGNUM, pc + 8);
1611
1612   /* HPUX doesn't let us set the space registers or the space
1613      registers of the PC queue through ptrace. Boo, hiss.
1614      Conveniently, the call dummy has this sequence of instructions
1615      after the break:
1616      mtsp r21, sr0
1617      ble,n 0(sr0, r22)
1618
1619      So, load up the registers and single step until we are in the
1620      right place. */
1621
1622   write_register (21, read_memory_integer (fsr->regs[PCSQ_HEAD_REGNUM],
1623                                            REGISTER_SIZE));
1624   write_register (22, new_pc);
1625
1626   for (insn_count = 0; insn_count < 3; insn_count++)
1627     {
1628       /* FIXME: What if the inferior gets a signal right now?  Want to
1629          merge this into wait_for_inferior (as a special kind of
1630          watchpoint?  By setting a breakpoint at the end?  Is there
1631          any other choice?  Is there *any* way to do this stuff with
1632          ptrace() or some equivalent?).  */
1633       resume (1, 0);
1634       target_wait (inferior_pid, &w);
1635
1636       if (w.kind == TARGET_WAITKIND_SIGNALLED)
1637         {
1638           stop_signal = w.value.sig;
1639           terminal_ours_for_output ();
1640           printf_unfiltered ("\nProgram terminated with signal %s, %s.\n",
1641                              target_signal_to_name (stop_signal),
1642                              target_signal_to_string (stop_signal));
1643           gdb_flush (gdb_stdout);
1644           return 0;
1645         }
1646     }
1647   target_terminal_ours ();
1648   target_fetch_registers (-1);
1649   return 1;
1650 }
1651
1652
1653 #ifdef PA20W_CALLING_CONVENTIONS
1654
1655 /* This function pushes a stack frame with arguments as part of the
1656    inferior function calling mechanism.
1657
1658    This is the version for the PA64, in which later arguments appear
1659    at higher addresses.  (The stack always grows towards higher
1660    addresses.)
1661
1662    We simply allocate the appropriate amount of stack space and put
1663    arguments into their proper slots.  The call dummy code will copy
1664    arguments into registers as needed by the ABI.
1665
1666    This ABI also requires that the caller provide an argument pointer
1667    to the callee, so we do that too.  */
1668    
1669 CORE_ADDR
1670 hppa_push_arguments (int nargs, value_ptr *args, CORE_ADDR sp,
1671                      int struct_return, CORE_ADDR struct_addr)
1672 {
1673   /* array of arguments' offsets */
1674   int *offset = (int *) alloca (nargs * sizeof (int));
1675
1676   /* array of arguments' lengths: real lengths in bytes, not aligned to
1677      word size */
1678   int *lengths = (int *) alloca (nargs * sizeof (int));
1679
1680   /* The value of SP as it was passed into this function after
1681      aligning.  */
1682   CORE_ADDR orig_sp = STACK_ALIGN (sp);
1683
1684   /* The number of stack bytes occupied by the current argument.  */
1685   int bytes_reserved;
1686
1687   /* The total number of bytes reserved for the arguments.  */
1688   int cum_bytes_reserved = 0;
1689
1690   /* Similarly, but aligned.  */
1691   int cum_bytes_aligned = 0;
1692   int i;
1693
1694   /* Iterate over each argument provided by the user.  */
1695   for (i = 0; i < nargs; i++)
1696     {
1697       struct type *arg_type = VALUE_TYPE (args[i]);
1698
1699       /* Integral scalar values smaller than a register are padded on
1700          the left.  We do this by promoting them to full-width,
1701          although the ABI says to pad them with garbage.  */
1702       if (is_integral_type (arg_type)
1703           && TYPE_LENGTH (arg_type) < REGISTER_SIZE)
1704         {
1705           args[i] = value_cast ((TYPE_UNSIGNED (arg_type)
1706                                  ? builtin_type_unsigned_long
1707                                  : builtin_type_long),
1708                                 args[i]);
1709           arg_type = VALUE_TYPE (args[i]);
1710         }
1711
1712       lengths[i] = TYPE_LENGTH (arg_type);
1713
1714       /* Align the size of the argument to the word size for this
1715          target.  */
1716       bytes_reserved = (lengths[i] + REGISTER_SIZE - 1) & -REGISTER_SIZE;
1717
1718       offset[i] = cum_bytes_reserved;
1719
1720       /* Aggregates larger than eight bytes (the only types larger
1721          than eight bytes we have) are aligned on a 16-byte boundary,
1722          possibly padded on the right with garbage.  This may leave an
1723          empty word on the stack, and thus an unused register, as per
1724          the ABI.  */
1725       if (bytes_reserved > 8)
1726         {
1727           /* Round up the offset to a multiple of two slots.  */
1728           int new_offset = ((offset[i] + 2*REGISTER_SIZE-1)
1729                             & -(2*REGISTER_SIZE));
1730
1731           /* Note the space we've wasted, if any.  */
1732           bytes_reserved += new_offset - offset[i];
1733           offset[i] = new_offset;
1734         }
1735
1736       cum_bytes_reserved += bytes_reserved;
1737     }
1738
1739   /* CUM_BYTES_RESERVED already accounts for all the arguments
1740      passed by the user.  However, the ABIs mandate minimum stack space
1741      allocations for outgoing arguments.
1742
1743      The ABIs also mandate minimum stack alignments which we must
1744      preserve.  */
1745   cum_bytes_aligned = STACK_ALIGN (cum_bytes_reserved);
1746   sp += max (cum_bytes_aligned, REG_PARM_STACK_SPACE);
1747
1748   /* Now write each of the args at the proper offset down the stack.  */
1749   for (i = 0; i < nargs; i++)
1750     write_memory (orig_sp + offset[i], VALUE_CONTENTS (args[i]), lengths[i]);
1751
1752   /* If a structure has to be returned, set up register 28 to hold its
1753      address */
1754   if (struct_return)
1755     write_register (28, struct_addr);
1756
1757   /* For the PA64 we must pass a pointer to the outgoing argument list.
1758      The ABI mandates that the pointer should point to the first byte of
1759      storage beyond the register flushback area.
1760
1761      However, the call dummy expects the outgoing argument pointer to
1762      be passed in register %r4.  */
1763   write_register (4, orig_sp + REG_PARM_STACK_SPACE);
1764
1765   /* ?!? This needs further work.  We need to set up the global data
1766      pointer for this procedure.  This assumes the same global pointer
1767      for every procedure.   The call dummy expects the dp value to
1768      be passed in register %r6.  */
1769   write_register (6, read_register (27));
1770   
1771   /* The stack will have 64 bytes of additional space for a frame marker.  */
1772   return sp + 64;
1773 }
1774
1775 #else
1776
1777 /* This function pushes a stack frame with arguments as part of the
1778    inferior function calling mechanism.
1779
1780    This is the version of the function for the 32-bit PA machines, in
1781    which later arguments appear at lower addresses.  (The stack always
1782    grows towards higher addresses.)
1783
1784    We simply allocate the appropriate amount of stack space and put
1785    arguments into their proper slots.  The call dummy code will copy
1786    arguments into registers as needed by the ABI. */
1787    
1788 CORE_ADDR
1789 hppa_push_arguments (int nargs, value_ptr *args, CORE_ADDR sp,
1790                      int struct_return, CORE_ADDR struct_addr)
1791 {
1792   /* array of arguments' offsets */
1793   int *offset = (int *) alloca (nargs * sizeof (int));
1794
1795   /* array of arguments' lengths: real lengths in bytes, not aligned to
1796      word size */
1797   int *lengths = (int *) alloca (nargs * sizeof (int));
1798
1799   /* The number of stack bytes occupied by the current argument.  */
1800   int bytes_reserved;
1801
1802   /* The total number of bytes reserved for the arguments.  */
1803   int cum_bytes_reserved = 0;
1804
1805   /* Similarly, but aligned.  */
1806   int cum_bytes_aligned = 0;
1807   int i;
1808
1809   /* Iterate over each argument provided by the user.  */
1810   for (i = 0; i < nargs; i++)
1811     {
1812       lengths[i] = TYPE_LENGTH (VALUE_TYPE (args[i]));
1813
1814       /* Align the size of the argument to the word size for this
1815          target.  */
1816       bytes_reserved = (lengths[i] + REGISTER_SIZE - 1) & -REGISTER_SIZE;
1817
1818       offset[i] = cum_bytes_reserved + lengths[i];
1819
1820       /* If the argument is a double word argument, then it needs to be
1821          double word aligned.  */
1822       if ((bytes_reserved == 2 * REGISTER_SIZE)
1823           && (offset[i] % 2 * REGISTER_SIZE))
1824         {
1825           int new_offset = 0;
1826           /* BYTES_RESERVED is already aligned to the word, so we put
1827              the argument at one word more down the stack.
1828
1829              This will leave one empty word on the stack, and one unused
1830              register as mandated by the ABI.  */
1831           new_offset = ((offset[i] + 2 * REGISTER_SIZE - 1)
1832                         & -(2 * REGISTER_SIZE));
1833
1834           if ((new_offset - offset[i]) >= 2 * REGISTER_SIZE)
1835             {
1836               bytes_reserved += REGISTER_SIZE;
1837               offset[i] += REGISTER_SIZE;
1838             }
1839         }
1840
1841       cum_bytes_reserved += bytes_reserved;
1842
1843     }
1844
1845   /* CUM_BYTES_RESERVED already accounts for all the arguments passed
1846      by the user.  However, the ABI mandates minimum stack space
1847      allocations for outgoing arguments.
1848
1849      The ABI also mandates minimum stack alignments which we must
1850      preserve.  */
1851   cum_bytes_aligned = STACK_ALIGN (cum_bytes_reserved);
1852   sp += max (cum_bytes_aligned, REG_PARM_STACK_SPACE);
1853
1854   /* Now write each of the args at the proper offset down the stack.
1855      ?!? We need to promote values to a full register instead of skipping
1856      words in the stack.  */
1857   for (i = 0; i < nargs; i++)
1858     write_memory (sp - offset[i], VALUE_CONTENTS (args[i]), lengths[i]);
1859
1860   /* If a structure has to be returned, set up register 28 to hold its
1861      address */
1862   if (struct_return)
1863     write_register (28, struct_addr);
1864
1865   /* The stack will have 32 bytes of additional space for a frame marker.  */
1866   return sp + 32;
1867 }
1868
1869 #endif
1870
1871 /* elz: this function returns a value which is built looking at the given address.
1872    It is called from call_function_by_hand, in case we need to return a 
1873    value which is larger than 64 bits, and it is stored in the stack rather than 
1874    in the registers r28 and r29 or fr4.
1875    This function does the same stuff as value_being_returned in values.c, but
1876    gets the value from the stack rather than from the buffer where all the
1877    registers were saved when the function called completed. */
1878 value_ptr
1879 hppa_value_returned_from_stack (register struct type *valtype, CORE_ADDR addr)
1880 {
1881   register value_ptr val;
1882
1883   val = allocate_value (valtype);
1884   CHECK_TYPEDEF (valtype);
1885   target_read_memory (addr, VALUE_CONTENTS_RAW (val), TYPE_LENGTH (valtype));
1886
1887   return val;
1888 }
1889
1890
1891
1892 /* elz: Used to lookup a symbol in the shared libraries.
1893    This function calls shl_findsym, indirectly through a
1894    call to __d_shl_get. __d_shl_get is in end.c, which is always
1895    linked in by the hp compilers/linkers. 
1896    The call to shl_findsym cannot be made directly because it needs
1897    to be active in target address space. 
1898    inputs: - minimal symbol pointer for the function we want to look up
1899    - address in target space of the descriptor for the library
1900    where we want to look the symbol up.
1901    This address is retrieved using the 
1902    som_solib_get_solib_by_pc function (somsolib.c). 
1903    output: - real address in the library of the function.          
1904    note: the handle can be null, in which case shl_findsym will look for
1905    the symbol in all the loaded shared libraries.
1906    files to look at if you need reference on this stuff:
1907    dld.c, dld_shl_findsym.c
1908    end.c
1909    man entry for shl_findsym */
1910
1911 CORE_ADDR
1912 find_stub_with_shl_get (struct minimal_symbol *function, CORE_ADDR handle)
1913 {
1914   struct symbol *get_sym, *symbol2;
1915   struct minimal_symbol *buff_minsym, *msymbol;
1916   struct type *ftype;
1917   value_ptr *args;
1918   value_ptr funcval, val;
1919
1920   int x, namelen, err_value, tmp = -1;
1921   CORE_ADDR endo_buff_addr, value_return_addr, errno_return_addr;
1922   CORE_ADDR stub_addr;
1923
1924
1925   args = (value_ptr *) alloca (sizeof (value_ptr) * 8);         /* 6 for the arguments and one null one??? */
1926   funcval = find_function_in_inferior ("__d_shl_get");
1927   get_sym = lookup_symbol ("__d_shl_get", NULL, VAR_NAMESPACE, NULL, NULL);
1928   buff_minsym = lookup_minimal_symbol ("__buffer", NULL, NULL);
1929   msymbol = lookup_minimal_symbol ("__shldp", NULL, NULL);
1930   symbol2 = lookup_symbol ("__shldp", NULL, VAR_NAMESPACE, NULL, NULL);
1931   endo_buff_addr = SYMBOL_VALUE_ADDRESS (buff_minsym);
1932   namelen = strlen (SYMBOL_NAME (function));
1933   value_return_addr = endo_buff_addr + namelen;
1934   ftype = check_typedef (SYMBOL_TYPE (get_sym));
1935
1936   /* do alignment */
1937   if ((x = value_return_addr % 64) != 0)
1938     value_return_addr = value_return_addr + 64 - x;
1939
1940   errno_return_addr = value_return_addr + 64;
1941
1942
1943   /* set up stuff needed by __d_shl_get in buffer in end.o */
1944
1945   target_write_memory (endo_buff_addr, SYMBOL_NAME (function), namelen);
1946
1947   target_write_memory (value_return_addr, (char *) &tmp, 4);
1948
1949   target_write_memory (errno_return_addr, (char *) &tmp, 4);
1950
1951   target_write_memory (SYMBOL_VALUE_ADDRESS (msymbol),
1952                        (char *) &handle, 4);
1953
1954   /* now prepare the arguments for the call */
1955
1956   args[0] = value_from_longest (TYPE_FIELD_TYPE (ftype, 0), 12);
1957   args[1] = value_from_pointer (TYPE_FIELD_TYPE (ftype, 1), SYMBOL_VALUE_ADDRESS (msymbol));
1958   args[2] = value_from_pointer (TYPE_FIELD_TYPE (ftype, 2), endo_buff_addr);
1959   args[3] = value_from_longest (TYPE_FIELD_TYPE (ftype, 3), TYPE_PROCEDURE);
1960   args[4] = value_from_pointer (TYPE_FIELD_TYPE (ftype, 4), value_return_addr);
1961   args[5] = value_from_pointer (TYPE_FIELD_TYPE (ftype, 5), errno_return_addr);
1962
1963   /* now call the function */
1964
1965   val = call_function_by_hand (funcval, 6, args);
1966
1967   /* now get the results */
1968
1969   target_read_memory (errno_return_addr, (char *) &err_value, sizeof (err_value));
1970
1971   target_read_memory (value_return_addr, (char *) &stub_addr, sizeof (stub_addr));
1972   if (stub_addr <= 0)
1973     error ("call to __d_shl_get failed, error code is %d", err_value);
1974
1975   return (stub_addr);
1976 }
1977
1978 /* Cover routine for find_stub_with_shl_get to pass to catch_errors */
1979 static int
1980 cover_find_stub_with_shl_get (PTR args_untyped)
1981 {
1982   args_for_find_stub *args = args_untyped;
1983   args->return_val = find_stub_with_shl_get (args->msym, args->solib_handle);
1984   return 0;
1985 }
1986
1987 /* Insert the specified number of args and function address
1988    into a call sequence of the above form stored at DUMMYNAME.
1989
1990    On the hppa we need to call the stack dummy through $$dyncall.
1991    Therefore our version of FIX_CALL_DUMMY takes an extra argument,
1992    real_pc, which is the location where gdb should start up the
1993    inferior to do the function call. 
1994
1995    This has to work across several versions of hpux, bsd, osf1.  It has to
1996    work regardless of what compiler was used to build the inferior program.
1997    It should work regardless of whether or not end.o is available.  It has
1998    to work even if gdb can not call into the dynamic loader in the inferior
1999    to query it for symbol names and addresses.
2000
2001    Yes, all those cases should work.  Luckily code exists to handle most
2002    of them.  The complexity is in selecting exactly what scheme should
2003    be used to perform the inferior call.
2004
2005    At the current time this routine is known not to handle cases where
2006    the program was linked with HP's compiler without including end.o.
2007
2008    Please contact Jeff Law (law@cygnus.com) before changing this code.  */
2009
2010 CORE_ADDR
2011 hppa_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
2012                      value_ptr *args, struct type *type, int gcc_p)
2013 {
2014   CORE_ADDR dyncall_addr;
2015   struct minimal_symbol *msymbol;
2016   struct minimal_symbol *trampoline;
2017   int flags = read_register (FLAGS_REGNUM);
2018   struct unwind_table_entry *u = NULL;
2019   CORE_ADDR new_stub = 0;
2020   CORE_ADDR solib_handle = 0;
2021
2022   /* Nonzero if we will use GCC's PLT call routine.  This routine must be
2023      passed an import stub, not a PLABEL.  It is also necessary to set %r19
2024      (the PIC register) before performing the call.
2025
2026      If zero, then we are using __d_plt_call (HP's PLT call routine) or we
2027      are calling the target directly.  When using __d_plt_call we want to
2028      use a PLABEL instead of an import stub.  */
2029   int using_gcc_plt_call = 1;
2030
2031 #ifdef GDB_TARGET_IS_HPPA_20W
2032   /* We currently use completely different code for the PA2.0W inferior
2033      function call sequences.  This needs to be cleaned up.  */
2034   {
2035     CORE_ADDR pcsqh, pcsqt, pcoqh, pcoqt, sr5;
2036     struct target_waitstatus w;
2037     int inst1, inst2;
2038     char buf[4];
2039     int status;
2040     struct objfile *objfile;
2041
2042     /* We can not modify the PC space queues directly, so we start
2043        up the inferior and execute a couple instructions to set the
2044        space queues so that they point to the call dummy in the stack.  */
2045     pcsqh = read_register (PCSQ_HEAD_REGNUM);
2046     sr5 = read_register (SR5_REGNUM);
2047     if (1)
2048       {
2049         pcoqh = read_register (PCOQ_HEAD_REGNUM);
2050         pcoqt = read_register (PCOQ_TAIL_REGNUM);
2051         if (target_read_memory (pcoqh, buf, 4) != 0)
2052           error ("Couldn't modify space queue\n");
2053         inst1 = extract_unsigned_integer (buf, 4);
2054
2055         if (target_read_memory (pcoqt, buf, 4) != 0)
2056           error ("Couldn't modify space queue\n");
2057         inst2 = extract_unsigned_integer (buf, 4);
2058
2059         /* BVE (r1) */
2060         *((int *) buf) = 0xe820d000;
2061         if (target_write_memory (pcoqh, buf, 4) != 0)
2062           error ("Couldn't modify space queue\n");
2063
2064         /* NOP */
2065         *((int *) buf) = 0x08000240;
2066         if (target_write_memory (pcoqt, buf, 4) != 0)
2067           {
2068             *((int *) buf) = inst1;
2069             target_write_memory (pcoqh, buf, 4);
2070             error ("Couldn't modify space queue\n");
2071           }
2072
2073         write_register (1, pc);
2074
2075         /* Single step twice, the BVE instruction will set the space queue
2076            such that it points to the PC value written immediately above
2077            (ie the call dummy).  */
2078         resume (1, 0);
2079         target_wait (inferior_pid, &w);
2080         resume (1, 0);
2081         target_wait (inferior_pid, &w);
2082
2083         /* Restore the two instructions at the old PC locations.  */
2084         *((int *) buf) = inst1;
2085         target_write_memory (pcoqh, buf, 4);
2086         *((int *) buf) = inst2;
2087         target_write_memory (pcoqt, buf, 4);
2088       }
2089
2090     /* The call dummy wants the ultimate destination address initially
2091        in register %r5.  */
2092     write_register (5, fun);
2093
2094     /* We need to see if this objfile has a different DP value than our
2095        own (it could be a shared library for example).  */
2096     ALL_OBJFILES (objfile)
2097       {
2098         struct obj_section *s;
2099         obj_private_data_t *obj_private;
2100
2101         /* See if FUN is in any section within this shared library.  */
2102         for (s = objfile->sections; s < objfile->sections_end; s++)
2103           if (s->addr <= fun && fun < s->endaddr)
2104             break;
2105
2106         if (s >= objfile->sections_end)
2107           continue;
2108
2109         obj_private = (obj_private_data_t *) objfile->obj_private;
2110         
2111         /* The DP value may be different for each objfile.  But within an
2112            objfile each function uses the same dp value.  Thus we do not need
2113            to grope around the opd section looking for dp values.
2114
2115            ?!? This is not strictly correct since we may be in a shared library
2116            and want to call back into the main program.  To make that case
2117            work correctly we need to set obj_private->dp for the main program's
2118            objfile, then remove this conditional.  */
2119         if (obj_private->dp)
2120           write_register (27, obj_private->dp);
2121         break;
2122       }
2123     return pc;
2124   }
2125 #endif
2126
2127 #ifndef GDB_TARGET_IS_HPPA_20W
2128   /* Prefer __gcc_plt_call over the HP supplied routine because
2129      __gcc_plt_call works for any number of arguments.  */
2130   trampoline = NULL;
2131   if (lookup_minimal_symbol ("__gcc_plt_call", NULL, NULL) == NULL)
2132     using_gcc_plt_call = 0;
2133
2134   msymbol = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
2135   if (msymbol == NULL)
2136     error ("Can't find an address for $$dyncall trampoline");
2137
2138   dyncall_addr = SYMBOL_VALUE_ADDRESS (msymbol);
2139
2140   /* FUN could be a procedure label, in which case we have to get
2141      its real address and the value of its GOT/DP if we plan to
2142      call the routine via gcc_plt_call.  */
2143   if ((fun & 0x2) && using_gcc_plt_call)
2144     {
2145       /* Get the GOT/DP value for the target function.  It's
2146          at *(fun+4).  Note the call dummy is *NOT* allowed to
2147          trash %r19 before calling the target function.  */
2148       write_register (19, read_memory_integer ((fun & ~0x3) + 4,
2149                       REGISTER_SIZE));
2150
2151       /* Now get the real address for the function we are calling, it's
2152          at *fun.  */
2153       fun = (CORE_ADDR) read_memory_integer (fun & ~0x3,
2154                                              TARGET_PTR_BIT / 8);
2155     }
2156   else
2157     {
2158
2159 #ifndef GDB_TARGET_IS_PA_ELF
2160       /* FUN could be an export stub, the real address of a function, or
2161          a PLABEL.  When using gcc's PLT call routine we must call an import
2162          stub rather than the export stub or real function for lazy binding
2163          to work correctly
2164
2165          /* If we are using the gcc PLT call routine, then we need to
2166          get the import stub for the target function.  */
2167       if (using_gcc_plt_call && som_solib_get_got_by_pc (fun))
2168         {
2169           struct objfile *objfile;
2170           struct minimal_symbol *funsymbol, *stub_symbol;
2171           CORE_ADDR newfun = 0;
2172
2173           funsymbol = lookup_minimal_symbol_by_pc (fun);
2174           if (!funsymbol)
2175             error ("Unable to find minimal symbol for target function.\n");
2176
2177           /* Search all the object files for an import symbol with the
2178              right name. */
2179           ALL_OBJFILES (objfile)
2180           {
2181             stub_symbol
2182               = lookup_minimal_symbol_solib_trampoline
2183               (SYMBOL_NAME (funsymbol), NULL, objfile);
2184
2185             if (!stub_symbol)
2186               stub_symbol = lookup_minimal_symbol (SYMBOL_NAME (funsymbol),
2187                                                    NULL, objfile);
2188
2189             /* Found a symbol with the right name.  */
2190             if (stub_symbol)
2191               {
2192                 struct unwind_table_entry *u;
2193                 /* It must be a shared library trampoline.  */
2194                 if (MSYMBOL_TYPE (stub_symbol) != mst_solib_trampoline)
2195                   continue;
2196
2197                 /* It must also be an import stub.  */
2198                 u = find_unwind_entry (SYMBOL_VALUE (stub_symbol));
2199                 if (u == NULL
2200                     || (u->stub_unwind.stub_type != IMPORT
2201 #ifdef GDB_NATIVE_HPUX_11
2202                         /* Sigh.  The hpux 10.20 dynamic linker will blow
2203                            chunks if we perform a call to an unbound function
2204                            via the IMPORT_SHLIB stub.  The hpux 11.00 dynamic
2205                            linker will blow chunks if we do not call the
2206                            unbound function via the IMPORT_SHLIB stub.
2207
2208                            We currently have no way to select bevahior on just
2209                            the target.  However, we only support HPUX/SOM in
2210                            native mode.  So we conditinalize on a native
2211                            #ifdef.  Ugly.  Ugly.  Ugly  */
2212                         && u->stub_unwind.stub_type != IMPORT_SHLIB
2213 #endif
2214                         ))
2215                   continue;
2216
2217                 /* OK.  Looks like the correct import stub.  */
2218                 newfun = SYMBOL_VALUE (stub_symbol);
2219                 fun = newfun;
2220
2221                 /* If we found an IMPORT stub, then we want to stop
2222                    searching now.  If we found an IMPORT_SHLIB, we want
2223                    to continue the search in the hopes that we will find
2224                    an IMPORT stub.  */
2225                 if (u->stub_unwind.stub_type == IMPORT)
2226                   break;
2227               }
2228           }
2229
2230           /* Ouch.  We did not find an import stub.  Make an attempt to
2231              do the right thing instead of just croaking.  Most of the
2232              time this will actually work.  */
2233           if (newfun == 0)
2234             write_register (19, som_solib_get_got_by_pc (fun));
2235
2236           u = find_unwind_entry (fun);
2237           if (u
2238               && (u->stub_unwind.stub_type == IMPORT
2239                   || u->stub_unwind.stub_type == IMPORT_SHLIB))
2240             trampoline = lookup_minimal_symbol ("__gcc_plt_call", NULL, NULL);
2241
2242           /* If we found the import stub in the shared library, then we have
2243              to set %r19 before we call the stub.  */
2244           if (u && u->stub_unwind.stub_type == IMPORT_SHLIB)
2245             write_register (19, som_solib_get_got_by_pc (fun));
2246         }
2247 #endif
2248     }
2249
2250   /* If we are calling into another load module then have sr4export call the
2251      magic __d_plt_call routine which is linked in from end.o.
2252
2253      You can't use _sr4export to make the call as the value in sp-24 will get
2254      fried and you end up returning to the wrong location.  You can't call the
2255      target as the code to bind the PLT entry to a function can't return to a
2256      stack address.
2257
2258      Also, query the dynamic linker in the inferior to provide a suitable
2259      PLABEL for the target function.  */
2260   if (!using_gcc_plt_call)
2261     {
2262       CORE_ADDR new_fun;
2263
2264       /* Get a handle for the shared library containing FUN.  Given the
2265          handle we can query the shared library for a PLABEL.  */
2266       solib_handle = som_solib_get_solib_by_pc (fun);
2267
2268       if (solib_handle)
2269         {
2270           struct minimal_symbol *fmsymbol = lookup_minimal_symbol_by_pc (fun);
2271
2272           trampoline = lookup_minimal_symbol ("__d_plt_call", NULL, NULL);
2273
2274           if (trampoline == NULL)
2275             {
2276               error ("Can't find an address for __d_plt_call or __gcc_plt_call trampoline\nSuggest linking executable with -g or compiling with gcc.");
2277             }
2278
2279           /* This is where sr4export will jump to.  */
2280           new_fun = SYMBOL_VALUE_ADDRESS (trampoline);
2281
2282           /* If the function is in a shared library, then call __d_shl_get to
2283              get a PLABEL for the target function.  */
2284           new_stub = find_stub_with_shl_get (fmsymbol, solib_handle);
2285
2286           if (new_stub == 0)
2287             error ("Can't find an import stub for %s", SYMBOL_NAME (fmsymbol));
2288
2289           /* We have to store the address of the stub in __shlib_funcptr.  */
2290           msymbol = lookup_minimal_symbol ("__shlib_funcptr", NULL,
2291                                            (struct objfile *) NULL);
2292
2293           if (msymbol == NULL)
2294             error ("Can't find an address for __shlib_funcptr");
2295           target_write_memory (SYMBOL_VALUE_ADDRESS (msymbol),
2296                                (char *) &new_stub, 4);
2297
2298           /* We want sr4export to call __d_plt_call, so we claim it is
2299              the final target.  Clear trampoline.  */
2300           fun = new_fun;
2301           trampoline = NULL;
2302         }
2303     }
2304
2305   /* Store upper 21 bits of function address into ldil.  fun will either be
2306      the final target (most cases) or __d_plt_call when calling into a shared
2307      library and __gcc_plt_call is not available.  */
2308   store_unsigned_integer
2309     (&dummy[FUNC_LDIL_OFFSET],
2310      INSTRUCTION_SIZE,
2311      deposit_21 (fun >> 11,
2312                  extract_unsigned_integer (&dummy[FUNC_LDIL_OFFSET],
2313                                            INSTRUCTION_SIZE)));
2314
2315   /* Store lower 11 bits of function address into ldo */
2316   store_unsigned_integer
2317     (&dummy[FUNC_LDO_OFFSET],
2318      INSTRUCTION_SIZE,
2319      deposit_14 (fun & MASK_11,
2320                  extract_unsigned_integer (&dummy[FUNC_LDO_OFFSET],
2321                                            INSTRUCTION_SIZE)));
2322 #ifdef SR4EXPORT_LDIL_OFFSET
2323
2324   {
2325     CORE_ADDR trampoline_addr;
2326
2327     /* We may still need sr4export's address too.  */
2328
2329     if (trampoline == NULL)
2330       {
2331         msymbol = lookup_minimal_symbol ("_sr4export", NULL, NULL);
2332         if (msymbol == NULL)
2333           error ("Can't find an address for _sr4export trampoline");
2334
2335         trampoline_addr = SYMBOL_VALUE_ADDRESS (msymbol);
2336       }
2337     else
2338       trampoline_addr = SYMBOL_VALUE_ADDRESS (trampoline);
2339
2340
2341     /* Store upper 21 bits of trampoline's address into ldil */
2342     store_unsigned_integer
2343       (&dummy[SR4EXPORT_LDIL_OFFSET],
2344        INSTRUCTION_SIZE,
2345        deposit_21 (trampoline_addr >> 11,
2346                    extract_unsigned_integer (&dummy[SR4EXPORT_LDIL_OFFSET],
2347                                              INSTRUCTION_SIZE)));
2348
2349     /* Store lower 11 bits of trampoline's address into ldo */
2350     store_unsigned_integer
2351       (&dummy[SR4EXPORT_LDO_OFFSET],
2352        INSTRUCTION_SIZE,
2353        deposit_14 (trampoline_addr & MASK_11,
2354                    extract_unsigned_integer (&dummy[SR4EXPORT_LDO_OFFSET],
2355                                              INSTRUCTION_SIZE)));
2356   }
2357 #endif
2358
2359   write_register (22, pc);
2360
2361   /* If we are in a syscall, then we should call the stack dummy
2362      directly.  $$dyncall is not needed as the kernel sets up the
2363      space id registers properly based on the value in %r31.  In
2364      fact calling $$dyncall will not work because the value in %r22
2365      will be clobbered on the syscall exit path. 
2366
2367      Similarly if the current PC is in a shared library.  Note however,
2368      this scheme won't work if the shared library isn't mapped into
2369      the same space as the stack.  */
2370   if (flags & 2)
2371     return pc;
2372 #ifndef GDB_TARGET_IS_PA_ELF
2373   else if (som_solib_get_got_by_pc (target_read_pc (inferior_pid)))
2374     return pc;
2375 #endif
2376   else
2377     return dyncall_addr;
2378 #endif
2379 }
2380
2381
2382
2383
2384 /* If the pid is in a syscall, then the FP register is not readable.
2385    We'll return zero in that case, rather than attempting to read it
2386    and cause a warning. */
2387 CORE_ADDR
2388 target_read_fp (int pid)
2389 {
2390   int flags = read_register (FLAGS_REGNUM);
2391
2392   if (flags & 2)
2393     {
2394       return (CORE_ADDR) 0;
2395     }
2396
2397   /* This is the only site that may directly read_register () the FP
2398      register.  All others must use TARGET_READ_FP (). */
2399   return read_register (FP_REGNUM);
2400 }
2401
2402
2403 /* Get the PC from %r31 if currently in a syscall.  Also mask out privilege
2404    bits.  */
2405
2406 CORE_ADDR
2407 target_read_pc (int pid)
2408 {
2409   int flags = read_register_pid (FLAGS_REGNUM, pid);
2410
2411   /* The following test does not belong here.  It is OS-specific, and belongs
2412      in native code.  */
2413   /* Test SS_INSYSCALL */
2414   if (flags & 2)
2415     return read_register_pid (31, pid) & ~0x3;
2416
2417   return read_register_pid (PC_REGNUM, pid) & ~0x3;
2418 }
2419
2420 /* Write out the PC.  If currently in a syscall, then also write the new
2421    PC value into %r31.  */
2422
2423 void
2424 target_write_pc (CORE_ADDR v, int pid)
2425 {
2426   int flags = read_register_pid (FLAGS_REGNUM, pid);
2427
2428   /* The following test does not belong here.  It is OS-specific, and belongs
2429      in native code.  */
2430   /* If in a syscall, then set %r31.  Also make sure to get the 
2431      privilege bits set correctly.  */
2432   /* Test SS_INSYSCALL */
2433   if (flags & 2)
2434     write_register_pid (31, v | 0x3, pid);
2435
2436   write_register_pid (PC_REGNUM, v, pid);
2437   write_register_pid (NPC_REGNUM, v + 4, pid);
2438 }
2439
2440 /* return the alignment of a type in bytes. Structures have the maximum
2441    alignment required by their fields. */
2442
2443 static int
2444 hppa_alignof (struct type *type)
2445 {
2446   int max_align, align, i;
2447   CHECK_TYPEDEF (type);
2448   switch (TYPE_CODE (type))
2449     {
2450     case TYPE_CODE_PTR:
2451     case TYPE_CODE_INT:
2452     case TYPE_CODE_FLT:
2453       return TYPE_LENGTH (type);
2454     case TYPE_CODE_ARRAY:
2455       return hppa_alignof (TYPE_FIELD_TYPE (type, 0));
2456     case TYPE_CODE_STRUCT:
2457     case TYPE_CODE_UNION:
2458       max_align = 1;
2459       for (i = 0; i < TYPE_NFIELDS (type); i++)
2460         {
2461           /* Bit fields have no real alignment. */
2462           /* if (!TYPE_FIELD_BITPOS (type, i)) */
2463           if (!TYPE_FIELD_BITSIZE (type, i))    /* elz: this should be bitsize */
2464             {
2465               align = hppa_alignof (TYPE_FIELD_TYPE (type, i));
2466               max_align = max (max_align, align);
2467             }
2468         }
2469       return max_align;
2470     default:
2471       return 4;
2472     }
2473 }
2474
2475 /* Print the register regnum, or all registers if regnum is -1 */
2476
2477 void
2478 pa_do_registers_info (int regnum, int fpregs)
2479 {
2480   char raw_regs[REGISTER_BYTES];
2481   int i;
2482
2483   /* Make a copy of gdb's save area (may cause actual
2484      reads from the target). */
2485   for (i = 0; i < NUM_REGS; i++)
2486     read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
2487
2488   if (regnum == -1)
2489     pa_print_registers (raw_regs, regnum, fpregs);
2490   else if (regnum < FP4_REGNUM)
2491     {
2492       long reg_val[2];
2493
2494       /* Why is the value not passed through "extract_signed_integer"
2495          as in "pa_print_registers" below? */
2496       pa_register_look_aside (raw_regs, regnum, &reg_val[0]);
2497
2498       if (!is_pa_2)
2499         {
2500           printf_unfiltered ("%s %x\n", REGISTER_NAME (regnum), reg_val[1]);
2501         }
2502       else
2503         {
2504           /* Fancy % formats to prevent leading zeros. */
2505           if (reg_val[0] == 0)
2506             printf_unfiltered ("%s %x\n", REGISTER_NAME (regnum), reg_val[1]);
2507           else
2508             printf_unfiltered ("%s %x%8.8x\n", REGISTER_NAME (regnum),
2509                                reg_val[0], reg_val[1]);
2510         }
2511     }
2512   else
2513     /* Note that real floating point values only start at
2514        FP4_REGNUM.  FP0 and up are just status and error
2515        registers, which have integral (bit) values. */
2516     pa_print_fp_reg (regnum);
2517 }
2518
2519 /********** new function ********************/
2520 void
2521 pa_do_strcat_registers_info (int regnum, int fpregs, struct ui_file *stream,
2522                              enum precision_type precision)
2523 {
2524   char raw_regs[REGISTER_BYTES];
2525   int i;
2526
2527   /* Make a copy of gdb's save area (may cause actual
2528      reads from the target). */
2529   for (i = 0; i < NUM_REGS; i++)
2530     read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
2531
2532   if (regnum == -1)
2533     pa_strcat_registers (raw_regs, regnum, fpregs, stream);
2534
2535   else if (regnum < FP4_REGNUM)
2536     {
2537       long reg_val[2];
2538
2539       /* Why is the value not passed through "extract_signed_integer"
2540          as in "pa_print_registers" below? */
2541       pa_register_look_aside (raw_regs, regnum, &reg_val[0]);
2542
2543       if (!is_pa_2)
2544         {
2545           fprintf_unfiltered (stream, "%s %x", REGISTER_NAME (regnum), reg_val[1]);
2546         }
2547       else
2548         {
2549           /* Fancy % formats to prevent leading zeros. */
2550           if (reg_val[0] == 0)
2551             fprintf_unfiltered (stream, "%s %x", REGISTER_NAME (regnum),
2552                                 reg_val[1]);
2553           else
2554             fprintf_unfiltered (stream, "%s %x%8.8x", REGISTER_NAME (regnum),
2555                                 reg_val[0], reg_val[1]);
2556         }
2557     }
2558   else
2559     /* Note that real floating point values only start at
2560        FP4_REGNUM.  FP0 and up are just status and error
2561        registers, which have integral (bit) values. */
2562     pa_strcat_fp_reg (regnum, stream, precision);
2563 }
2564
2565 /* If this is a PA2.0 machine, fetch the real 64-bit register
2566    value.  Otherwise use the info from gdb's saved register area.
2567
2568    Note that reg_val is really expected to be an array of longs,
2569    with two elements. */
2570 static void
2571 pa_register_look_aside (char *raw_regs, int regnum, long *raw_val)
2572 {
2573   static int know_which = 0;    /* False */
2574
2575   int regaddr;
2576   unsigned int offset;
2577   register int i;
2578   int start;
2579
2580
2581   char buf[MAX_REGISTER_RAW_SIZE];
2582   long long reg_val;
2583
2584   if (!know_which)
2585     {
2586       if (CPU_PA_RISC2_0 == sysconf (_SC_CPU_VERSION))
2587         {
2588           is_pa_2 = (1 == 1);
2589         }
2590
2591       know_which = 1;           /* True */
2592     }
2593
2594   raw_val[0] = 0;
2595   raw_val[1] = 0;
2596
2597   if (!is_pa_2)
2598     {
2599       raw_val[1] = *(long *) (raw_regs + REGISTER_BYTE (regnum));
2600       return;
2601     }
2602
2603   /* Code below copied from hppah-nat.c, with fixes for wide
2604      registers, using different area of save_state, etc. */
2605   if (regnum == FLAGS_REGNUM || regnum >= FP0_REGNUM ||
2606       !HAVE_STRUCT_SAVE_STATE_T || !HAVE_STRUCT_MEMBER_SS_WIDE)
2607     {
2608       /* Use narrow regs area of save_state and default macro. */
2609       offset = U_REGS_OFFSET;
2610       regaddr = register_addr (regnum, offset);
2611       start = 1;
2612     }
2613   else
2614     {
2615       /* Use wide regs area, and calculate registers as 8 bytes wide.
2616
2617          We'd like to do this, but current version of "C" doesn't
2618          permit "offsetof":
2619
2620          offset  = offsetof(save_state_t, ss_wide);
2621
2622          Note that to avoid "C" doing typed pointer arithmetic, we
2623          have to cast away the type in our offset calculation:
2624          otherwise we get an offset of 1! */
2625
2626       /* NB: save_state_t is not available before HPUX 9.
2627          The ss_wide field is not available previous to HPUX 10.20,
2628          so to avoid compile-time warnings, we only compile this for
2629          PA 2.0 processors.  This control path should only be followed
2630          if we're debugging a PA 2.0 processor, so this should not cause
2631          problems. */
2632
2633       /* #if the following code out so that this file can still be
2634          compiled on older HPUX boxes (< 10.20) which don't have
2635          this structure/structure member.  */
2636 #if HAVE_STRUCT_SAVE_STATE_T == 1 && HAVE_STRUCT_MEMBER_SS_WIDE == 1
2637       save_state_t temp;
2638
2639       offset = ((int) &temp.ss_wide) - ((int) &temp);
2640       regaddr = offset + regnum * 8;
2641       start = 0;
2642 #endif
2643     }
2644
2645   for (i = start; i < 2; i++)
2646     {
2647       errno = 0;
2648       raw_val[i] = call_ptrace (PT_RUREGS, inferior_pid,
2649                                 (PTRACE_ARG3_TYPE) regaddr, 0);
2650       if (errno != 0)
2651         {
2652           /* Warning, not error, in case we are attached; sometimes the
2653              kernel doesn't let us at the registers.  */
2654           char *err = safe_strerror (errno);
2655           char *msg = alloca (strlen (err) + 128);
2656           sprintf (msg, "reading register %s: %s", REGISTER_NAME (regnum), err);
2657           warning (msg);
2658           goto error_exit;
2659         }
2660
2661       regaddr += sizeof (long);
2662     }
2663
2664   if (regnum == PCOQ_HEAD_REGNUM || regnum == PCOQ_TAIL_REGNUM)
2665     raw_val[1] &= ~0x3;         /* I think we're masking out space bits */
2666
2667 error_exit:
2668   ;
2669 }
2670
2671 /* "Info all-reg" command */
2672
2673 static void
2674 pa_print_registers (char *raw_regs, int regnum, int fpregs)
2675 {
2676   int i, j;
2677   /* Alas, we are compiled so that "long long" is 32 bits */
2678   long raw_val[2];
2679   long long_val;
2680   int rows = 48, columns = 2;
2681
2682   for (i = 0; i < rows; i++)
2683     {
2684       for (j = 0; j < columns; j++)
2685         {
2686           /* We display registers in column-major order.  */
2687           int regnum = i + j * rows;
2688
2689           /* Q: Why is the value passed through "extract_signed_integer",
2690              while above, in "pa_do_registers_info" it isn't?
2691              A: ? */
2692           pa_register_look_aside (raw_regs, regnum, &raw_val[0]);
2693
2694           /* Even fancier % formats to prevent leading zeros
2695              and still maintain the output in columns. */
2696           if (!is_pa_2)
2697             {
2698               /* Being big-endian, on this machine the low bits
2699                  (the ones we want to look at) are in the second longword. */
2700               long_val = extract_signed_integer (&raw_val[1], 4);
2701               printf_filtered ("%10.10s: %8x   ",
2702                                REGISTER_NAME (regnum), long_val);
2703             }
2704           else
2705             {
2706               /* raw_val = extract_signed_integer(&raw_val, 8); */
2707               if (raw_val[0] == 0)
2708                 printf_filtered ("%10.10s:         %8x   ",
2709                                  REGISTER_NAME (regnum), raw_val[1]);
2710               else
2711                 printf_filtered ("%10.10s: %8x%8.8x   ",
2712                                  REGISTER_NAME (regnum),
2713                                  raw_val[0], raw_val[1]);
2714             }
2715         }
2716       printf_unfiltered ("\n");
2717     }
2718
2719   if (fpregs)
2720     for (i = FP4_REGNUM; i < NUM_REGS; i++)     /* FP4_REGNUM == 72 */
2721       pa_print_fp_reg (i);
2722 }
2723
2724 /************* new function ******************/
2725 static void
2726 pa_strcat_registers (char *raw_regs, int regnum, int fpregs,
2727                      struct ui_file *stream)
2728 {
2729   int i, j;
2730   long raw_val[2];              /* Alas, we are compiled so that "long long" is 32 bits */
2731   long long_val;
2732   enum precision_type precision;
2733
2734   precision = unspecified_precision;
2735
2736   for (i = 0; i < 18; i++)
2737     {
2738       for (j = 0; j < 4; j++)
2739         {
2740           /* Q: Why is the value passed through "extract_signed_integer",
2741              while above, in "pa_do_registers_info" it isn't?
2742              A: ? */
2743           pa_register_look_aside (raw_regs, i + (j * 18), &raw_val[0]);
2744
2745           /* Even fancier % formats to prevent leading zeros
2746              and still maintain the output in columns. */
2747           if (!is_pa_2)
2748             {
2749               /* Being big-endian, on this machine the low bits
2750                  (the ones we want to look at) are in the second longword. */
2751               long_val = extract_signed_integer (&raw_val[1], 4);
2752               fprintf_filtered (stream, "%8.8s: %8x  ", REGISTER_NAME (i + (j * 18)), long_val);
2753             }
2754           else
2755             {
2756               /* raw_val = extract_signed_integer(&raw_val, 8); */
2757               if (raw_val[0] == 0)
2758                 fprintf_filtered (stream, "%8.8s:         %8x  ", REGISTER_NAME (i + (j * 18)),
2759                                   raw_val[1]);
2760               else
2761                 fprintf_filtered (stream, "%8.8s: %8x%8.8x  ", REGISTER_NAME (i + (j * 18)),
2762                                   raw_val[0], raw_val[1]);
2763             }
2764         }
2765       fprintf_unfiltered (stream, "\n");
2766     }
2767
2768   if (fpregs)
2769     for (i = FP4_REGNUM; i < NUM_REGS; i++)     /* FP4_REGNUM == 72 */
2770       pa_strcat_fp_reg (i, stream, precision);
2771 }
2772
2773 static void
2774 pa_print_fp_reg (int i)
2775 {
2776   char raw_buffer[MAX_REGISTER_RAW_SIZE];
2777   char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
2778
2779   /* Get 32bits of data.  */
2780   read_relative_register_raw_bytes (i, raw_buffer);
2781
2782   /* Put it in the buffer.  No conversions are ever necessary.  */
2783   memcpy (virtual_buffer, raw_buffer, REGISTER_RAW_SIZE (i));
2784
2785   fputs_filtered (REGISTER_NAME (i), gdb_stdout);
2786   print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), gdb_stdout);
2787   fputs_filtered ("(single precision)     ", gdb_stdout);
2788
2789   val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0, gdb_stdout, 0,
2790              1, 0, Val_pretty_default);
2791   printf_filtered ("\n");
2792
2793   /* If "i" is even, then this register can also be a double-precision
2794      FP register.  Dump it out as such.  */
2795   if ((i % 2) == 0)
2796     {
2797       /* Get the data in raw format for the 2nd half.  */
2798       read_relative_register_raw_bytes (i + 1, raw_buffer);
2799
2800       /* Copy it into the appropriate part of the virtual buffer.  */
2801       memcpy (virtual_buffer + REGISTER_RAW_SIZE (i), raw_buffer,
2802               REGISTER_RAW_SIZE (i));
2803
2804       /* Dump it as a double.  */
2805       fputs_filtered (REGISTER_NAME (i), gdb_stdout);
2806       print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), gdb_stdout);
2807       fputs_filtered ("(double precision)     ", gdb_stdout);
2808
2809       val_print (builtin_type_double, virtual_buffer, 0, 0, gdb_stdout, 0,
2810                  1, 0, Val_pretty_default);
2811       printf_filtered ("\n");
2812     }
2813 }
2814
2815 /*************** new function ***********************/
2816 static void
2817 pa_strcat_fp_reg (int i, struct ui_file *stream, enum precision_type precision)
2818 {
2819   char raw_buffer[MAX_REGISTER_RAW_SIZE];
2820   char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
2821
2822   fputs_filtered (REGISTER_NAME (i), stream);
2823   print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), stream);
2824
2825   /* Get 32bits of data.  */
2826   read_relative_register_raw_bytes (i, raw_buffer);
2827
2828   /* Put it in the buffer.  No conversions are ever necessary.  */
2829   memcpy (virtual_buffer, raw_buffer, REGISTER_RAW_SIZE (i));
2830
2831   if (precision == double_precision && (i % 2) == 0)
2832     {
2833
2834       char raw_buf[MAX_REGISTER_RAW_SIZE];
2835
2836       /* Get the data in raw format for the 2nd half.  */
2837       read_relative_register_raw_bytes (i + 1, raw_buf);
2838
2839       /* Copy it into the appropriate part of the virtual buffer.  */
2840       memcpy (virtual_buffer + REGISTER_RAW_SIZE (i), raw_buf, REGISTER_RAW_SIZE (i));
2841
2842       val_print (builtin_type_double, virtual_buffer, 0, 0, stream, 0,
2843                  1, 0, Val_pretty_default);
2844
2845     }
2846   else
2847     {
2848       val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0, stream, 0,
2849                  1, 0, Val_pretty_default);
2850     }
2851
2852 }
2853
2854 /* Return one if PC is in the call path of a trampoline, else return zero.
2855
2856    Note we return one for *any* call trampoline (long-call, arg-reloc), not
2857    just shared library trampolines (import, export).  */
2858
2859 int
2860 in_solib_call_trampoline (CORE_ADDR pc, char *name)
2861 {
2862   struct minimal_symbol *minsym;
2863   struct unwind_table_entry *u;
2864   static CORE_ADDR dyncall = 0;
2865   static CORE_ADDR sr4export = 0;
2866
2867 #ifdef GDB_TARGET_IS_HPPA_20W
2868   /* PA64 has a completely different stub/trampoline scheme.  Is it
2869      better?  Maybe.  It's certainly harder to determine with any
2870      certainty that we are in a stub because we can not refer to the
2871      unwinders to help. 
2872
2873      The heuristic is simple.  Try to lookup the current PC value in th
2874      minimal symbol table.  If that fails, then assume we are not in a
2875      stub and return.
2876
2877      Then see if the PC value falls within the section bounds for the
2878      section containing the minimal symbol we found in the first
2879      step.  If it does, then assume we are not in a stub and return.
2880
2881      Finally peek at the instructions to see if they look like a stub.  */
2882   {
2883     struct minimal_symbol *minsym;
2884     asection *sec;
2885     CORE_ADDR addr;
2886     int insn, i;
2887
2888     minsym = lookup_minimal_symbol_by_pc (pc);
2889     if (! minsym)
2890       return 0;
2891
2892     sec = SYMBOL_BFD_SECTION (minsym);
2893
2894     if (sec->vma <= pc
2895         && sec->vma + sec->_cooked_size < pc)
2896       return 0;
2897
2898     /* We might be in a stub.  Peek at the instructions.  Stubs are 3
2899        instructions long. */
2900     insn = read_memory_integer (pc, 4);
2901
2902     /* Find out where we think we are within the stub.  */
2903     if ((insn & 0xffffc00e) == 0x53610000)
2904       addr = pc;
2905     else if ((insn & 0xffffffff) == 0xe820d000)
2906       addr = pc - 4;
2907     else if ((insn & 0xffffc00e) == 0x537b0000)
2908       addr = pc - 8;
2909     else
2910       return 0;
2911
2912     /* Now verify each insn in the range looks like a stub instruction.  */
2913     insn = read_memory_integer (addr, 4);
2914     if ((insn & 0xffffc00e) != 0x53610000)
2915       return 0;
2916         
2917     /* Now verify each insn in the range looks like a stub instruction.  */
2918     insn = read_memory_integer (addr + 4, 4);
2919     if ((insn & 0xffffffff) != 0xe820d000)
2920       return 0;
2921     
2922     /* Now verify each insn in the range looks like a stub instruction.  */
2923     insn = read_memory_integer (addr + 8, 4);
2924     if ((insn & 0xffffc00e) != 0x537b0000)
2925       return 0;
2926
2927     /* Looks like a stub.  */
2928     return 1;
2929   }
2930 #endif
2931
2932   /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
2933      new exec file */
2934
2935   /* First see if PC is in one of the two C-library trampolines.  */
2936   if (!dyncall)
2937     {
2938       minsym = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
2939       if (minsym)
2940         dyncall = SYMBOL_VALUE_ADDRESS (minsym);
2941       else
2942         dyncall = -1;
2943     }
2944
2945   if (!sr4export)
2946     {
2947       minsym = lookup_minimal_symbol ("_sr4export", NULL, NULL);
2948       if (minsym)
2949         sr4export = SYMBOL_VALUE_ADDRESS (minsym);
2950       else
2951         sr4export = -1;
2952     }
2953
2954   if (pc == dyncall || pc == sr4export)
2955     return 1;
2956
2957   minsym = lookup_minimal_symbol_by_pc (pc);
2958   if (minsym && strcmp (SYMBOL_NAME (minsym), ".stub") == 0)
2959     return 1;
2960
2961   /* Get the unwind descriptor corresponding to PC, return zero
2962      if no unwind was found.  */
2963   u = find_unwind_entry (pc);
2964   if (!u)
2965     return 0;
2966
2967   /* If this isn't a linker stub, then return now.  */
2968   if (u->stub_unwind.stub_type == 0)
2969     return 0;
2970
2971   /* By definition a long-branch stub is a call stub.  */
2972   if (u->stub_unwind.stub_type == LONG_BRANCH)
2973     return 1;
2974
2975   /* The call and return path execute the same instructions within
2976      an IMPORT stub!  So an IMPORT stub is both a call and return
2977      trampoline.  */
2978   if (u->stub_unwind.stub_type == IMPORT)
2979     return 1;
2980
2981   /* Parameter relocation stubs always have a call path and may have a
2982      return path.  */
2983   if (u->stub_unwind.stub_type == PARAMETER_RELOCATION
2984       || u->stub_unwind.stub_type == EXPORT)
2985     {
2986       CORE_ADDR addr;
2987
2988       /* Search forward from the current PC until we hit a branch
2989          or the end of the stub.  */
2990       for (addr = pc; addr <= u->region_end; addr += 4)
2991         {
2992           unsigned long insn;
2993
2994           insn = read_memory_integer (addr, 4);
2995
2996           /* Does it look like a bl?  If so then it's the call path, if
2997              we find a bv or be first, then we're on the return path.  */
2998           if ((insn & 0xfc00e000) == 0xe8000000)
2999             return 1;
3000           else if ((insn & 0xfc00e001) == 0xe800c000
3001                    || (insn & 0xfc000000) == 0xe0000000)
3002             return 0;
3003         }
3004
3005       /* Should never happen.  */
3006       warning ("Unable to find branch in parameter relocation stub.\n");
3007       return 0;
3008     }
3009
3010   /* Unknown stub type.  For now, just return zero.  */
3011   return 0;
3012 }
3013
3014 /* Return one if PC is in the return path of a trampoline, else return zero.
3015
3016    Note we return one for *any* call trampoline (long-call, arg-reloc), not
3017    just shared library trampolines (import, export).  */
3018
3019 int
3020 in_solib_return_trampoline (CORE_ADDR pc, char *name)
3021 {
3022   struct unwind_table_entry *u;
3023
3024   /* Get the unwind descriptor corresponding to PC, return zero
3025      if no unwind was found.  */
3026   u = find_unwind_entry (pc);
3027   if (!u)
3028     return 0;
3029
3030   /* If this isn't a linker stub or it's just a long branch stub, then
3031      return zero.  */
3032   if (u->stub_unwind.stub_type == 0 || u->stub_unwind.stub_type == LONG_BRANCH)
3033     return 0;
3034
3035   /* The call and return path execute the same instructions within
3036      an IMPORT stub!  So an IMPORT stub is both a call and return
3037      trampoline.  */
3038   if (u->stub_unwind.stub_type == IMPORT)
3039     return 1;
3040
3041   /* Parameter relocation stubs always have a call path and may have a
3042      return path.  */
3043   if (u->stub_unwind.stub_type == PARAMETER_RELOCATION
3044       || u->stub_unwind.stub_type == EXPORT)
3045     {
3046       CORE_ADDR addr;
3047
3048       /* Search forward from the current PC until we hit a branch
3049          or the end of the stub.  */
3050       for (addr = pc; addr <= u->region_end; addr += 4)
3051         {
3052           unsigned long insn;
3053
3054           insn = read_memory_integer (addr, 4);
3055
3056           /* Does it look like a bl?  If so then it's the call path, if
3057              we find a bv or be first, then we're on the return path.  */
3058           if ((insn & 0xfc00e000) == 0xe8000000)
3059             return 0;
3060           else if ((insn & 0xfc00e001) == 0xe800c000
3061                    || (insn & 0xfc000000) == 0xe0000000)
3062             return 1;
3063         }
3064
3065       /* Should never happen.  */
3066       warning ("Unable to find branch in parameter relocation stub.\n");
3067       return 0;
3068     }
3069
3070   /* Unknown stub type.  For now, just return zero.  */
3071   return 0;
3072
3073 }
3074
3075 /* Figure out if PC is in a trampoline, and if so find out where
3076    the trampoline will jump to.  If not in a trampoline, return zero.
3077
3078    Simple code examination probably is not a good idea since the code
3079    sequences in trampolines can also appear in user code.
3080
3081    We use unwinds and information from the minimal symbol table to
3082    determine when we're in a trampoline.  This won't work for ELF
3083    (yet) since it doesn't create stub unwind entries.  Whether or
3084    not ELF will create stub unwinds or normal unwinds for linker
3085    stubs is still being debated.
3086
3087    This should handle simple calls through dyncall or sr4export,
3088    long calls, argument relocation stubs, and dyncall/sr4export
3089    calling an argument relocation stub.  It even handles some stubs
3090    used in dynamic executables.  */
3091
3092 CORE_ADDR
3093 skip_trampoline_code (CORE_ADDR pc, char *name)
3094 {
3095   long orig_pc = pc;
3096   long prev_inst, curr_inst, loc;
3097   static CORE_ADDR dyncall = 0;
3098   static CORE_ADDR dyncall_external = 0;
3099   static CORE_ADDR sr4export = 0;
3100   struct minimal_symbol *msym;
3101   struct unwind_table_entry *u;
3102
3103   /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
3104      new exec file */
3105
3106   if (!dyncall)
3107     {
3108       msym = lookup_minimal_symbol ("$$dyncall", NULL, NULL);
3109       if (msym)
3110         dyncall = SYMBOL_VALUE_ADDRESS (msym);
3111       else
3112         dyncall = -1;
3113     }
3114
3115   if (!dyncall_external)
3116     {
3117       msym = lookup_minimal_symbol ("$$dyncall_external", NULL, NULL);
3118       if (msym)
3119         dyncall_external = SYMBOL_VALUE_ADDRESS (msym);
3120       else
3121         dyncall_external = -1;
3122     }
3123
3124   if (!sr4export)
3125     {
3126       msym = lookup_minimal_symbol ("_sr4export", NULL, NULL);
3127       if (msym)
3128         sr4export = SYMBOL_VALUE_ADDRESS (msym);
3129       else
3130         sr4export = -1;
3131     }
3132
3133   /* Addresses passed to dyncall may *NOT* be the actual address
3134      of the function.  So we may have to do something special.  */
3135   if (pc == dyncall)
3136     {
3137       pc = (CORE_ADDR) read_register (22);
3138
3139       /* If bit 30 (counting from the left) is on, then pc is the address of
3140          the PLT entry for this function, not the address of the function
3141          itself.  Bit 31 has meaning too, but only for MPE.  */
3142       if (pc & 0x2)
3143         pc = (CORE_ADDR) read_memory_integer (pc & ~0x3, TARGET_PTR_BIT / 8);
3144     }
3145   if (pc == dyncall_external)
3146     {
3147       pc = (CORE_ADDR) read_register (22);
3148       pc = (CORE_ADDR) read_memory_integer (pc & ~0x3, TARGET_PTR_BIT / 8);
3149     }
3150   else if (pc == sr4export)
3151     pc = (CORE_ADDR) (read_register (22));
3152
3153   /* Get the unwind descriptor corresponding to PC, return zero
3154      if no unwind was found.  */
3155   u = find_unwind_entry (pc);
3156   if (!u)
3157     return 0;
3158
3159   /* If this isn't a linker stub, then return now.  */
3160   /* elz: attention here! (FIXME) because of a compiler/linker 
3161      error, some stubs which should have a non zero stub_unwind.stub_type 
3162      have unfortunately a value of zero. So this function would return here
3163      as if we were not in a trampoline. To fix this, we go look at the partial
3164      symbol information, which reports this guy as a stub.
3165      (FIXME): Unfortunately, we are not that lucky: it turns out that the 
3166      partial symbol information is also wrong sometimes. This is because 
3167      when it is entered (somread.c::som_symtab_read()) it can happen that
3168      if the type of the symbol (from the som) is Entry, and the symbol is
3169      in a shared library, then it can also be a trampoline.  This would
3170      be OK, except that I believe the way they decide if we are ina shared library
3171      does not work. SOOOO..., even if we have a regular function w/o trampolines
3172      its minimal symbol can be assigned type mst_solib_trampoline.
3173      Also, if we find that the symbol is a real stub, then we fix the unwind
3174      descriptor, and define the stub type to be EXPORT.
3175      Hopefully this is correct most of the times. */
3176   if (u->stub_unwind.stub_type == 0)
3177     {
3178
3179 /* elz: NOTE (FIXME!) once the problem with the unwind information is fixed
3180    we can delete all the code which appears between the lines */
3181 /*--------------------------------------------------------------------------*/
3182       msym = lookup_minimal_symbol_by_pc (pc);
3183
3184       if (msym == NULL || MSYMBOL_TYPE (msym) != mst_solib_trampoline)
3185         return orig_pc == pc ? 0 : pc & ~0x3;
3186
3187       else if (msym != NULL && MSYMBOL_TYPE (msym) == mst_solib_trampoline)
3188         {
3189           struct objfile *objfile;
3190           struct minimal_symbol *msymbol;
3191           int function_found = 0;
3192
3193           /* go look if there is another minimal symbol with the same name as 
3194              this one, but with type mst_text. This would happen if the msym
3195              is an actual trampoline, in which case there would be another
3196              symbol with the same name corresponding to the real function */
3197
3198           ALL_MSYMBOLS (objfile, msymbol)
3199           {
3200             if (MSYMBOL_TYPE (msymbol) == mst_text
3201                 && STREQ (SYMBOL_NAME (msymbol), SYMBOL_NAME (msym)))
3202               {
3203                 function_found = 1;
3204                 break;
3205               }
3206           }
3207
3208           if (function_found)
3209             /* the type of msym is correct (mst_solib_trampoline), but
3210                the unwind info is wrong, so set it to the correct value */
3211             u->stub_unwind.stub_type = EXPORT;
3212           else
3213             /* the stub type info in the unwind is correct (this is not a
3214                trampoline), but the msym type information is wrong, it
3215                should be mst_text. So we need to fix the msym, and also
3216                get out of this function */
3217             {
3218               MSYMBOL_TYPE (msym) = mst_text;
3219               return orig_pc == pc ? 0 : pc & ~0x3;
3220             }
3221         }
3222
3223 /*--------------------------------------------------------------------------*/
3224     }
3225
3226   /* It's a stub.  Search for a branch and figure out where it goes.
3227      Note we have to handle multi insn branch sequences like ldil;ble.
3228      Most (all?) other branches can be determined by examining the contents
3229      of certain registers and the stack.  */
3230
3231   loc = pc;
3232   curr_inst = 0;
3233   prev_inst = 0;
3234   while (1)
3235     {
3236       /* Make sure we haven't walked outside the range of this stub.  */
3237       if (u != find_unwind_entry (loc))
3238         {
3239           warning ("Unable to find branch in linker stub");
3240           return orig_pc == pc ? 0 : pc & ~0x3;
3241         }
3242
3243       prev_inst = curr_inst;
3244       curr_inst = read_memory_integer (loc, 4);
3245
3246       /* Does it look like a branch external using %r1?  Then it's the
3247          branch from the stub to the actual function.  */
3248       if ((curr_inst & 0xffe0e000) == 0xe0202000)
3249         {
3250           /* Yup.  See if the previous instruction loaded
3251              a value into %r1.  If so compute and return the jump address.  */
3252           if ((prev_inst & 0xffe00000) == 0x20200000)
3253             return (extract_21 (prev_inst) + extract_17 (curr_inst)) & ~0x3;
3254           else
3255             {
3256               warning ("Unable to find ldil X,%%r1 before ble Y(%%sr4,%%r1).");
3257               return orig_pc == pc ? 0 : pc & ~0x3;
3258             }
3259         }
3260
3261       /* Does it look like a be 0(sr0,%r21)? OR 
3262          Does it look like a be, n 0(sr0,%r21)? OR 
3263          Does it look like a bve (r21)? (this is on PA2.0)
3264          Does it look like a bve, n(r21)? (this is also on PA2.0)
3265          That's the branch from an
3266          import stub to an export stub.
3267
3268          It is impossible to determine the target of the branch via
3269          simple examination of instructions and/or data (consider
3270          that the address in the plabel may be the address of the
3271          bind-on-reference routine in the dynamic loader).
3272
3273          So we have try an alternative approach.
3274
3275          Get the name of the symbol at our current location; it should
3276          be a stub symbol with the same name as the symbol in the
3277          shared library.
3278
3279          Then lookup a minimal symbol with the same name; we should
3280          get the minimal symbol for the target routine in the shared
3281          library as those take precedence of import/export stubs.  */
3282       if ((curr_inst == 0xe2a00000) ||
3283           (curr_inst == 0xe2a00002) ||
3284           (curr_inst == 0xeaa0d000) ||
3285           (curr_inst == 0xeaa0d002))
3286         {
3287           struct minimal_symbol *stubsym, *libsym;
3288
3289           stubsym = lookup_minimal_symbol_by_pc (loc);
3290           if (stubsym == NULL)
3291             {
3292               warning ("Unable to find symbol for 0x%x", loc);
3293               return orig_pc == pc ? 0 : pc & ~0x3;
3294             }
3295
3296           libsym = lookup_minimal_symbol (SYMBOL_NAME (stubsym), NULL, NULL);
3297           if (libsym == NULL)
3298             {
3299               warning ("Unable to find library symbol for %s\n",
3300                        SYMBOL_NAME (stubsym));
3301               return orig_pc == pc ? 0 : pc & ~0x3;
3302             }
3303
3304           return SYMBOL_VALUE (libsym);
3305         }
3306
3307       /* Does it look like bl X,%rp or bl X,%r0?  Another way to do a
3308          branch from the stub to the actual function.  */
3309       /*elz */
3310       else if ((curr_inst & 0xffe0e000) == 0xe8400000
3311                || (curr_inst & 0xffe0e000) == 0xe8000000
3312                || (curr_inst & 0xffe0e000) == 0xe800A000)
3313         return (loc + extract_17 (curr_inst) + 8) & ~0x3;
3314
3315       /* Does it look like bv (rp)?   Note this depends on the
3316          current stack pointer being the same as the stack
3317          pointer in the stub itself!  This is a branch on from the
3318          stub back to the original caller.  */
3319       /*else if ((curr_inst & 0xffe0e000) == 0xe840c000) */
3320       else if ((curr_inst & 0xffe0f000) == 0xe840c000)
3321         {
3322           /* Yup.  See if the previous instruction loaded
3323              rp from sp - 8.  */
3324           if (prev_inst == 0x4bc23ff1)
3325             return (read_memory_integer
3326                     (read_register (SP_REGNUM) - 8, 4)) & ~0x3;
3327           else
3328             {
3329               warning ("Unable to find restore of %%rp before bv (%%rp).");
3330               return orig_pc == pc ? 0 : pc & ~0x3;
3331             }
3332         }
3333
3334       /* elz: added this case to capture the new instruction
3335          at the end of the return part of an export stub used by
3336          the PA2.0: BVE, n (rp) */
3337       else if ((curr_inst & 0xffe0f000) == 0xe840d000)
3338         {
3339           return (read_memory_integer
3340                   (read_register (SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
3341         }
3342
3343       /* What about be,n 0(sr0,%rp)?  It's just another way we return to
3344          the original caller from the stub.  Used in dynamic executables.  */
3345       else if (curr_inst == 0xe0400002)
3346         {
3347           /* The value we jump to is sitting in sp - 24.  But that's
3348              loaded several instructions before the be instruction.
3349              I guess we could check for the previous instruction being
3350              mtsp %r1,%sr0 if we want to do sanity checking.  */
3351           return (read_memory_integer
3352                   (read_register (SP_REGNUM) - 24, TARGET_PTR_BIT / 8)) & ~0x3;
3353         }
3354
3355       /* Haven't found the branch yet, but we're still in the stub.
3356          Keep looking.  */
3357       loc += 4;
3358     }
3359 }
3360
3361
3362 /* For the given instruction (INST), return any adjustment it makes
3363    to the stack pointer or zero for no adjustment. 
3364
3365    This only handles instructions commonly found in prologues.  */
3366
3367 static int
3368 prologue_inst_adjust_sp (unsigned long inst)
3369 {
3370   /* This must persist across calls.  */
3371   static int save_high21;
3372
3373   /* The most common way to perform a stack adjustment ldo X(sp),sp */
3374   if ((inst & 0xffffc000) == 0x37de0000)
3375     return extract_14 (inst);
3376
3377   /* stwm X,D(sp) */
3378   if ((inst & 0xffe00000) == 0x6fc00000)
3379     return extract_14 (inst);
3380
3381   /* std,ma X,D(sp) */
3382   if ((inst & 0xffe00008) == 0x73c00008)
3383     return (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
3384
3385   /* addil high21,%r1; ldo low11,(%r1),%r30)
3386      save high bits in save_high21 for later use.  */
3387   if ((inst & 0xffe00000) == 0x28200000)
3388     {
3389       save_high21 = extract_21 (inst);
3390       return 0;
3391     }
3392
3393   if ((inst & 0xffff0000) == 0x343e0000)
3394     return save_high21 + extract_14 (inst);
3395
3396   /* fstws as used by the HP compilers.  */
3397   if ((inst & 0xffffffe0) == 0x2fd01220)
3398     return extract_5_load (inst);
3399
3400   /* No adjustment.  */
3401   return 0;
3402 }
3403
3404 /* Return nonzero if INST is a branch of some kind, else return zero.  */
3405
3406 static int
3407 is_branch (unsigned long inst)
3408 {
3409   switch (inst >> 26)
3410     {
3411     case 0x20:
3412     case 0x21:
3413     case 0x22:
3414     case 0x23:
3415     case 0x27:
3416     case 0x28:
3417     case 0x29:
3418     case 0x2a:
3419     case 0x2b:
3420     case 0x2f:
3421     case 0x30:
3422     case 0x31:
3423     case 0x32:
3424     case 0x33:
3425     case 0x38:
3426     case 0x39:
3427     case 0x3a:
3428     case 0x3b:
3429       return 1;
3430
3431     default:
3432       return 0;
3433     }
3434 }
3435
3436 /* Return the register number for a GR which is saved by INST or
3437    zero it INST does not save a GR.  */
3438
3439 static int
3440 inst_saves_gr (unsigned long inst)
3441 {
3442   /* Does it look like a stw?  */
3443   if ((inst >> 26) == 0x1a || (inst >> 26) == 0x1b
3444       || (inst >> 26) == 0x1f
3445       || ((inst >> 26) == 0x1f
3446           && ((inst >> 6) == 0xa)))
3447     return extract_5R_store (inst);
3448
3449   /* Does it look like a std?  */
3450   if ((inst >> 26) == 0x1c
3451       || ((inst >> 26) == 0x03
3452           && ((inst >> 6) & 0xf) == 0xb))
3453     return extract_5R_store (inst);
3454
3455   /* Does it look like a stwm?  GCC & HPC may use this in prologues. */
3456   if ((inst >> 26) == 0x1b)
3457     return extract_5R_store (inst);
3458
3459   /* Does it look like sth or stb?  HPC versions 9.0 and later use these
3460      too.  */
3461   if ((inst >> 26) == 0x19 || (inst >> 26) == 0x18
3462       || ((inst >> 26) == 0x3
3463           && (((inst >> 6) & 0xf) == 0x8
3464               || (inst >> 6) & 0xf) == 0x9))
3465     return extract_5R_store (inst);
3466
3467   return 0;
3468 }
3469
3470 /* Return the register number for a FR which is saved by INST or
3471    zero it INST does not save a FR.
3472
3473    Note we only care about full 64bit register stores (that's the only
3474    kind of stores the prologue will use).
3475
3476    FIXME: What about argument stores with the HP compiler in ANSI mode? */
3477
3478 static int
3479 inst_saves_fr (unsigned long inst)
3480 {
3481   /* is this an FSTD ? */
3482   if ((inst & 0xfc00dfc0) == 0x2c001200)
3483     return extract_5r_store (inst);
3484   if ((inst & 0xfc000002) == 0x70000002)
3485     return extract_5R_store (inst);
3486   /* is this an FSTW ? */
3487   if ((inst & 0xfc00df80) == 0x24001200)
3488     return extract_5r_store (inst);
3489   if ((inst & 0xfc000002) == 0x7c000000)
3490     return extract_5R_store (inst);
3491   return 0;
3492 }
3493
3494 /* Advance PC across any function entry prologue instructions
3495    to reach some "real" code. 
3496
3497    Use information in the unwind table to determine what exactly should
3498    be in the prologue.  */
3499
3500
3501 CORE_ADDR
3502 skip_prologue_hard_way (CORE_ADDR pc)
3503 {
3504   char buf[4];
3505   CORE_ADDR orig_pc = pc;
3506   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
3507   unsigned long args_stored, status, i, restart_gr, restart_fr;
3508   struct unwind_table_entry *u;
3509
3510   restart_gr = 0;
3511   restart_fr = 0;
3512
3513 restart:
3514   u = find_unwind_entry (pc);
3515   if (!u)
3516     return pc;
3517
3518   /* If we are not at the beginning of a function, then return now. */
3519   if ((pc & ~0x3) != u->region_start)
3520     return pc;
3521
3522   /* This is how much of a frame adjustment we need to account for.  */
3523   stack_remaining = u->Total_frame_size << 3;
3524
3525   /* Magic register saves we want to know about.  */
3526   save_rp = u->Save_RP;
3527   save_sp = u->Save_SP;
3528
3529   /* An indication that args may be stored into the stack.  Unfortunately
3530      the HPUX compilers tend to set this in cases where no args were
3531      stored too!.  */
3532   args_stored = 1;
3533
3534   /* Turn the Entry_GR field into a bitmask.  */
3535   save_gr = 0;
3536   for (i = 3; i < u->Entry_GR + 3; i++)
3537     {
3538       /* Frame pointer gets saved into a special location.  */
3539       if (u->Save_SP && i == FP_REGNUM)
3540         continue;
3541
3542       save_gr |= (1 << i);
3543     }
3544   save_gr &= ~restart_gr;
3545
3546   /* Turn the Entry_FR field into a bitmask too.  */
3547   save_fr = 0;
3548   for (i = 12; i < u->Entry_FR + 12; i++)
3549     save_fr |= (1 << i);
3550   save_fr &= ~restart_fr;
3551
3552   /* Loop until we find everything of interest or hit a branch.
3553
3554      For unoptimized GCC code and for any HP CC code this will never ever
3555      examine any user instructions.
3556
3557      For optimzied GCC code we're faced with problems.  GCC will schedule
3558      its prologue and make prologue instructions available for delay slot
3559      filling.  The end result is user code gets mixed in with the prologue
3560      and a prologue instruction may be in the delay slot of the first branch
3561      or call.
3562
3563      Some unexpected things are expected with debugging optimized code, so
3564      we allow this routine to walk past user instructions in optimized
3565      GCC code.  */
3566   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0
3567          || args_stored)
3568     {
3569       unsigned int reg_num;
3570       unsigned long old_stack_remaining, old_save_gr, old_save_fr;
3571       unsigned long old_save_rp, old_save_sp, next_inst;
3572
3573       /* Save copies of all the triggers so we can compare them later
3574          (only for HPC).  */
3575       old_save_gr = save_gr;
3576       old_save_fr = save_fr;
3577       old_save_rp = save_rp;
3578       old_save_sp = save_sp;
3579       old_stack_remaining = stack_remaining;
3580
3581       status = target_read_memory (pc, buf, 4);
3582       inst = extract_unsigned_integer (buf, 4);
3583
3584       /* Yow! */
3585       if (status != 0)
3586         return pc;
3587
3588       /* Note the interesting effects of this instruction.  */
3589       stack_remaining -= prologue_inst_adjust_sp (inst);
3590
3591       /* There are limited ways to store the return pointer into the
3592          stack.  */
3593       if (inst == 0x6bc23fd9 || inst == 0x0fc212c1)
3594         save_rp = 0;
3595
3596       /* These are the only ways we save SP into the stack.  At this time
3597          the HP compilers never bother to save SP into the stack.  */
3598       if ((inst & 0xffffc000) == 0x6fc10000
3599           || (inst & 0xffffc00c) == 0x73c10008)
3600         save_sp = 0;
3601
3602       /* Are we loading some register with an offset from the argument
3603          pointer?  */
3604       if ((inst & 0xffe00000) == 0x37a00000
3605           || (inst & 0xffffffe0) == 0x081d0240)
3606         {
3607           pc += 4;
3608           continue;
3609         }
3610
3611       /* Account for general and floating-point register saves.  */
3612       reg_num = inst_saves_gr (inst);
3613       save_gr &= ~(1 << reg_num);
3614
3615       /* Ugh.  Also account for argument stores into the stack.
3616          Unfortunately args_stored only tells us that some arguments
3617          where stored into the stack.  Not how many or what kind!
3618
3619          This is a kludge as on the HP compiler sets this bit and it
3620          never does prologue scheduling.  So once we see one, skip past
3621          all of them.   We have similar code for the fp arg stores below.
3622
3623          FIXME.  Can still die if we have a mix of GR and FR argument
3624          stores!  */
3625       if (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26)
3626         {
3627           while (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26)
3628             {
3629               pc += 4;
3630               status = target_read_memory (pc, buf, 4);
3631               inst = extract_unsigned_integer (buf, 4);
3632               if (status != 0)
3633                 return pc;
3634               reg_num = inst_saves_gr (inst);
3635             }
3636           args_stored = 0;
3637           continue;
3638         }
3639
3640       reg_num = inst_saves_fr (inst);
3641       save_fr &= ~(1 << reg_num);
3642
3643       status = target_read_memory (pc + 4, buf, 4);
3644       next_inst = extract_unsigned_integer (buf, 4);
3645
3646       /* Yow! */
3647       if (status != 0)
3648         return pc;
3649
3650       /* We've got to be read to handle the ldo before the fp register
3651          save.  */
3652       if ((inst & 0xfc000000) == 0x34000000
3653           && inst_saves_fr (next_inst) >= 4
3654           && inst_saves_fr (next_inst) <= (TARGET_PTR_BIT == 64 ? 11 : 7))
3655         {
3656           /* So we drop into the code below in a reasonable state.  */
3657           reg_num = inst_saves_fr (next_inst);
3658           pc -= 4;
3659         }
3660
3661       /* Ugh.  Also account for argument stores into the stack.
3662          This is a kludge as on the HP compiler sets this bit and it
3663          never does prologue scheduling.  So once we see one, skip past
3664          all of them.  */
3665       if (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7))
3666         {
3667           while (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7))
3668             {
3669               pc += 8;
3670               status = target_read_memory (pc, buf, 4);
3671               inst = extract_unsigned_integer (buf, 4);
3672               if (status != 0)
3673                 return pc;
3674               if ((inst & 0xfc000000) != 0x34000000)
3675                 break;
3676               status = target_read_memory (pc + 4, buf, 4);
3677               next_inst = extract_unsigned_integer (buf, 4);
3678               if (status != 0)
3679                 return pc;
3680               reg_num = inst_saves_fr (next_inst);
3681             }
3682           args_stored = 0;
3683           continue;
3684         }
3685
3686       /* Quit if we hit any kind of branch.  This can happen if a prologue
3687          instruction is in the delay slot of the first call/branch.  */
3688       if (is_branch (inst))
3689         break;
3690
3691       /* What a crock.  The HP compilers set args_stored even if no
3692          arguments were stored into the stack (boo hiss).  This could
3693          cause this code to then skip a bunch of user insns (up to the
3694          first branch).
3695
3696          To combat this we try to identify when args_stored was bogusly
3697          set and clear it.   We only do this when args_stored is nonzero,
3698          all other resources are accounted for, and nothing changed on
3699          this pass.  */
3700       if (args_stored
3701        && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
3702           && old_save_gr == save_gr && old_save_fr == save_fr
3703           && old_save_rp == save_rp && old_save_sp == save_sp
3704           && old_stack_remaining == stack_remaining)
3705         break;
3706
3707       /* Bump the PC.  */
3708       pc += 4;
3709     }
3710
3711   /* We've got a tenative location for the end of the prologue.  However
3712      because of limitations in the unwind descriptor mechanism we may
3713      have went too far into user code looking for the save of a register
3714      that does not exist.  So, if there registers we expected to be saved
3715      but never were, mask them out and restart.
3716
3717      This should only happen in optimized code, and should be very rare.  */
3718   if (save_gr || (save_fr && !(restart_fr || restart_gr)))
3719     {
3720       pc = orig_pc;
3721       restart_gr = save_gr;
3722       restart_fr = save_fr;
3723       goto restart;
3724     }
3725
3726   return pc;
3727 }
3728
3729
3730 /* Return the address of the PC after the last prologue instruction if
3731    we can determine it from the debug symbols.  Else return zero.  */
3732
3733 static CORE_ADDR
3734 after_prologue (CORE_ADDR pc)
3735 {
3736   struct symtab_and_line sal;
3737   CORE_ADDR func_addr, func_end;
3738   struct symbol *f;
3739
3740   /* If we can not find the symbol in the partial symbol table, then
3741      there is no hope we can determine the function's start address
3742      with this code.  */
3743   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
3744     return 0;
3745
3746   /* Get the line associated with FUNC_ADDR.  */
3747   sal = find_pc_line (func_addr, 0);
3748
3749   /* There are only two cases to consider.  First, the end of the source line
3750      is within the function bounds.  In that case we return the end of the
3751      source line.  Second is the end of the source line extends beyond the
3752      bounds of the current function.  We need to use the slow code to
3753      examine instructions in that case. 
3754
3755      Anything else is simply a bug elsewhere.  Fixing it here is absolutely
3756      the wrong thing to do.  In fact, it should be entirely possible for this
3757      function to always return zero since the slow instruction scanning code
3758      is supposed to *always* work.  If it does not, then it is a bug.  */
3759   if (sal.end < func_end)
3760     return sal.end;
3761   else
3762     return 0;
3763 }
3764
3765 /* To skip prologues, I use this predicate.  Returns either PC itself
3766    if the code at PC does not look like a function prologue; otherwise
3767    returns an address that (if we're lucky) follows the prologue.  If
3768    LENIENT, then we must skip everything which is involved in setting
3769    up the frame (it's OK to skip more, just so long as we don't skip
3770    anything which might clobber the registers which are being saved.
3771    Currently we must not skip more on the alpha, but we might the lenient
3772    stuff some day.  */
3773
3774 CORE_ADDR
3775 hppa_skip_prologue (CORE_ADDR pc)
3776 {
3777   unsigned long inst;
3778   int offset;
3779   CORE_ADDR post_prologue_pc;
3780   char buf[4];
3781
3782   /* See if we can determine the end of the prologue via the symbol table.
3783      If so, then return either PC, or the PC after the prologue, whichever
3784      is greater.  */
3785
3786   post_prologue_pc = after_prologue (pc);
3787
3788   /* If after_prologue returned a useful address, then use it.  Else
3789      fall back on the instruction skipping code.
3790
3791      Some folks have claimed this causes problems because the breakpoint
3792      may be the first instruction of the prologue.  If that happens, then
3793      the instruction skipping code has a bug that needs to be fixed.  */
3794   if (post_prologue_pc != 0)
3795     return max (pc, post_prologue_pc);
3796   else
3797     return (skip_prologue_hard_way (pc));
3798 }
3799
3800 /* Put here the code to store, into a struct frame_saved_regs,
3801    the addresses of the saved registers of frame described by FRAME_INFO.
3802    This includes special registers such as pc and fp saved in special
3803    ways in the stack frame.  sp is even more special:
3804    the address we return for it IS the sp for the next frame.  */
3805
3806 void
3807 hppa_frame_find_saved_regs (struct frame_info *frame_info,
3808                             struct frame_saved_regs *frame_saved_regs)
3809 {
3810   CORE_ADDR pc;
3811   struct unwind_table_entry *u;
3812   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
3813   int status, i, reg;
3814   char buf[4];
3815   int fp_loc = -1;
3816   int final_iteration;
3817
3818   /* Zero out everything.  */
3819   memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
3820
3821   /* Call dummy frames always look the same, so there's no need to
3822      examine the dummy code to determine locations of saved registers;
3823      instead, let find_dummy_frame_regs fill in the correct offsets
3824      for the saved registers.  */
3825   if ((frame_info->pc >= frame_info->frame
3826        && frame_info->pc <= (frame_info->frame
3827                              /* A call dummy is sized in words, but it is
3828                                 actually a series of instructions.  Account
3829                                 for that scaling factor.  */
3830                              + ((REGISTER_SIZE / INSTRUCTION_SIZE)
3831                                 * CALL_DUMMY_LENGTH)
3832                              /* Similarly we have to account for 64bit
3833                                 wide register saves.  */
3834                              + (32 * REGISTER_SIZE)
3835                              /* We always consider FP regs 8 bytes long.  */
3836                              + (NUM_REGS - FP0_REGNUM) * 8
3837                              /* Similarly we have to account for 64bit
3838                                 wide register saves.  */
3839                              + (6 * REGISTER_SIZE))))
3840     find_dummy_frame_regs (frame_info, frame_saved_regs);
3841
3842   /* Interrupt handlers are special too.  They lay out the register
3843      state in the exact same order as the register numbers in GDB.  */
3844   if (pc_in_interrupt_handler (frame_info->pc))
3845     {
3846       for (i = 0; i < NUM_REGS; i++)
3847         {
3848           /* SP is a little special.  */
3849           if (i == SP_REGNUM)
3850             frame_saved_regs->regs[SP_REGNUM]
3851               = read_memory_integer (frame_info->frame + SP_REGNUM * 4,
3852                                      TARGET_PTR_BIT / 8);
3853           else
3854             frame_saved_regs->regs[i] = frame_info->frame + i * 4;
3855         }
3856       return;
3857     }
3858
3859 #ifdef FRAME_FIND_SAVED_REGS_IN_SIGTRAMP
3860   /* Handle signal handler callers.  */
3861   if (frame_info->signal_handler_caller)
3862     {
3863       FRAME_FIND_SAVED_REGS_IN_SIGTRAMP (frame_info, frame_saved_regs);
3864       return;
3865     }
3866 #endif
3867
3868   /* Get the starting address of the function referred to by the PC
3869      saved in frame.  */
3870   pc = get_pc_function_start (frame_info->pc);
3871
3872   /* Yow! */
3873   u = find_unwind_entry (pc);
3874   if (!u)
3875     return;
3876
3877   /* This is how much of a frame adjustment we need to account for.  */
3878   stack_remaining = u->Total_frame_size << 3;
3879
3880   /* Magic register saves we want to know about.  */
3881   save_rp = u->Save_RP;
3882   save_sp = u->Save_SP;
3883
3884   /* Turn the Entry_GR field into a bitmask.  */
3885   save_gr = 0;
3886   for (i = 3; i < u->Entry_GR + 3; i++)
3887     {
3888       /* Frame pointer gets saved into a special location.  */
3889       if (u->Save_SP && i == FP_REGNUM)
3890         continue;
3891
3892       save_gr |= (1 << i);
3893     }
3894
3895   /* Turn the Entry_FR field into a bitmask too.  */
3896   save_fr = 0;
3897   for (i = 12; i < u->Entry_FR + 12; i++)
3898     save_fr |= (1 << i);
3899
3900   /* The frame always represents the value of %sp at entry to the
3901      current function (and is thus equivalent to the "saved" stack
3902      pointer.  */
3903   frame_saved_regs->regs[SP_REGNUM] = frame_info->frame;
3904
3905   /* Loop until we find everything of interest or hit a branch.
3906
3907      For unoptimized GCC code and for any HP CC code this will never ever
3908      examine any user instructions.
3909
3910      For optimized GCC code we're faced with problems.  GCC will schedule
3911      its prologue and make prologue instructions available for delay slot
3912      filling.  The end result is user code gets mixed in with the prologue
3913      and a prologue instruction may be in the delay slot of the first branch
3914      or call.
3915
3916      Some unexpected things are expected with debugging optimized code, so
3917      we allow this routine to walk past user instructions in optimized
3918      GCC code.  */
3919   final_iteration = 0;
3920   while ((save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
3921          && pc <= frame_info->pc)
3922     {
3923       status = target_read_memory (pc, buf, 4);
3924       inst = extract_unsigned_integer (buf, 4);
3925
3926       /* Yow! */
3927       if (status != 0)
3928         return;
3929
3930       /* Note the interesting effects of this instruction.  */
3931       stack_remaining -= prologue_inst_adjust_sp (inst);
3932
3933       /* There are limited ways to store the return pointer into the
3934          stack.  */
3935       if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
3936         {
3937           save_rp = 0;
3938           frame_saved_regs->regs[RP_REGNUM] = frame_info->frame - 20;
3939         }
3940       else if (inst == 0x0fc212c1) /* std rp,-0x10(sr0,sp) */
3941         {
3942           save_rp = 0;
3943           frame_saved_regs->regs[RP_REGNUM] = frame_info->frame - 16;
3944         }
3945
3946       /* Note if we saved SP into the stack.  This also happens to indicate
3947          the location of the saved frame pointer.  */
3948       if (   (inst & 0xffffc000) == 0x6fc10000  /* stw,ma r1,N(sr0,sp) */
3949           || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
3950         {
3951           frame_saved_regs->regs[FP_REGNUM] = frame_info->frame;
3952           save_sp = 0;
3953         }
3954
3955       /* Account for general and floating-point register saves.  */
3956       reg = inst_saves_gr (inst);
3957       if (reg >= 3 && reg <= 18
3958           && (!u->Save_SP || reg != FP_REGNUM))
3959         {
3960           save_gr &= ~(1 << reg);
3961
3962           /* stwm with a positive displacement is a *post modify*.  */
3963           if ((inst >> 26) == 0x1b
3964               && extract_14 (inst) >= 0)
3965             frame_saved_regs->regs[reg] = frame_info->frame;
3966           /* A std has explicit post_modify forms.  */
3967           else if ((inst & 0xfc00000c0) == 0x70000008)
3968             frame_saved_regs->regs[reg] = frame_info->frame;
3969           else
3970             {
3971               CORE_ADDR offset;
3972
3973               if ((inst >> 26) == 0x1c)
3974                 offset = (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
3975               else if ((inst >> 26) == 0x03)
3976                 offset = low_sign_extend (inst & 0x1f, 5);
3977               else
3978                 offset = extract_14 (inst);
3979
3980               /* Handle code with and without frame pointers.  */
3981               if (u->Save_SP)
3982                 frame_saved_regs->regs[reg]
3983                   = frame_info->frame + offset;
3984               else
3985                 frame_saved_regs->regs[reg]
3986                   = (frame_info->frame + (u->Total_frame_size << 3)
3987                      + offset);
3988             }
3989         }
3990
3991
3992       /* GCC handles callee saved FP regs a little differently.  
3993
3994          It emits an instruction to put the value of the start of
3995          the FP store area into %r1.  It then uses fstds,ma with
3996          a basereg of %r1 for the stores.
3997
3998          HP CC emits them at the current stack pointer modifying
3999          the stack pointer as it stores each register.  */
4000
4001       /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
4002       if ((inst & 0xffffc000) == 0x34610000
4003           || (inst & 0xffffc000) == 0x37c10000)
4004         fp_loc = extract_14 (inst);
4005
4006       reg = inst_saves_fr (inst);
4007       if (reg >= 12 && reg <= 21)
4008         {
4009           /* Note +4 braindamage below is necessary because the FP status
4010              registers are internally 8 registers rather than the expected
4011              4 registers.  */
4012           save_fr &= ~(1 << reg);
4013           if (fp_loc == -1)
4014             {
4015               /* 1st HP CC FP register store.  After this instruction
4016                  we've set enough state that the GCC and HPCC code are
4017                  both handled in the same manner.  */
4018               frame_saved_regs->regs[reg + FP4_REGNUM + 4] = frame_info->frame;
4019               fp_loc = 8;
4020             }
4021           else
4022             {
4023               frame_saved_regs->regs[reg + FP0_REGNUM + 4]
4024                 = frame_info->frame + fp_loc;
4025               fp_loc += 8;
4026             }
4027         }
4028
4029       /* Quit if we hit any kind of branch the previous iteration.
4030       if (final_iteration)
4031         break;
4032
4033       /* We want to look precisely one instruction beyond the branch
4034          if we have not found everything yet.  */
4035       if (is_branch (inst))
4036         final_iteration = 1;
4037
4038       /* Bump the PC.  */
4039       pc += 4;
4040     }
4041 }
4042
4043
4044 /* Exception handling support for the HP-UX ANSI C++ compiler.
4045    The compiler (aCC) provides a callback for exception events;
4046    GDB can set a breakpoint on this callback and find out what
4047    exception event has occurred. */
4048
4049 /* The name of the hook to be set to point to the callback function */
4050 static char HP_ACC_EH_notify_hook[] = "__eh_notify_hook";
4051 /* The name of the function to be used to set the hook value */
4052 static char HP_ACC_EH_set_hook_value[] = "__eh_set_hook_value";
4053 /* The name of the callback function in end.o */
4054 static char HP_ACC_EH_notify_callback[] = "__d_eh_notify_callback";
4055 /* Name of function in end.o on which a break is set (called by above) */
4056 static char HP_ACC_EH_break[] = "__d_eh_break";
4057 /* Name of flag (in end.o) that enables catching throws */
4058 static char HP_ACC_EH_catch_throw[] = "__d_eh_catch_throw";
4059 /* Name of flag (in end.o) that enables catching catching */
4060 static char HP_ACC_EH_catch_catch[] = "__d_eh_catch_catch";
4061 /* The enum used by aCC */
4062 typedef enum
4063   {
4064     __EH_NOTIFY_THROW,
4065     __EH_NOTIFY_CATCH
4066   }
4067 __eh_notification;
4068
4069 /* Is exception-handling support available with this executable? */
4070 static int hp_cxx_exception_support = 0;
4071 /* Has the initialize function been run? */
4072 int hp_cxx_exception_support_initialized = 0;
4073 /* Similar to above, but imported from breakpoint.c -- non-target-specific */
4074 extern int exception_support_initialized;
4075 /* Address of __eh_notify_hook */
4076 static CORE_ADDR eh_notify_hook_addr = 0;
4077 /* Address of __d_eh_notify_callback */
4078 static CORE_ADDR eh_notify_callback_addr = 0;
4079 /* Address of __d_eh_break */
4080 static CORE_ADDR eh_break_addr = 0;
4081 /* Address of __d_eh_catch_catch */
4082 static CORE_ADDR eh_catch_catch_addr = 0;
4083 /* Address of __d_eh_catch_throw */
4084 static CORE_ADDR eh_catch_throw_addr = 0;
4085 /* Sal for __d_eh_break */
4086 static struct symtab_and_line *break_callback_sal = 0;
4087
4088 /* Code in end.c expects __d_pid to be set in the inferior,
4089    otherwise __d_eh_notify_callback doesn't bother to call
4090    __d_eh_break!  So we poke the pid into this symbol
4091    ourselves.
4092    0 => success
4093    1 => failure  */
4094 int
4095 setup_d_pid_in_inferior (void)
4096 {
4097   CORE_ADDR anaddr;
4098   struct minimal_symbol *msymbol;
4099   char buf[4];                  /* FIXME 32x64? */
4100
4101   /* Slam the pid of the process into __d_pid; failing is only a warning!  */
4102   msymbol = lookup_minimal_symbol ("__d_pid", NULL, symfile_objfile);
4103   if (msymbol == NULL)
4104     {
4105       warning ("Unable to find __d_pid symbol in object file.");
4106       warning ("Suggest linking executable with -g (links in /opt/langtools/lib/end.o).");
4107       return 1;
4108     }
4109
4110   anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
4111   store_unsigned_integer (buf, 4, inferior_pid);        /* FIXME 32x64? */
4112   if (target_write_memory (anaddr, buf, 4))     /* FIXME 32x64? */
4113     {
4114       warning ("Unable to write __d_pid");
4115       warning ("Suggest linking executable with -g (links in /opt/langtools/lib/end.o).");
4116       return 1;
4117     }
4118   return 0;
4119 }
4120
4121 /* Initialize exception catchpoint support by looking for the
4122    necessary hooks/callbacks in end.o, etc., and set the hook value to
4123    point to the required debug function
4124
4125    Return 0 => failure
4126    1 => success          */
4127
4128 static int
4129 initialize_hp_cxx_exception_support (void)
4130 {
4131   struct symtabs_and_lines sals;
4132   struct cleanup *old_chain;
4133   struct cleanup *canonical_strings_chain = NULL;
4134   int i;
4135   char *addr_start;
4136   char *addr_end = NULL;
4137   char **canonical = (char **) NULL;
4138   int thread = -1;
4139   struct symbol *sym = NULL;
4140   struct minimal_symbol *msym = NULL;
4141   struct objfile *objfile;
4142   asection *shlib_info;
4143
4144   /* Detect and disallow recursion.  On HP-UX with aCC, infinite
4145      recursion is a possibility because finding the hook for exception
4146      callbacks involves making a call in the inferior, which means
4147      re-inserting breakpoints which can re-invoke this code */
4148
4149   static int recurse = 0;
4150   if (recurse > 0)
4151     {
4152       hp_cxx_exception_support_initialized = 0;
4153       exception_support_initialized = 0;
4154       return 0;
4155     }
4156
4157   hp_cxx_exception_support = 0;
4158
4159   /* First check if we have seen any HP compiled objects; if not,
4160      it is very unlikely that HP's idiosyncratic callback mechanism
4161      for exception handling debug support will be available!
4162      This will percolate back up to breakpoint.c, where our callers
4163      will decide to try the g++ exception-handling support instead. */
4164   if (!hp_som_som_object_present)
4165     return 0;
4166
4167   /* We have a SOM executable with SOM debug info; find the hooks */
4168
4169   /* First look for the notify hook provided by aCC runtime libs */
4170   /* If we find this symbol, we conclude that the executable must
4171      have HP aCC exception support built in.  If this symbol is not
4172      found, even though we're a HP SOM-SOM file, we may have been
4173      built with some other compiler (not aCC).  This results percolates
4174      back up to our callers in breakpoint.c which can decide to
4175      try the g++ style of exception support instead.
4176      If this symbol is found but the other symbols we require are
4177      not found, there is something weird going on, and g++ support
4178      should *not* be tried as an alternative.
4179
4180      ASSUMPTION: Only HP aCC code will have __eh_notify_hook defined.  
4181      ASSUMPTION: HP aCC and g++ modules cannot be linked together. */
4182
4183   /* libCsup has this hook; it'll usually be non-debuggable */
4184   msym = lookup_minimal_symbol (HP_ACC_EH_notify_hook, NULL, NULL);
4185   if (msym)
4186     {
4187       eh_notify_hook_addr = SYMBOL_VALUE_ADDRESS (msym);
4188       hp_cxx_exception_support = 1;
4189     }
4190   else
4191     {
4192       warning ("Unable to find exception callback hook (%s).", HP_ACC_EH_notify_hook);
4193       warning ("Executable may not have been compiled debuggable with HP aCC.");
4194       warning ("GDB will be unable to intercept exception events.");
4195       eh_notify_hook_addr = 0;
4196       hp_cxx_exception_support = 0;
4197       return 0;
4198     }
4199
4200   /* Next look for the notify callback routine in end.o */
4201   /* This is always available in the SOM symbol dictionary if end.o is linked in */
4202   msym = lookup_minimal_symbol (HP_ACC_EH_notify_callback, NULL, NULL);
4203   if (msym)
4204     {
4205       eh_notify_callback_addr = SYMBOL_VALUE_ADDRESS (msym);
4206       hp_cxx_exception_support = 1;
4207     }
4208   else
4209     {
4210       warning ("Unable to find exception callback routine (%s).", HP_ACC_EH_notify_callback);
4211       warning ("Suggest linking executable with -g (links in /opt/langtools/lib/end.o).");
4212       warning ("GDB will be unable to intercept exception events.");
4213       eh_notify_callback_addr = 0;
4214       return 0;
4215     }
4216
4217 #ifndef GDB_TARGET_IS_HPPA_20W
4218   /* Check whether the executable is dynamically linked or archive bound */
4219   /* With an archive-bound executable we can use the raw addresses we find
4220      for the callback function, etc. without modification. For an executable
4221      with shared libraries, we have to do more work to find the plabel, which
4222      can be the target of a call through $$dyncall from the aCC runtime support
4223      library (libCsup) which is linked shared by default by aCC. */
4224   /* This test below was copied from somsolib.c/somread.c.  It may not be a very
4225      reliable one to test that an executable is linked shared. pai/1997-07-18 */
4226   shlib_info = bfd_get_section_by_name (symfile_objfile->obfd, "$SHLIB_INFO$");
4227   if (shlib_info && (bfd_section_size (symfile_objfile->obfd, shlib_info) != 0))
4228     {
4229       /* The minsym we have has the local code address, but that's not the
4230          plabel that can be used by an inter-load-module call. */
4231       /* Find solib handle for main image (which has end.o), and use that
4232          and the min sym as arguments to __d_shl_get() (which does the equivalent
4233          of shl_findsym()) to find the plabel. */
4234
4235       args_for_find_stub args;
4236       static char message[] = "Error while finding exception callback hook:\n";
4237
4238       args.solib_handle = som_solib_get_solib_by_pc (eh_notify_callback_addr);
4239       args.msym = msym;
4240       args.return_val = 0;
4241
4242       recurse++;
4243       catch_errors (cover_find_stub_with_shl_get, (PTR) &args, message,
4244                     RETURN_MASK_ALL);
4245       eh_notify_callback_addr = args.return_val;
4246       recurse--;
4247
4248       exception_catchpoints_are_fragile = 1;
4249
4250       if (!eh_notify_callback_addr)
4251         {
4252           /* We can get here either if there is no plabel in the export list
4253              for the main image, or if something strange happened (??) */
4254           warning ("Couldn't find a plabel (indirect function label) for the exception callback.");
4255           warning ("GDB will not be able to intercept exception events.");
4256           return 0;
4257         }
4258     }
4259   else
4260     exception_catchpoints_are_fragile = 0;
4261 #endif
4262
4263   /* Now, look for the breakpointable routine in end.o */
4264   /* This should also be available in the SOM symbol dict. if end.o linked in */
4265   msym = lookup_minimal_symbol (HP_ACC_EH_break, NULL, NULL);
4266   if (msym)
4267     {
4268       eh_break_addr = SYMBOL_VALUE_ADDRESS (msym);
4269       hp_cxx_exception_support = 1;
4270     }
4271   else
4272     {
4273       warning ("Unable to find exception callback routine to set breakpoint (%s).", HP_ACC_EH_break);
4274       warning ("Suggest linking executable with -g (link in /opt/langtools/lib/end.o).");
4275       warning ("GDB will be unable to intercept exception events.");
4276       eh_break_addr = 0;
4277       return 0;
4278     }
4279
4280   /* Next look for the catch enable flag provided in end.o */
4281   sym = lookup_symbol (HP_ACC_EH_catch_catch, (struct block *) NULL,
4282                        VAR_NAMESPACE, 0, (struct symtab **) NULL);
4283   if (sym)                      /* sometimes present in debug info */
4284     {
4285       eh_catch_catch_addr = SYMBOL_VALUE_ADDRESS (sym);
4286       hp_cxx_exception_support = 1;
4287     }
4288   else
4289     /* otherwise look in SOM symbol dict. */
4290     {
4291       msym = lookup_minimal_symbol (HP_ACC_EH_catch_catch, NULL, NULL);
4292       if (msym)
4293         {
4294           eh_catch_catch_addr = SYMBOL_VALUE_ADDRESS (msym);
4295           hp_cxx_exception_support = 1;
4296         }
4297       else
4298         {
4299           warning ("Unable to enable interception of exception catches.");
4300           warning ("Executable may not have been compiled debuggable with HP aCC.");
4301           warning ("Suggest linking executable with -g (link in /opt/langtools/lib/end.o).");
4302           return 0;
4303         }
4304     }
4305
4306   /* Next look for the catch enable flag provided end.o */
4307   sym = lookup_symbol (HP_ACC_EH_catch_catch, (struct block *) NULL,
4308                        VAR_NAMESPACE, 0, (struct symtab **) NULL);
4309   if (sym)                      /* sometimes present in debug info */
4310     {
4311       eh_catch_throw_addr = SYMBOL_VALUE_ADDRESS (sym);
4312       hp_cxx_exception_support = 1;
4313     }
4314   else
4315     /* otherwise look in SOM symbol dict. */
4316     {
4317       msym = lookup_minimal_symbol (HP_ACC_EH_catch_throw, NULL, NULL);
4318       if (msym)
4319         {
4320           eh_catch_throw_addr = SYMBOL_VALUE_ADDRESS (msym);
4321           hp_cxx_exception_support = 1;
4322         }
4323       else
4324         {
4325           warning ("Unable to enable interception of exception throws.");
4326           warning ("Executable may not have been compiled debuggable with HP aCC.");
4327           warning ("Suggest linking executable with -g (link in /opt/langtools/lib/end.o).");
4328           return 0;
4329         }
4330     }
4331
4332   /* Set the flags */
4333   hp_cxx_exception_support = 2; /* everything worked so far */
4334   hp_cxx_exception_support_initialized = 1;
4335   exception_support_initialized = 1;
4336
4337   return 1;
4338 }
4339
4340 /* Target operation for enabling or disabling interception of
4341    exception events.
4342    KIND is either EX_EVENT_THROW or EX_EVENT_CATCH
4343    ENABLE is either 0 (disable) or 1 (enable).
4344    Return value is NULL if no support found;
4345    -1 if something went wrong,
4346    or a pointer to a symtab/line struct if the breakpointable
4347    address was found. */
4348
4349 struct symtab_and_line *
4350 child_enable_exception_callback (enum exception_event_kind kind, int enable)
4351 {
4352   char buf[4];
4353
4354   if (!exception_support_initialized || !hp_cxx_exception_support_initialized)
4355     if (!initialize_hp_cxx_exception_support ())
4356       return NULL;
4357
4358   switch (hp_cxx_exception_support)
4359     {
4360     case 0:
4361       /* Assuming no HP support at all */
4362       return NULL;
4363     case 1:
4364       /* HP support should be present, but something went wrong */
4365       return (struct symtab_and_line *) -1;     /* yuck! */
4366       /* there may be other cases in the future */
4367     }
4368
4369   /* Set the EH hook to point to the callback routine */
4370   store_unsigned_integer (buf, 4, enable ? eh_notify_callback_addr : 0);        /* FIXME 32x64 problem */
4371   /* pai: (temp) FIXME should there be a pack operation first? */
4372   if (target_write_memory (eh_notify_hook_addr, buf, 4))        /* FIXME 32x64 problem */
4373     {
4374       warning ("Could not write to target memory for exception event callback.");
4375       warning ("Interception of exception events may not work.");
4376       return (struct symtab_and_line *) -1;
4377     }
4378   if (enable)
4379     {
4380       /* Ensure that __d_pid is set up correctly -- end.c code checks this. :-( */
4381       if (inferior_pid > 0)
4382         {
4383           if (setup_d_pid_in_inferior ())
4384             return (struct symtab_and_line *) -1;
4385         }
4386       else
4387         {
4388           warning ("Internal error: Invalid inferior pid?  Cannot intercept exception events.");
4389           return (struct symtab_and_line *) -1;
4390         }
4391     }
4392
4393   switch (kind)
4394     {
4395     case EX_EVENT_THROW:
4396       store_unsigned_integer (buf, 4, enable ? 1 : 0);
4397       if (target_write_memory (eh_catch_throw_addr, buf, 4))    /* FIXME 32x64? */
4398         {
4399           warning ("Couldn't enable exception throw interception.");
4400           return (struct symtab_and_line *) -1;
4401         }
4402       break;
4403     case EX_EVENT_CATCH:
4404       store_unsigned_integer (buf, 4, enable ? 1 : 0);
4405       if (target_write_memory (eh_catch_catch_addr, buf, 4))    /* FIXME 32x64? */
4406         {
4407           warning ("Couldn't enable exception catch interception.");
4408           return (struct symtab_and_line *) -1;
4409         }
4410       break;
4411     default:
4412       error ("Request to enable unknown or unsupported exception event.");
4413     }
4414
4415   /* Copy break address into new sal struct, malloc'ing if needed. */
4416   if (!break_callback_sal)
4417     {
4418       break_callback_sal = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
4419     }
4420   INIT_SAL (break_callback_sal);
4421   break_callback_sal->symtab = NULL;
4422   break_callback_sal->pc = eh_break_addr;
4423   break_callback_sal->line = 0;
4424   break_callback_sal->end = eh_break_addr;
4425
4426   return break_callback_sal;
4427 }
4428
4429 /* Record some information about the current exception event */
4430 static struct exception_event_record current_ex_event;
4431 /* Convenience struct */
4432 static struct symtab_and_line null_symtab_and_line =
4433 {NULL, 0, 0, 0};
4434
4435 /* Report current exception event.  Returns a pointer to a record
4436    that describes the kind of the event, where it was thrown from,
4437    and where it will be caught.  More information may be reported
4438    in the future */
4439 struct exception_event_record *
4440 child_get_current_exception_event (void)
4441 {
4442   CORE_ADDR event_kind;
4443   CORE_ADDR throw_addr;
4444   CORE_ADDR catch_addr;
4445   struct frame_info *fi, *curr_frame;
4446   int level = 1;
4447
4448   curr_frame = get_current_frame ();
4449   if (!curr_frame)
4450     return (struct exception_event_record *) NULL;
4451
4452   /* Go up one frame to __d_eh_notify_callback, because at the
4453      point when this code is executed, there's garbage in the
4454      arguments of __d_eh_break. */
4455   fi = find_relative_frame (curr_frame, &level);
4456   if (level != 0)
4457     return (struct exception_event_record *) NULL;
4458
4459   select_frame (fi, -1);
4460
4461   /* Read in the arguments */
4462   /* __d_eh_notify_callback() is called with 3 arguments:
4463      1. event kind catch or throw
4464      2. the target address if known
4465      3. a flag -- not sure what this is. pai/1997-07-17 */
4466   event_kind = read_register (ARG0_REGNUM);
4467   catch_addr = read_register (ARG1_REGNUM);
4468
4469   /* Now go down to a user frame */
4470   /* For a throw, __d_eh_break is called by
4471      __d_eh_notify_callback which is called by
4472      __notify_throw which is called
4473      from user code.
4474      For a catch, __d_eh_break is called by
4475      __d_eh_notify_callback which is called by
4476      <stackwalking stuff> which is called by
4477      __throw__<stuff> or __rethrow_<stuff> which is called
4478      from user code. */
4479   /* FIXME: Don't use such magic numbers; search for the frames */
4480   level = (event_kind == EX_EVENT_THROW) ? 3 : 4;
4481   fi = find_relative_frame (curr_frame, &level);
4482   if (level != 0)
4483     return (struct exception_event_record *) NULL;
4484
4485   select_frame (fi, -1);
4486   throw_addr = fi->pc;
4487
4488   /* Go back to original (top) frame */
4489   select_frame (curr_frame, -1);
4490
4491   current_ex_event.kind = (enum exception_event_kind) event_kind;
4492   current_ex_event.throw_sal = find_pc_line (throw_addr, 1);
4493   current_ex_event.catch_sal = find_pc_line (catch_addr, 1);
4494
4495   return &current_ex_event;
4496 }
4497
4498 static void
4499 unwind_command (char *exp, int from_tty)
4500 {
4501   CORE_ADDR address;
4502   struct unwind_table_entry *u;
4503
4504   /* If we have an expression, evaluate it and use it as the address.  */
4505
4506   if (exp != 0 && *exp != 0)
4507     address = parse_and_eval_address (exp);
4508   else
4509     return;
4510
4511   u = find_unwind_entry (address);
4512
4513   if (!u)
4514     {
4515       printf_unfiltered ("Can't find unwind table entry for %s\n", exp);
4516       return;
4517     }
4518
4519   printf_unfiltered ("unwind_table_entry (0x%x):\n", u);
4520
4521   printf_unfiltered ("\tregion_start = ");
4522   print_address (u->region_start, gdb_stdout);
4523
4524   printf_unfiltered ("\n\tregion_end = ");
4525   print_address (u->region_end, gdb_stdout);
4526
4527 #ifdef __STDC__
4528 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);
4529 #else
4530 #define pif(FLD) if (u->FLD) printf_unfiltered (" FLD");
4531 #endif
4532
4533   printf_unfiltered ("\n\tflags =");
4534   pif (Cannot_unwind);
4535   pif (Millicode);
4536   pif (Millicode_save_sr0);
4537   pif (Entry_SR);
4538   pif (Args_stored);
4539   pif (Variable_Frame);
4540   pif (Separate_Package_Body);
4541   pif (Frame_Extension_Millicode);
4542   pif (Stack_Overflow_Check);
4543   pif (Two_Instruction_SP_Increment);
4544   pif (Ada_Region);
4545   pif (Save_SP);
4546   pif (Save_RP);
4547   pif (Save_MRP_in_frame);
4548   pif (extn_ptr_defined);
4549   pif (Cleanup_defined);
4550   pif (MPE_XL_interrupt_marker);
4551   pif (HP_UX_interrupt_marker);
4552   pif (Large_frame);
4553
4554   putchar_unfiltered ('\n');
4555
4556 #ifdef __STDC__
4557 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD);
4558 #else
4559 #define pin(FLD) printf_unfiltered ("\tFLD = 0x%x\n", u->FLD);
4560 #endif
4561
4562   pin (Region_description);
4563   pin (Entry_FR);
4564   pin (Entry_GR);
4565   pin (Total_frame_size);
4566 }
4567
4568 #ifdef PREPARE_TO_PROCEED
4569
4570 /* If the user has switched threads, and there is a breakpoint
4571    at the old thread's pc location, then switch to that thread
4572    and return TRUE, else return FALSE and don't do a thread
4573    switch (or rather, don't seem to have done a thread switch).
4574
4575    Ptrace-based gdb will always return FALSE to the thread-switch
4576    query, and thus also to PREPARE_TO_PROCEED.
4577
4578    The important thing is whether there is a BPT instruction,
4579    not how many user breakpoints there are.  So we have to worry
4580    about things like these:
4581
4582    o  Non-bp stop -- NO
4583
4584    o  User hits bp, no switch -- NO
4585
4586    o  User hits bp, switches threads -- YES
4587
4588    o  User hits bp, deletes bp, switches threads -- NO
4589
4590    o  User hits bp, deletes one of two or more bps
4591    at that PC, user switches threads -- YES
4592
4593    o  Plus, since we're buffering events, the user may have hit a
4594    breakpoint, deleted the breakpoint and then gotten another
4595    hit on that same breakpoint on another thread which
4596    actually hit before the delete. (FIXME in breakpoint.c
4597    so that "dead" breakpoints are ignored?) -- NO
4598
4599    For these reasons, we have to violate information hiding and
4600    call "breakpoint_here_p".  If core gdb thinks there is a bpt
4601    here, that's what counts, as core gdb is the one which is
4602    putting the BPT instruction in and taking it out. */
4603 int
4604 hppa_prepare_to_proceed (void)
4605 {
4606   pid_t old_thread;
4607   pid_t current_thread;
4608
4609   old_thread = hppa_switched_threads (inferior_pid);
4610   if (old_thread != 0)
4611     {
4612       /* Switched over from "old_thread".  Try to do
4613          as little work as possible, 'cause mostly
4614          we're going to switch back. */
4615       CORE_ADDR new_pc;
4616       CORE_ADDR old_pc = read_pc ();
4617
4618       /* Yuk, shouldn't use global to specify current
4619          thread.  But that's how gdb does it. */
4620       current_thread = inferior_pid;
4621       inferior_pid = old_thread;
4622
4623       new_pc = read_pc ();
4624       if (new_pc != old_pc      /* If at same pc, no need */
4625           && breakpoint_here_p (new_pc))
4626         {
4627           /* User hasn't deleted the BP.
4628              Return TRUE, finishing switch to "old_thread". */
4629           flush_cached_frames ();
4630           registers_changed ();
4631 #if 0
4632           printf ("---> PREPARE_TO_PROCEED (was %d, now %d)!\n",
4633                   current_thread, inferior_pid);
4634 #endif
4635
4636           return 1;
4637         }
4638
4639       /* Otherwise switch back to the user-chosen thread. */
4640       inferior_pid = current_thread;
4641       new_pc = read_pc ();      /* Re-prime register cache */
4642     }
4643
4644   return 0;
4645 }
4646 #endif /* PREPARE_TO_PROCEED */
4647
4648 void
4649 hppa_skip_permanent_breakpoint (void)
4650 {
4651   /* To step over a breakpoint instruction on the PA takes some
4652      fiddling with the instruction address queue.
4653
4654      When we stop at a breakpoint, the IA queue front (the instruction
4655      we're executing now) points at the breakpoint instruction, and
4656      the IA queue back (the next instruction to execute) points to
4657      whatever instruction we would execute after the breakpoint, if it
4658      were an ordinary instruction.  This is the case even if the
4659      breakpoint is in the delay slot of a branch instruction.
4660
4661      Clearly, to step past the breakpoint, we need to set the queue
4662      front to the back.  But what do we put in the back?  What
4663      instruction comes after that one?  Because of the branch delay
4664      slot, the next insn is always at the back + 4.  */
4665   write_register (PCOQ_HEAD_REGNUM, read_register (PCOQ_TAIL_REGNUM));
4666   write_register (PCSQ_HEAD_REGNUM, read_register (PCSQ_TAIL_REGNUM));
4667
4668   write_register (PCOQ_TAIL_REGNUM, read_register (PCOQ_TAIL_REGNUM) + 4);
4669   /* We can leave the tail's space the same, since there's no jump.  */
4670 }
4671
4672 void
4673 _initialize_hppa_tdep (void)
4674 {
4675   tm_print_insn = print_insn_hppa;
4676
4677   add_cmd ("unwind", class_maintenance, unwind_command,
4678            "Print unwind table entry at given address.",
4679            &maintenanceprintlist);
4680 }