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