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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [hppa-tdep.c] - Blame information for rev 1774

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

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

powered by: WebSVN 2.1.0

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