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