gdbarch: Use an anonymous union for target data in `gdbarch_info'
[external/binutils.git] / gdb / ppc-linux-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3    Copyright (C) 1986-2017 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "symtab.h"
24 #include "target.h"
25 #include "gdbcore.h"
26 #include "gdbcmd.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "regcache.h"
30 #include "value.h"
31 #include "osabi.h"
32 #include "regset.h"
33 #include "solib-svr4.h"
34 #include "solib-spu.h"
35 #include "solib.h"
36 #include "solist.h"
37 #include "ppc-tdep.h"
38 #include "ppc64-tdep.h"
39 #include "ppc-linux-tdep.h"
40 #include "glibc-tdep.h"
41 #include "trad-frame.h"
42 #include "frame-unwind.h"
43 #include "tramp-frame.h"
44 #include "observer.h"
45 #include "auxv.h"
46 #include "elf/common.h"
47 #include "elf/ppc64.h"
48 #include "arch-utils.h"
49 #include "spu-tdep.h"
50 #include "xml-syscall.h"
51 #include "linux-tdep.h"
52 #include "linux-record.h"
53 #include "record-full.h"
54 #include "infrun.h"
55
56 #include "stap-probe.h"
57 #include "ax.h"
58 #include "ax-gdb.h"
59 #include "cli/cli-utils.h"
60 #include "parser-defs.h"
61 #include "user-regs.h"
62 #include <ctype.h>
63 #include "elf-bfd.h"            /* for elfcore_write_* */
64
65 #include "features/rs6000/powerpc-32l.c"
66 #include "features/rs6000/powerpc-altivec32l.c"
67 #include "features/rs6000/powerpc-cell32l.c"
68 #include "features/rs6000/powerpc-vsx32l.c"
69 #include "features/rs6000/powerpc-isa205-32l.c"
70 #include "features/rs6000/powerpc-isa205-altivec32l.c"
71 #include "features/rs6000/powerpc-isa205-vsx32l.c"
72 #include "features/rs6000/powerpc-64l.c"
73 #include "features/rs6000/powerpc-altivec64l.c"
74 #include "features/rs6000/powerpc-cell64l.c"
75 #include "features/rs6000/powerpc-vsx64l.c"
76 #include "features/rs6000/powerpc-isa205-64l.c"
77 #include "features/rs6000/powerpc-isa205-altivec64l.c"
78 #include "features/rs6000/powerpc-isa205-vsx64l.c"
79 #include "features/rs6000/powerpc-e500l.c"
80
81 /* Shared library operations for PowerPC-Linux.  */
82 static struct target_so_ops powerpc_so_ops;
83
84 /* The syscall's XML filename for PPC and PPC64.  */
85 #define XML_SYSCALL_FILENAME_PPC "syscalls/ppc-linux.xml"
86 #define XML_SYSCALL_FILENAME_PPC64 "syscalls/ppc64-linux.xml"
87
88 /* ppc_linux_memory_remove_breakpoints attempts to remove a breakpoint
89    in much the same fashion as memory_remove_breakpoint in mem-break.c,
90    but is careful not to write back the previous contents if the code
91    in question has changed in between inserting the breakpoint and
92    removing it.
93
94    Here is the problem that we're trying to solve...
95
96    Once upon a time, before introducing this function to remove
97    breakpoints from the inferior, setting a breakpoint on a shared
98    library function prior to running the program would not work
99    properly.  In order to understand the problem, it is first
100    necessary to understand a little bit about dynamic linking on
101    this platform.
102
103    A call to a shared library function is accomplished via a bl
104    (branch-and-link) instruction whose branch target is an entry
105    in the procedure linkage table (PLT).  The PLT in the object
106    file is uninitialized.  To gdb, prior to running the program, the
107    entries in the PLT are all zeros.
108
109    Once the program starts running, the shared libraries are loaded
110    and the procedure linkage table is initialized, but the entries in
111    the table are not (necessarily) resolved.  Once a function is
112    actually called, the code in the PLT is hit and the function is
113    resolved.  In order to better illustrate this, an example is in
114    order; the following example is from the gdb testsuite.
115             
116         We start the program shmain.
117
118             [kev@arroyo testsuite]$ ../gdb gdb.base/shmain
119             [...]
120
121         We place two breakpoints, one on shr1 and the other on main.
122
123             (gdb) b shr1
124             Breakpoint 1 at 0x100409d4
125             (gdb) b main
126             Breakpoint 2 at 0x100006a0: file gdb.base/shmain.c, line 44.
127
128         Examine the instruction (and the immediatly following instruction)
129         upon which the breakpoint was placed.  Note that the PLT entry
130         for shr1 contains zeros.
131
132             (gdb) x/2i 0x100409d4
133             0x100409d4 <shr1>:      .long 0x0
134             0x100409d8 <shr1+4>:    .long 0x0
135
136         Now run 'til main.
137
138             (gdb) r
139             Starting program: gdb.base/shmain 
140             Breakpoint 1 at 0xffaf790: file gdb.base/shr1.c, line 19.
141
142             Breakpoint 2, main ()
143                 at gdb.base/shmain.c:44
144             44        g = 1;
145
146         Examine the PLT again.  Note that the loading of the shared
147         library has initialized the PLT to code which loads a constant
148         (which I think is an index into the GOT) into r11 and then
149         branchs a short distance to the code which actually does the
150         resolving.
151
152             (gdb) x/2i 0x100409d4
153             0x100409d4 <shr1>:      li      r11,4
154             0x100409d8 <shr1+4>:    b       0x10040984 <sg+4>
155             (gdb) c
156             Continuing.
157
158             Breakpoint 1, shr1 (x=1)
159                 at gdb.base/shr1.c:19
160             19        l = 1;
161
162         Now we've hit the breakpoint at shr1.  (The breakpoint was
163         reset from the PLT entry to the actual shr1 function after the
164         shared library was loaded.) Note that the PLT entry has been
165         resolved to contain a branch that takes us directly to shr1.
166         (The real one, not the PLT entry.)
167
168             (gdb) x/2i 0x100409d4
169             0x100409d4 <shr1>:      b       0xffaf76c <shr1>
170             0x100409d8 <shr1+4>:    b       0x10040984 <sg+4>
171
172    The thing to note here is that the PLT entry for shr1 has been
173    changed twice.
174
175    Now the problem should be obvious.  GDB places a breakpoint (a
176    trap instruction) on the zero value of the PLT entry for shr1.
177    Later on, after the shared library had been loaded and the PLT
178    initialized, GDB gets a signal indicating this fact and attempts
179    (as it always does when it stops) to remove all the breakpoints.
180
181    The breakpoint removal was causing the former contents (a zero
182    word) to be written back to the now initialized PLT entry thus
183    destroying a portion of the initialization that had occurred only a
184    short time ago.  When execution continued, the zero word would be
185    executed as an instruction an illegal instruction trap was
186    generated instead.  (0 is not a legal instruction.)
187
188    The fix for this problem was fairly straightforward.  The function
189    memory_remove_breakpoint from mem-break.c was copied to this file,
190    modified slightly, and renamed to ppc_linux_memory_remove_breakpoint.
191    In tm-linux.h, MEMORY_REMOVE_BREAKPOINT is defined to call this new
192    function.
193
194    The differences between ppc_linux_memory_remove_breakpoint () and
195    memory_remove_breakpoint () are minor.  All that the former does
196    that the latter does not is check to make sure that the breakpoint
197    location actually contains a breakpoint (trap instruction) prior
198    to attempting to write back the old contents.  If it does contain
199    a trap instruction, we allow the old contents to be written back.
200    Otherwise, we silently do nothing.
201
202    The big question is whether memory_remove_breakpoint () should be
203    changed to have the same functionality.  The downside is that more
204    traffic is generated for remote targets since we'll have an extra
205    fetch of a memory word each time a breakpoint is removed.
206
207    For the time being, we'll leave this self-modifying-code-friendly
208    version in ppc-linux-tdep.c, but it ought to be migrated somewhere
209    else in the event that some other platform has similar needs with
210    regard to removing breakpoints in some potentially self modifying
211    code.  */
212 static int
213 ppc_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
214                                     struct bp_target_info *bp_tgt)
215 {
216   CORE_ADDR addr = bp_tgt->reqstd_address;
217   const unsigned char *bp;
218   int val;
219   int bplen;
220   gdb_byte old_contents[BREAKPOINT_MAX];
221   struct cleanup *cleanup;
222
223   /* Determine appropriate breakpoint contents and size for this address.  */
224   bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
225
226   /* Make sure we see the memory breakpoints.  */
227   cleanup = make_show_memory_breakpoints_cleanup (1);
228   val = target_read_memory (addr, old_contents, bplen);
229
230   /* If our breakpoint is no longer at the address, this means that the
231      program modified the code on us, so it is wrong to put back the
232      old value.  */
233   if (val == 0 && memcmp (bp, old_contents, bplen) == 0)
234     val = target_write_raw_memory (addr, bp_tgt->shadow_contents, bplen);
235
236   do_cleanups (cleanup);
237   return val;
238 }
239
240 /* For historic reasons, PPC 32 GNU/Linux follows PowerOpen rather
241    than the 32 bit SYSV R4 ABI structure return convention - all
242    structures, no matter their size, are put in memory.  Vectors,
243    which were added later, do get returned in a register though.  */
244
245 static enum return_value_convention
246 ppc_linux_return_value (struct gdbarch *gdbarch, struct value *function,
247                         struct type *valtype, struct regcache *regcache,
248                         gdb_byte *readbuf, const gdb_byte *writebuf)
249 {  
250   if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
251        || TYPE_CODE (valtype) == TYPE_CODE_UNION)
252       && !((TYPE_LENGTH (valtype) == 16 || TYPE_LENGTH (valtype) == 8)
253            && TYPE_VECTOR (valtype)))
254     return RETURN_VALUE_STRUCT_CONVENTION;
255   else
256     return ppc_sysv_abi_return_value (gdbarch, function, valtype, regcache,
257                                       readbuf, writebuf);
258 }
259
260 /* PLT stub in executable.  */
261 static struct ppc_insn_pattern powerpc32_plt_stub[] =
262   {
263     { 0xffff0000, 0x3d600000, 0 },      /* lis   r11, xxxx       */
264     { 0xffff0000, 0x816b0000, 0 },      /* lwz   r11, xxxx(r11)  */
265     { 0xffffffff, 0x7d6903a6, 0 },      /* mtctr r11             */
266     { 0xffffffff, 0x4e800420, 0 },      /* bctr                  */
267     {          0,          0, 0 }
268   };
269
270 /* PLT stub in shared library.  */
271 static struct ppc_insn_pattern powerpc32_plt_stub_so[] =
272   {
273     { 0xffff0000, 0x817e0000, 0 },      /* lwz   r11, xxxx(r30)  */
274     { 0xffffffff, 0x7d6903a6, 0 },      /* mtctr r11             */
275     { 0xffffffff, 0x4e800420, 0 },      /* bctr                  */
276     { 0xffffffff, 0x60000000, 0 },      /* nop                   */
277     {          0,          0, 0 }
278   };
279 #define POWERPC32_PLT_STUB_LEN  ARRAY_SIZE (powerpc32_plt_stub)
280
281 /* Check if PC is in PLT stub.  For non-secure PLT, stub is in .plt
282    section.  For secure PLT, stub is in .text and we need to check
283    instruction patterns.  */
284
285 static int
286 powerpc_linux_in_dynsym_resolve_code (CORE_ADDR pc)
287 {
288   struct bound_minimal_symbol sym;
289
290   /* Check whether PC is in the dynamic linker.  This also checks
291      whether it is in the .plt section, used by non-PIC executables.  */
292   if (svr4_in_dynsym_resolve_code (pc))
293     return 1;
294
295   /* Check if we are in the resolver.  */
296   sym = lookup_minimal_symbol_by_pc (pc);
297   if (sym.minsym != NULL
298       && (strcmp (MSYMBOL_LINKAGE_NAME (sym.minsym), "__glink") == 0
299           || strcmp (MSYMBOL_LINKAGE_NAME (sym.minsym),
300                      "__glink_PLTresolve") == 0))
301     return 1;
302
303   return 0;
304 }
305
306 /* Follow PLT stub to actual routine.
307
308    When the execution direction is EXEC_REVERSE, scan backward to
309    check whether we are in the middle of a PLT stub.  Currently,
310    we only look-behind at most 4 instructions (the max length of PLT
311    stub sequence.  */
312
313 static CORE_ADDR
314 ppc_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
315 {
316   unsigned int insnbuf[POWERPC32_PLT_STUB_LEN];
317   struct gdbarch *gdbarch = get_frame_arch (frame);
318   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
319   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
320   CORE_ADDR target = 0;
321   int scan_limit, i;
322
323   scan_limit = 1;
324   /* When reverse-debugging, scan backward to check whether we are
325      in the middle of trampoline code.  */
326   if (execution_direction == EXEC_REVERSE)
327     scan_limit = 4;     /* At more 4 instructions.  */
328
329   for (i = 0; i < scan_limit; i++)
330     {
331       if (ppc_insns_match_pattern (frame, pc, powerpc32_plt_stub, insnbuf))
332         {
333           /* Insn pattern is
334              lis   r11, xxxx
335              lwz   r11, xxxx(r11)
336              Branch target is in r11.  */
337
338           target = (ppc_insn_d_field (insnbuf[0]) << 16)
339                    | ppc_insn_d_field (insnbuf[1]);
340           target = read_memory_unsigned_integer (target, 4, byte_order);
341         }
342       else if (ppc_insns_match_pattern (frame, pc, powerpc32_plt_stub_so,
343                                         insnbuf))
344         {
345           /* Insn pattern is
346              lwz   r11, xxxx(r30)
347              Branch target is in r11.  */
348
349           target = get_frame_register_unsigned (frame,
350                                                 tdep->ppc_gp0_regnum + 30)
351                    + ppc_insn_d_field (insnbuf[0]);
352           target = read_memory_unsigned_integer (target, 4, byte_order);
353         }
354       else
355         {
356           /* Scan backward one more instructions if doesn't match.  */
357           pc -= 4;
358           continue;
359         }
360
361       return target;
362     }
363
364   return 0;
365 }
366
367 /* Wrappers to handle Linux-only registers.  */
368
369 static void
370 ppc_linux_supply_gregset (const struct regset *regset,
371                           struct regcache *regcache,
372                           int regnum, const void *gregs, size_t len)
373 {
374   const struct ppc_reg_offsets *offsets
375     = (const struct ppc_reg_offsets *) regset->regmap;
376
377   ppc_supply_gregset (regset, regcache, regnum, gregs, len);
378
379   if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
380     {
381       /* "orig_r3" is stored 2 slots after "pc".  */
382       if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
383         ppc_supply_reg (regcache, PPC_ORIG_R3_REGNUM, (const gdb_byte *) gregs,
384                         offsets->pc_offset + 2 * offsets->gpr_size,
385                         offsets->gpr_size);
386
387       /* "trap" is stored 8 slots after "pc".  */
388       if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
389         ppc_supply_reg (regcache, PPC_TRAP_REGNUM, (const gdb_byte *) gregs,
390                         offsets->pc_offset + 8 * offsets->gpr_size,
391                         offsets->gpr_size);
392     }
393 }
394
395 static void
396 ppc_linux_collect_gregset (const struct regset *regset,
397                            const struct regcache *regcache,
398                            int regnum, void *gregs, size_t len)
399 {
400   const struct ppc_reg_offsets *offsets
401     = (const struct ppc_reg_offsets *) regset->regmap;
402
403   /* Clear areas in the linux gregset not written elsewhere.  */
404   if (regnum == -1)
405     memset (gregs, 0, len);
406
407   ppc_collect_gregset (regset, regcache, regnum, gregs, len);
408
409   if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
410     {
411       /* "orig_r3" is stored 2 slots after "pc".  */
412       if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
413         ppc_collect_reg (regcache, PPC_ORIG_R3_REGNUM, (gdb_byte *) gregs,
414                          offsets->pc_offset + 2 * offsets->gpr_size,
415                          offsets->gpr_size);
416
417       /* "trap" is stored 8 slots after "pc".  */
418       if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
419         ppc_collect_reg (regcache, PPC_TRAP_REGNUM, (gdb_byte *) gregs,
420                          offsets->pc_offset + 8 * offsets->gpr_size,
421                          offsets->gpr_size);
422     }
423 }
424
425 /* Regset descriptions.  */
426 static const struct ppc_reg_offsets ppc32_linux_reg_offsets =
427   {
428     /* General-purpose registers.  */
429     /* .r0_offset = */ 0,
430     /* .gpr_size = */ 4,
431     /* .xr_size = */ 4,
432     /* .pc_offset = */ 128,
433     /* .ps_offset = */ 132,
434     /* .cr_offset = */ 152,
435     /* .lr_offset = */ 144,
436     /* .ctr_offset = */ 140,
437     /* .xer_offset = */ 148,
438     /* .mq_offset = */ 156,
439
440     /* Floating-point registers.  */
441     /* .f0_offset = */ 0,
442     /* .fpscr_offset = */ 256,
443     /* .fpscr_size = */ 8,
444
445     /* AltiVec registers.  */
446     /* .vr0_offset = */ 0,
447     /* .vscr_offset = */ 512 + 12,
448     /* .vrsave_offset = */ 528
449   };
450
451 static const struct ppc_reg_offsets ppc64_linux_reg_offsets =
452   {
453     /* General-purpose registers.  */
454     /* .r0_offset = */ 0,
455     /* .gpr_size = */ 8,
456     /* .xr_size = */ 8,
457     /* .pc_offset = */ 256,
458     /* .ps_offset = */ 264,
459     /* .cr_offset = */ 304,
460     /* .lr_offset = */ 288,
461     /* .ctr_offset = */ 280,
462     /* .xer_offset = */ 296,
463     /* .mq_offset = */ 312,
464
465     /* Floating-point registers.  */
466     /* .f0_offset = */ 0,
467     /* .fpscr_offset = */ 256,
468     /* .fpscr_size = */ 8,
469
470     /* AltiVec registers.  */
471     /* .vr0_offset = */ 0,
472     /* .vscr_offset = */ 512 + 12,
473     /* .vrsave_offset = */ 528
474   };
475
476 static const struct regset ppc32_linux_gregset = {
477   &ppc32_linux_reg_offsets,
478   ppc_linux_supply_gregset,
479   ppc_linux_collect_gregset
480 };
481
482 static const struct regset ppc64_linux_gregset = {
483   &ppc64_linux_reg_offsets,
484   ppc_linux_supply_gregset,
485   ppc_linux_collect_gregset
486 };
487
488 static const struct regset ppc32_linux_fpregset = {
489   &ppc32_linux_reg_offsets,
490   ppc_supply_fpregset,
491   ppc_collect_fpregset
492 };
493
494 static const struct regset ppc32_linux_vrregset = {
495   &ppc32_linux_reg_offsets,
496   ppc_supply_vrregset,
497   ppc_collect_vrregset
498 };
499
500 static const struct regset ppc32_linux_vsxregset = {
501   &ppc32_linux_reg_offsets,
502   ppc_supply_vsxregset,
503   ppc_collect_vsxregset
504 };
505
506 const struct regset *
507 ppc_linux_gregset (int wordsize)
508 {
509   return wordsize == 8 ? &ppc64_linux_gregset : &ppc32_linux_gregset;
510 }
511
512 const struct regset *
513 ppc_linux_fpregset (void)
514 {
515   return &ppc32_linux_fpregset;
516 }
517
518 /* Iterate over supported core file register note sections. */
519
520 static void
521 ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
522                                         iterate_over_regset_sections_cb *cb,
523                                         void *cb_data,
524                                         const struct regcache *regcache)
525 {
526   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
527   int have_altivec = tdep->ppc_vr0_regnum != -1;
528   int have_vsx = tdep->ppc_vsr0_upper_regnum != -1;
529
530   if (tdep->wordsize == 4)
531     cb (".reg", 48 * 4, &ppc32_linux_gregset, NULL, cb_data);
532   else
533     cb (".reg", 48 * 8, &ppc64_linux_gregset, NULL, cb_data);
534
535   cb (".reg2", 264, &ppc32_linux_fpregset, NULL, cb_data);
536
537   if (have_altivec)
538     cb (".reg-ppc-vmx", 544, &ppc32_linux_vrregset, "ppc Altivec", cb_data);
539
540   if (have_vsx)
541     cb (".reg-ppc-vsx", 256, &ppc32_linux_vsxregset, "POWER7 VSX", cb_data);
542 }
543
544 static void
545 ppc_linux_sigtramp_cache (struct frame_info *this_frame,
546                           struct trad_frame_cache *this_cache,
547                           CORE_ADDR func, LONGEST offset,
548                           int bias)
549 {
550   CORE_ADDR base;
551   CORE_ADDR regs;
552   CORE_ADDR gpregs;
553   CORE_ADDR fpregs;
554   int i;
555   struct gdbarch *gdbarch = get_frame_arch (this_frame);
556   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
557   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
558
559   base = get_frame_register_unsigned (this_frame,
560                                       gdbarch_sp_regnum (gdbarch));
561   if (bias > 0 && get_frame_pc (this_frame) != func)
562     /* See below, some signal trampolines increment the stack as their
563        first instruction, need to compensate for that.  */
564     base -= bias;
565
566   /* Find the address of the register buffer pointer.  */
567   regs = base + offset;
568   /* Use that to find the address of the corresponding register
569      buffers.  */
570   gpregs = read_memory_unsigned_integer (regs, tdep->wordsize, byte_order);
571   fpregs = gpregs + 48 * tdep->wordsize;
572
573   /* General purpose.  */
574   for (i = 0; i < 32; i++)
575     {
576       int regnum = i + tdep->ppc_gp0_regnum;
577       trad_frame_set_reg_addr (this_cache,
578                                regnum, gpregs + i * tdep->wordsize);
579     }
580   trad_frame_set_reg_addr (this_cache,
581                            gdbarch_pc_regnum (gdbarch),
582                            gpregs + 32 * tdep->wordsize);
583   trad_frame_set_reg_addr (this_cache, tdep->ppc_ctr_regnum,
584                            gpregs + 35 * tdep->wordsize);
585   trad_frame_set_reg_addr (this_cache, tdep->ppc_lr_regnum,
586                            gpregs + 36 * tdep->wordsize);
587   trad_frame_set_reg_addr (this_cache, tdep->ppc_xer_regnum,
588                            gpregs + 37 * tdep->wordsize);
589   trad_frame_set_reg_addr (this_cache, tdep->ppc_cr_regnum,
590                            gpregs + 38 * tdep->wordsize);
591
592   if (ppc_linux_trap_reg_p (gdbarch))
593     {
594       trad_frame_set_reg_addr (this_cache, PPC_ORIG_R3_REGNUM,
595                                gpregs + 34 * tdep->wordsize);
596       trad_frame_set_reg_addr (this_cache, PPC_TRAP_REGNUM,
597                                gpregs + 40 * tdep->wordsize);
598     }
599
600   if (ppc_floating_point_unit_p (gdbarch))
601     {
602       /* Floating point registers.  */
603       for (i = 0; i < 32; i++)
604         {
605           int regnum = i + gdbarch_fp0_regnum (gdbarch);
606           trad_frame_set_reg_addr (this_cache, regnum,
607                                    fpregs + i * tdep->wordsize);
608         }
609       trad_frame_set_reg_addr (this_cache, tdep->ppc_fpscr_regnum,
610                          fpregs + 32 * tdep->wordsize);
611     }
612   trad_frame_set_id (this_cache, frame_id_build (base, func));
613 }
614
615 static void
616 ppc32_linux_sigaction_cache_init (const struct tramp_frame *self,
617                                   struct frame_info *this_frame,
618                                   struct trad_frame_cache *this_cache,
619                                   CORE_ADDR func)
620 {
621   ppc_linux_sigtramp_cache (this_frame, this_cache, func,
622                             0xd0 /* Offset to ucontext_t.  */
623                             + 0x30 /* Offset to .reg.  */,
624                             0);
625 }
626
627 static void
628 ppc64_linux_sigaction_cache_init (const struct tramp_frame *self,
629                                   struct frame_info *this_frame,
630                                   struct trad_frame_cache *this_cache,
631                                   CORE_ADDR func)
632 {
633   ppc_linux_sigtramp_cache (this_frame, this_cache, func,
634                             0x80 /* Offset to ucontext_t.  */
635                             + 0xe0 /* Offset to .reg.  */,
636                             128);
637 }
638
639 static void
640 ppc32_linux_sighandler_cache_init (const struct tramp_frame *self,
641                                    struct frame_info *this_frame,
642                                    struct trad_frame_cache *this_cache,
643                                    CORE_ADDR func)
644 {
645   ppc_linux_sigtramp_cache (this_frame, this_cache, func,
646                             0x40 /* Offset to ucontext_t.  */
647                             + 0x1c /* Offset to .reg.  */,
648                             0);
649 }
650
651 static void
652 ppc64_linux_sighandler_cache_init (const struct tramp_frame *self,
653                                    struct frame_info *this_frame,
654                                    struct trad_frame_cache *this_cache,
655                                    CORE_ADDR func)
656 {
657   ppc_linux_sigtramp_cache (this_frame, this_cache, func,
658                             0x80 /* Offset to struct sigcontext.  */
659                             + 0x38 /* Offset to .reg.  */,
660                             128);
661 }
662
663 static struct tramp_frame ppc32_linux_sigaction_tramp_frame = {
664   SIGTRAMP_FRAME,
665   4,
666   { 
667     { 0x380000ac, -1 }, /* li r0, 172 */
668     { 0x44000002, -1 }, /* sc */
669     { TRAMP_SENTINEL_INSN },
670   },
671   ppc32_linux_sigaction_cache_init
672 };
673 static struct tramp_frame ppc64_linux_sigaction_tramp_frame = {
674   SIGTRAMP_FRAME,
675   4,
676   {
677     { 0x38210080, -1 }, /* addi r1,r1,128 */
678     { 0x380000ac, -1 }, /* li r0, 172 */
679     { 0x44000002, -1 }, /* sc */
680     { TRAMP_SENTINEL_INSN },
681   },
682   ppc64_linux_sigaction_cache_init
683 };
684 static struct tramp_frame ppc32_linux_sighandler_tramp_frame = {
685   SIGTRAMP_FRAME,
686   4,
687   { 
688     { 0x38000077, -1 }, /* li r0,119 */
689     { 0x44000002, -1 }, /* sc */
690     { TRAMP_SENTINEL_INSN },
691   },
692   ppc32_linux_sighandler_cache_init
693 };
694 static struct tramp_frame ppc64_linux_sighandler_tramp_frame = {
695   SIGTRAMP_FRAME,
696   4,
697   { 
698     { 0x38210080, -1 }, /* addi r1,r1,128 */
699     { 0x38000077, -1 }, /* li r0,119 */
700     { 0x44000002, -1 }, /* sc */
701     { TRAMP_SENTINEL_INSN },
702   },
703   ppc64_linux_sighandler_cache_init
704 };
705
706 /* Return 1 if PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM are usable.  */
707 int
708 ppc_linux_trap_reg_p (struct gdbarch *gdbarch)
709 {
710   /* If we do not have a target description with registers, then
711      the special registers will not be included in the register set.  */
712   if (!tdesc_has_registers (gdbarch_target_desc (gdbarch)))
713     return 0;
714
715   /* If we do, then it is safe to check the size.  */
716   return register_size (gdbarch, PPC_ORIG_R3_REGNUM) > 0
717          && register_size (gdbarch, PPC_TRAP_REGNUM) > 0;
718 }
719
720 /* Return the current system call's number present in the
721    r0 register.  When the function fails, it returns -1.  */
722 static LONGEST
723 ppc_linux_get_syscall_number (struct gdbarch *gdbarch,
724                               ptid_t ptid)
725 {
726   struct regcache *regcache = get_thread_regcache (ptid);
727   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
728   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
729   struct cleanup *cleanbuf;
730   /* The content of a register */
731   gdb_byte *buf;
732   /* The result */
733   LONGEST ret;
734
735   /* Make sure we're in a 32- or 64-bit machine */
736   gdb_assert (tdep->wordsize == 4 || tdep->wordsize == 8);
737
738   buf = (gdb_byte *) xmalloc (tdep->wordsize * sizeof (gdb_byte));
739
740   cleanbuf = make_cleanup (xfree, buf);
741
742   /* Getting the system call number from the register.
743      When dealing with PowerPC architecture, this information
744      is stored at 0th register.  */
745   regcache_cooked_read (regcache, tdep->ppc_gp0_regnum, buf);
746
747   ret = extract_signed_integer (buf, tdep->wordsize, byte_order);
748   do_cleanups (cleanbuf);
749
750   return ret;
751 }
752
753 /* PPC process record-replay */
754
755 static struct linux_record_tdep ppc_linux_record_tdep;
756 static struct linux_record_tdep ppc64_linux_record_tdep;
757
758 /* ppc_canonicalize_syscall maps from the native PowerPC Linux set of
759    syscall ids into a canonical set of syscall ids used by process
760    record.  (See arch/powerpc/include/uapi/asm/unistd.h in kernel tree.)
761    Return -1 if this system call is not supported by process record.
762    Otherwise, return the syscall number for preocess reocrd of given
763    SYSCALL.  */
764
765 static enum gdb_syscall
766 ppc_canonicalize_syscall (int syscall)
767 {
768   int result = -1;
769
770   if (syscall <= 165)
771     result = syscall;
772   else if (syscall >= 167 && syscall <= 190)    /* Skip query_module 166 */
773     result = syscall + 1;
774   else if (syscall >= 192 && syscall <= 197)    /* mmap2 */
775     result = syscall;
776   else if (syscall == 208)                      /* tkill */
777     result = gdb_sys_tkill;
778   else if (syscall >= 207 && syscall <= 220)    /* gettid */
779     result = syscall + 224 - 207;
780   else if (syscall >= 234 && syscall <= 239)    /* exit_group */
781     result = syscall + 252 - 234;
782   else if (syscall >= 240 && syscall <= 248)    /* timer_create */
783     result = syscall += 259 - 240;
784   else if (syscall >= 250 && syscall <= 251)    /* tgkill */
785     result = syscall + 270 - 250;
786   else if (syscall == 336)
787     result = gdb_sys_recv;
788   else if (syscall == 337)
789     result = gdb_sys_recvfrom;
790   else if (syscall == 342)
791     result = gdb_sys_recvmsg;
792
793   return (enum gdb_syscall) result;
794 }
795
796 /* Record registers which might be clobbered during system call.
797    Return 0 if successful.  */
798
799 static int
800 ppc_linux_syscall_record (struct regcache *regcache)
801 {
802   struct gdbarch *gdbarch = get_regcache_arch (regcache);
803   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
804   ULONGEST scnum;
805   enum gdb_syscall syscall_gdb;
806   int ret;
807   int i;
808
809   regcache_raw_read_unsigned (regcache, tdep->ppc_gp0_regnum, &scnum);
810   syscall_gdb = ppc_canonicalize_syscall (scnum);
811
812   if (syscall_gdb < 0)
813     {
814       printf_unfiltered (_("Process record and replay target doesn't "
815                            "support syscall number %d\n"), (int) scnum);
816       return 0;
817     }
818
819   if (syscall_gdb == gdb_sys_sigreturn
820       || syscall_gdb == gdb_sys_rt_sigreturn)
821    {
822      int i, j;
823      int regsets[] = { tdep->ppc_gp0_regnum,
824                        tdep->ppc_fp0_regnum,
825                        tdep->ppc_vr0_regnum,
826                        tdep->ppc_vsr0_upper_regnum };
827
828      for (j = 0; j < 4; j++)
829        {
830          if (regsets[j] == -1)
831            continue;
832          for (i = 0; i < 32; i++)
833            {
834              if (record_full_arch_list_add_reg (regcache, regsets[j] + i))
835                return -1;
836            }
837        }
838
839      if (record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum))
840        return -1;
841      if (record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum))
842        return -1;
843      if (record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum))
844        return -1;
845      if (record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum))
846        return -1;
847
848      return 0;
849    }
850
851   if (tdep->wordsize == 8)
852     ret = record_linux_system_call (syscall_gdb, regcache,
853                                     &ppc64_linux_record_tdep);
854   else
855     ret = record_linux_system_call (syscall_gdb, regcache,
856                                     &ppc_linux_record_tdep);
857
858   if (ret != 0)
859     return ret;
860
861   /* Record registers clobbered during syscall.  */
862   for (i = 3; i <= 12; i++)
863     {
864       if (record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + i))
865         return -1;
866     }
867   if (record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + 0))
868     return -1;
869   if (record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum))
870     return -1;
871   if (record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum))
872     return -1;
873   if (record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum))
874     return -1;
875
876   return 0;
877 }
878
879 /* Record registers which might be clobbered during signal handling.
880    Return 0 if successful.  */
881
882 static int
883 ppc_linux_record_signal (struct gdbarch *gdbarch, struct regcache *regcache,
884                          enum gdb_signal signal)
885 {
886   /* See handle_rt_signal64 in arch/powerpc/kernel/signal_64.c
887          handle_rt_signal32 in arch/powerpc/kernel/signal_32.c
888          arch/powerpc/include/asm/ptrace.h
889      for details.  */
890   const int SIGNAL_FRAMESIZE = 128;
891   const int sizeof_rt_sigframe = 1440 * 2 + 8 * 2 + 4 * 6 + 8 + 8 + 128 + 512;
892   ULONGEST sp;
893   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
894   int i;
895
896   for (i = 3; i <= 12; i++)
897     {
898       if (record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + i))
899         return -1;
900     }
901
902   if (record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum))
903     return -1;
904   if (record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum))
905     return -1;
906   if (record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum))
907     return -1;
908   if (record_full_arch_list_add_reg (regcache, gdbarch_pc_regnum (gdbarch)))
909     return -1;
910   if (record_full_arch_list_add_reg (regcache, gdbarch_sp_regnum (gdbarch)))
911     return -1;
912
913   /* Record the change in the stack.
914      frame-size = sizeof (struct rt_sigframe) + SIGNAL_FRAMESIZE  */
915   regcache_raw_read_unsigned (regcache, gdbarch_sp_regnum (gdbarch), &sp);
916   sp -= SIGNAL_FRAMESIZE;
917   sp -= sizeof_rt_sigframe;
918
919   if (record_full_arch_list_add_mem (sp, SIGNAL_FRAMESIZE + sizeof_rt_sigframe))
920     return -1;
921
922   if (record_full_arch_list_add_end ())
923     return -1;
924
925   return 0;
926 }
927
928 static void
929 ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
930 {
931   struct gdbarch *gdbarch = get_regcache_arch (regcache);
932
933   regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch), pc);
934
935   /* Set special TRAP register to -1 to prevent the kernel from
936      messing with the PC we just installed, if we happen to be
937      within an interrupted system call that the kernel wants to
938      restart.
939
940      Note that after we return from the dummy call, the TRAP and
941      ORIG_R3 registers will be automatically restored, and the
942      kernel continues to restart the system call at this point.  */
943   if (ppc_linux_trap_reg_p (gdbarch))
944     regcache_cooked_write_unsigned (regcache, PPC_TRAP_REGNUM, -1);
945 }
946
947 static int
948 ppc_linux_spu_section (bfd *abfd, asection *asect, void *user_data)
949 {
950   return startswith (bfd_section_name (abfd, asect), "SPU/");
951 }
952
953 static const struct target_desc *
954 ppc_linux_core_read_description (struct gdbarch *gdbarch,
955                                  struct target_ops *target,
956                                  bfd *abfd)
957 {
958   asection *cell = bfd_sections_find_if (abfd, ppc_linux_spu_section, NULL);
959   asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
960   asection *vsx = bfd_get_section_by_name (abfd, ".reg-ppc-vsx");
961   asection *section = bfd_get_section_by_name (abfd, ".reg");
962   if (! section)
963     return NULL;
964
965   switch (bfd_section_size (abfd, section))
966     {
967     case 48 * 4:
968       if (cell)
969         return tdesc_powerpc_cell32l;
970       else if (vsx)
971         return tdesc_powerpc_vsx32l;
972       else if (altivec)
973         return tdesc_powerpc_altivec32l;
974       else
975         return tdesc_powerpc_32l;
976
977     case 48 * 8:
978       if (cell)
979         return tdesc_powerpc_cell64l;
980       else if (vsx)
981         return tdesc_powerpc_vsx64l;
982       else if (altivec)
983         return tdesc_powerpc_altivec64l;
984       else
985         return tdesc_powerpc_64l;
986
987     default:
988       return NULL;
989     }
990 }
991
992
993 /* Implementation of `gdbarch_elf_make_msymbol_special', as defined in
994    gdbarch.h.  This implementation is used for the ELFv2 ABI only.  */
995
996 static void
997 ppc_elfv2_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
998 {
999   elf_symbol_type *elf_sym = (elf_symbol_type *)sym;
1000
1001   /* If the symbol is marked as having a local entry point, set a target
1002      flag in the msymbol.  We currently only support local entry point
1003      offsets of 8 bytes, which is the only entry point offset ever used
1004      by current compilers.  If/when other offsets are ever used, we will
1005      have to use additional target flag bits to store them.  */
1006   switch (PPC64_LOCAL_ENTRY_OFFSET (elf_sym->internal_elf_sym.st_other))
1007     {
1008     default:
1009       break;
1010     case 8:
1011       MSYMBOL_TARGET_FLAG_1 (msym) = 1;
1012       break;
1013     }
1014 }
1015
1016 /* Implementation of `gdbarch_skip_entrypoint', as defined in
1017    gdbarch.h.  This implementation is used for the ELFv2 ABI only.  */
1018
1019 static CORE_ADDR
1020 ppc_elfv2_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR pc)
1021 {
1022   struct bound_minimal_symbol fun;
1023   int local_entry_offset = 0;
1024
1025   fun = lookup_minimal_symbol_by_pc (pc);
1026   if (fun.minsym == NULL)
1027     return pc;
1028
1029   /* See ppc_elfv2_elf_make_msymbol_special for how local entry point
1030      offset values are encoded.  */
1031   if (MSYMBOL_TARGET_FLAG_1 (fun.minsym))
1032     local_entry_offset = 8;
1033
1034   if (BMSYMBOL_VALUE_ADDRESS (fun) <= pc
1035       && pc < BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset)
1036     return BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset;
1037
1038   return pc;
1039 }
1040
1041 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
1042    gdbarch.h.  */
1043
1044 static int
1045 ppc_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
1046 {
1047   return (*s == 'i' /* Literal number.  */
1048           || (isdigit (*s) && s[1] == '('
1049               && isdigit (s[2])) /* Displacement.  */
1050           || (*s == '(' && isdigit (s[1])) /* Register indirection.  */
1051           || isdigit (*s)); /* Register value.  */
1052 }
1053
1054 /* Implementation of `gdbarch_stap_parse_special_token', as defined in
1055    gdbarch.h.  */
1056
1057 static int
1058 ppc_stap_parse_special_token (struct gdbarch *gdbarch,
1059                               struct stap_parse_info *p)
1060 {
1061   if (isdigit (*p->arg))
1062     {
1063       /* This temporary pointer is needed because we have to do a lookahead.
1064           We could be dealing with a register displacement, and in such case
1065           we would not need to do anything.  */
1066       const char *s = p->arg;
1067       char *regname;
1068       int len;
1069       struct stoken str;
1070
1071       while (isdigit (*s))
1072         ++s;
1073
1074       if (*s == '(')
1075         {
1076           /* It is a register displacement indeed.  Returning 0 means we are
1077              deferring the treatment of this case to the generic parser.  */
1078           return 0;
1079         }
1080
1081       len = s - p->arg;
1082       regname = (char *) alloca (len + 2);
1083       regname[0] = 'r';
1084
1085       strncpy (regname + 1, p->arg, len);
1086       ++len;
1087       regname[len] = '\0';
1088
1089       if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
1090         error (_("Invalid register name `%s' on expression `%s'."),
1091                regname, p->saved_arg);
1092
1093       write_exp_elt_opcode (&p->pstate, OP_REGISTER);
1094       str.ptr = regname;
1095       str.length = len;
1096       write_exp_string (&p->pstate, str);
1097       write_exp_elt_opcode (&p->pstate, OP_REGISTER);
1098
1099       p->arg = s;
1100     }
1101   else
1102     {
1103       /* All the other tokens should be handled correctly by the generic
1104          parser.  */
1105       return 0;
1106     }
1107
1108   return 1;
1109 }
1110
1111 /* Cell/B.E. active SPE context tracking support.  */
1112
1113 static struct objfile *spe_context_objfile = NULL;
1114 static CORE_ADDR spe_context_lm_addr = 0;
1115 static CORE_ADDR spe_context_offset = 0;
1116
1117 static ptid_t spe_context_cache_ptid;
1118 static CORE_ADDR spe_context_cache_address;
1119
1120 /* Hook into inferior_created, solib_loaded, and solib_unloaded observers
1121    to track whether we've loaded a version of libspe2 (as static or dynamic
1122    library) that provides the __spe_current_active_context variable.  */
1123 static void
1124 ppc_linux_spe_context_lookup (struct objfile *objfile)
1125 {
1126   struct bound_minimal_symbol sym;
1127
1128   if (!objfile)
1129     {
1130       spe_context_objfile = NULL;
1131       spe_context_lm_addr = 0;
1132       spe_context_offset = 0;
1133       spe_context_cache_ptid = minus_one_ptid;
1134       spe_context_cache_address = 0;
1135       return;
1136     }
1137
1138   sym = lookup_minimal_symbol ("__spe_current_active_context", NULL, objfile);
1139   if (sym.minsym)
1140     {
1141       spe_context_objfile = objfile;
1142       spe_context_lm_addr = svr4_fetch_objfile_link_map (objfile);
1143       spe_context_offset = MSYMBOL_VALUE_RAW_ADDRESS (sym.minsym);
1144       spe_context_cache_ptid = minus_one_ptid;
1145       spe_context_cache_address = 0;
1146       return;
1147     }
1148 }
1149
1150 static void
1151 ppc_linux_spe_context_inferior_created (struct target_ops *t, int from_tty)
1152 {
1153   struct objfile *objfile;
1154
1155   ppc_linux_spe_context_lookup (NULL);
1156   ALL_OBJFILES (objfile)
1157     ppc_linux_spe_context_lookup (objfile);
1158 }
1159
1160 static void
1161 ppc_linux_spe_context_solib_loaded (struct so_list *so)
1162 {
1163   if (strstr (so->so_original_name, "/libspe") != NULL)
1164     {
1165       solib_read_symbols (so, 0);
1166       ppc_linux_spe_context_lookup (so->objfile);
1167     }
1168 }
1169
1170 static void
1171 ppc_linux_spe_context_solib_unloaded (struct so_list *so)
1172 {
1173   if (so->objfile == spe_context_objfile)
1174     ppc_linux_spe_context_lookup (NULL);
1175 }
1176
1177 /* Retrieve contents of the N'th element in the current thread's
1178    linked SPE context list into ID and NPC.  Return the address of
1179    said context element, or 0 if not found.  */
1180 static CORE_ADDR
1181 ppc_linux_spe_context (int wordsize, enum bfd_endian byte_order,
1182                        int n, int *id, unsigned int *npc)
1183 {
1184   CORE_ADDR spe_context = 0;
1185   gdb_byte buf[16];
1186   int i;
1187
1188   /* Quick exit if we have not found __spe_current_active_context.  */
1189   if (!spe_context_objfile)
1190     return 0;
1191
1192   /* Look up cached address of thread-local variable.  */
1193   if (!ptid_equal (spe_context_cache_ptid, inferior_ptid))
1194     {
1195       struct target_ops *target = &current_target;
1196
1197       TRY
1198         {
1199           /* We do not call target_translate_tls_address here, because
1200              svr4_fetch_objfile_link_map may invalidate the frame chain,
1201              which must not do while inside a frame sniffer.
1202
1203              Instead, we have cached the lm_addr value, and use that to
1204              directly call the target's to_get_thread_local_address.  */
1205           spe_context_cache_address
1206             = target->to_get_thread_local_address (target, inferior_ptid,
1207                                                    spe_context_lm_addr,
1208                                                    spe_context_offset);
1209           spe_context_cache_ptid = inferior_ptid;
1210         }
1211
1212       CATCH (ex, RETURN_MASK_ERROR)
1213         {
1214           return 0;
1215         }
1216       END_CATCH
1217     }
1218
1219   /* Read variable value.  */
1220   if (target_read_memory (spe_context_cache_address, buf, wordsize) == 0)
1221     spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1222
1223   /* Cyle through to N'th linked list element.  */
1224   for (i = 0; i < n && spe_context; i++)
1225     if (target_read_memory (spe_context + align_up (12, wordsize),
1226                             buf, wordsize) == 0)
1227       spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1228     else
1229       spe_context = 0;
1230
1231   /* Read current context.  */
1232   if (spe_context
1233       && target_read_memory (spe_context, buf, 12) != 0)
1234     spe_context = 0;
1235
1236   /* Extract data elements.  */
1237   if (spe_context)
1238     {
1239       if (id)
1240         *id = extract_signed_integer (buf, 4, byte_order);
1241       if (npc)
1242         *npc = extract_unsigned_integer (buf + 4, 4, byte_order);
1243     }
1244
1245   return spe_context;
1246 }
1247
1248
1249 /* Cell/B.E. cross-architecture unwinder support.  */
1250
1251 struct ppu2spu_cache
1252 {
1253   struct frame_id frame_id;
1254   struct regcache *regcache;
1255 };
1256
1257 static struct gdbarch *
1258 ppu2spu_prev_arch (struct frame_info *this_frame, void **this_cache)
1259 {
1260   struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
1261   return get_regcache_arch (cache->regcache);
1262 }
1263
1264 static void
1265 ppu2spu_this_id (struct frame_info *this_frame,
1266                  void **this_cache, struct frame_id *this_id)
1267 {
1268   struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
1269   *this_id = cache->frame_id;
1270 }
1271
1272 static struct value *
1273 ppu2spu_prev_register (struct frame_info *this_frame,
1274                        void **this_cache, int regnum)
1275 {
1276   struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
1277   struct gdbarch *gdbarch = get_regcache_arch (cache->regcache);
1278   gdb_byte *buf;
1279
1280   buf = (gdb_byte *) alloca (register_size (gdbarch, regnum));
1281
1282   if (regnum < gdbarch_num_regs (gdbarch))
1283     regcache_raw_read (cache->regcache, regnum, buf);
1284   else
1285     gdbarch_pseudo_register_read (gdbarch, cache->regcache, regnum, buf);
1286
1287   return frame_unwind_got_bytes (this_frame, regnum, buf);
1288 }
1289
1290 struct ppu2spu_data
1291 {
1292   struct gdbarch *gdbarch;
1293   int id;
1294   unsigned int npc;
1295   gdb_byte gprs[128*16];
1296 };
1297
1298 static enum register_status
1299 ppu2spu_unwind_register (void *src, int regnum, gdb_byte *buf)
1300 {
1301   struct ppu2spu_data *data = (struct ppu2spu_data *) src;
1302   enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
1303
1304   if (regnum >= 0 && regnum < SPU_NUM_GPRS)
1305     memcpy (buf, data->gprs + 16*regnum, 16);
1306   else if (regnum == SPU_ID_REGNUM)
1307     store_unsigned_integer (buf, 4, byte_order, data->id);
1308   else if (regnum == SPU_PC_REGNUM)
1309     store_unsigned_integer (buf, 4, byte_order, data->npc);
1310   else
1311     return REG_UNAVAILABLE;
1312
1313   return REG_VALID;
1314 }
1315
1316 static int
1317 ppu2spu_sniffer (const struct frame_unwind *self,
1318                  struct frame_info *this_frame, void **this_prologue_cache)
1319 {
1320   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1321   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1322   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1323   struct ppu2spu_data data;
1324   struct frame_info *fi;
1325   CORE_ADDR base, func, backchain, spe_context;
1326   gdb_byte buf[8];
1327   int n = 0;
1328
1329   /* Count the number of SPU contexts already in the frame chain.  */
1330   for (fi = get_next_frame (this_frame); fi; fi = get_next_frame (fi))
1331     if (get_frame_type (fi) == ARCH_FRAME
1332         && gdbarch_bfd_arch_info (get_frame_arch (fi))->arch == bfd_arch_spu)
1333       n++;
1334
1335   base = get_frame_sp (this_frame);
1336   func = get_frame_pc (this_frame);
1337   if (target_read_memory (base, buf, tdep->wordsize))
1338     return 0;
1339   backchain = extract_unsigned_integer (buf, tdep->wordsize, byte_order);
1340
1341   spe_context = ppc_linux_spe_context (tdep->wordsize, byte_order,
1342                                        n, &data.id, &data.npc);
1343   if (spe_context && base <= spe_context && spe_context < backchain)
1344     {
1345       char annex[32];
1346
1347       /* Find gdbarch for SPU.  */
1348       struct gdbarch_info info;
1349       gdbarch_info_init (&info);
1350       info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
1351       info.byte_order = BFD_ENDIAN_BIG;
1352       info.osabi = GDB_OSABI_LINUX;
1353       info.id = &data.id;
1354       data.gdbarch = gdbarch_find_by_info (info);
1355       if (!data.gdbarch)
1356         return 0;
1357
1358       xsnprintf (annex, sizeof annex, "%d/regs", data.id);
1359       if (target_read (&current_target, TARGET_OBJECT_SPU, annex,
1360                        data.gprs, 0, sizeof data.gprs)
1361           == sizeof data.gprs)
1362         {
1363           struct ppu2spu_cache *cache
1364             = FRAME_OBSTACK_CALLOC (1, struct ppu2spu_cache);
1365
1366           struct address_space *aspace = get_frame_address_space (this_frame);
1367           struct regcache *regcache = regcache_xmalloc (data.gdbarch, aspace);
1368           struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
1369           regcache_save (regcache, ppu2spu_unwind_register, &data);
1370           discard_cleanups (cleanups);
1371
1372           cache->frame_id = frame_id_build (base, func);
1373           cache->regcache = regcache;
1374           *this_prologue_cache = cache;
1375           return 1;
1376         }
1377     }
1378
1379   return 0;
1380 }
1381
1382 static void
1383 ppu2spu_dealloc_cache (struct frame_info *self, void *this_cache)
1384 {
1385   struct ppu2spu_cache *cache = (struct ppu2spu_cache *) this_cache;
1386   regcache_xfree (cache->regcache);
1387 }
1388
1389 static const struct frame_unwind ppu2spu_unwind = {
1390   ARCH_FRAME,
1391   default_frame_unwind_stop_reason,
1392   ppu2spu_this_id,
1393   ppu2spu_prev_register,
1394   NULL,
1395   ppu2spu_sniffer,
1396   ppu2spu_dealloc_cache,
1397   ppu2spu_prev_arch,
1398 };
1399
1400 /* Initialize linux_record_tdep if not initialized yet.
1401    WORDSIZE is 4 or 8 for 32- or 64-bit PowerPC Linux respectively.
1402    Sizes of data structures are initialized accordingly.  */
1403
1404 static void
1405 ppc_init_linux_record_tdep (struct linux_record_tdep *record_tdep,
1406                             int wordsize)
1407 {
1408   /* Simply return if it had been initialized.  */
1409   if (record_tdep->size_pointer != 0)
1410     return;
1411
1412   /* These values are the size of the type that will be used in a system
1413      call.  They are obtained from Linux Kernel source.  */
1414
1415   if (wordsize == 8)
1416     {
1417       record_tdep->size_pointer = 8;
1418       record_tdep->size__old_kernel_stat = 32;
1419       record_tdep->size_tms = 32;
1420       record_tdep->size_loff_t = 8;
1421       record_tdep->size_flock = 32;
1422       record_tdep->size_oldold_utsname = 45;
1423       record_tdep->size_ustat = 32;
1424       record_tdep->size_old_sigaction = 32;
1425       record_tdep->size_old_sigset_t = 8;
1426       record_tdep->size_rlimit = 16;
1427       record_tdep->size_rusage = 144;
1428       record_tdep->size_timeval = 16;
1429       record_tdep->size_timezone = 8;
1430       record_tdep->size_old_gid_t = 4;
1431       record_tdep->size_old_uid_t = 4;
1432       record_tdep->size_fd_set = 128;
1433       record_tdep->size_old_dirent = 280;
1434       record_tdep->size_statfs = 120;
1435       record_tdep->size_statfs64 = 120;
1436       record_tdep->size_sockaddr = 16;
1437       record_tdep->size_int = 4;
1438       record_tdep->size_long = 8;
1439       record_tdep->size_ulong = 8;
1440       record_tdep->size_msghdr = 56;
1441       record_tdep->size_itimerval = 32;
1442       record_tdep->size_stat = 144;
1443       record_tdep->size_old_utsname = 325;
1444       record_tdep->size_sysinfo = 112;
1445       record_tdep->size_msqid_ds = 120;
1446       record_tdep->size_shmid_ds = 112;
1447       record_tdep->size_new_utsname = 390;
1448       record_tdep->size_timex = 208;
1449       record_tdep->size_mem_dqinfo = 24;
1450       record_tdep->size_if_dqblk = 72;
1451       record_tdep->size_fs_quota_stat = 80;
1452       record_tdep->size_timespec = 16;
1453       record_tdep->size_pollfd = 8;
1454       record_tdep->size_NFS_FHSIZE = 32;
1455       record_tdep->size_knfsd_fh = 132;
1456       record_tdep->size_TASK_COMM_LEN = 16;
1457       record_tdep->size_sigaction = 32;
1458       record_tdep->size_sigset_t = 8;
1459       record_tdep->size_siginfo_t = 128;
1460       record_tdep->size_cap_user_data_t = 8;
1461       record_tdep->size_stack_t = 24;
1462       record_tdep->size_off_t = 8;
1463       record_tdep->size_stat64 = 104;
1464       record_tdep->size_gid_t = 4;
1465       record_tdep->size_uid_t = 4;
1466       record_tdep->size_PAGE_SIZE = 0x10000;    /* 64KB */
1467       record_tdep->size_flock64 = 32;
1468       record_tdep->size_io_event = 32;
1469       record_tdep->size_iocb = 64;
1470       record_tdep->size_epoll_event = 16;
1471       record_tdep->size_itimerspec = 32;
1472       record_tdep->size_mq_attr = 64;
1473       record_tdep->size_termios = 44;
1474       record_tdep->size_pid_t = 4;
1475       record_tdep->size_winsize = 8;
1476       record_tdep->size_serial_struct = 72;
1477       record_tdep->size_serial_icounter_struct = 80;
1478       record_tdep->size_size_t = 8;
1479       record_tdep->size_iovec = 16;
1480       record_tdep->size_time_t = 8;
1481     }
1482   else if (wordsize == 4)
1483     {
1484       record_tdep->size_pointer = 4;
1485       record_tdep->size__old_kernel_stat = 32;
1486       record_tdep->size_tms = 16;
1487       record_tdep->size_loff_t = 8;
1488       record_tdep->size_flock = 16;
1489       record_tdep->size_oldold_utsname = 45;
1490       record_tdep->size_ustat = 20;
1491       record_tdep->size_old_sigaction = 16;
1492       record_tdep->size_old_sigset_t = 4;
1493       record_tdep->size_rlimit = 8;
1494       record_tdep->size_rusage = 72;
1495       record_tdep->size_timeval = 8;
1496       record_tdep->size_timezone = 8;
1497       record_tdep->size_old_gid_t = 4;
1498       record_tdep->size_old_uid_t = 4;
1499       record_tdep->size_fd_set = 128;
1500       record_tdep->size_old_dirent = 268;
1501       record_tdep->size_statfs = 64;
1502       record_tdep->size_statfs64 = 88;
1503       record_tdep->size_sockaddr = 16;
1504       record_tdep->size_int = 4;
1505       record_tdep->size_long = 4;
1506       record_tdep->size_ulong = 4;
1507       record_tdep->size_msghdr = 28;
1508       record_tdep->size_itimerval = 16;
1509       record_tdep->size_stat = 88;
1510       record_tdep->size_old_utsname = 325;
1511       record_tdep->size_sysinfo = 64;
1512       record_tdep->size_msqid_ds = 68;
1513       record_tdep->size_shmid_ds = 60;
1514       record_tdep->size_new_utsname = 390;
1515       record_tdep->size_timex = 128;
1516       record_tdep->size_mem_dqinfo = 24;
1517       record_tdep->size_if_dqblk = 72;
1518       record_tdep->size_fs_quota_stat = 80;
1519       record_tdep->size_timespec = 8;
1520       record_tdep->size_pollfd = 8;
1521       record_tdep->size_NFS_FHSIZE = 32;
1522       record_tdep->size_knfsd_fh = 132;
1523       record_tdep->size_TASK_COMM_LEN = 16;
1524       record_tdep->size_sigaction = 20;
1525       record_tdep->size_sigset_t = 8;
1526       record_tdep->size_siginfo_t = 128;
1527       record_tdep->size_cap_user_data_t = 4;
1528       record_tdep->size_stack_t = 12;
1529       record_tdep->size_off_t = 4;
1530       record_tdep->size_stat64 = 104;
1531       record_tdep->size_gid_t = 4;
1532       record_tdep->size_uid_t = 4;
1533       record_tdep->size_PAGE_SIZE = 0x10000;    /* 64KB */
1534       record_tdep->size_flock64 = 32;
1535       record_tdep->size_io_event = 32;
1536       record_tdep->size_iocb = 64;
1537       record_tdep->size_epoll_event = 16;
1538       record_tdep->size_itimerspec = 16;
1539       record_tdep->size_mq_attr = 32;
1540       record_tdep->size_termios = 44;
1541       record_tdep->size_pid_t = 4;
1542       record_tdep->size_winsize = 8;
1543       record_tdep->size_serial_struct = 60;
1544       record_tdep->size_serial_icounter_struct = 80;
1545       record_tdep->size_size_t = 4;
1546       record_tdep->size_iovec = 8;
1547       record_tdep->size_time_t = 4;
1548     }
1549   else
1550     internal_error (__FILE__, __LINE__, _("unexpected wordsize"));
1551
1552   /* These values are the second argument of system call "sys_fcntl"
1553      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
1554   record_tdep->fcntl_F_GETLK = 5;
1555   record_tdep->fcntl_F_GETLK64 = 12;
1556   record_tdep->fcntl_F_SETLK64 = 13;
1557   record_tdep->fcntl_F_SETLKW64 = 14;
1558
1559   record_tdep->arg1 = PPC_R0_REGNUM + 3;
1560   record_tdep->arg2 = PPC_R0_REGNUM + 4;
1561   record_tdep->arg3 = PPC_R0_REGNUM + 5;
1562   record_tdep->arg4 = PPC_R0_REGNUM + 6;
1563   record_tdep->arg5 = PPC_R0_REGNUM + 7;
1564   record_tdep->arg6 = PPC_R0_REGNUM + 8;
1565
1566   /* These values are the second argument of system call "sys_ioctl".
1567      They are obtained from Linux Kernel source.
1568      See arch/powerpc/include/uapi/asm/ioctls.h.  */
1569   record_tdep->ioctl_TCGETS = 0x403c7413;
1570   record_tdep->ioctl_TCSETS = 0x803c7414;
1571   record_tdep->ioctl_TCSETSW = 0x803c7415;
1572   record_tdep->ioctl_TCSETSF = 0x803c7416;
1573   record_tdep->ioctl_TCGETA = 0x40147417;
1574   record_tdep->ioctl_TCSETA = 0x80147418;
1575   record_tdep->ioctl_TCSETAW = 0x80147419;
1576   record_tdep->ioctl_TCSETAF = 0x8014741c;
1577   record_tdep->ioctl_TCSBRK = 0x2000741d;
1578   record_tdep->ioctl_TCXONC = 0x2000741e;
1579   record_tdep->ioctl_TCFLSH = 0x2000741f;
1580   record_tdep->ioctl_TIOCEXCL = 0x540c;
1581   record_tdep->ioctl_TIOCNXCL = 0x540d;
1582   record_tdep->ioctl_TIOCSCTTY = 0x540e;
1583   record_tdep->ioctl_TIOCGPGRP = 0x40047477;
1584   record_tdep->ioctl_TIOCSPGRP = 0x80047476;
1585   record_tdep->ioctl_TIOCOUTQ = 0x40047473;
1586   record_tdep->ioctl_TIOCSTI = 0x5412;
1587   record_tdep->ioctl_TIOCGWINSZ = 0x40087468;
1588   record_tdep->ioctl_TIOCSWINSZ = 0x80087467;
1589   record_tdep->ioctl_TIOCMGET = 0x5415;
1590   record_tdep->ioctl_TIOCMBIS = 0x5416;
1591   record_tdep->ioctl_TIOCMBIC = 0x5417;
1592   record_tdep->ioctl_TIOCMSET = 0x5418;
1593   record_tdep->ioctl_TIOCGSOFTCAR = 0x5419;
1594   record_tdep->ioctl_TIOCSSOFTCAR = 0x541a;
1595   record_tdep->ioctl_FIONREAD = 0x4004667f;
1596   record_tdep->ioctl_TIOCINQ = 0x4004667f;
1597   record_tdep->ioctl_TIOCLINUX = 0x541c;
1598   record_tdep->ioctl_TIOCCONS = 0x541d;
1599   record_tdep->ioctl_TIOCGSERIAL = 0x541e;
1600   record_tdep->ioctl_TIOCSSERIAL = 0x541f;
1601   record_tdep->ioctl_TIOCPKT = 0x5420;
1602   record_tdep->ioctl_FIONBIO = 0x8004667e;
1603   record_tdep->ioctl_TIOCNOTTY = 0x5422;
1604   record_tdep->ioctl_TIOCSETD = 0x5423;
1605   record_tdep->ioctl_TIOCGETD = 0x5424;
1606   record_tdep->ioctl_TCSBRKP = 0x5425;
1607   record_tdep->ioctl_TIOCSBRK = 0x5427;
1608   record_tdep->ioctl_TIOCCBRK = 0x5428;
1609   record_tdep->ioctl_TIOCGSID = 0x5429;
1610   record_tdep->ioctl_TIOCGPTN = 0x40045430;
1611   record_tdep->ioctl_TIOCSPTLCK = 0x80045431;
1612   record_tdep->ioctl_FIONCLEX = 0x20006602;
1613   record_tdep->ioctl_FIOCLEX = 0x20006601;
1614   record_tdep->ioctl_FIOASYNC = 0x8004667d;
1615   record_tdep->ioctl_TIOCSERCONFIG = 0x5453;
1616   record_tdep->ioctl_TIOCSERGWILD = 0x5454;
1617   record_tdep->ioctl_TIOCSERSWILD = 0x5455;
1618   record_tdep->ioctl_TIOCGLCKTRMIOS = 0x5456;
1619   record_tdep->ioctl_TIOCSLCKTRMIOS = 0x5457;
1620   record_tdep->ioctl_TIOCSERGSTRUCT = 0x5458;
1621   record_tdep->ioctl_TIOCSERGETLSR = 0x5459;
1622   record_tdep->ioctl_TIOCSERGETMULTI = 0x545a;
1623   record_tdep->ioctl_TIOCSERSETMULTI = 0x545b;
1624   record_tdep->ioctl_TIOCMIWAIT = 0x545c;
1625   record_tdep->ioctl_TIOCGICOUNT = 0x545d;
1626   record_tdep->ioctl_FIOQSIZE = 0x40086680;
1627 }
1628
1629 /* Return a floating-point format for a floating-point variable of
1630    length LEN in bits.  If non-NULL, NAME is the name of its type.
1631    If no suitable type is found, return NULL.  */
1632
1633 const struct floatformat **
1634 ppc_floatformat_for_type (struct gdbarch *gdbarch,
1635                           const char *name, int len)
1636 {
1637   if (len == 128 && name)
1638     if (strcmp (name, "__float128") == 0
1639         || strcmp (name, "_Float128") == 0
1640         || strcmp (name, "_Float64x") == 0
1641         || strcmp (name, "complex _Float128") == 0
1642         || strcmp (name, "complex _Float64x") == 0)
1643       return floatformats_ia64_quad;
1644
1645   return default_floatformat_for_type (gdbarch, name, len);
1646 }
1647
1648 static void
1649 ppc_linux_init_abi (struct gdbarch_info info,
1650                     struct gdbarch *gdbarch)
1651 {
1652   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1653   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
1654   static const char *const stap_integer_prefixes[] = { "i", NULL };
1655   static const char *const stap_register_indirection_prefixes[] = { "(",
1656                                                                     NULL };
1657   static const char *const stap_register_indirection_suffixes[] = { ")",
1658                                                                     NULL };
1659
1660   linux_init_abi (info, gdbarch);
1661
1662   /* PPC GNU/Linux uses either 64-bit or 128-bit long doubles; where
1663      128-bit, they are IBM long double, not IEEE quad long double as
1664      in the System V ABI PowerPC Processor Supplement.  We can safely
1665      let them default to 128-bit, since the debug info will give the
1666      size of type actually used in each case.  */
1667   set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
1668   set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
1669
1670   /* Support for floating-point data type variants.  */
1671   set_gdbarch_floatformat_for_type (gdbarch, ppc_floatformat_for_type);
1672
1673   /* Handle inferior calls during interrupted system calls.  */
1674   set_gdbarch_write_pc (gdbarch, ppc_linux_write_pc);
1675
1676   /* Get the syscall number from the arch's register.  */
1677   set_gdbarch_get_syscall_number (gdbarch, ppc_linux_get_syscall_number);
1678
1679   /* SystemTap functions.  */
1680   set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes);
1681   set_gdbarch_stap_register_indirection_prefixes (gdbarch,
1682                                           stap_register_indirection_prefixes);
1683   set_gdbarch_stap_register_indirection_suffixes (gdbarch,
1684                                           stap_register_indirection_suffixes);
1685   set_gdbarch_stap_gdb_register_prefix (gdbarch, "r");
1686   set_gdbarch_stap_is_single_operand (gdbarch, ppc_stap_is_single_operand);
1687   set_gdbarch_stap_parse_special_token (gdbarch,
1688                                         ppc_stap_parse_special_token);
1689
1690   if (tdep->wordsize == 4)
1691     {
1692       /* Until November 2001, gcc did not comply with the 32 bit SysV
1693          R4 ABI requirement that structures less than or equal to 8
1694          bytes should be returned in registers.  Instead GCC was using
1695          the AIX/PowerOpen ABI - everything returned in memory
1696          (well ignoring vectors that is).  When this was corrected, it
1697          wasn't fixed for GNU/Linux native platform.  Use the
1698          PowerOpen struct convention.  */
1699       set_gdbarch_return_value (gdbarch, ppc_linux_return_value);
1700
1701       set_gdbarch_memory_remove_breakpoint (gdbarch,
1702                                             ppc_linux_memory_remove_breakpoint);
1703
1704       /* Shared library handling.  */
1705       set_gdbarch_skip_trampoline_code (gdbarch, ppc_skip_trampoline_code);
1706       set_solib_svr4_fetch_link_map_offsets
1707         (gdbarch, svr4_ilp32_fetch_link_map_offsets);
1708
1709       /* Setting the correct XML syscall filename.  */
1710       set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_PPC);
1711
1712       /* Trampolines.  */
1713       tramp_frame_prepend_unwinder (gdbarch,
1714                                     &ppc32_linux_sigaction_tramp_frame);
1715       tramp_frame_prepend_unwinder (gdbarch,
1716                                     &ppc32_linux_sighandler_tramp_frame);
1717
1718       /* BFD target for core files.  */
1719       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1720         set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpcle");
1721       else
1722         set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc");
1723
1724       if (powerpc_so_ops.in_dynsym_resolve_code == NULL)
1725         {
1726           powerpc_so_ops = svr4_so_ops;
1727           /* Override dynamic resolve function.  */
1728           powerpc_so_ops.in_dynsym_resolve_code =
1729             powerpc_linux_in_dynsym_resolve_code;
1730         }
1731       set_solib_ops (gdbarch, &powerpc_so_ops);
1732
1733       set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
1734     }
1735   
1736   if (tdep->wordsize == 8)
1737     {
1738       if (tdep->elf_abi == POWERPC_ELF_V1)
1739         {
1740           /* Handle PPC GNU/Linux 64-bit function pointers (which are really
1741              function descriptors).  */
1742           set_gdbarch_convert_from_func_ptr_addr
1743             (gdbarch, ppc64_convert_from_func_ptr_addr);
1744
1745           set_gdbarch_elf_make_msymbol_special
1746             (gdbarch, ppc64_elf_make_msymbol_special);
1747         }
1748       else
1749         {
1750           set_gdbarch_elf_make_msymbol_special
1751             (gdbarch, ppc_elfv2_elf_make_msymbol_special);
1752
1753           set_gdbarch_skip_entrypoint (gdbarch, ppc_elfv2_skip_entrypoint);
1754         }
1755
1756       /* Shared library handling.  */
1757       set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);
1758       set_solib_svr4_fetch_link_map_offsets
1759         (gdbarch, svr4_lp64_fetch_link_map_offsets);
1760
1761       /* Setting the correct XML syscall filename.  */
1762       set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_PPC64);
1763
1764       /* Trampolines.  */
1765       tramp_frame_prepend_unwinder (gdbarch,
1766                                     &ppc64_linux_sigaction_tramp_frame);
1767       tramp_frame_prepend_unwinder (gdbarch,
1768                                     &ppc64_linux_sighandler_tramp_frame);
1769
1770       /* BFD target for core files.  */
1771       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1772         set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpcle");
1773       else
1774         set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc");
1775     }
1776
1777   /* PPC32 uses a different prpsinfo32 compared to most other Linux
1778      archs.  */
1779   if (tdep->wordsize == 4)
1780     set_gdbarch_elfcore_write_linux_prpsinfo (gdbarch,
1781                                               elfcore_write_ppc_linux_prpsinfo32);
1782
1783   set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
1784   set_gdbarch_iterate_over_regset_sections (gdbarch,
1785                                             ppc_linux_iterate_over_regset_sections);
1786
1787   /* Enable TLS support.  */
1788   set_gdbarch_fetch_tls_load_module_address (gdbarch,
1789                                              svr4_fetch_objfile_link_map);
1790
1791   if (tdesc_data)
1792     {
1793       const struct tdesc_feature *feature;
1794
1795       /* If we have target-described registers, then we can safely
1796          reserve a number for PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM
1797          (whether they are described or not).  */
1798       gdb_assert (gdbarch_num_regs (gdbarch) <= PPC_ORIG_R3_REGNUM);
1799       set_gdbarch_num_regs (gdbarch, PPC_TRAP_REGNUM + 1);
1800
1801       /* If they are present, then assign them to the reserved number.  */
1802       feature = tdesc_find_feature (info.target_desc,
1803                                     "org.gnu.gdb.power.linux");
1804       if (feature != NULL)
1805         {
1806           tdesc_numbered_register (feature, tdesc_data,
1807                                    PPC_ORIG_R3_REGNUM, "orig_r3");
1808           tdesc_numbered_register (feature, tdesc_data,
1809                                    PPC_TRAP_REGNUM, "trap");
1810         }
1811     }
1812
1813   /* Enable Cell/B.E. if supported by the target.  */
1814   if (tdesc_compatible_p (info.target_desc,
1815                           bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu)))
1816     {
1817       /* Cell/B.E. multi-architecture support.  */
1818       set_spu_solib_ops (gdbarch);
1819
1820       /* Cell/B.E. cross-architecture unwinder support.  */
1821       frame_unwind_prepend_unwinder (gdbarch, &ppu2spu_unwind);
1822     }
1823
1824   set_gdbarch_displaced_step_location (gdbarch,
1825                                        linux_displaced_step_location);
1826
1827   /* Support reverse debugging.  */
1828   set_gdbarch_process_record (gdbarch, ppc_process_record);
1829   set_gdbarch_process_record_signal (gdbarch, ppc_linux_record_signal);
1830   tdep->ppc_syscall_record = ppc_linux_syscall_record;
1831
1832   ppc_init_linux_record_tdep (&ppc_linux_record_tdep, 4);
1833   ppc_init_linux_record_tdep (&ppc64_linux_record_tdep, 8);
1834 }
1835
1836 /* Provide a prototype to silence -Wmissing-prototypes.  */
1837 extern initialize_file_ftype _initialize_ppc_linux_tdep;
1838
1839 void
1840 _initialize_ppc_linux_tdep (void)
1841 {
1842   /* Register for all sub-familes of the POWER/PowerPC: 32-bit and
1843      64-bit PowerPC, and the older rs6k.  */
1844   gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_LINUX,
1845                          ppc_linux_init_abi);
1846   gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64, GDB_OSABI_LINUX,
1847                          ppc_linux_init_abi);
1848   gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
1849                          ppc_linux_init_abi);
1850
1851   /* Attach to observers to track __spe_current_active_context.  */
1852   observer_attach_inferior_created (ppc_linux_spe_context_inferior_created);
1853   observer_attach_solib_loaded (ppc_linux_spe_context_solib_loaded);
1854   observer_attach_solib_unloaded (ppc_linux_spe_context_solib_unloaded);
1855
1856   /* Initialize the Linux target descriptions.  */
1857   initialize_tdesc_powerpc_32l ();
1858   initialize_tdesc_powerpc_altivec32l ();
1859   initialize_tdesc_powerpc_cell32l ();
1860   initialize_tdesc_powerpc_vsx32l ();
1861   initialize_tdesc_powerpc_isa205_32l ();
1862   initialize_tdesc_powerpc_isa205_altivec32l ();
1863   initialize_tdesc_powerpc_isa205_vsx32l ();
1864   initialize_tdesc_powerpc_64l ();
1865   initialize_tdesc_powerpc_altivec64l ();
1866   initialize_tdesc_powerpc_cell64l ();
1867   initialize_tdesc_powerpc_vsx64l ();
1868   initialize_tdesc_powerpc_isa205_64l ();
1869   initialize_tdesc_powerpc_isa205_altivec64l ();
1870   initialize_tdesc_powerpc_isa205_vsx64l ();
1871   initialize_tdesc_powerpc_e500l ();
1872 }