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