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