OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [hppa-tdep.c] - Blame information for rev 1771

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.