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