Remove regcache_cooked_read
[external/binutils.git] / gdb / rs6000-aix-tdep.c
1 /* Native support code for PPC AIX, for GDB the GNU debugger.
2
3    Copyright (C) 2006-2018 Free Software Foundation, Inc.
4
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "osabi.h"
24 #include "regcache.h"
25 #include "regset.h"
26 #include "gdbtypes.h"
27 #include "gdbcore.h"
28 #include "target.h"
29 #include "value.h"
30 #include "infcall.h"
31 #include "objfiles.h"
32 #include "breakpoint.h"
33 #include "rs6000-tdep.h"
34 #include "ppc-tdep.h"
35 #include "rs6000-aix-tdep.h"
36 #include "xcoffread.h"
37 #include "solib.h"
38 #include "solib-aix.h"
39 #include "target-float.h"
40 #include "xml-utils.h"
41
42 /* If the kernel has to deliver a signal, it pushes a sigcontext
43    structure on the stack and then calls the signal handler, passing
44    the address of the sigcontext in an argument register.  Usually
45    the signal handler doesn't save this register, so we have to
46    access the sigcontext structure via an offset from the signal handler
47    frame.
48    The following constants were determined by experimentation on AIX 3.2.  */
49 #define SIG_FRAME_PC_OFFSET 96
50 #define SIG_FRAME_LR_OFFSET 108
51 #define SIG_FRAME_FP_OFFSET 284
52
53
54 /* Core file support.  */
55
56 static struct ppc_reg_offsets rs6000_aix32_reg_offsets =
57 {
58   /* General-purpose registers.  */
59   208, /* r0_offset */
60   4,  /* gpr_size */
61   4,  /* xr_size */
62   24, /* pc_offset */
63   28, /* ps_offset */
64   32, /* cr_offset */
65   36, /* lr_offset */
66   40, /* ctr_offset */
67   44, /* xer_offset */
68   48, /* mq_offset */
69
70   /* Floating-point registers.  */
71   336, /* f0_offset */
72   56, /* fpscr_offset */
73   4  /* fpscr_size */
74 };
75
76 static struct ppc_reg_offsets rs6000_aix64_reg_offsets =
77 {
78   /* General-purpose registers.  */
79   0, /* r0_offset */
80   8,  /* gpr_size */
81   4,  /* xr_size */
82   264, /* pc_offset */
83   256, /* ps_offset */
84   288, /* cr_offset */
85   272, /* lr_offset */
86   280, /* ctr_offset */
87   292, /* xer_offset */
88   -1, /* mq_offset */
89
90   /* Floating-point registers.  */
91   312, /* f0_offset */
92   296, /* fpscr_offset */
93   4  /* fpscr_size */
94 };
95
96
97 /* Supply register REGNUM in the general-purpose register set REGSET
98    from the buffer specified by GREGS and LEN to register cache
99    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
100
101 static void
102 rs6000_aix_supply_regset (const struct regset *regset,
103                           struct regcache *regcache, int regnum,
104                           const void *gregs, size_t len)
105 {
106   ppc_supply_gregset (regset, regcache, regnum, gregs, len);
107   ppc_supply_fpregset (regset, regcache, regnum, gregs, len);
108 }
109
110 /* Collect register REGNUM in the general-purpose register set
111    REGSET, from register cache REGCACHE into the buffer specified by
112    GREGS and LEN.  If REGNUM is -1, do this for all registers in
113    REGSET.  */
114
115 static void
116 rs6000_aix_collect_regset (const struct regset *regset,
117                            const struct regcache *regcache, int regnum,
118                            void *gregs, size_t len)
119 {
120   ppc_collect_gregset (regset, regcache, regnum, gregs, len);
121   ppc_collect_fpregset (regset, regcache, regnum, gregs, len);
122 }
123
124 /* AIX register set.  */
125
126 static const struct regset rs6000_aix32_regset =
127 {
128   &rs6000_aix32_reg_offsets,
129   rs6000_aix_supply_regset,
130   rs6000_aix_collect_regset,
131 };
132
133 static const struct regset rs6000_aix64_regset =
134 {
135   &rs6000_aix64_reg_offsets,
136   rs6000_aix_supply_regset,
137   rs6000_aix_collect_regset,
138 };
139
140 /* Iterate over core file register note sections.  */
141
142 static void
143 rs6000_aix_iterate_over_regset_sections (struct gdbarch *gdbarch,
144                                          iterate_over_regset_sections_cb *cb,
145                                          void *cb_data,
146                                          const struct regcache *regcache)
147 {
148   if (gdbarch_tdep (gdbarch)->wordsize == 4)
149     cb (".reg", 592, &rs6000_aix32_regset, NULL, cb_data);
150   else
151     cb (".reg", 576, &rs6000_aix64_regset, NULL, cb_data);
152 }
153
154
155 /* Pass the arguments in either registers, or in the stack.  In RS/6000,
156    the first eight words of the argument list (that might be less than
157    eight parameters if some parameters occupy more than one word) are
158    passed in r3..r10 registers.  Float and double parameters are
159    passed in fpr's, in addition to that.  Rest of the parameters if any
160    are passed in user stack.  There might be cases in which half of the
161    parameter is copied into registers, the other half is pushed into
162    stack.
163
164    Stack must be aligned on 64-bit boundaries when synthesizing
165    function calls.
166
167    If the function is returning a structure, then the return address is passed
168    in r3, then the first 7 words of the parameters can be passed in registers,
169    starting from r4.  */
170
171 static CORE_ADDR
172 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
173                         struct regcache *regcache, CORE_ADDR bp_addr,
174                         int nargs, struct value **args, CORE_ADDR sp,
175                         int struct_return, CORE_ADDR struct_addr)
176 {
177   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
178   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
179   int ii;
180   int len = 0;
181   int argno;                    /* current argument number */
182   int argbytes;                 /* current argument byte */
183   gdb_byte tmp_buffer[50];
184   int f_argno = 0;              /* current floating point argno */
185   int wordsize = gdbarch_tdep (gdbarch)->wordsize;
186   CORE_ADDR func_addr = find_function_addr (function, NULL);
187
188   struct value *arg = 0;
189   struct type *type;
190
191   ULONGEST saved_sp;
192
193   /* The calling convention this function implements assumes the
194      processor has floating-point registers.  We shouldn't be using it
195      on PPC variants that lack them.  */
196   gdb_assert (ppc_floating_point_unit_p (gdbarch));
197
198   /* The first eight words of ther arguments are passed in registers.
199      Copy them appropriately.  */
200   ii = 0;
201
202   /* If the function is returning a `struct', then the first word
203      (which will be passed in r3) is used for struct return address.
204      In that case we should advance one word and start from r4
205      register to copy parameters.  */
206   if (struct_return)
207     {
208       regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
209                                    struct_addr);
210       ii++;
211     }
212
213 /* effectively indirect call... gcc does...
214
215    return_val example( float, int);
216
217    eabi: 
218    float in fp0, int in r3
219    offset of stack on overflow 8/16
220    for varargs, must go by type.
221    power open:
222    float in r3&r4, int in r5
223    offset of stack on overflow different 
224    both: 
225    return in r3 or f0.  If no float, must study how gcc emulates floats;
226    pay attention to arg promotion.
227    User may have to cast\args to handle promotion correctly 
228    since gdb won't know if prototype supplied or not.  */
229
230   for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
231     {
232       int reg_size = register_size (gdbarch, ii + 3);
233
234       arg = args[argno];
235       type = check_typedef (value_type (arg));
236       len = TYPE_LENGTH (type);
237
238       if (TYPE_CODE (type) == TYPE_CODE_FLT)
239         {
240           /* Floating point arguments are passed in fpr's, as well as gpr's.
241              There are 13 fpr's reserved for passing parameters.  At this point
242              there is no way we would run out of them.
243
244              Always store the floating point value using the register's
245              floating-point format.  */
246           const int fp_regnum = tdep->ppc_fp0_regnum + 1 + f_argno;
247           gdb_byte reg_val[PPC_MAX_REGISTER_SIZE];
248           struct type *reg_type = register_type (gdbarch, fp_regnum);
249
250           gdb_assert (len <= 8);
251
252           target_float_convert (value_contents (arg), type, reg_val, reg_type);
253           regcache_cooked_write (regcache, fp_regnum, reg_val);
254           ++f_argno;
255         }
256
257       if (len > reg_size)
258         {
259
260           /* Argument takes more than one register.  */
261           while (argbytes < len)
262             {
263               gdb_byte word[PPC_MAX_REGISTER_SIZE];
264               memset (word, 0, reg_size);
265               memcpy (word,
266                       ((char *) value_contents (arg)) + argbytes,
267                       (len - argbytes) > reg_size
268                         ? reg_size : len - argbytes);
269               regcache_cooked_write (regcache,
270                                     tdep->ppc_gp0_regnum + 3 + ii,
271                                     word);
272               ++ii, argbytes += reg_size;
273
274               if (ii >= 8)
275                 goto ran_out_of_registers_for_arguments;
276             }
277           argbytes = 0;
278           --ii;
279         }
280       else
281         {
282           /* Argument can fit in one register.  No problem.  */
283           gdb_byte word[PPC_MAX_REGISTER_SIZE];
284
285           memset (word, 0, reg_size);
286           memcpy (word, value_contents (arg), len);
287           regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
288         }
289       ++argno;
290     }
291
292 ran_out_of_registers_for_arguments:
293
294   regcache_cooked_read_unsigned (regcache,
295                                  gdbarch_sp_regnum (gdbarch),
296                                  &saved_sp);
297
298   /* Location for 8 parameters are always reserved.  */
299   sp -= wordsize * 8;
300
301   /* Another six words for back chain, TOC register, link register, etc.  */
302   sp -= wordsize * 6;
303
304   /* Stack pointer must be quadword aligned.  */
305   sp &= -16;
306
307   /* If there are more arguments, allocate space for them in 
308      the stack, then push them starting from the ninth one.  */
309
310   if ((argno < nargs) || argbytes)
311     {
312       int space = 0, jj;
313
314       if (argbytes)
315         {
316           space += ((len - argbytes + 3) & -4);
317           jj = argno + 1;
318         }
319       else
320         jj = argno;
321
322       for (; jj < nargs; ++jj)
323         {
324           struct value *val = args[jj];
325           space += ((TYPE_LENGTH (value_type (val))) + 3) & -4;
326         }
327
328       /* Add location required for the rest of the parameters.  */
329       space = (space + 15) & -16;
330       sp -= space;
331
332       /* This is another instance we need to be concerned about
333          securing our stack space.  If we write anything underneath %sp
334          (r1), we might conflict with the kernel who thinks he is free
335          to use this area.  So, update %sp first before doing anything
336          else.  */
337
338       regcache_raw_write_signed (regcache,
339                                  gdbarch_sp_regnum (gdbarch), sp);
340
341       /* If the last argument copied into the registers didn't fit there 
342          completely, push the rest of it into stack.  */
343
344       if (argbytes)
345         {
346           write_memory (sp + 24 + (ii * 4),
347                         value_contents (arg) + argbytes,
348                         len - argbytes);
349           ++argno;
350           ii += ((len - argbytes + 3) & -4) / 4;
351         }
352
353       /* Push the rest of the arguments into stack.  */
354       for (; argno < nargs; ++argno)
355         {
356
357           arg = args[argno];
358           type = check_typedef (value_type (arg));
359           len = TYPE_LENGTH (type);
360
361
362           /* Float types should be passed in fpr's, as well as in the
363              stack.  */
364           if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
365             {
366
367               gdb_assert (len <= 8);
368
369               regcache_cooked_write (regcache,
370                                      tdep->ppc_fp0_regnum + 1 + f_argno,
371                                      value_contents (arg));
372               ++f_argno;
373             }
374
375           write_memory (sp + 24 + (ii * 4), value_contents (arg), len);
376           ii += ((len + 3) & -4) / 4;
377         }
378     }
379
380   /* Set the stack pointer.  According to the ABI, the SP is meant to
381      be set _before_ the corresponding stack space is used.  On AIX,
382      this even applies when the target has been completely stopped!
383      Not doing this can lead to conflicts with the kernel which thinks
384      that it still has control over this not-yet-allocated stack
385      region.  */
386   regcache_raw_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
387
388   /* Set back chain properly.  */
389   store_unsigned_integer (tmp_buffer, wordsize, byte_order, saved_sp);
390   write_memory (sp, tmp_buffer, wordsize);
391
392   /* Point the inferior function call's return address at the dummy's
393      breakpoint.  */
394   regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
395
396   /* Set the TOC register value.  */
397   regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum,
398                              solib_aix_get_toc_value (func_addr));
399
400   target_store_registers (regcache, -1);
401   return sp;
402 }
403
404 static enum return_value_convention
405 rs6000_return_value (struct gdbarch *gdbarch, struct value *function,
406                      struct type *valtype, struct regcache *regcache,
407                      gdb_byte *readbuf, const gdb_byte *writebuf)
408 {
409   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
410   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
411
412   /* The calling convention this function implements assumes the
413      processor has floating-point registers.  We shouldn't be using it
414      on PowerPC variants that lack them.  */
415   gdb_assert (ppc_floating_point_unit_p (gdbarch));
416
417   /* AltiVec extension: Functions that declare a vector data type as a
418      return value place that return value in VR2.  */
419   if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
420       && TYPE_LENGTH (valtype) == 16)
421     {
422       if (readbuf)
423         regcache->cooked_read (tdep->ppc_vr0_regnum + 2, readbuf);
424       if (writebuf)
425         regcache_cooked_write (regcache, tdep->ppc_vr0_regnum + 2, writebuf);
426
427       return RETURN_VALUE_REGISTER_CONVENTION;
428     }
429
430   /* If the called subprogram returns an aggregate, there exists an
431      implicit first argument, whose value is the address of a caller-
432      allocated buffer into which the callee is assumed to store its
433      return value.  All explicit parameters are appropriately
434      relabeled.  */
435   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
436       || TYPE_CODE (valtype) == TYPE_CODE_UNION
437       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
438     return RETURN_VALUE_STRUCT_CONVENTION;
439
440   /* Scalar floating-point values are returned in FPR1 for float or
441      double, and in FPR1:FPR2 for quadword precision.  Fortran
442      complex*8 and complex*16 are returned in FPR1:FPR2, and
443      complex*32 is returned in FPR1:FPR4.  */
444   if (TYPE_CODE (valtype) == TYPE_CODE_FLT
445       && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8))
446     {
447       struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
448       gdb_byte regval[8];
449
450       /* FIXME: kettenis/2007-01-01: Add support for quadword
451          precision and complex.  */
452
453       if (readbuf)
454         {
455           regcache->cooked_read (tdep->ppc_fp0_regnum + 1, regval);
456           target_float_convert (regval, regtype, readbuf, valtype);
457         }
458       if (writebuf)
459         {
460           target_float_convert (writebuf, valtype, regval, regtype);
461           regcache_cooked_write (regcache, tdep->ppc_fp0_regnum + 1, regval);
462         }
463
464       return RETURN_VALUE_REGISTER_CONVENTION;
465   }
466
467   /* Values of the types int, long, short, pointer, and char (length
468      is less than or equal to four bytes), as well as bit values of
469      lengths less than or equal to 32 bits, must be returned right
470      justified in GPR3 with signed values sign extended and unsigned
471      values zero extended, as necessary.  */
472   if (TYPE_LENGTH (valtype) <= tdep->wordsize)
473     {
474       if (readbuf)
475         {
476           ULONGEST regval;
477
478           /* For reading we don't have to worry about sign extension.  */
479           regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
480                                          &regval);
481           store_unsigned_integer (readbuf, TYPE_LENGTH (valtype), byte_order,
482                                   regval);
483         }
484       if (writebuf)
485         {
486           /* For writing, use unpack_long since that should handle any
487              required sign extension.  */
488           regcache_cooked_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
489                                           unpack_long (valtype, writebuf));
490         }
491
492       return RETURN_VALUE_REGISTER_CONVENTION;
493     }
494
495   /* Eight-byte non-floating-point scalar values must be returned in
496      GPR3:GPR4.  */
497
498   if (TYPE_LENGTH (valtype) == 8)
499     {
500       gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT);
501       gdb_assert (tdep->wordsize == 4);
502
503       if (readbuf)
504         {
505           gdb_byte regval[8];
506
507           regcache->cooked_read (tdep->ppc_gp0_regnum + 3, regval);
508           regcache->cooked_read (tdep->ppc_gp0_regnum + 4, regval + 4);
509           memcpy (readbuf, regval, 8);
510         }
511       if (writebuf)
512         {
513           regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3, writebuf);
514           regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 4,
515                                  writebuf + 4);
516         }
517
518       return RETURN_VALUE_REGISTER_CONVENTION;
519     }
520
521   return RETURN_VALUE_STRUCT_CONVENTION;
522 }
523
524 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
525
526    Usually a function pointer's representation is simply the address
527    of the function.  On the RS/6000 however, a function pointer is
528    represented by a pointer to an OPD entry.  This OPD entry contains
529    three words, the first word is the address of the function, the
530    second word is the TOC pointer (r2), and the third word is the
531    static chain value.  Throughout GDB it is currently assumed that a
532    function pointer contains the address of the function, which is not
533    easy to fix.  In addition, the conversion of a function address to
534    a function pointer would require allocation of an OPD entry in the
535    inferior's memory space, with all its drawbacks.  To be able to
536    call C++ virtual methods in the inferior (which are called via
537    function pointers), find_function_addr uses this function to get the
538    function address from a function pointer.  */
539
540 /* Return real function address if ADDR (a function pointer) is in the data
541    space and is therefore a special function pointer.  */
542
543 static CORE_ADDR
544 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
545                                    CORE_ADDR addr,
546                                    struct target_ops *targ)
547 {
548   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
549   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
550   struct obj_section *s;
551
552   s = find_pc_section (addr);
553
554   /* Normally, functions live inside a section that is executable.
555      So, if ADDR points to a non-executable section, then treat it
556      as a function descriptor and return the target address iff
557      the target address itself points to a section that is executable.  */
558   if (s && (s->the_bfd_section->flags & SEC_CODE) == 0)
559     {
560       CORE_ADDR pc = 0;
561       struct obj_section *pc_section;
562
563       TRY
564         {
565           pc = read_memory_unsigned_integer (addr, tdep->wordsize, byte_order);
566         }
567       CATCH (e, RETURN_MASK_ERROR)
568         {
569           /* An error occured during reading.  Probably a memory error
570              due to the section not being loaded yet.  This address
571              cannot be a function descriptor.  */
572           return addr;
573         }
574       END_CATCH
575
576       pc_section = find_pc_section (pc);
577
578       if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
579         return pc;
580     }
581
582   return addr;
583 }
584
585
586 /* Calculate the destination of a branch/jump.  Return -1 if not a branch.  */
587
588 static CORE_ADDR
589 branch_dest (struct regcache *regcache, int opcode, int instr,
590              CORE_ADDR pc, CORE_ADDR safety)
591 {
592   struct gdbarch *gdbarch = regcache->arch ();
593   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
594   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
595   CORE_ADDR dest;
596   int immediate;
597   int absolute;
598   int ext_op;
599
600   absolute = (int) ((instr >> 1) & 1);
601
602   switch (opcode)
603     {
604     case 18:
605       immediate = ((instr & ~3) << 6) >> 6;     /* br unconditional */
606       if (absolute)
607         dest = immediate;
608       else
609         dest = pc + immediate;
610       break;
611
612     case 16:
613       immediate = ((instr & ~3) << 16) >> 16;   /* br conditional */
614       if (absolute)
615         dest = immediate;
616       else
617         dest = pc + immediate;
618       break;
619
620     case 19:
621       ext_op = (instr >> 1) & 0x3ff;
622
623       if (ext_op == 16)         /* br conditional register */
624         {
625           dest = regcache_raw_get_unsigned (regcache, tdep->ppc_lr_regnum) & ~3;
626
627           /* If we are about to return from a signal handler, dest is
628              something like 0x3c90.  The current frame is a signal handler
629              caller frame, upon completion of the sigreturn system call
630              execution will return to the saved PC in the frame.  */
631           if (dest < AIX_TEXT_SEGMENT_BASE)
632             {
633               struct frame_info *frame = get_current_frame ();
634
635               dest = read_memory_unsigned_integer
636                 (get_frame_base (frame) + SIG_FRAME_PC_OFFSET,
637                  tdep->wordsize, byte_order);
638             }
639         }
640
641       else if (ext_op == 528)   /* br cond to count reg */
642         {
643           dest = regcache_raw_get_unsigned (regcache,
644                                             tdep->ppc_ctr_regnum) & ~3;
645
646           /* If we are about to execute a system call, dest is something
647              like 0x22fc or 0x3b00.  Upon completion the system call
648              will return to the address in the link register.  */
649           if (dest < AIX_TEXT_SEGMENT_BASE)
650             dest = regcache_raw_get_unsigned (regcache,
651                                               tdep->ppc_lr_regnum) & ~3;
652         }
653       else
654         return -1;
655       break;
656
657     default:
658       return -1;
659     }
660   return (dest < AIX_TEXT_SEGMENT_BASE) ? safety : dest;
661 }
662
663 /* AIX does not support PT_STEP.  Simulate it.  */
664
665 static std::vector<CORE_ADDR>
666 rs6000_software_single_step (struct regcache *regcache)
667 {
668   struct gdbarch *gdbarch = regcache->arch ();
669   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
670   int ii, insn;
671   CORE_ADDR loc;
672   CORE_ADDR breaks[2];
673   int opcode;
674
675   loc = regcache_read_pc (regcache);
676
677   insn = read_memory_integer (loc, 4, byte_order);
678
679   std::vector<CORE_ADDR> next_pcs = ppc_deal_with_atomic_sequence (regcache);
680   if (!next_pcs.empty ())
681     return next_pcs;
682   
683   breaks[0] = loc + PPC_INSN_SIZE;
684   opcode = insn >> 26;
685   breaks[1] = branch_dest (regcache, opcode, insn, loc, breaks[0]);
686
687   /* Don't put two breakpoints on the same address.  */
688   if (breaks[1] == breaks[0])
689     breaks[1] = -1;
690
691   for (ii = 0; ii < 2; ++ii)
692     {
693       /* ignore invalid breakpoint.  */
694       if (breaks[ii] == -1)
695         continue;
696
697       next_pcs.push_back (breaks[ii]);
698     }
699
700   errno = 0;                    /* FIXME, don't ignore errors!  */
701   /* What errors?  {read,write}_memory call error().  */
702   return next_pcs;
703 }
704
705 /* Implement the "auto_wide_charset" gdbarch method for this platform.  */
706
707 static const char *
708 rs6000_aix_auto_wide_charset (void)
709 {
710   return "UTF-16";
711 }
712
713 /* Implement an osabi sniffer for RS6000/AIX.
714
715    This function assumes that ABFD's flavour is XCOFF.  In other words,
716    it should be registered as a sniffer for bfd_target_xcoff_flavour
717    objfiles only.  A failed assertion will be raised if this condition
718    is not met.  */
719
720 static enum gdb_osabi
721 rs6000_aix_osabi_sniffer (bfd *abfd)
722 {
723   gdb_assert (bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
724
725   /* The only noticeable difference between Lynx178 XCOFF files and
726      AIX XCOFF files comes from the fact that there are no shared
727      libraries on Lynx178.  On AIX, we are betting that an executable
728      linked with no shared library will never exist.  */
729   if (xcoff_get_n_import_files (abfd) <= 0)
730     return GDB_OSABI_UNKNOWN;
731
732   return GDB_OSABI_AIX;
733 }
734
735 /* A structure encoding the offset and size of a field within
736    a struct.  */
737
738 struct field_info
739 {
740   int offset;
741   int size;
742 };
743
744 /* A structure describing the layout of all the fields of interest
745    in AIX's struct ld_info.  Each field in this struct corresponds
746    to the field of the same name in struct ld_info.  */
747
748 struct ld_info_desc
749 {
750   struct field_info ldinfo_next;
751   struct field_info ldinfo_fd;
752   struct field_info ldinfo_textorg;
753   struct field_info ldinfo_textsize;
754   struct field_info ldinfo_dataorg;
755   struct field_info ldinfo_datasize;
756   struct field_info ldinfo_filename;
757 };
758
759 /* The following data has been generated by compiling and running
760    the following program on AIX 5.3.  */
761
762 #if 0
763 #include <stddef.h>
764 #include <stdio.h>
765 #define __LDINFO_PTRACE32__
766 #define __LDINFO_PTRACE64__
767 #include <sys/ldr.h>
768
769 #define pinfo(type,member)                  \
770   {                                         \
771     struct type ldi = {0};                  \
772                                             \
773     printf ("  {%d, %d},\t/* %s */\n",      \
774             offsetof (struct type, member), \
775             sizeof (ldi.member),            \
776             #member);                       \
777   }                                         \
778   while (0)
779
780 int
781 main (void)
782 {
783   printf ("static const struct ld_info_desc ld_info32_desc =\n{\n");
784   pinfo (__ld_info32, ldinfo_next);
785   pinfo (__ld_info32, ldinfo_fd);
786   pinfo (__ld_info32, ldinfo_textorg);
787   pinfo (__ld_info32, ldinfo_textsize);
788   pinfo (__ld_info32, ldinfo_dataorg);
789   pinfo (__ld_info32, ldinfo_datasize);
790   pinfo (__ld_info32, ldinfo_filename);
791   printf ("};\n");
792
793   printf ("\n");
794
795   printf ("static const struct ld_info_desc ld_info64_desc =\n{\n");
796   pinfo (__ld_info64, ldinfo_next);
797   pinfo (__ld_info64, ldinfo_fd);
798   pinfo (__ld_info64, ldinfo_textorg);
799   pinfo (__ld_info64, ldinfo_textsize);
800   pinfo (__ld_info64, ldinfo_dataorg);
801   pinfo (__ld_info64, ldinfo_datasize);
802   pinfo (__ld_info64, ldinfo_filename);
803   printf ("};\n");
804
805   return 0;
806 }
807 #endif /* 0 */
808
809 /* Layout of the 32bit version of struct ld_info.  */
810
811 static const struct ld_info_desc ld_info32_desc =
812 {
813   {0, 4},       /* ldinfo_next */
814   {4, 4},       /* ldinfo_fd */
815   {8, 4},       /* ldinfo_textorg */
816   {12, 4},      /* ldinfo_textsize */
817   {16, 4},      /* ldinfo_dataorg */
818   {20, 4},      /* ldinfo_datasize */
819   {24, 2},      /* ldinfo_filename */
820 };
821
822 /* Layout of the 64bit version of struct ld_info.  */
823
824 static const struct ld_info_desc ld_info64_desc =
825 {
826   {0, 4},       /* ldinfo_next */
827   {8, 4},       /* ldinfo_fd */
828   {16, 8},      /* ldinfo_textorg */
829   {24, 8},      /* ldinfo_textsize */
830   {32, 8},      /* ldinfo_dataorg */
831   {40, 8},      /* ldinfo_datasize */
832   {48, 2},      /* ldinfo_filename */
833 };
834
835 /* A structured representation of one entry read from the ld_info
836    binary data provided by the AIX loader.  */
837
838 struct ld_info
839 {
840   ULONGEST next;
841   int fd;
842   CORE_ADDR textorg;
843   ULONGEST textsize;
844   CORE_ADDR dataorg;
845   ULONGEST datasize;
846   char *filename;
847   char *member_name;
848 };
849
850 /* Return a struct ld_info object corresponding to the entry at
851    LDI_BUF.
852
853    Note that the filename and member_name strings still point
854    to the data in LDI_BUF.  So LDI_BUF must not be deallocated
855    while the struct ld_info object returned is in use.  */
856
857 static struct ld_info
858 rs6000_aix_extract_ld_info (struct gdbarch *gdbarch,
859                             const gdb_byte *ldi_buf)
860 {
861   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
862   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
863   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
864   const struct ld_info_desc desc
865     = tdep->wordsize == 8 ? ld_info64_desc : ld_info32_desc;
866   struct ld_info info;
867
868   info.next = extract_unsigned_integer (ldi_buf + desc.ldinfo_next.offset,
869                                         desc.ldinfo_next.size,
870                                         byte_order);
871   info.fd = extract_signed_integer (ldi_buf + desc.ldinfo_fd.offset,
872                                     desc.ldinfo_fd.size,
873                                     byte_order);
874   info.textorg = extract_typed_address (ldi_buf + desc.ldinfo_textorg.offset,
875                                         ptr_type);
876   info.textsize
877     = extract_unsigned_integer (ldi_buf + desc.ldinfo_textsize.offset,
878                                 desc.ldinfo_textsize.size,
879                                 byte_order);
880   info.dataorg = extract_typed_address (ldi_buf + desc.ldinfo_dataorg.offset,
881                                         ptr_type);
882   info.datasize
883     = extract_unsigned_integer (ldi_buf + desc.ldinfo_datasize.offset,
884                                 desc.ldinfo_datasize.size,
885                                 byte_order);
886   info.filename = (char *) ldi_buf + desc.ldinfo_filename.offset;
887   info.member_name = info.filename + strlen (info.filename) + 1;
888
889   return info;
890 }
891
892 /* Append to OBJSTACK an XML string description of the shared library
893    corresponding to LDI, following the TARGET_OBJECT_LIBRARIES_AIX
894    format.  */
895
896 static void
897 rs6000_aix_shared_library_to_xml (struct ld_info *ldi,
898                                   struct obstack *obstack)
899 {
900   obstack_grow_str (obstack, "<library name=\"");
901   std::string p = xml_escape_text (ldi->filename);
902   obstack_grow_str (obstack, p.c_str ());
903   obstack_grow_str (obstack, "\"");
904
905   if (ldi->member_name[0] != '\0')
906     {
907       obstack_grow_str (obstack, " member=\"");
908       p = xml_escape_text (ldi->member_name);
909       obstack_grow_str (obstack, p.c_str ());
910       obstack_grow_str (obstack, "\"");
911     }
912
913   obstack_grow_str (obstack, " text_addr=\"");
914   obstack_grow_str (obstack, core_addr_to_string (ldi->textorg));
915   obstack_grow_str (obstack, "\"");
916
917   obstack_grow_str (obstack, " text_size=\"");
918   obstack_grow_str (obstack, pulongest (ldi->textsize));
919   obstack_grow_str (obstack, "\"");
920
921   obstack_grow_str (obstack, " data_addr=\"");
922   obstack_grow_str (obstack, core_addr_to_string (ldi->dataorg));
923   obstack_grow_str (obstack, "\"");
924
925   obstack_grow_str (obstack, " data_size=\"");
926   obstack_grow_str (obstack, pulongest (ldi->datasize));
927   obstack_grow_str (obstack, "\"");
928
929   obstack_grow_str (obstack, "></library>");
930 }
931
932 /* Convert the ld_info binary data provided by the AIX loader into
933    an XML representation following the TARGET_OBJECT_LIBRARIES_AIX
934    format.
935
936    LDI_BUF is a buffer containing the ld_info data.
937    READBUF, OFFSET and LEN follow the same semantics as target_ops'
938    to_xfer_partial target_ops method.
939
940    If CLOSE_LDINFO_FD is nonzero, then this routine also closes
941    the ldinfo_fd file descriptor.  This is useful when the ldinfo
942    data is obtained via ptrace, as ptrace opens a file descriptor
943    for each and every entry; but we cannot use this descriptor
944    as the consumer of the XML library list might live in a different
945    process.  */
946
947 ULONGEST
948 rs6000_aix_ld_info_to_xml (struct gdbarch *gdbarch, const gdb_byte *ldi_buf,
949                            gdb_byte *readbuf, ULONGEST offset, ULONGEST len,
950                            int close_ldinfo_fd)
951 {
952   struct obstack obstack;
953   const char *buf;
954   ULONGEST len_avail;
955
956   obstack_init (&obstack);
957   obstack_grow_str (&obstack, "<library-list-aix version=\"1.0\">\n");
958
959   while (1)
960     {
961       struct ld_info ldi = rs6000_aix_extract_ld_info (gdbarch, ldi_buf);
962
963       rs6000_aix_shared_library_to_xml (&ldi, &obstack);
964       if (close_ldinfo_fd)
965         close (ldi.fd);
966
967       if (!ldi.next)
968         break;
969       ldi_buf = ldi_buf + ldi.next;
970     }
971
972   obstack_grow_str0 (&obstack, "</library-list-aix>\n");
973
974   buf = (const char *) obstack_finish (&obstack);
975   len_avail = strlen (buf);
976   if (offset >= len_avail)
977     len= 0;
978   else
979     {
980       if (len > len_avail - offset)
981         len = len_avail - offset;
982       memcpy (readbuf, buf + offset, len);
983     }
984
985   obstack_free (&obstack, NULL);
986   return len;
987 }
988
989 /* Implement the core_xfer_shared_libraries_aix gdbarch method.  */
990
991 static ULONGEST
992 rs6000_aix_core_xfer_shared_libraries_aix (struct gdbarch *gdbarch,
993                                            gdb_byte *readbuf,
994                                            ULONGEST offset,
995                                            ULONGEST len)
996 {
997   struct bfd_section *ldinfo_sec;
998   int ldinfo_size;
999
1000   ldinfo_sec = bfd_get_section_by_name (core_bfd, ".ldinfo");
1001   if (ldinfo_sec == NULL)
1002     error (_("cannot find .ldinfo section from core file: %s"),
1003            bfd_errmsg (bfd_get_error ()));
1004   ldinfo_size = bfd_get_section_size (ldinfo_sec);
1005
1006   gdb::byte_vector ldinfo_buf (ldinfo_size);
1007
1008   if (! bfd_get_section_contents (core_bfd, ldinfo_sec,
1009                                   ldinfo_buf.data (), 0, ldinfo_size))
1010     error (_("unable to read .ldinfo section from core file: %s"),
1011           bfd_errmsg (bfd_get_error ()));
1012
1013   return rs6000_aix_ld_info_to_xml (gdbarch, ldinfo_buf.data (), readbuf,
1014                                     offset, len, 0);
1015 }
1016
1017 static void
1018 rs6000_aix_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch)
1019 {
1020   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1021
1022   /* RS6000/AIX does not support PT_STEP.  Has to be simulated.  */
1023   set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
1024
1025   /* Displaced stepping is currently not supported in combination with
1026      software single-stepping.  */
1027   set_gdbarch_displaced_step_copy_insn (gdbarch, NULL);
1028   set_gdbarch_displaced_step_fixup (gdbarch, NULL);
1029   set_gdbarch_displaced_step_location (gdbarch, NULL);
1030
1031   set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
1032   set_gdbarch_return_value (gdbarch, rs6000_return_value);
1033   set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1034
1035   /* Handle RS/6000 function pointers (which are really function
1036      descriptors).  */
1037   set_gdbarch_convert_from_func_ptr_addr
1038     (gdbarch, rs6000_convert_from_func_ptr_addr);
1039
1040   /* Core file support.  */
1041   set_gdbarch_iterate_over_regset_sections
1042     (gdbarch, rs6000_aix_iterate_over_regset_sections);
1043   set_gdbarch_core_xfer_shared_libraries_aix
1044     (gdbarch, rs6000_aix_core_xfer_shared_libraries_aix);
1045
1046   if (tdep->wordsize == 8)
1047     tdep->lr_frame_offset = 16;
1048   else
1049     tdep->lr_frame_offset = 8;
1050
1051   if (tdep->wordsize == 4)
1052     /* PowerOpen / AIX 32 bit.  The saved area or red zone consists of
1053        19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
1054        Problem is, 220 isn't frame (16 byte) aligned.  Round it up to
1055        224.  */
1056     set_gdbarch_frame_red_zone_size (gdbarch, 224);
1057   else
1058     set_gdbarch_frame_red_zone_size (gdbarch, 0);
1059
1060   if (tdep->wordsize == 8)
1061     set_gdbarch_wchar_bit (gdbarch, 32);
1062   else
1063     set_gdbarch_wchar_bit (gdbarch, 16);
1064   set_gdbarch_wchar_signed (gdbarch, 0);
1065   set_gdbarch_auto_wide_charset (gdbarch, rs6000_aix_auto_wide_charset);
1066
1067   set_solib_ops (gdbarch, &solib_aix_so_ops);
1068 }
1069
1070 void
1071 _initialize_rs6000_aix_tdep (void)
1072 {
1073   gdbarch_register_osabi_sniffer (bfd_arch_rs6000,
1074                                   bfd_target_xcoff_flavour,
1075                                   rs6000_aix_osabi_sniffer);
1076   gdbarch_register_osabi_sniffer (bfd_arch_powerpc,
1077                                   bfd_target_xcoff_flavour,
1078                                   rs6000_aix_osabi_sniffer);
1079
1080   gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_AIX,
1081                           rs6000_aix_init_osabi);
1082   gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_AIX,
1083                           rs6000_aix_init_osabi);
1084 }
1085