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