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