]> Git Repo - binutils.git/blob - gdb/config/rs6000/tm-rs6000.h
CARP: Delete ABOUT_TO_RETURN across all targets.
[binutils.git] / gdb / config / rs6000 / tm-rs6000.h
1 /* Parameters for target execution on an RS6000, for GDB, the GNU debugger.
2    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1997
3    Free Software Foundation, Inc.
4    Contributed by IBM Corporation.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #ifdef __STDC__         /* Forward decls for prototypes */
23 struct frame_info;
24 struct type;
25 struct value;
26 #endif
27
28 /* Minimum possible text address in AIX */
29
30 #define TEXT_SEGMENT_BASE       0x10000000
31
32 /* Load segment of a given pc value. */
33
34 #define PC_LOAD_SEGMENT(PC)     pc_load_segment_name(PC)
35 extern char *pc_load_segment_name PARAMS ((CORE_ADDR));
36
37 /* AIX cc seems to get this right.  */
38
39 #define BELIEVE_PCC_PROMOTION 1
40
41 /* return true if a given `pc' value is in `call dummy' function. */
42 /* FIXME: This just checks for the end of the stack, which is broken
43    for things like stepping through gcc nested function stubs.  */
44 #define PC_IN_CALL_DUMMY(STOP_PC, STOP_SP, STOP_FRAME_ADDR)     \
45         (STOP_SP < STOP_PC && STOP_PC < STACK_END_ADDR)
46
47 #if 0
48 extern unsigned int text_start, data_start;
49 extern char *corefile;
50 #endif
51 extern int inferior_pid;
52
53 /* We are missing register descriptions in the system header files. Sigh! */
54
55 struct regs {
56         int     gregs [32];             /* general purpose registers */
57         int     pc;                     /* program conter       */
58         int     ps;                     /* processor status, or machine state */
59 };
60
61 struct fp_status {
62         double  fpregs [32];            /* floating GP registers */
63 };
64
65
66 /* To be used by skip_prologue. */
67
68 struct rs6000_framedata {
69   int   offset;                         /* # of bytes in gpr's and fpr's are saved */
70   int   saved_gpr;                      /* smallest # of saved gpr */
71   int   saved_fpr;                      /* smallest # of saved fpr */
72   int   alloca_reg;                     /* alloca register number (frame ptr) */
73   char  frameless;                      /* true if frameless functions. */
74   char  nosavedpc;                      /* true if pc not saved. */
75   int   gpr_offset;                     /* offset of saved gprs */
76   int   fpr_offset;                     /* offset of saved fprs */
77   int   lr_offset;                      /* offset of saved lr */
78   int   cr_offset;                      /* offset of saved cr */
79 };
80
81 /* Define the byte order of the machine.  */
82
83 #define TARGET_BYTE_ORDER       BIG_ENDIAN
84
85 /* AIX's assembler doesn't grok dollar signs in identifiers.
86    So we use dots instead.  This item must be coordinated with G++. */
87 #undef CPLUS_MARKER
88 #define CPLUS_MARKER '.'
89
90 /* Offset from address of function to start of its code.
91    Zero on most machines.  */
92
93 #define FUNCTION_START_OFFSET 0
94
95 /* Advance PC across any function entry prologue instructions
96    to reach some "real" code.  */
97
98 #define SKIP_PROLOGUE(pc)                                               \
99 do {                                                                    \
100   struct rs6000_framedata _frame;                                       \
101   pc = skip_prologue (pc, &_frame);                                     \
102 } while (0)
103
104 extern CORE_ADDR skip_prologue PARAMS((CORE_ADDR, struct rs6000_framedata *));
105
106
107 /* If PC is in some function-call trampoline code, return the PC
108    where the function itself actually starts.  If not, return NULL.  */
109
110 #define SKIP_TRAMPOLINE_CODE(pc)        skip_trampoline_code (pc)
111 extern CORE_ADDR skip_trampoline_code PARAMS ((CORE_ADDR));
112
113 /* Number of trap signals we need to skip over, once the inferior process
114    starts running. */
115
116 #define START_INFERIOR_TRAPS_EXPECTED   2
117
118 /* AIX has a couple of strange returns from wait().  */
119
120 #define CHILD_SPECIAL_WAITSTATUS(ourstatus, hoststatus) ( \
121   /* "stop after load" status.  */ \
122   (hoststatus) == 0x57c ? (ourstatus)->kind = TARGET_WAITKIND_LOADED, 1 : \
123   \
124   /* signal 0. I have no idea why wait(2) returns with this status word.  */ \
125   /* It looks harmless. */ \
126   (hoststatus) == 0x7f ? (ourstatus)->kind = TARGET_WAITKIND_SPURIOUS, 1 : \
127   \
128   /* A normal waitstatus.  Let the usual macros deal with it.  */ \
129   0)
130
131 /* In xcoff, we cannot process line numbers when we see them. This is
132    mainly because we don't know the boundaries of the include files. So,
133    we postpone that, and then enter and sort(?) the whole line table at
134    once, when we are closing the current symbol table in end_symtab(). */
135
136 #define PROCESS_LINENUMBER_HOOK()       aix_process_linenos ()
137 extern void aix_process_linenos PARAMS ((void));
138    
139 /* Immediately after a function call, return the saved pc.
140    Can't go through the frames for this because on some machines
141    the new frame is not set up until the new function executes
142    some instructions.  */
143
144 #define SAVED_PC_AFTER_CALL(frame) read_register (LR_REGNUM)
145
146 /* Address of end of stack space.  */
147
148 #define STACK_END_ADDR 0x2ff80000
149
150 /* Stack grows downward.  */
151
152 #define INNER_THAN <
153
154 /* This is how arguments pushed onto stack or passed in registers.
155    Stack must be aligned on 64-bit boundaries when synthesizing
156    function calls.  We don't need STACK_ALIGN, PUSH_ARGUMENTS will
157    handle it. */
158
159 #define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
160   sp = push_arguments((nargs), (args), (sp), (struct_return), (struct_addr))
161 extern CORE_ADDR push_arguments PARAMS ((int, struct value **, CORE_ADDR,
162                                          int, CORE_ADDR));
163
164 /* BREAKPOINT_FROM_PC uses the program counter value to determine the
165    breakpoint that should be used */
166 extern breakpoint_from_pc_fn rs6000_breakpoint_from_pc;
167 #define BREAKPOINT_FROM_PC(pcptr, lenptr) rs6000_breakpoint_from_pc (pcptr, lenptr)
168
169 /* Amount PC must be decremented by after a breakpoint.
170    This is often the number of bytes in BREAKPOINT
171    but not always.  */
172
173 #define DECR_PC_AFTER_BREAK 0
174
175 /* Say how long (ordinary) registers are.  This is a piece of bogosity
176    used in push_word and a few other places; REGISTER_RAW_SIZE is the
177    real way to know how big a register is.  */
178
179 #define REGISTER_SIZE 4
180
181 /* Number of machine registers */
182
183 #define NUM_REGS 71
184
185 /* Initializer for an array of names of registers.
186    There should be NUM_REGS strings in this initializer.  */
187
188 #define REGISTER_NAMES  \
189  {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",  \
190   "r8", "r9", "r10","r11","r12","r13","r14","r15", \
191   "r16","r17","r18","r19","r20","r21","r22","r23", \
192   "r24","r25","r26","r27","r28","r29","r30","r31", \
193   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",  \
194   "f8", "f9", "f10","f11","f12","f13","f14","f15", \
195   "f16","f17","f18","f19","f20","f21","f22","f23", \
196   "f24","f25","f26","f27","f28","f29","f30","f31", \
197   "pc", "ps", "cnd", "lr", "cnt", "xer", "mq" }
198
199 /* Register numbers of various important registers.
200    Note that some of these values are "real" register numbers,
201    and correspond to the general registers of the machine,
202    and some are "phony" register numbers which are too large
203    to be actual register numbers as far as the user is concerned
204    but do serve to get the desired values when passed to read_register.  */
205
206 #define FP_REGNUM 1             /* Contains address of executing stack frame */
207 #define SP_REGNUM 1             /* Contains address of top of stack */
208 #define TOC_REGNUM 2            /* TOC register */
209 #define FP0_REGNUM 32           /* Floating point register 0 */
210 #define GP0_REGNUM 0            /* GPR register 0 */
211 #define FP0_REGNUM 32           /* FPR (Floating point) register 0 */
212 #define FPLAST_REGNUM 63        /* Last floating point register */  
213
214 /* Special purpose registers... */
215 /* P.S. keep these in the same order as in /usr/mstsave.h `mstsave' structure, for
216    easier processing */
217
218 #define PC_REGNUM 64            /* Program counter (instruction address %iar) */
219 #define PS_REGNUM 65            /* Processor (or machine) status (%msr) */
220 #define CR_REGNUM 66            /* Condition register */
221 #define LR_REGNUM 67            /* Link register */
222 #define CTR_REGNUM 68           /* Count register */
223 #define XER_REGNUM 69           /* Fixed point exception registers */
224 #define MQ_REGNUM 70            /* Multiply/quotient register */
225
226 #define FIRST_SP_REGNUM 64      /* first special register number */
227 #define LAST_SP_REGNUM  70      /* last special register number */
228
229 /* Total amount of space needed to store our copies of the machine's
230    register state, the array `registers'.
231
232         32 4-byte gpr's
233         32 8-byte fpr's
234         7  4-byte special purpose registers, 
235
236    total 416 bytes. Keep some extra space for now, in case to add more. */
237
238 #define REGISTER_BYTES 420
239
240
241 /* Index within `registers' of the first byte of the space for
242    register N.  */
243
244 #define REGISTER_BYTE(N)  \
245  (                                                              \
246   ((N) > FPLAST_REGNUM) ? ((((N) - FPLAST_REGNUM -1) * 4) + 384)\
247   :((N) >= FP0_REGNUM) ? ((((N) - FP0_REGNUM) * 8) + 128)       \
248   :((N) * 4) )
249
250 /* Number of bytes of storage in the actual machine representation
251    for register N. */
252 /* Note that the unsigned cast here forces the result of the
253    subtractiion to very high positive values if N < FP0_REGNUM */
254
255 #define REGISTER_RAW_SIZE(N) (((unsigned)(N) - FP0_REGNUM) < 32 ? 8 : 4)
256
257 /* Number of bytes of storage in the program's representation
258    for register N.  On the RS6000, all regs are 4 bytes
259    except the floating point regs which are 8-byte doubles.  */
260
261 #define REGISTER_VIRTUAL_SIZE(N) (((unsigned)(N) - FP0_REGNUM) < 32 ? 8 : 4)
262
263 /* Largest value REGISTER_RAW_SIZE can have.  */
264
265 #define MAX_REGISTER_RAW_SIZE 8
266
267 /* Largest value REGISTER_VIRTUAL_SIZE can have.  */
268
269 #define MAX_REGISTER_VIRTUAL_SIZE 8
270
271 /* convert a dbx stab register number (from `r' declaration) to a gdb REGNUM */
272
273 #define STAB_REG_TO_REGNUM(value)       (value)
274
275 /* Nonzero if register N requires conversion
276    from raw format to virtual format.
277    The register format for rs6000 floating point registers is always
278    double, we need a conversion if the memory format is float.  */
279
280 #define REGISTER_CONVERTIBLE(N) ((N) >= FP0_REGNUM && (N) <= FPLAST_REGNUM)
281
282 /* Convert data from raw format for register REGNUM in buffer FROM
283    to virtual format with type TYPE in buffer TO.  */
284
285 #define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
286 { \
287   if (TYPE_LENGTH (TYPE) != REGISTER_RAW_SIZE (REGNUM)) \
288     { \
289       double val = extract_floating ((FROM), REGISTER_RAW_SIZE (REGNUM)); \
290       store_floating ((TO), TYPE_LENGTH (TYPE), val); \
291     } \
292   else \
293     memcpy ((TO), (FROM), REGISTER_RAW_SIZE (REGNUM)); \
294 }
295
296 /* Convert data from virtual format with type TYPE in buffer FROM
297    to raw format for register REGNUM in buffer TO.  */
298
299 #define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO)    \
300 { \
301   if (TYPE_LENGTH (TYPE) != REGISTER_RAW_SIZE (REGNUM)) \
302     { \
303       double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
304       store_floating ((TO), REGISTER_RAW_SIZE (REGNUM), val); \
305     } \
306   else \
307     memcpy ((TO), (FROM), REGISTER_RAW_SIZE (REGNUM)); \
308 }
309
310 /* Return the GDB type object for the "standard" data type
311    of data in register N.  */
312
313 #define REGISTER_VIRTUAL_TYPE(N) \
314  (((unsigned)(N) - FP0_REGNUM) < 32 ? builtin_type_double : builtin_type_int)
315
316 /* Store the address of the place in which to copy the structure the
317    subroutine will return.  This is called from call_function. */
318 /* in RS6000, struct return addresses are passed as an extra parameter in r3.
319    In function return, callee is not responsible of returning this address back.
320    Since gdb needs to find it, we will store in a designated variable
321    `rs6000_struct_return_address'. */
322
323 extern CORE_ADDR rs6000_struct_return_address;
324
325 #define STORE_STRUCT_RETURN(ADDR, SP)   \
326   { write_register (3, (ADDR));         \
327     rs6000_struct_return_address = (ADDR); }
328
329 /* Extract from an array REGBUF containing the (raw) register state
330    a function return value of type TYPE, and copy that, in virtual format,
331    into VALBUF.  */
332
333 /* #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
334   memcpy (VALBUF, REGBUF, TYPE_LENGTH (TYPE)) */
335
336 #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
337   extract_return_value(TYPE,REGBUF,VALBUF)
338 extern void extract_return_value PARAMS ((struct type *, char [], char *));
339
340 /* Write into appropriate registers a function return value
341    of type TYPE, given in virtual format.  */
342
343 #define STORE_RETURN_VALUE(TYPE,VALBUF) \
344   {                                                                     \
345     if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                              \
346                                                                         \
347      /* Floating point values are returned starting from FPR1 and up.   \
348         Say a double_double_double type could be returned in            \
349         FPR1/FPR2/FPR3 triple. */                                       \
350                                                                         \
351       write_register_bytes (REGISTER_BYTE (FP0_REGNUM+1), (VALBUF),     \
352                                                 TYPE_LENGTH (TYPE));    \
353     else                                                                \
354       /* Everything else is returned in GPR3 and up. */                 \
355       write_register_bytes (REGISTER_BYTE (GP0_REGNUM+3), (VALBUF),     \
356                                                 TYPE_LENGTH (TYPE));    \
357   }
358
359
360 /* Extract from an array REGBUF containing the (raw) register state
361    the address in which a function should return its structure value,
362    as a CORE_ADDR (or an expression that can be used as one).  */
363
364 #define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF)    rs6000_struct_return_address
365 \f
366 /* Describe the pointer in each stack frame to the previous stack frame
367    (its caller).  */
368
369 /* FRAME_CHAIN takes a frame's nominal address
370    and produces the frame's chain-pointer. */
371
372 /* In the case of the RS6000, the frame's nominal address
373    is the address of a 4-byte word containing the calling frame's address.  */
374
375 #define FRAME_CHAIN(thisframe) rs6000_frame_chain (thisframe)
376 CORE_ADDR rs6000_frame_chain PARAMS ((struct frame_info *));
377
378 /* Define other aspects of the stack frame.  */
379
380 /* A macro that tells us whether the function invocation represented
381    by FI does not have a frame on the stack associated with it.  If it
382    does not, FRAMELESS is set to 1, else 0.  */
383
384 #define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
385   FRAMELESS = frameless_function_invocation (FI)
386
387 extern int frameless_function_invocation PARAMS((struct frame_info *));
388
389 /* Functions calling alloca() change the value of the stack pointer. We
390    need to use initial stack pointer (which is saved in r31 by gcc) in 
391    such cases. If a compiler emits traceback table, then we should use the
392    alloca register specified in traceback table. FIXME. */
393 /* Also, it is a good idea to cache information about frame's saved registers
394    in the frame structure to speed things up. See tm-m88k.h. FIXME. */
395
396 #define EXTRA_FRAME_INFO        \
397         CORE_ADDR initial_sp;                   /* initial stack pointer. */ \
398         struct frame_saved_regs *cache_fsr;     /* saved registers        */
399
400 #define INIT_FRAME_PC_FIRST(fromleaf, prev) \
401   prev->pc = (fromleaf ? SAVED_PC_AFTER_CALL (prev->next) : \
402               prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
403 #define INIT_FRAME_PC(fromleaf, prev) /* nothing */
404 #define INIT_EXTRA_FRAME_INFO(fromleaf, fi)     \
405   fi->initial_sp = 0;           \
406   fi->cache_fsr = 0; \
407   if (fi->next != (CORE_ADDR)0 \
408       && fi->pc < TEXT_SEGMENT_BASE) \
409     /* We're in get_prev_frame_info */ \
410     /* and this is a special signal frame.  */ \
411     /* (fi->pc will be some low address in the kernel, */ \
412     /*  to which the signal handler returns).  */ \
413     fi->signal_handler_caller = 1;
414
415 /* If the kernel has to deliver a signal, it pushes a sigcontext
416    structure on the stack and then calls the signal handler, passing
417    the address of the sigcontext in an argument register. Usually
418    the signal handler doesn't save this register, so we have to
419    access the sigcontext structure via an offset from the signal handler
420    frame.
421    The following constants were determined by experimentation on AIX 3.2.  */
422 #define SIG_FRAME_PC_OFFSET 96
423 #define SIG_FRAME_LR_OFFSET 108
424 #define SIG_FRAME_FP_OFFSET 284
425
426 /* Default offset from SP where the LR is stored */
427 #define DEFAULT_LR_SAVE 8
428
429 /* Return saved PC from a frame */
430 #define FRAME_SAVED_PC(FRAME)  frame_saved_pc (FRAME)
431
432 extern unsigned long frame_saved_pc PARAMS ((struct frame_info *));
433
434 #define FRAME_ARGS_ADDRESS(FI)  \
435   (((struct frame_info*)(FI))->initial_sp ?             \
436         ((struct frame_info*)(FI))->initial_sp :        \
437         frame_initial_stack_address (FI))
438 extern CORE_ADDR frame_initial_stack_address PARAMS ((struct frame_info *));
439
440 #define FRAME_LOCALS_ADDRESS(FI)        FRAME_ARGS_ADDRESS(FI)
441
442
443 /* Set VAL to the number of args passed to frame described by FI.
444    Can set VAL to -1, meaning no way to tell.  */
445
446 /* We can't tell how many args there are
447    now that the C compiler delays popping them.  */
448
449 #define FRAME_NUM_ARGS(val,fi) (val = -1)
450
451 /* Return number of bytes at start of arglist that are not really args.  */
452
453 #define FRAME_ARGS_SKIP 8       /* Not sure on this. FIXMEmgo */
454
455 /* Put here the code to store, into a struct frame_saved_regs,
456    the addresses of the saved registers of frame described by FRAME_INFO.
457    This includes special registers such as pc and fp saved in special
458    ways in the stack frame.  sp is even more special:
459    the address we return for it IS the sp for the next frame.  */
460 /* In the following implementation for RS6000, we did *not* save sp. I am
461    not sure if it will be needed. The following macro takes care of gpr's
462    and fpr's only. */
463
464 #define FRAME_FIND_SAVED_REGS(FRAME_INFO, FRAME_SAVED_REGS)             \
465 {                                                                       \
466   int ii;                                                               \
467   CORE_ADDR frame_addr, func_start;                                     \
468   struct rs6000_framedata fdata;                                        \
469                                                                         \
470   /* find the start of the function and collect info about its frame. */ \
471                                                                         \
472   func_start = get_pc_function_start ((FRAME_INFO)->pc) + FUNCTION_START_OFFSET; \
473   (void) skip_prologue (func_start, &fdata);                            \
474   memset (&(FRAME_SAVED_REGS), '\0', sizeof (FRAME_SAVED_REGS));        \
475                                                                         \
476   /* if there were any saved registers, figure out parent's stack pointer. */ \
477   /* the following is true only if the frame doesn't have a call to alloca(), \
478       FIXME. */                                                         \
479   if (fdata.saved_fpr == 0 && fdata.saved_gpr == 0 &&                   \
480       fdata.lr_offset == 0 && fdata.cr_offset == 0) {                   \
481     frame_addr = 0;                                                     \
482                                                                         \
483   } else if ((FRAME_INFO)->prev && (FRAME_INFO)->prev->frame) {         \
484     frame_addr = (FRAME_INFO)->prev->frame;                             \
485                                                                         \
486   } else {                                                              \
487     frame_addr = read_memory_integer ((FRAME_INFO)->frame, 4);          \
488   }                                                                     \
489                                                                         \
490   /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. All \
491      fpr's from saved_fpr to f31 are saved. */                          \
492   if (fdata.saved_fpr >= 0) {                                           \
493     int fpr_offset = frame_addr + fdata.fpr_offset;                     \
494     for (ii = fdata.saved_fpr; ii < 32; ii++) {                         \
495       (FRAME_SAVED_REGS).regs [FP0_REGNUM + ii] = fpr_offset;           \
496       fpr_offset += 8;                                                  \
497     }                                                                   \
498   }                                                                     \
499                                                                         \
500   /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. All \
501      gpr's from saved_gpr to r31 are saved. */                          \
502   if (fdata.saved_gpr >= 0) {                                           \
503     int gpr_offset = frame_addr + fdata.gpr_offset;                     \
504     for (ii = fdata.saved_gpr; ii < 32; ii++) {                         \
505       (FRAME_SAVED_REGS).regs [ii] = gpr_offset;                        \
506       gpr_offset += 4;                                                  \
507     }                                                                   \
508   }                                                                     \
509                                                                         \
510   /* If != 0, fdata.cr_offset is the offset from the frame that holds   \
511      the CR */                                                          \
512   if (fdata.cr_offset != 0) {                                           \
513     (FRAME_SAVED_REGS).regs [CR_REGNUM] = frame_addr + fdata.cr_offset; \
514   }                                                                     \
515                                                                         \
516   /* If != 0, fdata.cr_offset is the offset from the frame that holds   \
517      the LR */                                                          \
518   if (fdata.lr_offset != 0) {                                           \
519     (FRAME_SAVED_REGS).regs [LR_REGNUM] = frame_addr + fdata.lr_offset; \
520   }                                                                     \
521 }
522
523 \f
524 /* Things needed for making the inferior call functions.  */
525
526 /* Push an empty stack frame, to record the current PC, etc.  */
527 /* Change these names into rs6k_{push, pop}_frame(). FIXMEmgo. */
528
529 #define PUSH_DUMMY_FRAME        push_dummy_frame ()
530 extern void push_dummy_frame PARAMS ((void));
531
532 /* Discard from the stack the innermost frame, 
533    restoring all saved registers.  */
534
535 #define POP_FRAME       pop_frame ()
536 extern void pop_frame PARAMS ((void));
537
538 /* This sequence of words is the instructions:
539
540         mflr    r0              // 0x7c0802a6
541                                 // save fpr's
542         stfd    r?, num(r1)     // 0xd8010000 there should be 32 of this??
543                                 // save gpr's
544         stm     r0, num(r1)     // 0xbc010000
545         stu     r1, num(r1)     // 0x94210000
546
547         // the function we want to branch might be in a different load 
548         // segment. reset the toc register. Note that the actual toc address
549         // will be fix by fix_call_dummy () along with function address.
550
551         st      r2, 0x14(r1)    // 0x90410014 save toc register
552         liu     r2, 0x1234      // 0x3c401234 reset a new toc value 0x12345678
553         oril    r2, r2,0x5678   // 0x60425678   
554
555                                 // load absolute address 0x12345678 to r0
556         liu     r0, 0x1234      // 0x3c001234
557         oril    r0, r0,0x5678   // 0x60005678
558         mtctr   r0              // 0x7c0903a6 ctr <- r0
559         bctrl                   // 0x4e800421 jump subroutine 0x12345678 (%ctr)
560         cror    0xf, 0xf, 0xf   // 0x4def7b82
561         brpt                    // 0x7d821008, breakpoint
562         cror    0xf, 0xf, 0xf   // 0x4def7b82 (for 8 byte alignment)
563
564
565   We actually start executing by saving the toc register first, since the pushing 
566   of the registers is done by PUSH_DUMMY_FRAME.  If this were real code,
567   the arguments for the function called by the `bctrl' would be pushed
568   between the `stu' and the `bctrl', and we could allow it to execute through.
569   But the arguments have to be pushed by GDB after the PUSH_DUMMY_FRAME is done,
570   and we cannot allow to push the registers again.
571 */
572         
573 #define CALL_DUMMY {0x7c0802a6, 0xd8010000, 0xbc010000, 0x94210000, \
574                     0x90410014, 0x3c401234, 0x60425678,             \
575                     0x3c001234, 0x60005678, 0x7c0903a6, 0x4e800421, \
576                     0x4def7b82, 0x7d821008, 0x4def7b82 }
577
578
579 /* keep this as multiple of 8 (%sp requires 8 byte alignment) */
580 #define CALL_DUMMY_LENGTH 56
581
582 #define CALL_DUMMY_START_OFFSET 16
583
584 /* Insert the specified number of args and function address into a
585    call sequence of the above form stored at DUMMYNAME.  */
586
587 #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
588   rs6000_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
589 extern void rs6000_fix_call_dummy PARAMS ((char *, CORE_ADDR, CORE_ADDR,
590                                            int, struct value **,
591                                            struct type *, int));
592
593 /* Hook in rs6000-tdep.c for determining the TOC address when
594    calling functions in the inferior.  */
595 extern CORE_ADDR (*find_toc_address_hook) PARAMS ((CORE_ADDR));
596
597 /* xcoffread.c provides a function to determine the TOC offset
598    for a given object file.
599    It is used under native AIX configurations for determining the
600    TOC address when calling functions in the inferior.  */
601 #ifdef __STDC__
602 struct objfile;
603 #endif
604 extern CORE_ADDR get_toc_offset PARAMS ((struct objfile *));
605
606 /* Usually a function pointer's representation is simply the address
607    of the function. On the RS/6000 however, a function pointer is
608    represented by a pointer to a TOC entry. This TOC entry contains
609    three words, the first word is the address of the function, the
610    second word is the TOC pointer (r2), and the third word is the
611    static chain value.  Throughout GDB it is currently assumed that a
612    function pointer contains the address of the function, which is not
613    easy to fix.  In addition, the conversion of a function address to
614    a function pointer would require allocation of a TOC entry in the
615    inferior's memory space, with all its drawbacks.  To be able to
616    call C++ virtual methods in the inferior (which are called via
617    function pointers), find_function_addr uses this macro to get the
618    function address from a function pointer.  */
619
620 #define CONVERT_FROM_FUNC_PTR_ADDR(ADDR) \
621   (is_magic_function_pointer (ADDR) ? read_memory_integer (ADDR, 4) : (ADDR))
622 extern int is_magic_function_pointer PARAMS ((CORE_ADDR));
623
624 /* Flag for machine-specific stuff in shared files.  FIXME */
625 #define IBM6000_TARGET
626
627 /* RS6000/AIX does not support PT_STEP.  Has to be simulated.  */
628
629 #define NO_SINGLE_STEP
630
631 /* If the current gcc for for this target does not produce correct debugging
632    information for float parameters, both prototyped and unprototyped, then
633    define this macro.  This forces gdb to  always assume that floats are
634    passed as doubles and then converted in the callee.
635
636    For the PowerPC, it appears that the debug info marks the parameters as
637    floats regardless of whether the function is prototyped, but the actual
638    values are always passed in as doubles.  Thus by setting this to 1, both
639    types of calls will work. */
640
641 #define COERCE_FLOAT_TO_DOUBLE 1
This page took 0.069886 seconds and 4 git commands to generate.