* gdb.base/a2-run.exp: Add arm-*-coff setup_xfails for cases
[deliverable/binutils-gdb.git] / gdb / alpha-tdep.c
CommitLineData
cef4c2e7 1/* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
074d813d 2 Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
cef4c2e7
PS
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
6c9638b4 18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
cef4c2e7
PS
19
20#include "defs.h"
21#include "frame.h"
22#include "inferior.h"
23#include "symtab.h"
24#include "value.h"
25#include "gdbcmd.h"
26#include "gdbcore.h"
27#include "dis-asm.h"
72bba93b
SG
28#include "symfile.h"
29#include "objfiles.h"
2b576293 30#include "gdb_string.h"
cef4c2e7
PS
31
32/* FIXME: Some of this code should perhaps be merged with mips-tdep.c. */
33
72bba93b
SG
34/* FIXME: Put this declaration in frame.h. */
35extern struct obstack frame_cache_obstack;
cef4c2e7
PS
36\f
37
38/* Forward declarations. */
39
b607efe7
FF
40static alpha_extra_func_info_t push_sigtramp_desc PARAMS ((CORE_ADDR low_addr));
41
669caa9c 42static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
cef4c2e7 43
669caa9c 44static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
cef4c2e7 45
669caa9c
SS
46static alpha_extra_func_info_t heuristic_proc_desc PARAMS ((CORE_ADDR,
47 CORE_ADDR,
48 struct frame_info *));
cef4c2e7 49
e3be225e
SS
50static alpha_extra_func_info_t find_proc_desc PARAMS ((CORE_ADDR,
51 struct frame_info *));
cef4c2e7 52
e3be225e 53#if 0
669caa9c 54static int alpha_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
e3be225e 55#endif
cef4c2e7 56
e3be225e
SS
57static void reinit_frame_cache_sfunc PARAMS ((char *, int,
58 struct cmd_list_element *));
cef4c2e7 59
72bba93b
SG
60static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
61 alpha_extra_func_info_t proc_desc));
62
811f1bdc 63static int alpha_in_prologue PARAMS ((CORE_ADDR pc,
72bba93b
SG
64 alpha_extra_func_info_t proc_desc));
65
cef4c2e7
PS
66/* Heuristic_proc_start may hunt through the text section for a long
67 time across a 2400 baud serial line. Allows the user to limit this
68 search. */
69static unsigned int heuristic_fence_post = 0;
70
71/* Layout of a stack frame on the alpha:
72
73 | |
74 pdr members: | 7th ... nth arg, |
75 | `pushed' by caller. |
76 | |
77----------------|-------------------------------|<-- old_sp == vfp
78 ^ ^ ^ ^ | |
79 | | | | | |
80 | |localoff | Copies of 1st .. 6th |
81 | | | | | argument if necessary. |
82 | | | v | |
3e6b0674
PS
83 | | | --- |-------------------------------|<-- FRAME_LOCALS_ADDRESS
84 | | | | |
cef4c2e7
PS
85 | | | | Locals and temporaries. |
86 | | | | |
87 | | | |-------------------------------|
88 | | | | |
89 |-fregoffset | Saved float registers. |
90 | | | | F9 |
91 | | | | . |
92 | | | | . |
93 | | | | F2 |
94 | | v | |
95 | | -------|-------------------------------|
96 | | | |
97 | | | Saved registers. |
98 | | | S6 |
99 |-regoffset | . |
100 | | | . |
101 | | | S0 |
102 | | | pdr.pcreg |
103 | v | |
104 | ----------|-------------------------------|
105 | | |
106 frameoffset | Argument build area, gets |
107 | | 7th ... nth arg for any |
108 | | called procedure. |
109 v | |
110 -------------|-------------------------------|<-- sp
111 | |
112*/
113
114#define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
115#define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */
116#define PROC_DUMMY_FRAME(proc) ((proc)->pdr.iopt) /* frame for CALL_DUMMY */
117#define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
118#define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
119#define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
120#define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
121#define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
122#define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
123#define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
124#define PROC_LOCALOFF(proc) ((proc)->pdr.localoff)
125#define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
126#define _PROC_MAGIC_ 0x0F0F0F0F
127#define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
128#define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
129
130struct linked_proc_info
131{
132 struct alpha_extra_func_info info;
133 struct linked_proc_info *next;
134} *linked_proc_desc_table = NULL;
135
9391c997
FF
136\f
137/* Under Linux, signal handler invocations can be identified by the
138 designated code sequence that is used to return from a signal
139 handler. In particular, the return address of a signal handler
140 points to the following sequence (the first instruction is quadword
141 aligned):
142
143 bis $30,$30,$16
144 addq $31,0x67,$0
145 call_pal callsys
146
147 Each instruction has a unique encoding, so we simply attempt to
148 match the instruction the pc is pointing to with any of the above
149 instructions. If there is a hit, we know the offset to the start
150 of the designated sequence and can then check whether we really are
151 executing in a designated sequence. If not, -1 is returned,
152 otherwise the offset from the start of the desingated sequence is
153 returned.
154
155 There is a slight chance of false hits: code could jump into the
156 middle of the designated sequence, in which case there is no
157 guarantee that we are in the middle of a sigreturn syscall. Don't
158 think this will be a problem in praxis, though.
159*/
b607efe7 160
9391c997
FF
161long
162alpha_linux_sigtramp_offset (CORE_ADDR pc)
163{
164 unsigned int i[3], w;
b607efe7 165 long off;
9391c997
FF
166
167 if (read_memory_nobpt(pc, (char *) &w, 4) != 0)
168 return -1;
169
170 off = -1;
171 switch (w)
172 {
173 case 0x47de0410: off = 0; break; /* bis $30,$30,$16 */
174 case 0x43ecf400: off = 4; break; /* addq $31,0x67,$0 */
175 case 0x00000083: off = 8; break; /* call_pal callsys */
176 default: return -1;
177 }
178 pc -= off;
179 if (pc & 0x7)
180 {
181 /* designated sequence is not quadword aligned */
182 return -1;
183 }
184
185 if (read_memory_nobpt(pc, (char *) i, sizeof(i)) != 0)
186 return -1;
187
188 if (i[0] == 0x47de0410 && i[1] == 0x43ecf400 && i[2] == 0x00000083)
189 return off;
190
191 return -1;
192}
193
194\f
195/* Under OSF/1, the __sigtramp routine is frameless and has a frame
196 size of zero, but we are able to backtrace through it. */
197CORE_ADDR
198alpha_osf_skip_sigtramp_frame (frame, pc)
199 struct frame_info *frame;
200 CORE_ADDR pc;
201{
202 char *name;
203 find_pc_partial_function (pc, &name, (CORE_ADDR *)NULL, (CORE_ADDR *)NULL);
204 if (IN_SIGTRAMP (pc, name))
205 return frame->frame;
206 else
207 return 0;
208}
209
210\f
211/* Dynamically create a signal-handler caller procedure descriptor for
212 the signal-handler return code starting at address LOW_ADDR. The
213 descriptor is added to the linked_proc_desc_table. */
214
b607efe7
FF
215static alpha_extra_func_info_t
216push_sigtramp_desc (low_addr)
217 CORE_ADDR low_addr;
9391c997
FF
218{
219 struct linked_proc_info *link;
220 alpha_extra_func_info_t proc_desc;
221
222 link = (struct linked_proc_info *)
223 xmalloc (sizeof (struct linked_proc_info));
224 link->next = linked_proc_desc_table;
225 linked_proc_desc_table = link;
226
227 proc_desc = &link->info;
228
229 proc_desc->numargs = 0;
230 PROC_LOW_ADDR (proc_desc) = low_addr;
231 PROC_HIGH_ADDR (proc_desc) = low_addr + 3 * 4;
232 PROC_DUMMY_FRAME (proc_desc) = 0;
233 PROC_FRAME_OFFSET (proc_desc) = 0x298; /* sizeof(struct sigcontext_struct) */
234 PROC_FRAME_REG (proc_desc) = SP_REGNUM;
235 PROC_REG_MASK (proc_desc) = 0xffff;
236 PROC_FREG_MASK (proc_desc) = 0xffff;
237 PROC_PC_REG (proc_desc) = 26;
238 PROC_LOCALOFF (proc_desc) = 0;
239 SET_PROC_DESC_IS_DYN_SIGTRAMP (proc_desc);
b607efe7 240 return (proc_desc);
9391c997
FF
241}
242
cef4c2e7 243\f
09af5868 244/* Guaranteed to set frame->saved_regs to some values (it never leaves it
72bba93b
SG
245 NULL). */
246
247void
669caa9c
SS
248alpha_find_saved_regs (frame)
249 struct frame_info *frame;
72bba93b
SG
250{
251 int ireg;
252 CORE_ADDR reg_position;
253 unsigned long mask;
254 alpha_extra_func_info_t proc_desc;
255 int returnreg;
256
669caa9c 257 frame->saved_regs = (struct frame_saved_regs *)
72bba93b 258 obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
669caa9c 259 memset (frame->saved_regs, 0, sizeof (struct frame_saved_regs));
72bba93b 260
e4dbd248
PS
261 /* If it is the frame for __sigtramp, the saved registers are located
262 in a sigcontext structure somewhere on the stack. __sigtramp
263 passes a pointer to the sigcontext structure on the stack.
264 If the stack layout for __sigtramp changes, or if sigcontext offsets
265 change, we might have to update this code. */
266#ifndef SIGFRAME_PC_OFF
267#define SIGFRAME_PC_OFF (2 * 8)
268#define SIGFRAME_REGSAVE_OFF (4 * 8)
269#define SIGFRAME_FPREGSAVE_OFF (SIGFRAME_REGSAVE_OFF + 32 * 8 + 8)
270#endif
271 if (frame->signal_handler_caller)
272 {
e4dbd248
PS
273 CORE_ADDR sigcontext_addr;
274
9391c997 275 sigcontext_addr = SIGCONTEXT_ADDR (frame);
e4dbd248
PS
276 for (ireg = 0; ireg < 32; ireg++)
277 {
278 reg_position = sigcontext_addr + SIGFRAME_REGSAVE_OFF + ireg * 8;
279 frame->saved_regs->regs[ireg] = reg_position;
280 }
281 for (ireg = 0; ireg < 32; ireg++)
282 {
283 reg_position = sigcontext_addr + SIGFRAME_FPREGSAVE_OFF + ireg * 8;
284 frame->saved_regs->regs[FP0_REGNUM + ireg] = reg_position;
285 }
286 frame->saved_regs->regs[PC_REGNUM] = sigcontext_addr + SIGFRAME_PC_OFF;
287 return;
288 }
289
669caa9c 290 proc_desc = frame->proc_desc;
72bba93b
SG
291 if (proc_desc == NULL)
292 /* I'm not sure how/whether this can happen. Normally when we can't
293 find a proc_desc, we "synthesize" one using heuristic_proc_desc
294 and set the saved_regs right away. */
295 return;
296
297 /* Fill in the offsets for the registers which gen_mask says
298 were saved. */
299
669caa9c 300 reg_position = frame->frame + PROC_REG_OFFSET (proc_desc);
72bba93b
SG
301 mask = PROC_REG_MASK (proc_desc);
302
303 returnreg = PROC_PC_REG (proc_desc);
304
e4dbd248 305 /* Note that RA is always saved first, regardless of its actual
72bba93b
SG
306 register number. */
307 if (mask & (1 << returnreg))
308 {
669caa9c 309 frame->saved_regs->regs[returnreg] = reg_position;
72bba93b
SG
310 reg_position += 8;
311 mask &= ~(1 << returnreg); /* Clear bit for RA so we
312 don't save again later. */
313 }
314
315 for (ireg = 0; ireg <= 31 ; ++ireg)
316 if (mask & (1 << ireg))
317 {
669caa9c 318 frame->saved_regs->regs[ireg] = reg_position;
72bba93b
SG
319 reg_position += 8;
320 }
321
322 /* Fill in the offsets for the registers which float_mask says
323 were saved. */
324
669caa9c 325 reg_position = frame->frame + PROC_FREG_OFFSET (proc_desc);
72bba93b
SG
326 mask = PROC_FREG_MASK (proc_desc);
327
328 for (ireg = 0; ireg <= 31 ; ++ireg)
329 if (mask & (1 << ireg))
330 {
669caa9c 331 frame->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
72bba93b
SG
332 reg_position += 8;
333 }
334
669caa9c 335 frame->saved_regs->regs[PC_REGNUM] = frame->saved_regs->regs[returnreg];
72bba93b 336}
cef4c2e7
PS
337
338static CORE_ADDR
339read_next_frame_reg(fi, regno)
669caa9c 340 struct frame_info *fi;
cef4c2e7
PS
341 int regno;
342{
cef4c2e7
PS
343 for (; fi; fi = fi->next)
344 {
e4dbd248
PS
345 /* We have to get the saved sp from the sigcontext
346 if it is a signal handler frame. */
347 if (regno == SP_REGNUM && !fi->signal_handler_caller)
cef4c2e7 348 return fi->frame;
72bba93b
SG
349 else
350 {
351 if (fi->saved_regs == NULL)
352 alpha_find_saved_regs (fi);
353 if (fi->saved_regs->regs[regno])
354 return read_memory_integer(fi->saved_regs->regs[regno], 8);
355 }
cef4c2e7
PS
356 }
357 return read_register(regno);
358}
359
360CORE_ADDR
361alpha_frame_saved_pc(frame)
669caa9c 362 struct frame_info *frame;
cef4c2e7
PS
363{
364 alpha_extra_func_info_t proc_desc = frame->proc_desc;
0434c1a0
PS
365 /* We have to get the saved pc from the sigcontext
366 if it is a signal handler frame. */
adbe434b 367 int pcreg = frame->signal_handler_caller ? PC_REGNUM : frame->pc_reg;
cef4c2e7
PS
368
369 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
370 return read_memory_integer(frame->frame - 8, 8);
371
372 return read_next_frame_reg(frame, pcreg);
373}
374
375CORE_ADDR
376alpha_saved_pc_after_call (frame)
669caa9c 377 struct frame_info *frame;
cef4c2e7 378{
adbe434b
PS
379 CORE_ADDR pc = frame->pc;
380 CORE_ADDR tmp;
381 alpha_extra_func_info_t proc_desc;
382 int pcreg;
383
384 /* Skip over shared library trampoline if necessary. */
385 tmp = SKIP_TRAMPOLINE_CODE (pc);
386 if (tmp != 0)
387 pc = tmp;
388
389 proc_desc = find_proc_desc (pc, frame->next);
390 pcreg = proc_desc ? PROC_PC_REG (proc_desc) : RA_REGNUM;
cef4c2e7 391
9391c997
FF
392 if (frame->signal_handler_caller)
393 return alpha_frame_saved_pc (frame);
394 else
395 return read_register (pcreg);
cef4c2e7
PS
396}
397
398
399static struct alpha_extra_func_info temp_proc_desc;
400static struct frame_saved_regs temp_saved_regs;
401
402/* This fencepost looks highly suspicious to me. Removing it also
403 seems suspicious as it could affect remote debugging across serial
404 lines. */
405
406static CORE_ADDR
407heuristic_proc_start(pc)
408 CORE_ADDR pc;
409{
410 CORE_ADDR start_pc = pc;
411 CORE_ADDR fence = start_pc - heuristic_fence_post;
412
413 if (start_pc == 0) return 0;
414
415 if (heuristic_fence_post == UINT_MAX
416 || fence < VM_MIN_ADDRESS)
417 fence = VM_MIN_ADDRESS;
418
419 /* search back for previous return */
420 for (start_pc -= 4; ; start_pc -= 4)
421 if (start_pc < fence)
422 {
423 /* It's not clear to me why we reach this point when
424 stop_soon_quietly, but with this test, at least we
425 don't print out warnings for every child forked (eg, on
426 decstation). 22apr93 rich@cygnus.com. */
427 if (!stop_soon_quietly)
428 {
429 static int blurb_printed = 0;
430
431 if (fence == VM_MIN_ADDRESS)
432 warning("Hit beginning of text section without finding");
433 else
434 warning("Hit heuristic-fence-post without finding");
435
436 warning("enclosing function for address 0x%lx", pc);
437 if (!blurb_printed)
438 {
439 printf_filtered ("\
440This warning occurs if you are debugging a function without any symbols\n\
441(for example, in a stripped executable). In that case, you may wish to\n\
442increase the size of the search with the `set heuristic-fence-post' command.\n\
443\n\
444Otherwise, you told GDB there was a function where there isn't one, or\n\
445(more likely) you have encountered a bug in GDB.\n");
446 blurb_printed = 1;
447 }
448 }
449
450 return 0;
451 }
452 else if (ABOUT_TO_RETURN(start_pc))
453 break;
454
455 start_pc += 4; /* skip return */
456 return start_pc;
457}
458
459static alpha_extra_func_info_t
460heuristic_proc_desc(start_pc, limit_pc, next_frame)
461 CORE_ADDR start_pc, limit_pc;
669caa9c 462 struct frame_info *next_frame;
cef4c2e7 463{
2fe3b329 464 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
cef4c2e7
PS
465 CORE_ADDR cur_pc;
466 int frame_size;
467 int has_frame_reg = 0;
468 unsigned long reg_mask = 0;
82a38509 469 int pcreg = -1;
cef4c2e7
PS
470
471 if (start_pc == 0)
472 return NULL;
669caa9c
SS
473 memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
474 memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
475 PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
cef4c2e7
PS
476
477 if (start_pc + 200 < limit_pc)
478 limit_pc = start_pc + 200;
479 frame_size = 0;
480 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += 4)
481 {
482 char buf[4];
483 unsigned long word;
484 int status;
485
486 status = read_memory_nobpt (cur_pc, buf, 4);
487 if (status)
488 memory_error (status, cur_pc);
489 word = extract_unsigned_integer (buf, 4);
490
491 if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */
074d813d
PS
492 {
493 if (word & 0x8000)
494 frame_size += (-word) & 0xffff;
495 else
496 /* Exit loop if a positive stack adjustment is found, which
497 usually means that the stack cleanup code in the function
498 epilogue is reached. */
499 break;
500 }
cef4c2e7
PS
501 else if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */
502 && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */
503 {
504 int reg = (word & 0x03e00000) >> 21;
505 reg_mask |= 1 << reg;
506 temp_saved_regs.regs[reg] = sp + (short)word;
82a38509
PS
507
508 /* Starting with OSF/1-3.2C, the system libraries are shipped
509 without local symbols, but they still contain procedure
510 descriptors without a symbol reference. GDB is currently
511 unable to find these procedure descriptors and uses
512 heuristic_proc_desc instead.
513 As some low level compiler support routines (__div*, __add*)
514 use a non-standard return address register, we have to
515 add some heuristics to determine the return address register,
516 or stepping over these routines will fail.
517 Usually the return address register is the first register
518 saved on the stack, but assembler optimization might
519 rearrange the register saves.
520 So we recognize only a few registers (t7, t9, ra) within
521 the procedure prologue as valid return address registers.
522
523 FIXME: Rewriting GDB to access the procedure descriptors,
524 e.g. via the minimal symbol table, might obviate this hack. */
525 if (pcreg == -1
526 && cur_pc < (start_pc + 20)
527 && (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM))
528 pcreg = reg;
cef4c2e7
PS
529 }
530 else if (word == 0x47de040f) /* bis sp,sp fp */
531 has_frame_reg = 1;
532 }
82a38509
PS
533 if (pcreg == -1)
534 {
535 /* If we haven't found a valid return address register yet,
536 keep searching in the procedure prologue. */
537 while (cur_pc < (limit_pc + 20) && cur_pc < (start_pc + 20))
538 {
539 char buf[4];
540 unsigned long word;
541 int status;
542
543 status = read_memory_nobpt (cur_pc, buf, 4);
544 if (status)
545 memory_error (status, cur_pc);
546 cur_pc += 4;
547 word = extract_unsigned_integer (buf, 4);
548
549 if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */
550 && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */
551 {
552 int reg = (word & 0x03e00000) >> 21;
553 if (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM)
554 {
555 pcreg = reg;
556 break;
557 }
558 }
559 }
560 }
561
cef4c2e7
PS
562 if (has_frame_reg)
563 PROC_FRAME_REG(&temp_proc_desc) = GCC_FP_REGNUM;
564 else
565 PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM;
566 PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size;
567 PROC_REG_MASK(&temp_proc_desc) = reg_mask;
82a38509 568 PROC_PC_REG(&temp_proc_desc) = (pcreg == -1) ? RA_REGNUM : pcreg;
72bba93b 569 PROC_LOCALOFF(&temp_proc_desc) = 0; /* XXX - bogus */
cef4c2e7
PS
570 return &temp_proc_desc;
571}
572
72bba93b
SG
573/* This returns the PC of the first inst after the prologue. If we can't
574 find the prologue, then return 0. */
575
576static CORE_ADDR
577after_prologue (pc, proc_desc)
578 CORE_ADDR pc;
579 alpha_extra_func_info_t proc_desc;
580{
72bba93b
SG
581 struct symtab_and_line sal;
582 CORE_ADDR func_addr, func_end;
583
584 if (!proc_desc)
585 proc_desc = find_proc_desc (pc, NULL);
586
587 if (proc_desc)
588 {
9391c997
FF
589 if (PROC_DESC_IS_DYN_SIGTRAMP (proc_desc))
590 return PROC_LOW_ADDR (proc_desc); /* "prologue" is in kernel */
591
72bba93b
SG
592 /* If function is frameless, then we need to do it the hard way. I
593 strongly suspect that frameless always means prologueless... */
594 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
595 && PROC_FRAME_OFFSET (proc_desc) == 0)
596 return 0;
597 }
598
599 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
600 return 0; /* Unknown */
601
602 sal = find_pc_line (func_addr, 0);
603
604 if (sal.end < func_end)
605 return sal.end;
606
607 /* The line after the prologue is after the end of the function. In this
608 case, tell the caller to find the prologue the hard way. */
609
610 return 0;
611}
612
613/* Return non-zero if we *might* be in a function prologue. Return zero if we
9391c997 614 are definitively *not* in a function prologue. */
72bba93b
SG
615
616static int
811f1bdc 617alpha_in_prologue (pc, proc_desc)
72bba93b
SG
618 CORE_ADDR pc;
619 alpha_extra_func_info_t proc_desc;
620{
621 CORE_ADDR after_prologue_pc;
622
623 after_prologue_pc = after_prologue (pc, proc_desc);
624
625 if (after_prologue_pc == 0
626 || pc < after_prologue_pc)
627 return 1;
628 else
629 return 0;
630}
631
cef4c2e7 632static alpha_extra_func_info_t
669caa9c 633find_proc_desc (pc, next_frame)
cef4c2e7 634 CORE_ADDR pc;
669caa9c 635 struct frame_info *next_frame;
cef4c2e7
PS
636{
637 alpha_extra_func_info_t proc_desc;
638 struct block *b;
639 struct symbol *sym;
640 CORE_ADDR startaddr;
641
642 /* Try to get the proc_desc from the linked call dummy proc_descs
643 if the pc is in the call dummy.
644 This is hairy. In the case of nested dummy calls we have to find the
645 right proc_desc, but we might not yet know the frame for the dummy
646 as it will be contained in the proc_desc we are searching for.
647 So we have to find the proc_desc whose frame is closest to the current
648 stack pointer. */
72bba93b 649
cef4c2e7
PS
650 if (PC_IN_CALL_DUMMY (pc, 0, 0))
651 {
652 struct linked_proc_info *link;
2fe3b329 653 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
cef4c2e7
PS
654 alpha_extra_func_info_t found_proc_desc = NULL;
655 long min_distance = LONG_MAX;
656
657 for (link = linked_proc_desc_table; link; link = link->next)
658 {
659 long distance = (CORE_ADDR) PROC_DUMMY_FRAME (&link->info) - sp;
660 if (distance > 0 && distance < min_distance)
661 {
662 min_distance = distance;
663 found_proc_desc = &link->info;
664 }
665 }
666 if (found_proc_desc != NULL)
667 return found_proc_desc;
668 }
669
670 b = block_for_pc(pc);
72bba93b 671
cef4c2e7
PS
672 find_pc_partial_function (pc, NULL, &startaddr, NULL);
673 if (b == NULL)
674 sym = NULL;
675 else
676 {
677 if (startaddr > BLOCK_START (b))
678 /* This is the "pathological" case referred to in a comment in
679 print_frame_info. It might be better to move this check into
680 symbol reading. */
681 sym = NULL;
682 else
683 sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
684 0, NULL);
685 }
686
4f69fe46
JK
687 /* If we never found a PDR for this function in symbol reading, then
688 examine prologues to find the information. */
689 if (sym && ((mips_extra_func_info_t) SYMBOL_VALUE (sym))->pdr.framereg == -1)
690 sym = NULL;
691
cef4c2e7
PS
692 if (sym)
693 {
72bba93b
SG
694 /* IF this is the topmost frame AND
695 * (this proc does not have debugging information OR
cef4c2e7
PS
696 * the PC is in the procedure prologue)
697 * THEN create a "heuristic" proc_desc (by analyzing
698 * the actual code) to replace the "official" proc_desc.
699 */
700 proc_desc = (alpha_extra_func_info_t)SYMBOL_VALUE(sym);
72bba93b
SG
701 if (next_frame == NULL)
702 {
811f1bdc 703 if (PROC_DESC_IS_DUMMY (proc_desc) || alpha_in_prologue (pc, proc_desc))
72bba93b 704 {
cef4c2e7 705 alpha_extra_func_info_t found_heuristic =
72bba93b
SG
706 heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
707 pc, next_frame);
cef4c2e7 708 if (found_heuristic)
de7ad6d8
JK
709 {
710 PROC_LOCALOFF (found_heuristic) =
711 PROC_LOCALOFF (proc_desc);
adbe434b 712 PROC_PC_REG (found_heuristic) = PROC_PC_REG (proc_desc);
de7ad6d8
JK
713 proc_desc = found_heuristic;
714 }
72bba93b
SG
715 }
716 }
cef4c2e7
PS
717 }
718 else
719 {
9391c997
FF
720 long offset;
721
72bba93b
SG
722 /* Is linked_proc_desc_table really necessary? It only seems to be used
723 by procedure call dummys. However, the procedures being called ought
724 to have their own proc_descs, and even if they don't,
725 heuristic_proc_desc knows how to create them! */
726
727 register struct linked_proc_info *link;
728 for (link = linked_proc_desc_table; link; link = link->next)
729 if (PROC_LOW_ADDR(&link->info) <= pc
730 && PROC_HIGH_ADDR(&link->info) > pc)
731 return &link->info;
732
9391c997
FF
733 /* If PC is inside a dynamically generated sigtramp handler,
734 create and push a procedure descriptor for that code: */
735 offset = DYNAMIC_SIGTRAMP_OFFSET (pc);
736 if (offset >= 0)
737 return push_sigtramp_desc (pc - offset);
738
074d813d
PS
739 /* If heuristic_fence_post is non-zero, determine the procedure
740 start address by examining the instructions.
741 This allows us to find the start address of static functions which
742 have no symbolic information, as startaddr would have been set to
743 the preceding global function start address by the
744 find_pc_partial_function call above. */
745 if (startaddr == 0 || heuristic_fence_post != 0)
cef4c2e7
PS
746 startaddr = heuristic_proc_start (pc);
747
748 proc_desc =
749 heuristic_proc_desc (startaddr, pc, next_frame);
750 }
751 return proc_desc;
752}
753
754alpha_extra_func_info_t cached_proc_desc;
755
669caa9c 756CORE_ADDR
cef4c2e7 757alpha_frame_chain(frame)
669caa9c 758 struct frame_info *frame;
cef4c2e7
PS
759{
760 alpha_extra_func_info_t proc_desc;
761 CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
762
763 if (saved_pc == 0 || inside_entry_file (saved_pc))
764 return 0;
765
766 proc_desc = find_proc_desc(saved_pc, frame);
767 if (!proc_desc)
768 return 0;
769
770 cached_proc_desc = proc_desc;
771
772 /* Fetch the frame pointer for a dummy frame from the procedure
773 descriptor. */
774 if (PROC_DESC_IS_DUMMY(proc_desc))
669caa9c 775 return (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
cef4c2e7
PS
776
777 /* If no frame pointer and frame size is zero, we must be at end
778 of stack (or otherwise hosed). If we don't check frame size,
779 we loop forever if we see a zero size frame. */
780 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
781 && PROC_FRAME_OFFSET (proc_desc) == 0
cef4c2e7
PS
782 /* The previous frame from a sigtramp frame might be frameless
783 and have frame size zero. */
784 && !frame->signal_handler_caller)
9391c997 785 return FRAME_PAST_SIGTRAMP_FRAME (frame, saved_pc);
cef4c2e7
PS
786 else
787 return read_next_frame_reg(frame, PROC_FRAME_REG(proc_desc))
0434c1a0 788 + PROC_FRAME_OFFSET(proc_desc);
cef4c2e7
PS
789}
790
791void
669caa9c
SS
792init_extra_frame_info (frame)
793 struct frame_info *frame;
cef4c2e7 794{
cef4c2e7
PS
795 /* Use proc_desc calculated in frame_chain */
796 alpha_extra_func_info_t proc_desc =
669caa9c 797 frame->next ? cached_proc_desc : find_proc_desc(frame->pc, frame->next);
cef4c2e7 798
669caa9c 799 frame->saved_regs = NULL;
adbe434b
PS
800 frame->localoff = 0;
801 frame->pc_reg = RA_REGNUM;
802 frame->proc_desc = proc_desc == &temp_proc_desc ? 0 : proc_desc;
cef4c2e7
PS
803 if (proc_desc)
804 {
adbe434b
PS
805 /* Get the locals offset and the saved pc register from the
806 procedure descriptor, they are valid even if we are in the
807 middle of the prologue. */
669caa9c 808 frame->localoff = PROC_LOCALOFF(proc_desc);
adbe434b 809 frame->pc_reg = PROC_PC_REG(proc_desc);
cef4c2e7 810
cef4c2e7 811 /* Fixup frame-pointer - only needed for top frame */
72bba93b 812
cef4c2e7
PS
813 /* Fetch the frame pointer for a dummy frame from the procedure
814 descriptor. */
815 if (PROC_DESC_IS_DUMMY(proc_desc))
669caa9c 816 frame->frame = (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
72bba93b 817
cef4c2e7
PS
818 /* This may not be quite right, if proc has a real frame register.
819 Get the value of the frame relative sp, procedure might have been
820 interrupted by a signal at it's very start. */
9391c997
FF
821 else if (frame->pc == PROC_LOW_ADDR (proc_desc)
822 && !PROC_DESC_IS_DYN_SIGTRAMP (proc_desc))
669caa9c 823 frame->frame = read_next_frame_reg (frame->next, SP_REGNUM);
cef4c2e7 824 else
669caa9c
SS
825 frame->frame = read_next_frame_reg (frame->next, PROC_FRAME_REG (proc_desc))
826 + PROC_FRAME_OFFSET (proc_desc);
cef4c2e7
PS
827
828 if (proc_desc == &temp_proc_desc)
cef4c2e7 829 {
09af5868
PS
830 char *name;
831
832 /* Do not set the saved registers for a sigtramp frame,
833 alpha_find_saved_registers will do that for us.
834 We can't use frame->signal_handler_caller, it is not yet set. */
835 find_pc_partial_function (frame->pc, &name,
836 (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
837 if (!IN_SIGTRAMP (frame->pc, name))
838 {
839 frame->saved_regs = (struct frame_saved_regs*)
840 obstack_alloc (&frame_cache_obstack,
841 sizeof (struct frame_saved_regs));
842 *frame->saved_regs = temp_saved_regs;
843 frame->saved_regs->regs[PC_REGNUM]
844 = frame->saved_regs->regs[RA_REGNUM];
845 }
cef4c2e7 846 }
cef4c2e7
PS
847 }
848}
849
850/* ALPHA stack frames are almost impenetrable. When execution stops,
851 we basically have to look at symbol information for the function
852 that we stopped in, which tells us *which* register (if any) is
853 the base of the frame pointer, and what offset from that register
854 the frame itself is at.
855
856 This presents a problem when trying to examine a stack in memory
857 (that isn't executing at the moment), using the "frame" command. We
858 don't have a PC, nor do we have any registers except SP.
859
860 This routine takes two arguments, SP and PC, and tries to make the
861 cached frames look as if these two arguments defined a frame on the
862 cache. This allows the rest of info frame to extract the important
863 arguments without difficulty. */
864
669caa9c 865struct frame_info *
cef4c2e7
PS
866setup_arbitrary_frame (argc, argv)
867 int argc;
669caa9c 868 CORE_ADDR *argv;
cef4c2e7
PS
869{
870 if (argc != 2)
871 error ("ALPHA frame specifications require two arguments: sp and pc");
872
873 return create_new_frame (argv[0], argv[1]);
874}
875
876/* The alpha passes the first six arguments in the registers, the rest on
877 the stack. The register arguments are eventually transferred to the
878 argument transfer area immediately below the stack by the called function
879 anyway. So we `push' at least six arguments on the stack, `reload' the
880 argument registers and then adjust the stack pointer to point past the
881 sixth argument. This algorithm simplifies the passing of a large struct
882 which extends from the registers to the stack.
883 If the called function is returning a structure, the address of the
884 structure to be returned is passed as a hidden first argument. */
885
cef4c2e7
PS
886CORE_ADDR
887alpha_push_arguments (nargs, args, sp, struct_return, struct_addr)
7810d333
JK
888 int nargs;
889 value_ptr *args;
890 CORE_ADDR sp;
891 int struct_return;
892 CORE_ADDR struct_addr;
cef4c2e7
PS
893{
894 register i;
895 int accumulate_size = struct_return ? 8 : 0;
3e6b0674 896 int arg_regs_size = ALPHA_NUM_ARG_REGS * 8;
cef4c2e7
PS
897 struct alpha_arg { char *contents; int len; int offset; };
898 struct alpha_arg *alpha_args =
899 (struct alpha_arg*)alloca (nargs * sizeof (struct alpha_arg));
900 register struct alpha_arg *m_arg;
901 char raw_buffer[sizeof (CORE_ADDR)];
902 int required_arg_regs;
903
904 for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
905 {
5222ca60 906 value_ptr arg = args[i];
940d5967 907 struct type *arg_type = check_typedef (VALUE_TYPE (arg));
cef4c2e7 908 /* Cast argument to long if necessary as the compiler does it too. */
940d5967 909 switch (TYPE_CODE (arg_type))
b3636ee5
JK
910 {
911 case TYPE_CODE_INT:
912 case TYPE_CODE_BOOL:
913 case TYPE_CODE_CHAR:
914 case TYPE_CODE_RANGE:
915 case TYPE_CODE_ENUM:
940d5967
PB
916 if (TYPE_LENGTH (arg_type) < TYPE_LENGTH (builtin_type_long))
917 {
918 arg_type = builtin_type_long;
919 arg = value_cast (arg_type, arg);
920 }
b3636ee5
JK
921 break;
922 default:
923 break;
924 }
940d5967 925 m_arg->len = TYPE_LENGTH (arg_type);
cef4c2e7
PS
926 m_arg->offset = accumulate_size;
927 accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
928 m_arg->contents = VALUE_CONTENTS(arg);
929 }
930
931 /* Determine required argument register loads, loading an argument register
932 is expensive as it uses three ptrace calls. */
933 required_arg_regs = accumulate_size / 8;
3e6b0674
PS
934 if (required_arg_regs > ALPHA_NUM_ARG_REGS)
935 required_arg_regs = ALPHA_NUM_ARG_REGS;
cef4c2e7
PS
936
937 /* Make room for the arguments on the stack. */
938 if (accumulate_size < arg_regs_size)
939 accumulate_size = arg_regs_size;
940 sp -= accumulate_size;
941
942 /* Keep sp aligned to a multiple of 16 as the compiler does it too. */
943 sp &= ~15;
944
945 /* `Push' arguments on the stack. */
946 for (i = nargs; m_arg--, --i >= 0; )
947 write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len);
948 if (struct_return)
949 {
950 store_address (raw_buffer, sizeof (CORE_ADDR), struct_addr);
951 write_memory (sp, raw_buffer, sizeof (CORE_ADDR));
952 }
953
954 /* Load the argument registers. */
955 for (i = 0; i < required_arg_regs; i++)
956 {
957 LONGEST val;
958
959 val = read_memory_integer (sp + i * 8, 8);
960 write_register (A0_REGNUM + i, val);
961 write_register (FPA0_REGNUM + i, val);
962 }
963
964 return sp + arg_regs_size;
965}
966
967void
968alpha_push_dummy_frame()
969{
970 int ireg;
72bba93b
SG
971 struct linked_proc_info *link;
972 alpha_extra_func_info_t proc_desc;
cef4c2e7
PS
973 CORE_ADDR sp = read_register (SP_REGNUM);
974 CORE_ADDR save_address;
975 char raw_buffer[MAX_REGISTER_RAW_SIZE];
976 unsigned long mask;
977
72bba93b 978 link = (struct linked_proc_info *) xmalloc(sizeof (struct linked_proc_info));
cef4c2e7
PS
979 link->next = linked_proc_desc_table;
980 linked_proc_desc_table = link;
72bba93b
SG
981
982 proc_desc = &link->info;
cef4c2e7
PS
983
984 /*
985 * The registers we must save are all those not preserved across
986 * procedure calls.
987 * In addition, we must save the PC and RA.
988 *
989 * Dummy frame layout:
990 * (high memory)
991 * Saved PC
992 * Saved F30
993 * ...
994 * Saved F0
995 * Saved R29
996 * ...
997 * Saved R0
998 * Saved R26 (RA)
999 * Parameter build area
1000 * (low memory)
1001 */
1002
1003/* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<31. */
1004#define MASK(i,j) (((1L << ((j)+1)) - 1) ^ ((1L << (i)) - 1))
1005#define GEN_REG_SAVE_MASK (MASK(0,8) | MASK(16,29))
1006#define GEN_REG_SAVE_COUNT 24
1007#define FLOAT_REG_SAVE_MASK (MASK(0,1) | MASK(10,30))
1008#define FLOAT_REG_SAVE_COUNT 23
1009 /* The special register is the PC as we have no bit for it in the save masks.
1010 alpha_frame_saved_pc knows where the pc is saved in a dummy frame. */
1011#define SPECIAL_REG_SAVE_COUNT 1
1012
1013 PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
1014 PROC_FREG_MASK(proc_desc) = FLOAT_REG_SAVE_MASK;
1015 /* PROC_REG_OFFSET is the offset from the dummy frame to the saved RA,
1016 but keep SP aligned to a multiple of 16. */
1017 PROC_REG_OFFSET(proc_desc) =
1018 - ((8 * (SPECIAL_REG_SAVE_COUNT
1019 + GEN_REG_SAVE_COUNT
1020 + FLOAT_REG_SAVE_COUNT)
1021 + 15) & ~15);
1022 PROC_FREG_OFFSET(proc_desc) =
1023 PROC_REG_OFFSET(proc_desc) + 8 * GEN_REG_SAVE_COUNT;
1024
1025 /* Save general registers.
1026 The return address register is the first saved register, all other
1027 registers follow in ascending order.
1028 The PC is saved immediately below the SP. */
1029 save_address = sp + PROC_REG_OFFSET(proc_desc);
1030 store_address (raw_buffer, 8, read_register (RA_REGNUM));
1031 write_memory (save_address, raw_buffer, 8);
1032 save_address += 8;
1033 mask = PROC_REG_MASK(proc_desc) & 0xffffffffL;
1034 for (ireg = 0; mask; ireg++, mask >>= 1)
1035 if (mask & 1)
1036 {
1037 if (ireg == RA_REGNUM)
1038 continue;
1039 store_address (raw_buffer, 8, read_register (ireg));
1040 write_memory (save_address, raw_buffer, 8);
1041 save_address += 8;
1042 }
1043
1044 store_address (raw_buffer, 8, read_register (PC_REGNUM));
1045 write_memory (sp - 8, raw_buffer, 8);
1046
1047 /* Save floating point registers. */
1048 save_address = sp + PROC_FREG_OFFSET(proc_desc);
1049 mask = PROC_FREG_MASK(proc_desc) & 0xffffffffL;
1050 for (ireg = 0; mask; ireg++, mask >>= 1)
1051 if (mask & 1)
1052 {
1053 store_address (raw_buffer, 8, read_register (ireg + FP0_REGNUM));
1054 write_memory (save_address, raw_buffer, 8);
1055 save_address += 8;
1056 }
1057
1058 /* Set and save the frame address for the dummy.
1059 This is tricky. The only registers that are suitable for a frame save
1060 are those that are preserved across procedure calls (s0-s6). But if
1061 a read system call is interrupted and then a dummy call is made
1062 (see testsuite/gdb.t17/interrupt.exp) the dummy call hangs till the read
1063 is satisfied. Then it returns with the s0-s6 registers set to the values
1064 on entry to the read system call and our dummy frame pointer would be
1065 destroyed. So we save the dummy frame in the proc_desc and handle the
1066 retrieval of the frame pointer of a dummy specifically. The frame register
1067 is set to the virtual frame (pseudo) register, it's value will always
1068 be read as zero and will help us to catch any errors in the dummy frame
1069 retrieval code. */
1070 PROC_DUMMY_FRAME(proc_desc) = sp;
1071 PROC_FRAME_REG(proc_desc) = FP_REGNUM;
1072 PROC_FRAME_OFFSET(proc_desc) = 0;
1073 sp += PROC_REG_OFFSET(proc_desc);
1074 write_register (SP_REGNUM, sp);
1075
72bba93b 1076 PROC_LOW_ADDR(proc_desc) = CALL_DUMMY_ADDRESS ();
cef4c2e7
PS
1077 PROC_HIGH_ADDR(proc_desc) = PROC_LOW_ADDR(proc_desc) + 4;
1078
1079 SET_PROC_DESC_IS_DUMMY(proc_desc);
1080 PROC_PC_REG(proc_desc) = RA_REGNUM;
1081}
1082
1083void
1084alpha_pop_frame()
1085{
1086 register int regnum;
669caa9c 1087 struct frame_info *frame = get_current_frame ();
cef4c2e7
PS
1088 CORE_ADDR new_sp = frame->frame;
1089
1090 alpha_extra_func_info_t proc_desc = frame->proc_desc;
1091
1092 write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
72bba93b
SG
1093 if (frame->saved_regs == NULL)
1094 alpha_find_saved_regs (frame);
cef4c2e7
PS
1095 if (proc_desc)
1096 {
1097 for (regnum = 32; --regnum >= 0; )
1098 if (PROC_REG_MASK(proc_desc) & (1 << regnum))
1099 write_register (regnum,
1100 read_memory_integer (frame->saved_regs->regs[regnum],
1101 8));
1102 for (regnum = 32; --regnum >= 0; )
1103 if (PROC_FREG_MASK(proc_desc) & (1 << regnum))
1104 write_register (regnum + FP0_REGNUM,
1105 read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], 8));
1106 }
1107 write_register (SP_REGNUM, new_sp);
1108 flush_cached_frames ();
cef4c2e7 1109
9391c997
FF
1110 if (proc_desc && (PROC_DESC_IS_DUMMY(proc_desc)
1111 || PROC_DESC_IS_DYN_SIGTRAMP (proc_desc)))
cef4c2e7
PS
1112 {
1113 struct linked_proc_info *pi_ptr, *prev_ptr;
1114
1115 for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
1116 pi_ptr != NULL;
1117 prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
1118 {
1119 if (&pi_ptr->info == proc_desc)
1120 break;
1121 }
1122
1123 if (pi_ptr == NULL)
1124 error ("Can't locate dummy extra frame info\n");
1125
1126 if (prev_ptr != NULL)
1127 prev_ptr->next = pi_ptr->next;
1128 else
1129 linked_proc_desc_table = pi_ptr->next;
1130
1131 free (pi_ptr);
1132 }
1133}
1134\f
1135/* To skip prologues, I use this predicate. Returns either PC itself
1136 if the code at PC does not look like a function prologue; otherwise
1137 returns an address that (if we're lucky) follows the prologue. If
1138 LENIENT, then we must skip everything which is involved in setting
1139 up the frame (it's OK to skip more, just so long as we don't skip
1140 anything which might clobber the registers which are being saved.
1141 Currently we must not skip more on the alpha, but we might the lenient
1142 stuff some day. */
1143
1144CORE_ADDR
1145alpha_skip_prologue (pc, lenient)
1146 CORE_ADDR pc;
1147 int lenient;
1148{
1149 unsigned long inst;
1150 int offset;
72bba93b 1151 CORE_ADDR post_prologue_pc;
2fe3b329
PS
1152 char buf[4];
1153
1154#ifdef GDB_TARGET_HAS_SHARED_LIBS
1155 /* Silently return the unaltered pc upon memory errors.
1156 This could happen on OSF/1 if decode_line_1 tries to skip the
1157 prologue for quickstarted shared library functions when the
1158 shared library is not yet mapped in.
1159 Reading target memory is slow over serial lines, so we perform
1160 this check only if the target has shared libraries. */
1161 if (target_read_memory (pc, buf, 4))
1162 return pc;
1163#endif
72bba93b
SG
1164
1165 /* See if we can determine the end of the prologue via the symbol table.
1166 If so, then return either PC, or the PC after the prologue, whichever
1167 is greater. */
1168
1169 post_prologue_pc = after_prologue (pc, NULL);
1170
1171 if (post_prologue_pc != 0)
1172 return max (pc, post_prologue_pc);
1173
1174 /* Can't determine prologue from the symbol table, need to examine
1175 instructions. */
cef4c2e7
PS
1176
1177 /* Skip the typical prologue instructions. These are the stack adjustment
1178 instruction and the instructions that save registers on the stack
1179 or in the gcc frame. */
1180 for (offset = 0; offset < 100; offset += 4)
1181 {
cef4c2e7
PS
1182 int status;
1183
1184 status = read_memory_nobpt (pc + offset, buf, 4);
1185 if (status)
1186 memory_error (status, pc + offset);
1187 inst = extract_unsigned_integer (buf, 4);
1188
1189 /* The alpha has no delay slots. But let's keep the lenient stuff,
1190 we might need it for something else in the future. */
1191 if (lenient && 0)
1192 continue;
1193
1194 if ((inst & 0xffff0000) == 0x27bb0000) /* ldah $gp,n($t12) */
1195 continue;
1196 if ((inst & 0xffff0000) == 0x23bd0000) /* lda $gp,n($gp) */
1197 continue;
1198 if ((inst & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */
1199 continue;
1200 else if ((inst & 0xfc1f0000) == 0xb41e0000
1201 && (inst & 0xffff0000) != 0xb7fe0000)
1202 continue; /* stq reg,n($sp) */
1203 /* reg != $zero */
1204 else if ((inst & 0xfc1f0000) == 0x9c1e0000
1205 && (inst & 0xffff0000) != 0x9ffe0000)
1206 continue; /* stt reg,n($sp) */
1207 /* reg != $zero */
1208 else if (inst == 0x47de040f) /* bis sp,sp,fp */
1209 continue;
1210 else
1211 break;
1212 }
1213 return pc + offset;
1214}
1215
e3be225e 1216#if 0
cef4c2e7
PS
1217/* Is address PC in the prologue (loosely defined) for function at
1218 STARTADDR? */
1219
1220static int
1221alpha_in_lenient_prologue (startaddr, pc)
1222 CORE_ADDR startaddr;
1223 CORE_ADDR pc;
1224{
1225 CORE_ADDR end_prologue = alpha_skip_prologue (startaddr, 1);
1226 return pc >= startaddr && pc < end_prologue;
1227}
e3be225e 1228#endif
cef4c2e7 1229
ad09cb2b
PS
1230/* The alpha needs a conversion between register and memory format if
1231 the register is a floating point register and
1232 memory format is float, as the register format must be double
1233 or
1234 memory format is an integer with 4 bytes or less, as the representation
1235 of integers in floating point registers is different. */
1236void
1237alpha_register_convert_to_virtual (regnum, valtype, raw_buffer, virtual_buffer)
1238 int regnum;
1239 struct type *valtype;
1240 char *raw_buffer;
1241 char *virtual_buffer;
1242{
1243 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1244 {
1245 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum));
1246 return;
1247 }
1248
1249 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1250 {
1251 double d = extract_floating (raw_buffer, REGISTER_RAW_SIZE (regnum));
1252 store_floating (virtual_buffer, TYPE_LENGTH (valtype), d);
1253 }
1254 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1255 {
119dfbb7 1256 ULONGEST l;
ad09cb2b
PS
1257 l = extract_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum));
1258 l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff);
1259 store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l);
1260 }
1261 else
1262 error ("Cannot retrieve value from floating point register");
1263}
1264
1265void
1266alpha_register_convert_to_raw (valtype, regnum, virtual_buffer, raw_buffer)
1267 struct type *valtype;
1268 int regnum;
1269 char *virtual_buffer;
1270 char *raw_buffer;
1271{
1272 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1273 {
1274 memcpy (raw_buffer, virtual_buffer, REGISTER_RAW_SIZE (regnum));
1275 return;
1276 }
1277
1278 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1279 {
1280 double d = extract_floating (virtual_buffer, TYPE_LENGTH (valtype));
1281 store_floating (raw_buffer, REGISTER_RAW_SIZE (regnum), d);
1282 }
1283 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1284 {
119dfbb7 1285 ULONGEST l;
ad09cb2b
PS
1286 if (TYPE_UNSIGNED (valtype))
1287 l = extract_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype));
1288 else
1289 l = extract_signed_integer (virtual_buffer, TYPE_LENGTH (valtype));
1290 l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29);
1291 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), l);
1292 }
1293 else
1294 error ("Cannot store value in floating point register");
1295}
1296
cef4c2e7
PS
1297/* Given a return value in `regbuf' with a type `valtype',
1298 extract and copy its value into `valbuf'. */
669caa9c 1299
cef4c2e7
PS
1300void
1301alpha_extract_return_value (valtype, regbuf, valbuf)
1302 struct type *valtype;
1303 char regbuf[REGISTER_BYTES];
1304 char *valbuf;
1305{
92a6d600
PS
1306 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1307 alpha_register_convert_to_virtual (FP0_REGNUM, valtype,
1308 regbuf + REGISTER_BYTE (FP0_REGNUM),
1309 valbuf);
1310 else
1311 memcpy (valbuf, regbuf + REGISTER_BYTE (V0_REGNUM), TYPE_LENGTH (valtype));
cef4c2e7
PS
1312}
1313
1314/* Given a return value in `regbuf' with a type `valtype',
7810d333 1315 write its value into the appropriate register. */
669caa9c 1316
cef4c2e7
PS
1317void
1318alpha_store_return_value (valtype, valbuf)
1319 struct type *valtype;
1320 char *valbuf;
1321{
cef4c2e7 1322 char raw_buffer[MAX_REGISTER_RAW_SIZE];
92a6d600
PS
1323 int regnum = V0_REGNUM;
1324 int length = TYPE_LENGTH (valtype);
cef4c2e7 1325
92a6d600
PS
1326 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1327 {
1328 regnum = FP0_REGNUM;
1329 length = REGISTER_RAW_SIZE (regnum);
1330 alpha_register_convert_to_raw (valtype, regnum, valbuf, raw_buffer);
1331 }
1332 else
1333 memcpy (raw_buffer, valbuf, length);
cef4c2e7 1334
92a6d600 1335 write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, length);
cef4c2e7
PS
1336}
1337
cef4c2e7
PS
1338/* Just like reinit_frame_cache, but with the right arguments to be
1339 callable as an sfunc. */
669caa9c 1340
cef4c2e7
PS
1341static void
1342reinit_frame_cache_sfunc (args, from_tty, c)
1343 char *args;
1344 int from_tty;
1345 struct cmd_list_element *c;
1346{
1347 reinit_frame_cache ();
1348}
1349
72bba93b
SG
1350/* This is the definition of CALL_DUMMY_ADDRESS. It's a heuristic that is used
1351 to find a convenient place in the text segment to stick a breakpoint to
1352 detect the completion of a target function call (ala call_function_by_hand).
1353 */
1354
1355CORE_ADDR
1356alpha_call_dummy_address ()
1357{
1358 CORE_ADDR entry;
1359 struct minimal_symbol *sym;
1360
1361 entry = entry_point_address ();
1362
1363 if (entry != 0)
1364 return entry;
1365
2d336b1b 1366 sym = lookup_minimal_symbol ("_Prelude", NULL, symfile_objfile);
72bba93b
SG
1367
1368 if (!sym || MSYMBOL_TYPE (sym) != mst_text)
1369 return 0;
1370 else
1371 return SYMBOL_VALUE_ADDRESS (sym) + 4;
1372}
1373
cef4c2e7
PS
1374void
1375_initialize_alpha_tdep ()
1376{
1377 struct cmd_list_element *c;
1378
18b46e7c
SS
1379 tm_print_insn = print_insn_alpha;
1380
cef4c2e7
PS
1381 /* Let the user set the fence post for heuristic_proc_start. */
1382
1383 /* We really would like to have both "0" and "unlimited" work, but
1384 command.c doesn't deal with that. So make it a var_zinteger
1385 because the user can always use "999999" or some such for unlimited. */
1386 c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
1387 (char *) &heuristic_fence_post,
1388 "\
1389Set the distance searched for the start of a function.\n\
1390If you are debugging a stripped executable, GDB needs to search through the\n\
1391program for the start of a function. This command sets the distance of the\n\
1392search. The only need to set it is when debugging a stripped executable.",
1393 &setlist);
1394 /* We need to throw away the frame cache when we set this, since it
1395 might change our ability to get backtraces. */
1396 c->function.sfunc = reinit_frame_cache_sfunc;
1397 add_show_from_set (c, &showlist);
1398}
This page took 0.217042 seconds and 4 git commands to generate.