]> Git Repo - binutils.git/blob - gdb/hppa-tdep.c
* hppa-tdep.c (frameless_function_invocation): If no unwind
[binutils.git] / gdb / hppa-tdep.c
1 /* Machine-dependent code which would otherwise be in inflow.c and core.c,
2    for GDB, the GNU debugger.  This code is for the HP PA-RISC cpu.
3    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
4
5    Contributed by the Center for Software Science at the
6    University of Utah ([email protected]).
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
23
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "value.h"
28
29 /* For argument passing to the inferior */
30 #include "symtab.h"
31
32 #ifdef USG
33 #include <sys/types.h>
34 #endif
35
36 #include <sys/param.h>
37 #include <sys/dir.h>
38 #include <signal.h>
39 #include <sys/ioctl.h>
40
41 #ifdef COFF_ENCAPSULATE
42 #include "a.out.encap.h"
43 #else
44 #include <a.out.h>
45 #endif
46 #ifndef N_SET_MAGIC
47 #define N_SET_MAGIC(exec, val) ((exec).a_magic = (val))
48 #endif
49
50 /*#include <sys/user.h>         After a.out.h  */
51 #include <sys/file.h>
52 #include <sys/stat.h>
53 #include <machine/psl.h>
54 #include "wait.h"
55
56 #include "gdbcore.h"
57 #include "gdbcmd.h"
58 #include "target.h"
59 #include "symfile.h"
60 #include "objfiles.h"
61
62 static int restore_pc_queue PARAMS ((struct frame_saved_regs *fsr));
63 static int hppa_alignof PARAMS ((struct type *arg));
64 CORE_ADDR frame_saved_pc PARAMS ((FRAME frame));
65 static int prologue_inst_adjust_sp PARAMS ((unsigned long));
66 static int is_branch PARAMS ((unsigned long));
67 static int inst_saves_gr PARAMS ((unsigned long));
68 static int inst_saves_fr PARAMS ((unsigned long));
69 static int pc_in_interrupt_handler PARAMS ((CORE_ADDR));
70 static int pc_in_linker_stub PARAMS ((CORE_ADDR));
71
72 \f
73 /* Routines to extract various sized constants out of hppa 
74    instructions. */
75
76 /* This assumes that no garbage lies outside of the lower bits of 
77    value. */
78
79 int
80 sign_extend (val, bits)
81      unsigned val, bits;
82 {
83   return (int)(val >> bits - 1 ? (-1 << bits) | val : val);
84 }
85
86 /* For many immediate values the sign bit is the low bit! */
87
88 int
89 low_sign_extend (val, bits)
90      unsigned val, bits;
91 {
92   return (int)((val & 0x1 ? (-1 << (bits - 1)) : 0) | val >> 1);
93 }
94 /* extract the immediate field from a ld{bhw}s instruction */
95
96 unsigned
97 get_field (val, from, to)
98      unsigned val, from, to;
99 {
100   val = val >> 31 - to;
101   return val & ((1 << 32 - from) - 1);
102 }
103
104 unsigned
105 set_field (val, from, to, new_val)
106      unsigned *val, from, to;
107 {
108   unsigned mask = ~((1 << (to - from + 1)) << (31 - from));
109   return *val = *val & mask | (new_val << (31 - from));
110 }
111
112 /* extract a 3-bit space register number from a be, ble, mtsp or mfsp */
113
114 extract_3 (word)
115      unsigned word;
116 {
117   return GET_FIELD (word, 18, 18) << 2 | GET_FIELD (word, 16, 17);
118 }
119        
120 extract_5_load (word)
121      unsigned word;
122 {
123   return low_sign_extend (word >> 16 & MASK_5, 5);
124 }
125
126 /* extract the immediate field from a st{bhw}s instruction */
127
128 int
129 extract_5_store (word)
130      unsigned word;
131 {
132   return low_sign_extend (word & MASK_5, 5);
133 }
134
135 /* extract the immediate field from a break instruction */
136
137 unsigned
138 extract_5r_store (word)
139      unsigned word;
140 {
141   return (word & MASK_5);
142 }
143
144 /* extract the immediate field from a {sr}sm instruction */
145
146 unsigned
147 extract_5R_store (word)
148      unsigned word;
149 {
150   return (word >> 16 & MASK_5);
151 }
152
153 /* extract an 11 bit immediate field */
154
155 int
156 extract_11 (word)
157      unsigned word;
158 {
159   return low_sign_extend (word & MASK_11, 11);
160 }
161
162 /* extract a 14 bit immediate field */
163
164 int
165 extract_14 (word)
166      unsigned word;
167 {
168   return low_sign_extend (word & MASK_14, 14);
169 }
170
171 /* deposit a 14 bit constant in a word */
172
173 unsigned
174 deposit_14 (opnd, word)
175      int opnd;
176      unsigned word;
177 {
178   unsigned sign = (opnd < 0 ? 1 : 0);
179
180   return word | ((unsigned)opnd << 1 & MASK_14)  | sign;
181 }
182
183 /* extract a 21 bit constant */
184
185 int
186 extract_21 (word)
187      unsigned word;
188 {
189   int val;
190
191   word &= MASK_21;
192   word <<= 11;
193   val = GET_FIELD (word, 20, 20);
194   val <<= 11;
195   val |= GET_FIELD (word, 9, 19);
196   val <<= 2;
197   val |= GET_FIELD (word, 5, 6);
198   val <<= 5;
199   val |= GET_FIELD (word, 0, 4);
200   val <<= 2;
201   val |= GET_FIELD (word, 7, 8);
202   return sign_extend (val, 21) << 11;
203 }
204
205 /* deposit a 21 bit constant in a word. Although 21 bit constants are
206    usually the top 21 bits of a 32 bit constant, we assume that only
207    the low 21 bits of opnd are relevant */
208
209 unsigned
210 deposit_21 (opnd, word)
211      unsigned opnd, word;
212 {
213   unsigned val = 0;
214
215   val |= GET_FIELD (opnd, 11 + 14, 11 + 18);
216   val <<= 2;
217   val |= GET_FIELD (opnd, 11 + 12, 11 + 13);
218   val <<= 2;
219   val |= GET_FIELD (opnd, 11 + 19, 11 + 20);
220   val <<= 11;
221   val |= GET_FIELD (opnd, 11 + 1, 11 + 11);
222   val <<= 1;
223   val |= GET_FIELD (opnd, 11 + 0, 11 + 0);
224   return word | val;
225 }
226
227 /* extract a 12 bit constant from branch instructions */
228
229 int
230 extract_12 (word)
231      unsigned word;
232 {
233   return sign_extend (GET_FIELD (word, 19, 28) |
234                       GET_FIELD (word, 29, 29) << 10 |
235                       (word & 0x1) << 11, 12) << 2;
236 }
237
238 /* extract a 17 bit constant from branch instructions, returning the
239    19 bit signed value. */
240
241 int
242 extract_17 (word)
243      unsigned word;
244 {
245   return sign_extend (GET_FIELD (word, 19, 28) |
246                       GET_FIELD (word, 29, 29) << 10 |
247                       GET_FIELD (word, 11, 15) << 11 |
248                       (word & 0x1) << 16, 17) << 2;
249 }
250 \f
251 /* Lookup the unwind (stack backtrace) info for the given PC.  We search all
252    of the objfiles seeking the unwind table entry for this PC.  Each objfile
253    contains a sorted list of struct unwind_table_entry.  Since we do a binary
254    search of the unwind tables, we depend upon them to be sorted.  */
255
256 static struct unwind_table_entry *
257 find_unwind_entry(pc)
258      CORE_ADDR pc;
259 {
260   int first, middle, last;
261   struct objfile *objfile;
262
263   ALL_OBJFILES (objfile)
264     {
265       struct obj_unwind_info *ui;
266
267       ui = OBJ_UNWIND_INFO (objfile);
268
269       if (!ui)
270         continue;
271
272       /* First, check the cache */
273
274       if (ui->cache
275           && pc >= ui->cache->region_start
276           && pc <= ui->cache->region_end)
277         return ui->cache;
278
279       /* Not in the cache, do a binary search */
280
281       first = 0;
282       last = ui->last;
283
284       while (first <= last)
285         {
286           middle = (first + last) / 2;
287           if (pc >= ui->table[middle].region_start
288               && pc <= ui->table[middle].region_end)
289             {
290               ui->cache = &ui->table[middle];
291               return &ui->table[middle];
292             }
293
294           if (pc < ui->table[middle].region_start)
295             last = middle - 1;
296           else
297             first = middle + 1;
298         }
299     }                           /* ALL_OBJFILES() */
300   return NULL;
301 }
302
303 /* Called to determine if PC is in an interrupt handler of some
304    kind.  */
305
306 static int
307 pc_in_interrupt_handler (pc)
308      CORE_ADDR pc;
309 {
310   struct unwind_table_entry *u;
311   struct minimal_symbol *msym_us;
312
313   u = find_unwind_entry (pc);
314   if (!u)
315     return 0;
316
317   /* Oh joys.  HPUX sets the interrupt bit for _sigreturn even though
318      its frame isn't a pure interrupt frame.  Deal with this.  */
319   msym_us = lookup_minimal_symbol_by_pc (pc);
320
321   return u->HP_UX_interrupt_marker && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us));
322 }
323
324 /* Called when no unwind descriptor was found for PC.  Returns 1 if it
325    appears that PC is in a linker stub.  */
326
327 static int
328 pc_in_linker_stub (pc)
329      CORE_ADDR pc;
330 {
331   int found_magic_instruction = 0;
332   int i;
333   char buf[4];
334
335   /* If unable to read memory, assume pc is not in a linker stub.  */
336   if (target_read_memory (pc, buf, 4) != 0)
337     return 0;
338
339   /* We are looking for something like
340
341      ; $$dyncall jams RP into this special spot in the frame (RP')
342      ; before calling the "call stub"
343      ldw     -18(sp),rp
344
345      ldsid   (rp),r1         ; Get space associated with RP into r1
346      mtsp    r1,sp           ; Move it into space register 0
347      be,n    0(sr0),rp)      ; back to your regularly scheduled program
348      */
349
350   /* Maximum known linker stub size is 4 instructions.  Search forward
351      from the given PC, then backward.  */
352   for (i = 0; i < 4; i++)
353     {
354       /* If we hit something with an unwind, stop searching this direction.  */
355
356       if (find_unwind_entry (pc + i * 4) != 0)
357         break;
358
359       /* Check for ldsid (rp),r1 which is the magic instruction for a 
360          return from a cross-space function call.  */
361       if (read_memory_integer (pc + i * 4, 4) == 0x004010a1)
362         {
363           found_magic_instruction = 1;
364           break;
365         }
366       /* Add code to handle long call/branch and argument relocation stubs
367          here.  */
368     }
369
370   if (found_magic_instruction != 0)
371     return 1;
372
373   /* Now look backward.  */
374   for (i = 0; i < 4; i++)
375     {
376       /* If we hit something with an unwind, stop searching this direction.  */
377
378       if (find_unwind_entry (pc - i * 4) != 0)
379         break;
380
381       /* Check for ldsid (rp),r1 which is the magic instruction for a 
382          return from a cross-space function call.  */
383       if (read_memory_integer (pc - i * 4, 4) == 0x004010a1)
384         {
385           found_magic_instruction = 1;
386           break;
387         }
388       /* Add code to handle long call/branch and argument relocation stubs
389          here.  */
390     }
391   return found_magic_instruction;
392 }
393
394 static int
395 find_return_regnum(pc)
396      CORE_ADDR pc;
397 {
398   struct unwind_table_entry *u;
399
400   u = find_unwind_entry (pc);
401
402   if (!u)
403     return RP_REGNUM;
404
405   if (u->Millicode)
406     return 31;
407
408   return RP_REGNUM;
409 }
410
411 /* Return size of frame, or -1 if we should use a frame pointer.  */
412 int
413 find_proc_framesize (pc)
414      CORE_ADDR pc;
415 {
416   struct unwind_table_entry *u;
417   struct minimal_symbol *msym_us;
418
419   u = find_unwind_entry (pc);
420
421   if (!u)
422     {
423       if (pc_in_linker_stub (pc))
424         /* Linker stubs have a zero size frame.  */
425         return 0;
426       else
427         return -1;
428     }
429
430   msym_us = lookup_minimal_symbol_by_pc (pc);
431
432   /* If Save_SP is set, and we're not in an interrupt or signal caller,
433      then we have a frame pointer.  Use it.  */
434   if (u->Save_SP && !pc_in_interrupt_handler (pc)
435       && !IN_SIGTRAMP (pc, SYMBOL_NAME (msym_us)))
436     return -1;
437
438   return u->Total_frame_size << 3;
439 }
440
441 /* Return offset from sp at which rp is saved, or 0 if not saved.  */
442 static int rp_saved PARAMS ((CORE_ADDR));
443
444 static int
445 rp_saved (pc)
446      CORE_ADDR pc;
447 {
448   struct unwind_table_entry *u;
449
450   u = find_unwind_entry (pc);
451
452   if (!u)
453     {
454       if (pc_in_linker_stub (pc))
455         /* This is the so-called RP'.  */
456         return -24;
457       else
458         return 0;
459     }
460
461   if (u->Save_RP)
462     return -20;
463   else if (u->stub_type != 0)
464     {
465       switch (u->stub_type)
466         {
467         case EXPORT:
468           return -24;
469         case PARAMETER_RELOCATION:
470           return -8;
471         default:
472           return 0;
473         }
474     }
475   else
476     return 0;
477 }
478 \f
479 int
480 frameless_function_invocation (frame)
481      FRAME frame;
482 {
483   struct unwind_table_entry *u;
484
485   u = find_unwind_entry (frame->pc);
486
487   if (u == 0)
488     return 0;
489
490   return (u->Total_frame_size == 0 && u->stub_type == 0);
491 }
492
493 CORE_ADDR
494 saved_pc_after_call (frame)
495      FRAME frame;
496 {
497   int ret_regnum;
498
499   ret_regnum = find_return_regnum (get_frame_pc (frame));
500
501   return read_register (ret_regnum) & ~0x3;
502 }
503 \f
504 CORE_ADDR
505 frame_saved_pc (frame)
506      FRAME frame;
507 {
508   CORE_ADDR pc = get_frame_pc (frame);
509   struct unwind_table_entry *u;
510
511   /* BSD, HPUX & OSF1 all lay out the hardware state in the same manner
512      at the base of the frame in an interrupt handler.  Registers within
513      are saved in the exact same order as GDB numbers registers.  How
514      convienent.  */
515   if (pc_in_interrupt_handler (pc))
516     return read_memory_integer (frame->frame + PC_REGNUM * 4, 4) & ~0x3;
517
518   /* Deal with signal handler caller frames too.  */
519   if (frame->signal_handler_caller)
520     {
521       CORE_ADDR rp;
522       FRAME_SAVED_PC_IN_SIGTRAMP (frame, &rp);
523       return rp;
524     }
525
526 restart:
527   if (frameless_function_invocation (frame))
528     {
529       int ret_regnum;
530
531       ret_regnum = find_return_regnum (pc);
532
533       /* If the next frame is an interrupt frame or a signal
534          handler caller, then we need to look in the saved
535          register area to get the return pointer (the values
536          in the registers may not correspond to anything useful).  */
537       if (frame->next 
538           && (frame->next->signal_handler_caller
539               || pc_in_interrupt_handler (frame->next->pc)))
540         {
541           struct frame_info *fi;
542           struct frame_saved_regs saved_regs;
543
544           fi = get_frame_info (frame->next);
545           get_frame_saved_regs (fi, &saved_regs);
546           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM] & 0x2, 4))
547             pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
548           else
549             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
550         }
551       else
552         pc = read_register (ret_regnum) & ~0x3;
553     }
554   else
555     {
556       int rp_offset = rp_saved (pc);
557
558       /* Similar to code in frameless function case.  If the next
559          frame is a signal or interrupt handler, then dig the right
560          information out of the saved register info.  */
561       if (rp_offset == 0
562           && frame->next
563           && (frame->next->signal_handler_caller
564               || pc_in_interrupt_handler (frame->next->pc)))
565         {
566           struct frame_info *fi;
567           struct frame_saved_regs saved_regs;
568
569           fi = get_frame_info (frame->next);
570           get_frame_saved_regs (fi, &saved_regs);
571           if (read_memory_integer (saved_regs.regs[FLAGS_REGNUM] & 0x2, 4))
572             pc = read_memory_integer (saved_regs.regs[31], 4) & ~0x3;
573           else
574             pc = read_memory_integer (saved_regs.regs[RP_REGNUM], 4) & ~0x3;
575         }
576       else if (rp_offset == 0)
577         pc = read_register (RP_REGNUM) & ~0x3;
578       else
579         pc = read_memory_integer (frame->frame + rp_offset, 4) & ~0x3;
580     }
581
582   /* If PC is inside a linker stub, then dig out the address the stub
583      will return to.  */
584   u = find_unwind_entry (pc);
585   if (u && u->stub_type != 0)
586     goto restart;
587
588   return pc;
589 }
590 \f
591 /* We need to correct the PC and the FP for the outermost frame when we are
592    in a system call.  */
593
594 void
595 init_extra_frame_info (fromleaf, frame)
596      int fromleaf;
597      struct frame_info *frame;
598 {
599   int flags;
600   int framesize;
601
602   if (frame->next && !fromleaf)
603     return;
604
605   /* If the next frame represents a frameless function invocation
606      then we have to do some adjustments that are normally done by
607      FRAME_CHAIN.  (FRAME_CHAIN is not called in this case.)  */
608   if (fromleaf)
609     {
610       /* Find the framesize of *this* frame without peeking at the PC
611          in the current frame structure (it isn't set yet).  */
612       framesize = find_proc_framesize (FRAME_SAVED_PC (get_next_frame (frame)));
613
614       /* Now adjust our base frame accordingly.  If we have a frame pointer
615          use it, else subtract the size of this frame from the current
616          frame.  (we always want frame->frame to point at the lowest address
617          in the frame).  */
618       if (framesize == -1)
619         frame->frame = read_register (FP_REGNUM);
620       else
621         frame->frame -= framesize;
622       return;
623     }
624
625   flags = read_register (FLAGS_REGNUM);
626   if (flags & 2)        /* In system call? */
627     frame->pc = read_register (31) & ~0x3;
628
629   /* The outermost frame is always derived from PC-framesize
630
631      One might think frameless innermost frames should have
632      a frame->frame that is the same as the parent's frame->frame.
633      That is wrong; frame->frame in that case should be the *high*
634      address of the parent's frame.  It's complicated as hell to
635      explain, but the parent *always* creates some stack space for
636      the child.  So the child actually does have a frame of some
637      sorts, and its base is the high address in its parent's frame.  */
638   framesize = find_proc_framesize(frame->pc);
639   if (framesize == -1)
640     frame->frame = read_register (FP_REGNUM);
641   else
642     frame->frame = read_register (SP_REGNUM) - framesize;
643 }
644 \f
645 /* Given a GDB frame, determine the address of the calling function's frame.
646    This will be used to create a new GDB frame struct, and then
647    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
648
649    This may involve searching through prologues for several functions
650    at boundaries where GCC calls HP C code, or where code which has
651    a frame pointer calls code without a frame pointer.  */
652   
653
654 FRAME_ADDR
655 frame_chain (frame)
656      struct frame_info *frame;
657 {
658   int my_framesize, caller_framesize;
659   struct unwind_table_entry *u;
660   CORE_ADDR frame_base;
661
662   /* Handle HPUX, BSD, and OSF1 style interrupt frames first.  These
663      are easy; at *sp we have a full save state strucutre which we can
664      pull the old stack pointer from.  Also see frame_saved_pc for
665      code to dig a saved PC out of the save state structure.  */
666   if (pc_in_interrupt_handler (frame->pc))
667     frame_base = read_memory_integer (frame->frame + SP_REGNUM * 4, 4);
668   else if (frame->signal_handler_caller)
669     {
670       FRAME_BASE_BEFORE_SIGTRAMP (frame, &frame_base);
671     }
672   else
673     frame_base = frame->frame;
674
675   /* Get frame sizes for the current frame and the frame of the 
676      caller.  */
677   my_framesize = find_proc_framesize (frame->pc);
678   caller_framesize = find_proc_framesize (FRAME_SAVED_PC(frame));
679
680   /* If caller does not have a frame pointer, then its frame
681      can be found at current_frame - caller_framesize.  */
682   if (caller_framesize != -1)
683     return frame_base - caller_framesize;
684
685   /* Both caller and callee have frame pointers and are GCC compiled
686      (SAVE_SP bit in unwind descriptor is on for both functions.
687      The previous frame pointer is found at the top of the current frame.  */
688   if (caller_framesize == -1 && my_framesize == -1)
689     return read_memory_integer (frame_base, 4);
690
691   /* Caller has a frame pointer, but callee does not.  This is a little
692      more difficult as GCC and HP C lay out locals and callee register save
693      areas very differently.
694
695      The previous frame pointer could be in a register, or in one of 
696      several areas on the stack.
697
698      Walk from the current frame to the innermost frame examining 
699      unwind descriptors to determine if %r3 ever gets saved into the
700      stack.  If so return whatever value got saved into the stack.
701      If it was never saved in the stack, then the value in %r3 is still
702      valid, so use it. 
703
704      We use information from unwind descriptors to determine if %r3
705      is saved into the stack (Entry_GR field has this information).  */
706
707   while (frame)
708     {
709       u = find_unwind_entry (frame->pc);
710
711       if (!u)
712         {
713           /* We could find this information by examining prologues.  I don't
714              think anyone has actually written any tools (not even "strip")
715              which leave them out of an executable, so maybe this is a moot
716              point.  */
717           warning ("Unable to find unwind for PC 0x%x -- Help!", frame->pc);
718           return 0;
719         }
720
721       /* Entry_GR specifies the number of callee-saved general registers
722          saved in the stack.  It starts at %r3, so %r3 would be 1.  */
723       if (u->Entry_GR >= 1 || u->Save_SP
724           || frame->signal_handler_caller
725           || pc_in_interrupt_handler (frame->pc))
726         break;
727       else
728         frame = frame->next;
729     }
730
731   if (frame)
732     {
733       /* We may have walked down the chain into a function with a frame
734          pointer.  */
735       if (u->Save_SP
736           && !frame->signal_handler_caller
737           && !pc_in_interrupt_handler (frame->pc))
738         return read_memory_integer (frame->frame, 4);
739       /* %r3 was saved somewhere in the stack.  Dig it out.  */
740       else 
741         {
742           struct frame_info *fi;
743           struct frame_saved_regs saved_regs;
744
745           fi = get_frame_info (frame);
746           get_frame_saved_regs (fi, &saved_regs);
747           return read_memory_integer (saved_regs.regs[FP_REGNUM], 4);
748         }
749     }
750   else
751     {
752       /* The value in %r3 was never saved into the stack (thus %r3 still
753          holds the value of the previous frame pointer).  */
754       return read_register (FP_REGNUM);
755     }
756 }
757
758 \f
759 /* To see if a frame chain is valid, see if the caller looks like it
760    was compiled with gcc. */
761
762 int
763 frame_chain_valid (chain, thisframe)
764      FRAME_ADDR chain;
765      FRAME thisframe;
766 {
767   struct minimal_symbol *msym_us;
768   struct minimal_symbol *msym_start;
769   struct unwind_table_entry *u, *next_u = NULL;
770   FRAME next;
771
772   if (!chain)
773     return 0;
774
775   u = find_unwind_entry (thisframe->pc);
776
777   if (u == NULL)
778     return 1;
779
780   /* We can't just check that the same of msym_us is "_start", because
781      someone idiotically decided that they were going to make a Ltext_end
782      symbol with the same address.  This Ltext_end symbol is totally
783      indistinguishable (as nearly as I can tell) from the symbol for a function
784      which is (legitimately, since it is in the user's namespace)
785      named Ltext_end, so we can't just ignore it.  */
786   msym_us = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
787   msym_start = lookup_minimal_symbol ("_start", NULL);
788   if (msym_us
789       && msym_start
790       && SYMBOL_VALUE_ADDRESS (msym_us) == SYMBOL_VALUE_ADDRESS (msym_start))
791     return 0;
792
793   next = get_next_frame (thisframe);
794   if (next)
795     next_u = find_unwind_entry (next->pc);
796
797   /* If this frame does not save SP, has no stack, isn't a stub,
798      and doesn't "call" an interrupt routine or signal handler caller,
799      then its not valid.  */
800   if (u->Save_SP || u->Total_frame_size || u->stub_type != 0
801       || (thisframe->next && thisframe->next->signal_handler_caller)
802       || (next_u && next_u->HP_UX_interrupt_marker))
803     return 1;
804
805   if (pc_in_linker_stub (thisframe->pc))
806     return 1;
807
808   return 0;
809 }
810
811 /*
812  * These functions deal with saving and restoring register state
813  * around a function call in the inferior. They keep the stack
814  * double-word aligned; eventually, on an hp700, the stack will have
815  * to be aligned to a 64-byte boundary.
816  */
817
818 int
819 push_dummy_frame ()
820 {
821   register CORE_ADDR sp;
822   register int regnum;
823   int int_buffer;
824   double freg_buffer;
825
826   /* Space for "arguments"; the RP goes in here. */
827   sp = read_register (SP_REGNUM) + 48;
828   int_buffer = read_register (RP_REGNUM) | 0x3;
829   write_memory (sp - 20, (char *)&int_buffer, 4);
830
831   int_buffer = read_register (FP_REGNUM);
832   write_memory (sp, (char *)&int_buffer, 4);
833
834   write_register (FP_REGNUM, sp);
835
836   sp += 8;
837
838   for (regnum = 1; regnum < 32; regnum++)
839     if (regnum != RP_REGNUM && regnum != FP_REGNUM)
840       sp = push_word (sp, read_register (regnum));
841
842   sp += 4;
843
844   for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)
845     {
846       read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
847       sp = push_bytes (sp, (char *)&freg_buffer, 8);
848     }
849   sp = push_word (sp, read_register (IPSW_REGNUM));
850   sp = push_word (sp, read_register (SAR_REGNUM));
851   sp = push_word (sp, read_register (PCOQ_HEAD_REGNUM));
852   sp = push_word (sp, read_register (PCSQ_HEAD_REGNUM));
853   sp = push_word (sp, read_register (PCOQ_TAIL_REGNUM));
854   sp = push_word (sp, read_register (PCSQ_TAIL_REGNUM));
855   write_register (SP_REGNUM, sp);
856 }
857
858 find_dummy_frame_regs (frame, frame_saved_regs)
859      struct frame_info *frame;
860      struct frame_saved_regs *frame_saved_regs;
861 {
862   CORE_ADDR fp = frame->frame;
863   int i;
864
865   frame_saved_regs->regs[RP_REGNUM] = fp - 20 & ~0x3;
866   frame_saved_regs->regs[FP_REGNUM] = fp;
867   frame_saved_regs->regs[1] = fp + 8;
868
869   for (fp += 12, i = 3; i < 32; i++)
870     {
871       if (i != FP_REGNUM)
872         {
873           frame_saved_regs->regs[i] = fp;
874           fp += 4;
875         }
876     }
877
878   fp += 4;
879   for (i = FP0_REGNUM; i < NUM_REGS; i++, fp += 8)
880     frame_saved_regs->regs[i] = fp;
881
882   frame_saved_regs->regs[IPSW_REGNUM] = fp;
883   frame_saved_regs->regs[SAR_REGNUM] = fp + 4;
884   frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp + 8;
885   frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp + 12;
886   frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp + 16;
887   frame_saved_regs->regs[PCSQ_TAIL_REGNUM] = fp + 20;
888 }
889
890 int
891 hppa_pop_frame ()
892 {
893   register FRAME frame = get_current_frame ();
894   register CORE_ADDR fp;
895   register int regnum;
896   struct frame_saved_regs fsr;
897   struct frame_info *fi;
898   double freg_buffer;
899
900   fi = get_frame_info (frame);
901   fp = fi->frame;
902   get_frame_saved_regs (fi, &fsr);
903
904 #ifndef NO_PC_SPACE_QUEUE_RESTORE
905   if (fsr.regs[IPSW_REGNUM])    /* Restoring a call dummy frame */
906     restore_pc_queue (&fsr);
907 #endif
908
909   for (regnum = 31; regnum > 0; regnum--)
910     if (fsr.regs[regnum])
911       write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
912
913   for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)
914     if (fsr.regs[regnum])
915       {
916         read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);
917         write_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
918       }
919
920   if (fsr.regs[IPSW_REGNUM])
921     write_register (IPSW_REGNUM,
922                     read_memory_integer (fsr.regs[IPSW_REGNUM], 4));
923
924   if (fsr.regs[SAR_REGNUM])
925     write_register (SAR_REGNUM,
926                     read_memory_integer (fsr.regs[SAR_REGNUM], 4));
927
928   /* If the PC was explicitly saved, then just restore it.  */
929   if (fsr.regs[PCOQ_TAIL_REGNUM])
930     write_register (PCOQ_TAIL_REGNUM,
931                     read_memory_integer (fsr.regs[PCOQ_TAIL_REGNUM], 4));
932
933   /* Else use the value in %rp to set the new PC.  */
934   else 
935     target_write_pc (read_register (RP_REGNUM));
936
937   write_register (FP_REGNUM, read_memory_integer (fp, 4));
938
939   if (fsr.regs[IPSW_REGNUM])    /* call dummy */
940     write_register (SP_REGNUM, fp - 48);
941   else
942     write_register (SP_REGNUM, fp);
943
944   flush_cached_frames ();
945   set_current_frame (create_new_frame (read_register (FP_REGNUM),
946                                        read_pc ()));
947 }
948
949 /*
950  * After returning to a dummy on the stack, restore the instruction
951  * queue space registers. */
952
953 static int
954 restore_pc_queue (fsr)
955      struct frame_saved_regs *fsr;
956 {
957   CORE_ADDR pc = read_pc ();
958   CORE_ADDR new_pc = read_memory_integer (fsr->regs[PCOQ_HEAD_REGNUM], 4);
959   int pid;
960   struct target_waitstatus w;
961   int insn_count;
962
963   /* Advance past break instruction in the call dummy. */
964   write_register (PCOQ_HEAD_REGNUM, pc + 4);
965   write_register (PCOQ_TAIL_REGNUM, pc + 8);
966
967   /*
968    * HPUX doesn't let us set the space registers or the space
969    * registers of the PC queue through ptrace. Boo, hiss.
970    * Conveniently, the call dummy has this sequence of instructions
971    * after the break:
972    *    mtsp r21, sr0
973    *    ble,n 0(sr0, r22)
974    *
975    * So, load up the registers and single step until we are in the
976    * right place.
977    */
978
979   write_register (21, read_memory_integer (fsr->regs[PCSQ_HEAD_REGNUM], 4));
980   write_register (22, new_pc);
981
982   for (insn_count = 0; insn_count < 3; insn_count++)
983     {
984       /* FIXME: What if the inferior gets a signal right now?  Want to
985          merge this into wait_for_inferior (as a special kind of
986          watchpoint?  By setting a breakpoint at the end?  Is there
987          any other choice?  Is there *any* way to do this stuff with
988          ptrace() or some equivalent?).  */
989       resume (1, 0);
990       target_wait (inferior_pid, &w);
991
992       if (w.kind == TARGET_WAITKIND_SIGNALLED)
993         {
994           stop_signal = w.value.sig;
995           terminal_ours_for_output ();
996           printf_unfiltered ("\nProgram terminated with signal %s, %s.\n",
997                              target_signal_to_name (stop_signal),
998                              target_signal_to_string (stop_signal));
999           gdb_flush (gdb_stdout);
1000           return 0;
1001         }
1002     }
1003   target_terminal_ours ();
1004   fetch_inferior_registers (-1);
1005   return 1;
1006 }
1007
1008 CORE_ADDR
1009 hppa_push_arguments (nargs, args, sp, struct_return, struct_addr)
1010      int nargs;
1011      value_ptr *args;
1012      CORE_ADDR sp;
1013      int struct_return;
1014      CORE_ADDR struct_addr;
1015 {
1016   /* array of arguments' offsets */
1017   int *offset = (int *)alloca(nargs * sizeof (int));
1018   int cum = 0;
1019   int i, alignment;
1020   
1021   for (i = 0; i < nargs; i++)
1022     {
1023       /* Coerce chars to int & float to double if necessary */
1024       args[i] = value_arg_coerce (args[i]);
1025
1026       cum += TYPE_LENGTH (VALUE_TYPE (args[i]));
1027
1028     /* value must go at proper alignment. Assume alignment is a
1029          power of two.*/
1030       alignment = hppa_alignof (VALUE_TYPE (args[i]));
1031       if (cum % alignment)
1032         cum = (cum + alignment) & -alignment;
1033       offset[i] = -cum;
1034     }
1035   sp += max ((cum + 7) & -8, 16);
1036
1037   for (i = 0; i < nargs; i++)
1038     write_memory (sp + offset[i], VALUE_CONTENTS (args[i]),
1039                   TYPE_LENGTH (VALUE_TYPE (args[i])));
1040
1041   if (struct_return)
1042     write_register (28, struct_addr);
1043   return sp + 32;
1044 }
1045
1046 /*
1047  * Insert the specified number of args and function address
1048  * into a call sequence of the above form stored at DUMMYNAME.
1049  *
1050  * On the hppa we need to call the stack dummy through $$dyncall.
1051  * Therefore our version of FIX_CALL_DUMMY takes an extra argument,
1052  * real_pc, which is the location where gdb should start up the
1053  * inferior to do the function call.
1054  */
1055
1056 CORE_ADDR
1057 hppa_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
1058      char *dummy;
1059      CORE_ADDR pc;
1060      CORE_ADDR fun;
1061      int nargs;
1062      value_ptr *args;
1063      struct type *type;
1064      int gcc_p;
1065 {
1066   CORE_ADDR dyncall_addr, sr4export_addr;
1067   struct minimal_symbol *msymbol;
1068   int flags = read_register (FLAGS_REGNUM);
1069   struct unwind_table_entry *u;
1070
1071   msymbol = lookup_minimal_symbol ("$$dyncall", (struct objfile *) NULL);
1072   if (msymbol == NULL)
1073     error ("Can't find an address for $$dyncall trampoline");
1074
1075   dyncall_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1076
1077   /* If we are calling an import stub (eg calling into a dynamic library)
1078      then have sr4export call the magic __d_plt_call routine which is linked
1079      in from end.o.  (You can't use _sr4export to call the import stub as
1080      the value in sp-24 will get fried and you end up returning to the
1081      wrong location.  You can't call the import stub directly as the code
1082      to bind the PLT entry to a function can't return to a stack address.)  */
1083   u = find_unwind_entry (fun);
1084   if (u && u->stub_type == IMPORT)
1085     {
1086       CORE_ADDR new_fun;
1087       msymbol = lookup_minimal_symbol ("__d_plt_call", (struct objfile *) NULL);
1088       if (msymbol == NULL)
1089         error ("Can't find an address for __d_plt_call trampoline");
1090
1091       /* This is where sr4export will jump to.  */
1092       new_fun = SYMBOL_VALUE_ADDRESS (msymbol);
1093
1094       /* We have to store the address of the stub in __shlib_funcptr.  */
1095       msymbol = lookup_minimal_symbol ("__shlib_funcptr",
1096                                        (struct objfile *)NULL);
1097       if (msymbol == NULL)
1098         error ("Can't find an address for __shlib_funcptr");
1099
1100       target_write_memory (SYMBOL_VALUE_ADDRESS (msymbol), (char *)&fun, 4);
1101       fun = new_fun;
1102
1103     }
1104
1105   /* We still need sr4export's address too.  */
1106   msymbol = lookup_minimal_symbol ("_sr4export", (struct objfile *) NULL);
1107   if (msymbol == NULL)
1108     error ("Can't find an address for _sr4export trampoline");
1109
1110   sr4export_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1111
1112   store_unsigned_integer
1113     (&dummy[9*REGISTER_SIZE],
1114      REGISTER_SIZE,
1115      deposit_21 (fun >> 11,
1116                  extract_unsigned_integer (&dummy[9*REGISTER_SIZE],
1117                                            REGISTER_SIZE)));
1118   store_unsigned_integer
1119     (&dummy[10*REGISTER_SIZE],
1120      REGISTER_SIZE,
1121      deposit_14 (fun & MASK_11,
1122                  extract_unsigned_integer (&dummy[10*REGISTER_SIZE],
1123                                            REGISTER_SIZE)));
1124   store_unsigned_integer
1125     (&dummy[12*REGISTER_SIZE],
1126      REGISTER_SIZE,
1127      deposit_21 (sr4export_addr >> 11,
1128                  extract_unsigned_integer (&dummy[12*REGISTER_SIZE],
1129                                            REGISTER_SIZE)));
1130   store_unsigned_integer
1131     (&dummy[13*REGISTER_SIZE],
1132      REGISTER_SIZE,
1133      deposit_14 (sr4export_addr & MASK_11,
1134                  extract_unsigned_integer (&dummy[13*REGISTER_SIZE],
1135                                            REGISTER_SIZE)));
1136
1137   write_register (22, pc);
1138
1139   /* If we are in a syscall, then we should call the stack dummy
1140      directly.  $$dyncall is not needed as the kernel sets up the
1141      space id registers properly based on the value in %r31.  In
1142      fact calling $$dyncall will not work because the value in %r22
1143      will be clobbered on the syscall exit path.  */
1144   if (flags & 2)
1145     return pc;
1146   else
1147     return dyncall_addr;
1148
1149 }
1150
1151 /* Get the PC from %r31 if currently in a syscall.  Also mask out privilege
1152    bits.  */
1153 CORE_ADDR
1154 target_read_pc ()
1155 {
1156   int flags = read_register (FLAGS_REGNUM);
1157
1158   if (flags & 2)
1159     return read_register (31) & ~0x3;
1160   return read_register (PC_REGNUM) & ~0x3;
1161 }
1162
1163 /* Write out the PC.  If currently in a syscall, then also write the new
1164    PC value into %r31.  */
1165 void
1166 target_write_pc (v)
1167      CORE_ADDR v;
1168 {
1169   int flags = read_register (FLAGS_REGNUM);
1170
1171   /* If in a syscall, then set %r31.  Also make sure to get the 
1172      privilege bits set correctly.  */
1173   if (flags & 2)
1174     write_register (31, (long) (v | 0x3));
1175
1176   write_register (PC_REGNUM, (long) v);
1177   write_register (NPC_REGNUM, (long) v + 4);
1178 }
1179
1180 /* return the alignment of a type in bytes. Structures have the maximum
1181    alignment required by their fields. */
1182
1183 static int
1184 hppa_alignof (arg)
1185      struct type *arg;
1186 {
1187   int max_align, align, i;
1188   switch (TYPE_CODE (arg))
1189     {
1190     case TYPE_CODE_PTR:
1191     case TYPE_CODE_INT:
1192     case TYPE_CODE_FLT:
1193       return TYPE_LENGTH (arg);
1194     case TYPE_CODE_ARRAY:
1195       return hppa_alignof (TYPE_FIELD_TYPE (arg, 0));
1196     case TYPE_CODE_STRUCT:
1197     case TYPE_CODE_UNION:
1198       max_align = 2;
1199       for (i = 0; i < TYPE_NFIELDS (arg); i++)
1200         {
1201           /* Bit fields have no real alignment. */
1202           if (!TYPE_FIELD_BITPOS (arg, i))
1203             {
1204               align = hppa_alignof (TYPE_FIELD_TYPE (arg, i));
1205               max_align = max (max_align, align);
1206             }
1207         }
1208       return max_align;
1209     default:
1210       return 4;
1211     }
1212 }
1213
1214 /* Print the register regnum, or all registers if regnum is -1 */
1215
1216 pa_do_registers_info (regnum, fpregs)
1217      int regnum;
1218      int fpregs;
1219 {
1220   char raw_regs [REGISTER_BYTES];
1221   int i;
1222   
1223   for (i = 0; i < NUM_REGS; i++)
1224     read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
1225   if (regnum == -1)
1226     pa_print_registers (raw_regs, regnum, fpregs);
1227   else if (regnum < FP0_REGNUM)
1228     printf_unfiltered ("%s %x\n", reg_names[regnum], *(long *)(raw_regs +
1229                                                     REGISTER_BYTE (regnum)));
1230   else
1231     pa_print_fp_reg (regnum);
1232 }
1233
1234 pa_print_registers (raw_regs, regnum, fpregs)
1235      char *raw_regs;
1236      int regnum;
1237      int fpregs;
1238 {
1239   int i;
1240
1241   for (i = 0; i < 18; i++)
1242     printf_unfiltered ("%8.8s: %8x  %8.8s: %8x  %8.8s: %8x  %8.8s: %8x\n",
1243             reg_names[i],
1244             *(int *)(raw_regs + REGISTER_BYTE (i)),
1245             reg_names[i + 18],
1246             *(int *)(raw_regs + REGISTER_BYTE (i + 18)),
1247             reg_names[i + 36],
1248             *(int *)(raw_regs + REGISTER_BYTE (i + 36)),
1249             reg_names[i + 54],
1250             *(int *)(raw_regs + REGISTER_BYTE (i + 54)));
1251
1252   if (fpregs)
1253     for (i = 72; i < NUM_REGS; i++)
1254       pa_print_fp_reg (i);
1255 }
1256
1257 pa_print_fp_reg (i)
1258      int i;
1259 {
1260   unsigned char raw_buffer[MAX_REGISTER_RAW_SIZE];
1261   unsigned char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
1262
1263   /* Get 32bits of data.  */
1264   read_relative_register_raw_bytes (i, raw_buffer);
1265
1266   /* Put it in the buffer.  No conversions are ever necessary.  */
1267   memcpy (virtual_buffer, raw_buffer, REGISTER_RAW_SIZE (i));
1268
1269   fputs_filtered (reg_names[i], gdb_stdout);
1270   print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1271   fputs_filtered ("(single precision)     ", gdb_stdout);
1272
1273   val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, gdb_stdout, 0,
1274              1, 0, Val_pretty_default);
1275   printf_filtered ("\n");
1276
1277   /* If "i" is even, then this register can also be a double-precision
1278      FP register.  Dump it out as such.  */
1279   if ((i % 2) == 0)
1280     {
1281       /* Get the data in raw format for the 2nd half.  */
1282       read_relative_register_raw_bytes (i + 1, raw_buffer);
1283
1284       /* Copy it into the appropriate part of the virtual buffer.  */
1285       memcpy (virtual_buffer + REGISTER_RAW_SIZE (i), raw_buffer,
1286               REGISTER_RAW_SIZE (i));
1287
1288       /* Dump it as a double.  */
1289       fputs_filtered (reg_names[i], gdb_stdout);
1290       print_spaces_filtered (8 - strlen (reg_names[i]), gdb_stdout);
1291       fputs_filtered ("(double precision)     ", gdb_stdout);
1292
1293       val_print (builtin_type_double, virtual_buffer, 0, gdb_stdout, 0,
1294                  1, 0, Val_pretty_default);
1295       printf_filtered ("\n");
1296     }
1297 }
1298
1299 /* Figure out if PC is in a trampoline, and if so find out where
1300    the trampoline will jump to.  If not in a trampoline, return zero.
1301
1302    Simple code examination probably is not a good idea since the code
1303    sequences in trampolines can also appear in user code.
1304
1305    We use unwinds and information from the minimal symbol table to
1306    determine when we're in a trampoline.  This won't work for ELF
1307    (yet) since it doesn't create stub unwind entries.  Whether or
1308    not ELF will create stub unwinds or normal unwinds for linker
1309    stubs is still being debated.
1310
1311    This should handle simple calls through dyncall or sr4export,
1312    long calls, argument relocation stubs, and dyncall/sr4export
1313    calling an argument relocation stub.  It even handles some stubs
1314    used in dynamic executables.  */
1315
1316 CORE_ADDR
1317 skip_trampoline_code (pc, name)
1318      CORE_ADDR pc;
1319      char *name;
1320 {
1321   long orig_pc = pc;
1322   long prev_inst, curr_inst, loc;
1323   static CORE_ADDR dyncall = 0;
1324   static CORE_ADDR sr4export = 0;
1325   struct minimal_symbol *msym;
1326   struct unwind_table_entry *u;
1327
1328 /* FIXME XXX - dyncall and sr4export must be initialized whenever we get a
1329    new exec file */
1330
1331   if (!dyncall)
1332     {
1333       msym = lookup_minimal_symbol ("$$dyncall", NULL);
1334       if (msym)
1335         dyncall = SYMBOL_VALUE_ADDRESS (msym);
1336       else
1337         dyncall = -1;
1338     }
1339
1340   if (!sr4export)
1341     {
1342       msym = lookup_minimal_symbol ("_sr4export", NULL);
1343       if (msym)
1344         sr4export = SYMBOL_VALUE_ADDRESS (msym);
1345       else
1346         sr4export = -1;
1347     }
1348
1349   /* Addresses passed to dyncall may *NOT* be the actual address
1350      of the funtion.  So we may have to do something special.  */
1351   if (pc == dyncall)
1352     {
1353       pc = (CORE_ADDR) read_register (22);
1354
1355       /* If bit 30 (counting from the left) is on, then pc is the address of
1356          the PLT entry for this function, not the address of the function
1357          itself.  Bit 31 has meaning too, but only for MPE.  */
1358       if (pc & 0x2)
1359         pc = (CORE_ADDR) read_memory_integer (pc & ~0x3, 4);
1360     }
1361   else if (pc == sr4export)
1362     pc = (CORE_ADDR) (read_register (22));
1363
1364   /* Get the unwind descriptor corresponding to PC, return zero
1365      if no unwind was found.  */
1366   u = find_unwind_entry (pc);
1367   if (!u)
1368     return 0;
1369
1370   /* If this isn't a linker stub, then return now.  */
1371   if (u->stub_type == 0)
1372     return orig_pc == pc ? 0 : pc & ~0x3;
1373
1374   /* It's a stub.  Search for a branch and figure out where it goes.
1375      Note we have to handle multi insn branch sequences like ldil;ble.
1376      Most (all?) other branches can be determined by examining the contents
1377      of certain registers and the stack.  */
1378   loc = pc;
1379   curr_inst = 0;
1380   prev_inst = 0;
1381   while (1)
1382     {
1383       /* Make sure we haven't walked outside the range of this stub.  */
1384       if (u != find_unwind_entry (loc))
1385         {
1386           warning ("Unable to find branch in linker stub");
1387           return orig_pc == pc ? 0 : pc & ~0x3;
1388         }
1389
1390       prev_inst = curr_inst;
1391       curr_inst = read_memory_integer (loc, 4);
1392
1393       /* Does it look like a branch external using %r1?  Then it's the
1394          branch from the stub to the actual function.  */
1395       if ((curr_inst & 0xffe0e000) == 0xe0202000)
1396         {
1397           /* Yup.  See if the previous instruction loaded
1398              a value into %r1.  If so compute and return the jump address.  */
1399           if ((prev_inst & 0xffe00000) == 0x20202000)
1400             return (extract_21 (prev_inst) + extract_17 (curr_inst)) & ~0x3;
1401           else
1402             {
1403               warning ("Unable to find ldil X,%%r1 before ble Y(%%sr4,%%r1).");
1404               return orig_pc == pc ? 0 : pc & ~0x3;
1405             }
1406         }
1407
1408       /* Does it look like bl X,rp?  Another way to do a branch from the
1409          stub to the actual function.  */
1410       else if ((curr_inst & 0xffe0e000) == 0xe8400000)
1411         return (loc + extract_17 (curr_inst) + 8) & ~0x3;
1412
1413       /* Does it look like bv (rp)?   Note this depends on the
1414          current stack pointer being the same as the stack
1415          pointer in the stub itself!  This is a branch on from the
1416          stub back to the original caller.  */
1417       else if ((curr_inst & 0xffe0e000) == 0xe840c000)
1418         {
1419           /* Yup.  See if the previous instruction loaded
1420              rp from sp - 8.  */
1421           if (prev_inst == 0x4bc23ff1)
1422             return (read_memory_integer
1423                     (read_register (SP_REGNUM) - 8, 4)) & ~0x3;
1424           else
1425             {
1426               warning ("Unable to find restore of %%rp before bv (%%rp).");
1427               return orig_pc == pc ? 0 : pc & ~0x3;
1428             }
1429         }
1430
1431       /* What about be,n 0(sr0,%rp)?  It's just another way we return to
1432          the original caller from the stub.  Used in dynamic executables.  */
1433       else if (curr_inst == 0xe0400002)
1434         {
1435           /* The value we jump to is sitting in sp - 24.  But that's
1436              loaded several instructions before the be instruction.
1437              I guess we could check for the previous instruction being
1438              mtsp %r1,%sr0 if we want to do sanity checking.  */
1439           return (read_memory_integer 
1440                   (read_register (SP_REGNUM) - 24, 4)) & ~0x3;
1441         }
1442
1443       /* Haven't found the branch yet, but we're still in the stub.
1444          Keep looking.  */
1445       loc += 4;
1446     }
1447 }
1448
1449 /* For the given instruction (INST), return any adjustment it makes
1450    to the stack pointer or zero for no adjustment. 
1451
1452    This only handles instructions commonly found in prologues.  */
1453
1454 static int
1455 prologue_inst_adjust_sp (inst)
1456      unsigned long inst;
1457 {
1458   /* This must persist across calls.  */
1459   static int save_high21;
1460
1461   /* The most common way to perform a stack adjustment ldo X(sp),sp */
1462   if ((inst & 0xffffc000) == 0x37de0000)
1463     return extract_14 (inst);
1464
1465   /* stwm X,D(sp) */
1466   if ((inst & 0xffe00000) == 0x6fc00000)
1467     return extract_14 (inst);
1468
1469   /* addil high21,%r1; ldo low11,(%r1),%r30)
1470      save high bits in save_high21 for later use.  */
1471   if ((inst & 0xffe00000) == 0x28200000)
1472     {
1473       save_high21 = extract_21 (inst);
1474       return 0;
1475     }
1476
1477   if ((inst & 0xffff0000) == 0x343e0000)
1478     return save_high21 + extract_14 (inst);
1479
1480   /* fstws as used by the HP compilers.  */
1481   if ((inst & 0xffffffe0) == 0x2fd01220)
1482     return extract_5_load (inst);
1483
1484   /* No adjustment.  */
1485   return 0;
1486 }
1487
1488 /* Return nonzero if INST is a branch of some kind, else return zero.  */
1489
1490 static int
1491 is_branch (inst)
1492      unsigned long inst;
1493 {
1494   switch (inst >> 26)
1495     {
1496     case 0x20:
1497     case 0x21:
1498     case 0x22:
1499     case 0x23:
1500     case 0x28:
1501     case 0x29:
1502     case 0x2a:
1503     case 0x2b:
1504     case 0x30:
1505     case 0x31:
1506     case 0x32:
1507     case 0x33:
1508     case 0x38:
1509     case 0x39:
1510     case 0x3a:
1511       return 1;
1512
1513     default:
1514       return 0;
1515     }
1516 }
1517
1518 /* Return the register number for a GR which is saved by INST or
1519    zero it INST does not save a GR.
1520
1521    Note we only care about full 32bit register stores (that's the only
1522    kind of stores the prologue will use).  */
1523
1524 static int
1525 inst_saves_gr (inst)
1526      unsigned long inst;
1527 {
1528   /* Does it look like a stw?  */
1529   if ((inst >> 26) == 0x1a)
1530     return extract_5R_store (inst);
1531
1532   /* Does it look like a stwm?  */
1533   if ((inst >> 26) == 0x1b)
1534     return extract_5R_store (inst);
1535
1536   return 0;
1537 }
1538
1539 /* Return the register number for a FR which is saved by INST or
1540    zero it INST does not save a FR.
1541
1542    Note we only care about full 64bit register stores (that's the only
1543    kind of stores the prologue will use).  */
1544
1545 static int
1546 inst_saves_fr (inst)
1547      unsigned long inst;
1548 {
1549   if ((inst & 0xfc1fffe0) == 0x2c101220)
1550     return extract_5r_store (inst);
1551   return 0;
1552 }
1553
1554 /* Advance PC across any function entry prologue instructions
1555    to reach some "real" code. 
1556
1557    Use information in the unwind table to determine what exactly should
1558    be in the prologue.  */
1559
1560 CORE_ADDR
1561 skip_prologue (pc)
1562      CORE_ADDR pc;
1563 {
1564   char buf[4];
1565   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1566   int status, i;
1567   struct unwind_table_entry *u;
1568
1569   u = find_unwind_entry (pc);
1570   if (!u)
1571     return pc;
1572
1573   /* If we are not at the beginning of a function, then return now.  */
1574   if ((pc & ~0x3) != u->region_start)
1575     return pc;
1576
1577   /* This is how much of a frame adjustment we need to account for.  */
1578   stack_remaining = u->Total_frame_size << 3;
1579
1580   /* Magic register saves we want to know about.  */
1581   save_rp = u->Save_RP;
1582   save_sp = u->Save_SP;
1583
1584   /* Turn the Entry_GR field into a bitmask.  */
1585   save_gr = 0;
1586   for (i = 3; i < u->Entry_GR + 3; i++)
1587     {
1588       /* Frame pointer gets saved into a special location.  */
1589       if (u->Save_SP && i == FP_REGNUM)
1590         continue;
1591
1592       save_gr |= (1 << i);
1593     }
1594
1595   /* Turn the Entry_FR field into a bitmask too.  */
1596   save_fr = 0;
1597   for (i = 12; i < u->Entry_FR + 12; i++)
1598     save_fr |= (1 << i);
1599
1600   /* Loop until we find everything of interest or hit a branch.
1601
1602      For unoptimized GCC code and for any HP CC code this will never ever
1603      examine any user instructions.
1604
1605      For optimzied GCC code we're faced with problems.  GCC will schedule
1606      its prologue and make prologue instructions available for delay slot
1607      filling.  The end result is user code gets mixed in with the prologue
1608      and a prologue instruction may be in the delay slot of the first branch
1609      or call.
1610
1611      Some unexpected things are expected with debugging optimized code, so
1612      we allow this routine to walk past user instructions in optimized
1613      GCC code.  */
1614   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1615     {
1616       status = target_read_memory (pc, buf, 4);
1617       inst = extract_unsigned_integer (buf, 4);
1618
1619       /* Yow! */
1620       if (status != 0)
1621         return pc;
1622
1623       /* Note the interesting effects of this instruction.  */
1624       stack_remaining -= prologue_inst_adjust_sp (inst);
1625
1626       /* There is only one instruction used for saving RP into the stack.  */
1627       if (inst == 0x6bc23fd9)
1628         save_rp = 0;
1629
1630       /* This is the only way we save SP into the stack.  At this time
1631          the HP compilers never bother to save SP into the stack.  */
1632       if ((inst & 0xffffc000) == 0x6fc10000)
1633         save_sp = 0;
1634
1635       /* Account for general and floating-point register saves.  */
1636       save_gr &= ~(1 << inst_saves_gr (inst));
1637       save_fr &= ~(1 << inst_saves_fr (inst));
1638
1639       /* Quit if we hit any kind of branch.  This can happen if a prologue
1640          instruction is in the delay slot of the first call/branch.  */
1641       if (is_branch (inst))
1642         break;
1643
1644       /* Bump the PC.  */
1645       pc += 4;
1646     }
1647
1648   return pc;
1649 }
1650
1651 /* Put here the code to store, into a struct frame_saved_regs,
1652    the addresses of the saved registers of frame described by FRAME_INFO.
1653    This includes special registers such as pc and fp saved in special
1654    ways in the stack frame.  sp is even more special:
1655    the address we return for it IS the sp for the next frame.  */
1656
1657 void
1658 hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
1659      struct frame_info *frame_info;
1660      struct frame_saved_regs *frame_saved_regs;
1661 {
1662   CORE_ADDR pc;
1663   struct unwind_table_entry *u;
1664   unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp;
1665   int status, i, reg;
1666   char buf[4];
1667   int fp_loc = -1;
1668
1669   /* Zero out everything.  */
1670   memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
1671
1672   /* Call dummy frames always look the same, so there's no need to
1673      examine the dummy code to determine locations of saved registers;
1674      instead, let find_dummy_frame_regs fill in the correct offsets
1675      for the saved registers.  */
1676   if ((frame_info->pc >= frame_info->frame
1677        && frame_info->pc <= (frame_info->frame + CALL_DUMMY_LENGTH
1678                              + 32 * 4 + (NUM_REGS - FP0_REGNUM) * 8
1679                              + 6 * 4)))
1680     find_dummy_frame_regs (frame_info, frame_saved_regs);
1681
1682   /* Interrupt handlers are special too.  They lay out the register
1683      state in the exact same order as the register numbers in GDB.  */
1684   if (pc_in_interrupt_handler (frame_info->pc))
1685     {
1686       for (i = 0; i < NUM_REGS; i++)
1687         {
1688           /* SP is a little special.  */
1689           if (i == SP_REGNUM)
1690             frame_saved_regs->regs[SP_REGNUM]
1691               = read_memory_integer (frame_info->frame + SP_REGNUM * 4, 4);
1692           else
1693             frame_saved_regs->regs[i] = frame_info->frame + i * 4;
1694         }
1695       return;
1696     }
1697
1698   /* Handle signal handler callers.  */
1699   if (frame_info->signal_handler_caller)
1700     {
1701       FRAME_FIND_SAVED_REGS_IN_SIGTRAMP (frame_info, frame_saved_regs);
1702       return;
1703     }
1704
1705   /* Get the starting address of the function referred to by the PC
1706      saved in frame_info.  */
1707   pc = get_pc_function_start (frame_info->pc);
1708
1709   /* Yow! */
1710   u = find_unwind_entry (pc);
1711   if (!u)
1712     return;
1713
1714   /* This is how much of a frame adjustment we need to account for.  */
1715   stack_remaining = u->Total_frame_size << 3;
1716
1717   /* Magic register saves we want to know about.  */
1718   save_rp = u->Save_RP;
1719   save_sp = u->Save_SP;
1720
1721   /* Turn the Entry_GR field into a bitmask.  */
1722   save_gr = 0;
1723   for (i = 3; i < u->Entry_GR + 3; i++)
1724     {
1725       /* Frame pointer gets saved into a special location.  */
1726       if (u->Save_SP && i == FP_REGNUM)
1727         continue;
1728
1729       save_gr |= (1 << i);
1730     }
1731
1732   /* Turn the Entry_FR field into a bitmask too.  */
1733   save_fr = 0;
1734   for (i = 12; i < u->Entry_FR + 12; i++)
1735     save_fr |= (1 << i);
1736
1737   /* The frame always represents the value of %sp at entry to the
1738      current function (and is thus equivalent to the "saved" stack
1739      pointer.  */
1740   frame_saved_regs->regs[SP_REGNUM] = frame_info->frame;
1741
1742   /* Loop until we find everything of interest or hit a branch.
1743
1744      For unoptimized GCC code and for any HP CC code this will never ever
1745      examine any user instructions.
1746
1747      For optimzied GCC code we're faced with problems.  GCC will schedule
1748      its prologue and make prologue instructions available for delay slot
1749      filling.  The end result is user code gets mixed in with the prologue
1750      and a prologue instruction may be in the delay slot of the first branch
1751      or call.
1752
1753      Some unexpected things are expected with debugging optimized code, so
1754      we allow this routine to walk past user instructions in optimized
1755      GCC code.  */
1756   while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
1757     {
1758       status = target_read_memory (pc, buf, 4);
1759       inst = extract_unsigned_integer (buf, 4);
1760
1761       /* Yow! */
1762       if (status != 0)
1763         return;
1764
1765       /* Note the interesting effects of this instruction.  */
1766       stack_remaining -= prologue_inst_adjust_sp (inst);
1767
1768       /* There is only one instruction used for saving RP into the stack.  */
1769       if (inst == 0x6bc23fd9)
1770         {
1771           save_rp = 0;
1772           frame_saved_regs->regs[RP_REGNUM] = frame_info->frame - 20;
1773         }
1774
1775       /* Just note that we found the save of SP into the stack.  The
1776          value for frame_saved_regs was computed above.  */
1777       if ((inst & 0xffffc000) == 0x6fc10000)
1778         save_sp = 0;
1779
1780       /* Account for general and floating-point register saves.  */
1781       reg = inst_saves_gr (inst);
1782       if (reg >= 3 && reg <= 18
1783           && (!u->Save_SP || reg != FP_REGNUM))
1784         {
1785           save_gr &= ~(1 << reg);
1786
1787           /* stwm with a positive displacement is a *post modify*.  */
1788           if ((inst >> 26) == 0x1b
1789               && extract_14 (inst) >= 0)
1790             frame_saved_regs->regs[reg] = frame_info->frame;
1791           else
1792             {
1793               /* Handle code with and without frame pointers.  */
1794               if (u->Save_SP)
1795                 frame_saved_regs->regs[reg]
1796                   = frame_info->frame + extract_14 (inst);
1797               else
1798                 frame_saved_regs->regs[reg]
1799                   = frame_info->frame + (u->Total_frame_size << 3)
1800                     + extract_14 (inst);
1801             }
1802         }
1803
1804
1805       /* GCC handles callee saved FP regs a little differently.  
1806
1807          It emits an instruction to put the value of the start of
1808          the FP store area into %r1.  It then uses fstds,ma with
1809          a basereg of %r1 for the stores.
1810
1811          HP CC emits them at the current stack pointer modifying
1812          the stack pointer as it stores each register.  */
1813
1814       /* ldo X(%r3),%r1 or ldo X(%r30),%r1.  */
1815       if ((inst & 0xffffc000) == 0x34610000
1816           || (inst & 0xffffc000) == 0x37c10000)
1817         fp_loc = extract_14 (inst);
1818         
1819       reg = inst_saves_fr (inst);
1820       if (reg >= 12 && reg <= 21)
1821         {
1822           /* Note +4 braindamage below is necessary because the FP status
1823              registers are internally 8 registers rather than the expected
1824              4 registers.  */
1825           save_fr &= ~(1 << reg);
1826           if (fp_loc == -1)
1827             {
1828               /* 1st HP CC FP register store.  After this instruction
1829                  we've set enough state that the GCC and HPCC code are
1830                  both handled in the same manner.  */
1831               frame_saved_regs->regs[reg + FP4_REGNUM + 4] = frame_info->frame;
1832               fp_loc = 8;
1833             }
1834           else
1835             {
1836               frame_saved_regs->regs[reg + FP0_REGNUM + 4]
1837                 = frame_info->frame + fp_loc;
1838               fp_loc += 8;
1839             }
1840         }
1841
1842       /* Quit if we hit any kind of branch.  This can happen if a prologue
1843          instruction is in the delay slot of the first call/branch.  */
1844       if (is_branch (inst))
1845         break;
1846
1847       /* Bump the PC.  */
1848       pc += 4;
1849     }
1850 }
1851
1852 #ifdef MAINTENANCE_CMDS
1853
1854 static void
1855 unwind_command (exp, from_tty)
1856      char *exp;
1857      int from_tty;
1858 {
1859   CORE_ADDR address;
1860   union
1861     {
1862       int *foo;
1863       struct unwind_table_entry *u;
1864     } xxx;
1865
1866   /* If we have an expression, evaluate it and use it as the address.  */
1867
1868   if (exp != 0 && *exp != 0)
1869     address = parse_and_eval_address (exp);
1870   else
1871     return;
1872
1873   xxx.u = find_unwind_entry (address);
1874
1875   if (!xxx.u)
1876     {
1877       printf_unfiltered ("Can't find unwind table entry for PC 0x%x\n", address);
1878       return;
1879     }
1880
1881   printf_unfiltered ("%08x\n%08X\n%08X\n%08X\n", xxx.foo[0], xxx.foo[1], xxx.foo[2],
1882           xxx.foo[3]);
1883 }
1884 #endif /* MAINTENANCE_CMDS */
1885
1886 void
1887 _initialize_hppa_tdep ()
1888 {
1889 #ifdef MAINTENANCE_CMDS
1890   add_cmd ("unwind", class_maintenance, unwind_command,
1891            "Print unwind table entry at given address.",
1892            &maintenanceprintlist);
1893 #endif /* MAINTENANCE_CMDS */
1894 }
This page took 0.130696 seconds and 4 git commands to generate.