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