]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/ppc-linux-tdep.c
* ppc-linux-tdep.c (bsd_uthread_solib_loaded): Always pass 0 for
[thirdparty/binutils-gdb.git] / gdb / ppc-linux-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3 Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "frame.h"
24 #include "inferior.h"
25 #include "symtab.h"
26 #include "target.h"
27 #include "gdbcore.h"
28 #include "gdbcmd.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "regcache.h"
32 #include "value.h"
33 #include "osabi.h"
34 #include "regset.h"
35 #include "solib-svr4.h"
36 #include "solib-spu.h"
37 #include "solib.h"
38 #include "solist.h"
39 #include "ppc-tdep.h"
40 #include "ppc-linux-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 "exceptions.h"
48 #include "arch-utils.h"
49 #include "spu-tdep.h"
50 #include "xml-syscall.h"
51
52 #include "features/rs6000/powerpc-32l.c"
53 #include "features/rs6000/powerpc-altivec32l.c"
54 #include "features/rs6000/powerpc-cell32l.c"
55 #include "features/rs6000/powerpc-vsx32l.c"
56 #include "features/rs6000/powerpc-isa205-32l.c"
57 #include "features/rs6000/powerpc-isa205-altivec32l.c"
58 #include "features/rs6000/powerpc-isa205-vsx32l.c"
59 #include "features/rs6000/powerpc-64l.c"
60 #include "features/rs6000/powerpc-altivec64l.c"
61 #include "features/rs6000/powerpc-cell64l.c"
62 #include "features/rs6000/powerpc-vsx64l.c"
63 #include "features/rs6000/powerpc-isa205-64l.c"
64 #include "features/rs6000/powerpc-isa205-altivec64l.c"
65 #include "features/rs6000/powerpc-isa205-vsx64l.c"
66 #include "features/rs6000/powerpc-e500l.c"
67
68 /* The syscall's XML filename for PPC and PPC64. */
69 #define XML_SYSCALL_FILENAME_PPC "syscalls/ppc-linux.xml"
70 #define XML_SYSCALL_FILENAME_PPC64 "syscalls/ppc64-linux.xml"
71
72 /* ppc_linux_memory_remove_breakpoints attempts to remove a breakpoint
73 in much the same fashion as memory_remove_breakpoint in mem-break.c,
74 but is careful not to write back the previous contents if the code
75 in question has changed in between inserting the breakpoint and
76 removing it.
77
78 Here is the problem that we're trying to solve...
79
80 Once upon a time, before introducing this function to remove
81 breakpoints from the inferior, setting a breakpoint on a shared
82 library function prior to running the program would not work
83 properly. In order to understand the problem, it is first
84 necessary to understand a little bit about dynamic linking on
85 this platform.
86
87 A call to a shared library function is accomplished via a bl
88 (branch-and-link) instruction whose branch target is an entry
89 in the procedure linkage table (PLT). The PLT in the object
90 file is uninitialized. To gdb, prior to running the program, the
91 entries in the PLT are all zeros.
92
93 Once the program starts running, the shared libraries are loaded
94 and the procedure linkage table is initialized, but the entries in
95 the table are not (necessarily) resolved. Once a function is
96 actually called, the code in the PLT is hit and the function is
97 resolved. In order to better illustrate this, an example is in
98 order; the following example is from the gdb testsuite.
99
100 We start the program shmain.
101
102 [kev@arroyo testsuite]$ ../gdb gdb.base/shmain
103 [...]
104
105 We place two breakpoints, one on shr1 and the other on main.
106
107 (gdb) b shr1
108 Breakpoint 1 at 0x100409d4
109 (gdb) b main
110 Breakpoint 2 at 0x100006a0: file gdb.base/shmain.c, line 44.
111
112 Examine the instruction (and the immediatly following instruction)
113 upon which the breakpoint was placed. Note that the PLT entry
114 for shr1 contains zeros.
115
116 (gdb) x/2i 0x100409d4
117 0x100409d4 <shr1>: .long 0x0
118 0x100409d8 <shr1+4>: .long 0x0
119
120 Now run 'til main.
121
122 (gdb) r
123 Starting program: gdb.base/shmain
124 Breakpoint 1 at 0xffaf790: file gdb.base/shr1.c, line 19.
125
126 Breakpoint 2, main ()
127 at gdb.base/shmain.c:44
128 44 g = 1;
129
130 Examine the PLT again. Note that the loading of the shared
131 library has initialized the PLT to code which loads a constant
132 (which I think is an index into the GOT) into r11 and then
133 branchs a short distance to the code which actually does the
134 resolving.
135
136 (gdb) x/2i 0x100409d4
137 0x100409d4 <shr1>: li r11,4
138 0x100409d8 <shr1+4>: b 0x10040984 <sg+4>
139 (gdb) c
140 Continuing.
141
142 Breakpoint 1, shr1 (x=1)
143 at gdb.base/shr1.c:19
144 19 l = 1;
145
146 Now we've hit the breakpoint at shr1. (The breakpoint was
147 reset from the PLT entry to the actual shr1 function after the
148 shared library was loaded.) Note that the PLT entry has been
149 resolved to contain a branch that takes us directly to shr1.
150 (The real one, not the PLT entry.)
151
152 (gdb) x/2i 0x100409d4
153 0x100409d4 <shr1>: b 0xffaf76c <shr1>
154 0x100409d8 <shr1+4>: b 0x10040984 <sg+4>
155
156 The thing to note here is that the PLT entry for shr1 has been
157 changed twice.
158
159 Now the problem should be obvious. GDB places a breakpoint (a
160 trap instruction) on the zero value of the PLT entry for shr1.
161 Later on, after the shared library had been loaded and the PLT
162 initialized, GDB gets a signal indicating this fact and attempts
163 (as it always does when it stops) to remove all the breakpoints.
164
165 The breakpoint removal was causing the former contents (a zero
166 word) to be written back to the now initialized PLT entry thus
167 destroying a portion of the initialization that had occurred only a
168 short time ago. When execution continued, the zero word would be
169 executed as an instruction an an illegal instruction trap was
170 generated instead. (0 is not a legal instruction.)
171
172 The fix for this problem was fairly straightforward. The function
173 memory_remove_breakpoint from mem-break.c was copied to this file,
174 modified slightly, and renamed to ppc_linux_memory_remove_breakpoint.
175 In tm-linux.h, MEMORY_REMOVE_BREAKPOINT is defined to call this new
176 function.
177
178 The differences between ppc_linux_memory_remove_breakpoint () and
179 memory_remove_breakpoint () are minor. All that the former does
180 that the latter does not is check to make sure that the breakpoint
181 location actually contains a breakpoint (trap instruction) prior
182 to attempting to write back the old contents. If it does contain
183 a trap instruction, we allow the old contents to be written back.
184 Otherwise, we silently do nothing.
185
186 The big question is whether memory_remove_breakpoint () should be
187 changed to have the same functionality. The downside is that more
188 traffic is generated for remote targets since we'll have an extra
189 fetch of a memory word each time a breakpoint is removed.
190
191 For the time being, we'll leave this self-modifying-code-friendly
192 version in ppc-linux-tdep.c, but it ought to be migrated somewhere
193 else in the event that some other platform has similar needs with
194 regard to removing breakpoints in some potentially self modifying
195 code. */
196 static int
197 ppc_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
198 struct bp_target_info *bp_tgt)
199 {
200 CORE_ADDR addr = bp_tgt->placed_address;
201 const unsigned char *bp;
202 int val;
203 int bplen;
204 gdb_byte old_contents[BREAKPOINT_MAX];
205 struct cleanup *cleanup;
206
207 /* Determine appropriate breakpoint contents and size for this address. */
208 bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
209 if (bp == NULL)
210 error (_("Software breakpoints not implemented for this target."));
211
212 /* Make sure we see the memory breakpoints. */
213 cleanup = make_show_memory_breakpoints_cleanup (1);
214 val = target_read_memory (addr, old_contents, bplen);
215
216 /* If our breakpoint is no longer at the address, this means that the
217 program modified the code on us, so it is wrong to put back the
218 old value */
219 if (val == 0 && memcmp (bp, old_contents, bplen) == 0)
220 val = target_write_memory (addr, bp_tgt->shadow_contents, bplen);
221
222 do_cleanups (cleanup);
223 return val;
224 }
225
226 /* For historic reasons, PPC 32 GNU/Linux follows PowerOpen rather
227 than the 32 bit SYSV R4 ABI structure return convention - all
228 structures, no matter their size, are put in memory. Vectors,
229 which were added later, do get returned in a register though. */
230
231 static enum return_value_convention
232 ppc_linux_return_value (struct gdbarch *gdbarch, struct type *func_type,
233 struct type *valtype, struct regcache *regcache,
234 gdb_byte *readbuf, const gdb_byte *writebuf)
235 {
236 if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
237 || TYPE_CODE (valtype) == TYPE_CODE_UNION)
238 && !((TYPE_LENGTH (valtype) == 16 || TYPE_LENGTH (valtype) == 8)
239 && TYPE_VECTOR (valtype)))
240 return RETURN_VALUE_STRUCT_CONVENTION;
241 else
242 return ppc_sysv_abi_return_value (gdbarch, func_type, valtype, regcache,
243 readbuf, writebuf);
244 }
245
246 /* Macros for matching instructions. Note that, since all the
247 operands are masked off before they're or-ed into the instruction,
248 you can use -1 to make masks. */
249
250 #define insn_d(opcd, rts, ra, d) \
251 ((((opcd) & 0x3f) << 26) \
252 | (((rts) & 0x1f) << 21) \
253 | (((ra) & 0x1f) << 16) \
254 | ((d) & 0xffff))
255
256 #define insn_ds(opcd, rts, ra, d, xo) \
257 ((((opcd) & 0x3f) << 26) \
258 | (((rts) & 0x1f) << 21) \
259 | (((ra) & 0x1f) << 16) \
260 | ((d) & 0xfffc) \
261 | ((xo) & 0x3))
262
263 #define insn_xfx(opcd, rts, spr, xo) \
264 ((((opcd) & 0x3f) << 26) \
265 | (((rts) & 0x1f) << 21) \
266 | (((spr) & 0x1f) << 16) \
267 | (((spr) & 0x3e0) << 6) \
268 | (((xo) & 0x3ff) << 1))
269
270 /* Read a PPC instruction from memory. PPC instructions are always
271 big-endian, no matter what endianness the program is running in, so
272 we can't use read_memory_integer or one of its friends here. */
273 static unsigned int
274 read_insn (CORE_ADDR pc)
275 {
276 unsigned char buf[4];
277
278 read_memory (pc, buf, 4);
279 return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
280 }
281
282
283 /* An instruction to match. */
284 struct insn_pattern
285 {
286 unsigned int mask; /* mask the insn with this... */
287 unsigned int data; /* ...and see if it matches this. */
288 int optional; /* If non-zero, this insn may be absent. */
289 };
290
291 /* Return non-zero if the instructions at PC match the series
292 described in PATTERN, or zero otherwise. PATTERN is an array of
293 'struct insn_pattern' objects, terminated by an entry whose mask is
294 zero.
295
296 When the match is successful, fill INSN[i] with what PATTERN[i]
297 matched. If PATTERN[i] is optional, and the instruction wasn't
298 present, set INSN[i] to 0 (which is not a valid PPC instruction).
299 INSN should have as many elements as PATTERN. Note that, if
300 PATTERN contains optional instructions which aren't present in
301 memory, then INSN will have holes, so INSN[i] isn't necessarily the
302 i'th instruction in memory. */
303 static int
304 insns_match_pattern (CORE_ADDR pc,
305 struct insn_pattern *pattern,
306 unsigned int *insn)
307 {
308 int i;
309
310 for (i = 0; pattern[i].mask; i++)
311 {
312 insn[i] = read_insn (pc);
313 if ((insn[i] & pattern[i].mask) == pattern[i].data)
314 pc += 4;
315 else if (pattern[i].optional)
316 insn[i] = 0;
317 else
318 return 0;
319 }
320
321 return 1;
322 }
323
324
325 /* Return the 'd' field of the d-form instruction INSN, properly
326 sign-extended. */
327 static CORE_ADDR
328 insn_d_field (unsigned int insn)
329 {
330 return ((((CORE_ADDR) insn & 0xffff) ^ 0x8000) - 0x8000);
331 }
332
333
334 /* Return the 'ds' field of the ds-form instruction INSN, with the two
335 zero bits concatenated at the right, and properly
336 sign-extended. */
337 static CORE_ADDR
338 insn_ds_field (unsigned int insn)
339 {
340 return ((((CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
341 }
342
343
344 /* If DESC is the address of a 64-bit PowerPC GNU/Linux function
345 descriptor, return the descriptor's entry point. */
346 static CORE_ADDR
347 ppc64_desc_entry_point (struct gdbarch *gdbarch, CORE_ADDR desc)
348 {
349 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
350 /* The first word of the descriptor is the entry point. */
351 return (CORE_ADDR) read_memory_unsigned_integer (desc, 8, byte_order);
352 }
353
354
355 /* Pattern for the standard linkage function. These are built by
356 build_plt_stub in elf64-ppc.c, whose GLINK argument is always
357 zero. */
358 static struct insn_pattern ppc64_standard_linkage1[] =
359 {
360 /* addis r12, r2, <any> */
361 { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 },
362
363 /* std r2, 40(r1) */
364 { -1, insn_ds (62, 2, 1, 40, 0), 0 },
365
366 /* ld r11, <any>(r12) */
367 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
368
369 /* addis r12, r12, 1 <optional> */
370 { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 },
371
372 /* ld r2, <any>(r12) */
373 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 },
374
375 /* addis r12, r12, 1 <optional> */
376 { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 },
377
378 /* mtctr r11 */
379 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 },
380
381 /* ld r11, <any>(r12) */
382 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
383
384 /* bctr */
385 { -1, 0x4e800420, 0 },
386
387 { 0, 0, 0 }
388 };
389 #define PPC64_STANDARD_LINKAGE1_LEN \
390 (sizeof (ppc64_standard_linkage1) / sizeof (ppc64_standard_linkage1[0]))
391
392 static struct insn_pattern ppc64_standard_linkage2[] =
393 {
394 /* addis r12, r2, <any> */
395 { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 },
396
397 /* std r2, 40(r1) */
398 { -1, insn_ds (62, 2, 1, 40, 0), 0 },
399
400 /* ld r11, <any>(r12) */
401 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
402
403 /* addi r12, r12, <any> <optional> */
404 { insn_d (-1, -1, -1, 0), insn_d (14, 12, 12, 0), 1 },
405
406 /* mtctr r11 */
407 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 },
408
409 /* ld r2, <any>(r12) */
410 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 },
411
412 /* ld r11, <any>(r12) */
413 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
414
415 /* bctr */
416 { -1, 0x4e800420, 0 },
417
418 { 0, 0, 0 }
419 };
420 #define PPC64_STANDARD_LINKAGE2_LEN \
421 (sizeof (ppc64_standard_linkage2) / sizeof (ppc64_standard_linkage2[0]))
422
423 static struct insn_pattern ppc64_standard_linkage3[] =
424 {
425 /* std r2, 40(r1) */
426 { -1, insn_ds (62, 2, 1, 40, 0), 0 },
427
428 /* ld r11, <any>(r2) */
429 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 },
430
431 /* addi r2, r2, <any> <optional> */
432 { insn_d (-1, -1, -1, 0), insn_d (14, 2, 2, 0), 1 },
433
434 /* mtctr r11 */
435 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 },
436
437 /* ld r11, <any>(r2) */
438 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 },
439
440 /* ld r2, <any>(r2) */
441 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 },
442
443 /* bctr */
444 { -1, 0x4e800420, 0 },
445
446 { 0, 0, 0 }
447 };
448 #define PPC64_STANDARD_LINKAGE3_LEN \
449 (sizeof (ppc64_standard_linkage3) / sizeof (ppc64_standard_linkage3[0]))
450
451
452 /* When the dynamic linker is doing lazy symbol resolution, the first
453 call to a function in another object will go like this:
454
455 - The user's function calls the linkage function:
456
457 100007c4: 4b ff fc d5 bl 10000498
458 100007c8: e8 41 00 28 ld r2,40(r1)
459
460 - The linkage function loads the entry point (and other stuff) from
461 the function descriptor in the PLT, and jumps to it:
462
463 10000498: 3d 82 00 00 addis r12,r2,0
464 1000049c: f8 41 00 28 std r2,40(r1)
465 100004a0: e9 6c 80 98 ld r11,-32616(r12)
466 100004a4: e8 4c 80 a0 ld r2,-32608(r12)
467 100004a8: 7d 69 03 a6 mtctr r11
468 100004ac: e9 6c 80 a8 ld r11,-32600(r12)
469 100004b0: 4e 80 04 20 bctr
470
471 - But since this is the first time that PLT entry has been used, it
472 sends control to its glink entry. That loads the number of the
473 PLT entry and jumps to the common glink0 code:
474
475 10000c98: 38 00 00 00 li r0,0
476 10000c9c: 4b ff ff dc b 10000c78
477
478 - The common glink0 code then transfers control to the dynamic
479 linker's fixup code:
480
481 10000c78: e8 41 00 28 ld r2,40(r1)
482 10000c7c: 3d 82 00 00 addis r12,r2,0
483 10000c80: e9 6c 80 80 ld r11,-32640(r12)
484 10000c84: e8 4c 80 88 ld r2,-32632(r12)
485 10000c88: 7d 69 03 a6 mtctr r11
486 10000c8c: e9 6c 80 90 ld r11,-32624(r12)
487 10000c90: 4e 80 04 20 bctr
488
489 Eventually, this code will figure out how to skip all of this,
490 including the dynamic linker. At the moment, we just get through
491 the linkage function. */
492
493 /* If the current thread is about to execute a series of instructions
494 at PC matching the ppc64_standard_linkage pattern, and INSN is the result
495 from that pattern match, return the code address to which the
496 standard linkage function will send them. (This doesn't deal with
497 dynamic linker lazy symbol resolution stubs.) */
498 static CORE_ADDR
499 ppc64_standard_linkage1_target (struct frame_info *frame,
500 CORE_ADDR pc, unsigned int *insn)
501 {
502 struct gdbarch *gdbarch = get_frame_arch (frame);
503 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
504
505 /* The address of the function descriptor this linkage function
506 references. */
507 CORE_ADDR desc
508 = ((CORE_ADDR) get_frame_register_unsigned (frame,
509 tdep->ppc_gp0_regnum + 2)
510 + (insn_d_field (insn[0]) << 16)
511 + insn_ds_field (insn[2]));
512
513 /* The first word of the descriptor is the entry point. Return that. */
514 return ppc64_desc_entry_point (gdbarch, desc);
515 }
516
517 static struct core_regset_section ppc_linux_vsx_regset_sections[] =
518 {
519 { ".reg", 268, "general-purpose" },
520 { ".reg2", 264, "floating-point" },
521 { ".reg-ppc-vmx", 544, "ppc Altivec" },
522 { ".reg-ppc-vsx", 256, "POWER7 VSX" },
523 { NULL, 0}
524 };
525
526 static struct core_regset_section ppc_linux_vmx_regset_sections[] =
527 {
528 { ".reg", 268, "general-purpose" },
529 { ".reg2", 264, "floating-point" },
530 { ".reg-ppc-vmx", 544, "ppc Altivec" },
531 { NULL, 0}
532 };
533
534 static struct core_regset_section ppc_linux_fp_regset_sections[] =
535 {
536 { ".reg", 268, "general-purpose" },
537 { ".reg2", 264, "floating-point" },
538 { NULL, 0}
539 };
540
541 static CORE_ADDR
542 ppc64_standard_linkage2_target (struct frame_info *frame,
543 CORE_ADDR pc, unsigned int *insn)
544 {
545 struct gdbarch *gdbarch = get_frame_arch (frame);
546 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
547
548 /* The address of the function descriptor this linkage function
549 references. */
550 CORE_ADDR desc
551 = ((CORE_ADDR) get_frame_register_unsigned (frame,
552 tdep->ppc_gp0_regnum + 2)
553 + (insn_d_field (insn[0]) << 16)
554 + insn_ds_field (insn[2]));
555
556 /* The first word of the descriptor is the entry point. Return that. */
557 return ppc64_desc_entry_point (gdbarch, desc);
558 }
559
560 static CORE_ADDR
561 ppc64_standard_linkage3_target (struct frame_info *frame,
562 CORE_ADDR pc, unsigned int *insn)
563 {
564 struct gdbarch *gdbarch = get_frame_arch (frame);
565 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
566
567 /* The address of the function descriptor this linkage function
568 references. */
569 CORE_ADDR desc
570 = ((CORE_ADDR) get_frame_register_unsigned (frame,
571 tdep->ppc_gp0_regnum + 2)
572 + insn_ds_field (insn[1]));
573
574 /* The first word of the descriptor is the entry point. Return that. */
575 return ppc64_desc_entry_point (gdbarch, desc);
576 }
577
578
579 /* Given that we've begun executing a call trampoline at PC, return
580 the entry point of the function the trampoline will go to. */
581 static CORE_ADDR
582 ppc64_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
583 {
584 unsigned int ppc64_standard_linkage1_insn[PPC64_STANDARD_LINKAGE1_LEN];
585 unsigned int ppc64_standard_linkage2_insn[PPC64_STANDARD_LINKAGE2_LEN];
586 unsigned int ppc64_standard_linkage3_insn[PPC64_STANDARD_LINKAGE3_LEN];
587 CORE_ADDR target;
588
589 if (insns_match_pattern (pc, ppc64_standard_linkage1,
590 ppc64_standard_linkage1_insn))
591 pc = ppc64_standard_linkage1_target (frame, pc,
592 ppc64_standard_linkage1_insn);
593 else if (insns_match_pattern (pc, ppc64_standard_linkage2,
594 ppc64_standard_linkage2_insn))
595 pc = ppc64_standard_linkage2_target (frame, pc,
596 ppc64_standard_linkage2_insn);
597 else if (insns_match_pattern (pc, ppc64_standard_linkage3,
598 ppc64_standard_linkage3_insn))
599 pc = ppc64_standard_linkage3_target (frame, pc,
600 ppc64_standard_linkage3_insn);
601 else
602 return 0;
603
604 /* The PLT descriptor will either point to the already resolved target
605 address, or else to a glink stub. As the latter carry synthetic @plt
606 symbols, find_solib_trampoline_target should be able to resolve them. */
607 target = find_solib_trampoline_target (frame, pc);
608 return target? target : pc;
609 }
610
611
612 /* Support for convert_from_func_ptr_addr (ARCH, ADDR, TARG) on PPC64
613 GNU/Linux.
614
615 Usually a function pointer's representation is simply the address
616 of the function. On GNU/Linux on the PowerPC however, a function
617 pointer may be a pointer to a function descriptor.
618
619 For PPC64, a function descriptor is a TOC entry, in a data section,
620 which contains three words: the first word is the address of the
621 function, the second word is the TOC pointer (r2), and the third word
622 is the static chain value.
623
624 Throughout GDB it is currently assumed that a function pointer contains
625 the address of the function, which is not easy to fix. In addition, the
626 conversion of a function address to a function pointer would
627 require allocation of a TOC entry in the inferior's memory space,
628 with all its drawbacks. To be able to call C++ virtual methods in
629 the inferior (which are called via function pointers),
630 find_function_addr uses this function to get the function address
631 from a function pointer.
632
633 If ADDR points at what is clearly a function descriptor, transform
634 it into the address of the corresponding function, if needed. Be
635 conservative, otherwise GDB will do the transformation on any
636 random addresses such as occur when there is no symbol table. */
637
638 static CORE_ADDR
639 ppc64_linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
640 CORE_ADDR addr,
641 struct target_ops *targ)
642 {
643 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
644 struct target_section *s = target_section_by_addr (targ, addr);
645
646 /* Check if ADDR points to a function descriptor. */
647 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
648 {
649 /* There may be relocations that need to be applied to the .opd
650 section. Unfortunately, this function may be called at a time
651 where these relocations have not yet been performed -- this can
652 happen for example shortly after a library has been loaded with
653 dlopen, but ld.so has not yet applied the relocations.
654
655 To cope with both the case where the relocation has been applied,
656 and the case where it has not yet been applied, we do *not* read
657 the (maybe) relocated value from target memory, but we instead
658 read the non-relocated value from the BFD, and apply the relocation
659 offset manually.
660
661 This makes the assumption that all .opd entries are always relocated
662 by the same offset the section itself was relocated. This should
663 always be the case for GNU/Linux executables and shared libraries.
664 Note that other kind of object files (e.g. those added via
665 add-symbol-files) will currently never end up here anyway, as this
666 function accesses *target* sections only; only the main exec and
667 shared libraries are ever added to the target. */
668
669 gdb_byte buf[8];
670 int res;
671
672 res = bfd_get_section_contents (s->bfd, s->the_bfd_section,
673 &buf, addr - s->addr, 8);
674 if (res != 0)
675 return extract_unsigned_integer (buf, 8, byte_order)
676 - bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr;
677 }
678
679 return addr;
680 }
681
682 /* Wrappers to handle Linux-only registers. */
683
684 static void
685 ppc_linux_supply_gregset (const struct regset *regset,
686 struct regcache *regcache,
687 int regnum, const void *gregs, size_t len)
688 {
689 const struct ppc_reg_offsets *offsets = regset->descr;
690
691 ppc_supply_gregset (regset, regcache, regnum, gregs, len);
692
693 if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
694 {
695 /* "orig_r3" is stored 2 slots after "pc". */
696 if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
697 ppc_supply_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
698 offsets->pc_offset + 2 * offsets->gpr_size,
699 offsets->gpr_size);
700
701 /* "trap" is stored 8 slots after "pc". */
702 if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
703 ppc_supply_reg (regcache, PPC_TRAP_REGNUM, gregs,
704 offsets->pc_offset + 8 * offsets->gpr_size,
705 offsets->gpr_size);
706 }
707 }
708
709 static void
710 ppc_linux_collect_gregset (const struct regset *regset,
711 const struct regcache *regcache,
712 int regnum, void *gregs, size_t len)
713 {
714 const struct ppc_reg_offsets *offsets = regset->descr;
715
716 /* Clear areas in the linux gregset not written elsewhere. */
717 if (regnum == -1)
718 memset (gregs, 0, len);
719
720 ppc_collect_gregset (regset, regcache, regnum, gregs, len);
721
722 if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
723 {
724 /* "orig_r3" is stored 2 slots after "pc". */
725 if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
726 ppc_collect_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
727 offsets->pc_offset + 2 * offsets->gpr_size,
728 offsets->gpr_size);
729
730 /* "trap" is stored 8 slots after "pc". */
731 if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
732 ppc_collect_reg (regcache, PPC_TRAP_REGNUM, gregs,
733 offsets->pc_offset + 8 * offsets->gpr_size,
734 offsets->gpr_size);
735 }
736 }
737
738 /* Regset descriptions. */
739 static const struct ppc_reg_offsets ppc32_linux_reg_offsets =
740 {
741 /* General-purpose registers. */
742 /* .r0_offset = */ 0,
743 /* .gpr_size = */ 4,
744 /* .xr_size = */ 4,
745 /* .pc_offset = */ 128,
746 /* .ps_offset = */ 132,
747 /* .cr_offset = */ 152,
748 /* .lr_offset = */ 144,
749 /* .ctr_offset = */ 140,
750 /* .xer_offset = */ 148,
751 /* .mq_offset = */ 156,
752
753 /* Floating-point registers. */
754 /* .f0_offset = */ 0,
755 /* .fpscr_offset = */ 256,
756 /* .fpscr_size = */ 8,
757
758 /* AltiVec registers. */
759 /* .vr0_offset = */ 0,
760 /* .vscr_offset = */ 512 + 12,
761 /* .vrsave_offset = */ 528
762 };
763
764 static const struct ppc_reg_offsets ppc64_linux_reg_offsets =
765 {
766 /* General-purpose registers. */
767 /* .r0_offset = */ 0,
768 /* .gpr_size = */ 8,
769 /* .xr_size = */ 8,
770 /* .pc_offset = */ 256,
771 /* .ps_offset = */ 264,
772 /* .cr_offset = */ 304,
773 /* .lr_offset = */ 288,
774 /* .ctr_offset = */ 280,
775 /* .xer_offset = */ 296,
776 /* .mq_offset = */ 312,
777
778 /* Floating-point registers. */
779 /* .f0_offset = */ 0,
780 /* .fpscr_offset = */ 256,
781 /* .fpscr_size = */ 8,
782
783 /* AltiVec registers. */
784 /* .vr0_offset = */ 0,
785 /* .vscr_offset = */ 512 + 12,
786 /* .vrsave_offset = */ 528
787 };
788
789 static const struct regset ppc32_linux_gregset = {
790 &ppc32_linux_reg_offsets,
791 ppc_linux_supply_gregset,
792 ppc_linux_collect_gregset,
793 NULL
794 };
795
796 static const struct regset ppc64_linux_gregset = {
797 &ppc64_linux_reg_offsets,
798 ppc_linux_supply_gregset,
799 ppc_linux_collect_gregset,
800 NULL
801 };
802
803 static const struct regset ppc32_linux_fpregset = {
804 &ppc32_linux_reg_offsets,
805 ppc_supply_fpregset,
806 ppc_collect_fpregset,
807 NULL
808 };
809
810 static const struct regset ppc32_linux_vrregset = {
811 &ppc32_linux_reg_offsets,
812 ppc_supply_vrregset,
813 ppc_collect_vrregset,
814 NULL
815 };
816
817 static const struct regset ppc32_linux_vsxregset = {
818 &ppc32_linux_reg_offsets,
819 ppc_supply_vsxregset,
820 ppc_collect_vsxregset,
821 NULL
822 };
823
824 const struct regset *
825 ppc_linux_gregset (int wordsize)
826 {
827 return wordsize == 8 ? &ppc64_linux_gregset : &ppc32_linux_gregset;
828 }
829
830 const struct regset *
831 ppc_linux_fpregset (void)
832 {
833 return &ppc32_linux_fpregset;
834 }
835
836 static const struct regset *
837 ppc_linux_regset_from_core_section (struct gdbarch *core_arch,
838 const char *sect_name, size_t sect_size)
839 {
840 struct gdbarch_tdep *tdep = gdbarch_tdep (core_arch);
841 if (strcmp (sect_name, ".reg") == 0)
842 {
843 if (tdep->wordsize == 4)
844 return &ppc32_linux_gregset;
845 else
846 return &ppc64_linux_gregset;
847 }
848 if (strcmp (sect_name, ".reg2") == 0)
849 return &ppc32_linux_fpregset;
850 if (strcmp (sect_name, ".reg-ppc-vmx") == 0)
851 return &ppc32_linux_vrregset;
852 if (strcmp (sect_name, ".reg-ppc-vsx") == 0)
853 return &ppc32_linux_vsxregset;
854 return NULL;
855 }
856
857 static void
858 ppc_linux_sigtramp_cache (struct frame_info *this_frame,
859 struct trad_frame_cache *this_cache,
860 CORE_ADDR func, LONGEST offset,
861 int bias)
862 {
863 CORE_ADDR base;
864 CORE_ADDR regs;
865 CORE_ADDR gpregs;
866 CORE_ADDR fpregs;
867 int i;
868 struct gdbarch *gdbarch = get_frame_arch (this_frame);
869 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
870 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
871
872 base = get_frame_register_unsigned (this_frame,
873 gdbarch_sp_regnum (gdbarch));
874 if (bias > 0 && get_frame_pc (this_frame) != func)
875 /* See below, some signal trampolines increment the stack as their
876 first instruction, need to compensate for that. */
877 base -= bias;
878
879 /* Find the address of the register buffer pointer. */
880 regs = base + offset;
881 /* Use that to find the address of the corresponding register
882 buffers. */
883 gpregs = read_memory_unsigned_integer (regs, tdep->wordsize, byte_order);
884 fpregs = gpregs + 48 * tdep->wordsize;
885
886 /* General purpose. */
887 for (i = 0; i < 32; i++)
888 {
889 int regnum = i + tdep->ppc_gp0_regnum;
890 trad_frame_set_reg_addr (this_cache, regnum, gpregs + i * tdep->wordsize);
891 }
892 trad_frame_set_reg_addr (this_cache,
893 gdbarch_pc_regnum (gdbarch),
894 gpregs + 32 * tdep->wordsize);
895 trad_frame_set_reg_addr (this_cache, tdep->ppc_ctr_regnum,
896 gpregs + 35 * tdep->wordsize);
897 trad_frame_set_reg_addr (this_cache, tdep->ppc_lr_regnum,
898 gpregs + 36 * tdep->wordsize);
899 trad_frame_set_reg_addr (this_cache, tdep->ppc_xer_regnum,
900 gpregs + 37 * tdep->wordsize);
901 trad_frame_set_reg_addr (this_cache, tdep->ppc_cr_regnum,
902 gpregs + 38 * tdep->wordsize);
903
904 if (ppc_linux_trap_reg_p (gdbarch))
905 {
906 trad_frame_set_reg_addr (this_cache, PPC_ORIG_R3_REGNUM,
907 gpregs + 34 * tdep->wordsize);
908 trad_frame_set_reg_addr (this_cache, PPC_TRAP_REGNUM,
909 gpregs + 40 * tdep->wordsize);
910 }
911
912 if (ppc_floating_point_unit_p (gdbarch))
913 {
914 /* Floating point registers. */
915 for (i = 0; i < 32; i++)
916 {
917 int regnum = i + gdbarch_fp0_regnum (gdbarch);
918 trad_frame_set_reg_addr (this_cache, regnum,
919 fpregs + i * tdep->wordsize);
920 }
921 trad_frame_set_reg_addr (this_cache, tdep->ppc_fpscr_regnum,
922 fpregs + 32 * tdep->wordsize);
923 }
924 trad_frame_set_id (this_cache, frame_id_build (base, func));
925 }
926
927 static void
928 ppc32_linux_sigaction_cache_init (const struct tramp_frame *self,
929 struct frame_info *this_frame,
930 struct trad_frame_cache *this_cache,
931 CORE_ADDR func)
932 {
933 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
934 0xd0 /* Offset to ucontext_t. */
935 + 0x30 /* Offset to .reg. */,
936 0);
937 }
938
939 static void
940 ppc64_linux_sigaction_cache_init (const struct tramp_frame *self,
941 struct frame_info *this_frame,
942 struct trad_frame_cache *this_cache,
943 CORE_ADDR func)
944 {
945 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
946 0x80 /* Offset to ucontext_t. */
947 + 0xe0 /* Offset to .reg. */,
948 128);
949 }
950
951 static void
952 ppc32_linux_sighandler_cache_init (const struct tramp_frame *self,
953 struct frame_info *this_frame,
954 struct trad_frame_cache *this_cache,
955 CORE_ADDR func)
956 {
957 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
958 0x40 /* Offset to ucontext_t. */
959 + 0x1c /* Offset to .reg. */,
960 0);
961 }
962
963 static void
964 ppc64_linux_sighandler_cache_init (const struct tramp_frame *self,
965 struct frame_info *this_frame,
966 struct trad_frame_cache *this_cache,
967 CORE_ADDR func)
968 {
969 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
970 0x80 /* Offset to struct sigcontext. */
971 + 0x38 /* Offset to .reg. */,
972 128);
973 }
974
975 static struct tramp_frame ppc32_linux_sigaction_tramp_frame = {
976 SIGTRAMP_FRAME,
977 4,
978 {
979 { 0x380000ac, -1 }, /* li r0, 172 */
980 { 0x44000002, -1 }, /* sc */
981 { TRAMP_SENTINEL_INSN },
982 },
983 ppc32_linux_sigaction_cache_init
984 };
985 static struct tramp_frame ppc64_linux_sigaction_tramp_frame = {
986 SIGTRAMP_FRAME,
987 4,
988 {
989 { 0x38210080, -1 }, /* addi r1,r1,128 */
990 { 0x380000ac, -1 }, /* li r0, 172 */
991 { 0x44000002, -1 }, /* sc */
992 { TRAMP_SENTINEL_INSN },
993 },
994 ppc64_linux_sigaction_cache_init
995 };
996 static struct tramp_frame ppc32_linux_sighandler_tramp_frame = {
997 SIGTRAMP_FRAME,
998 4,
999 {
1000 { 0x38000077, -1 }, /* li r0,119 */
1001 { 0x44000002, -1 }, /* sc */
1002 { TRAMP_SENTINEL_INSN },
1003 },
1004 ppc32_linux_sighandler_cache_init
1005 };
1006 static struct tramp_frame ppc64_linux_sighandler_tramp_frame = {
1007 SIGTRAMP_FRAME,
1008 4,
1009 {
1010 { 0x38210080, -1 }, /* addi r1,r1,128 */
1011 { 0x38000077, -1 }, /* li r0,119 */
1012 { 0x44000002, -1 }, /* sc */
1013 { TRAMP_SENTINEL_INSN },
1014 },
1015 ppc64_linux_sighandler_cache_init
1016 };
1017
1018
1019 /* Address to use for displaced stepping. When debugging a stand-alone
1020 SPU executable, entry_point_address () will point to an SPU local-store
1021 address and is thus not usable as displaced stepping location. We use
1022 the auxiliary vector to determine the PowerPC-side entry point address
1023 instead. */
1024
1025 static CORE_ADDR ppc_linux_entry_point_addr = 0;
1026
1027 static void
1028 ppc_linux_inferior_created (struct target_ops *target, int from_tty)
1029 {
1030 ppc_linux_entry_point_addr = 0;
1031 }
1032
1033 static CORE_ADDR
1034 ppc_linux_displaced_step_location (struct gdbarch *gdbarch)
1035 {
1036 if (ppc_linux_entry_point_addr == 0)
1037 {
1038 CORE_ADDR addr;
1039
1040 /* Determine entry point from target auxiliary vector. */
1041 if (target_auxv_search (&current_target, AT_ENTRY, &addr) <= 0)
1042 error (_("Cannot find AT_ENTRY auxiliary vector entry."));
1043
1044 /* Make certain that the address points at real code, and not a
1045 function descriptor. */
1046 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
1047 &current_target);
1048
1049 /* Inferior calls also use the entry point as a breakpoint location.
1050 We don't want displaced stepping to interfere with those
1051 breakpoints, so leave space. */
1052 ppc_linux_entry_point_addr = addr + 2 * PPC_INSN_SIZE;
1053 }
1054
1055 return ppc_linux_entry_point_addr;
1056 }
1057
1058
1059 /* Return 1 if PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM are usable. */
1060 int
1061 ppc_linux_trap_reg_p (struct gdbarch *gdbarch)
1062 {
1063 /* If we do not have a target description with registers, then
1064 the special registers will not be included in the register set. */
1065 if (!tdesc_has_registers (gdbarch_target_desc (gdbarch)))
1066 return 0;
1067
1068 /* If we do, then it is safe to check the size. */
1069 return register_size (gdbarch, PPC_ORIG_R3_REGNUM) > 0
1070 && register_size (gdbarch, PPC_TRAP_REGNUM) > 0;
1071 }
1072
1073 /* Return the current system call's number present in the
1074 r0 register. When the function fails, it returns -1. */
1075 static LONGEST
1076 ppc_linux_get_syscall_number (struct gdbarch *gdbarch,
1077 ptid_t ptid)
1078 {
1079 struct regcache *regcache = get_thread_regcache (ptid);
1080 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1081 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1082 struct cleanup *cleanbuf;
1083 /* The content of a register */
1084 gdb_byte *buf;
1085 /* The result */
1086 LONGEST ret;
1087
1088 /* Make sure we're in a 32- or 64-bit machine */
1089 gdb_assert (tdep->wordsize == 4 || tdep->wordsize == 8);
1090
1091 buf = (gdb_byte *) xmalloc (tdep->wordsize * sizeof (gdb_byte));
1092
1093 cleanbuf = make_cleanup (xfree, buf);
1094
1095 /* Getting the system call number from the register.
1096 When dealing with PowerPC architecture, this information
1097 is stored at 0th register. */
1098 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum, buf);
1099
1100 ret = extract_signed_integer (buf, tdep->wordsize, byte_order);
1101 do_cleanups (cleanbuf);
1102
1103 return ret;
1104 }
1105
1106 static void
1107 ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
1108 {
1109 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1110
1111 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch), pc);
1112
1113 /* Set special TRAP register to -1 to prevent the kernel from
1114 messing with the PC we just installed, if we happen to be
1115 within an interrupted system call that the kernel wants to
1116 restart.
1117
1118 Note that after we return from the dummy call, the TRAP and
1119 ORIG_R3 registers will be automatically restored, and the
1120 kernel continues to restart the system call at this point. */
1121 if (ppc_linux_trap_reg_p (gdbarch))
1122 regcache_cooked_write_unsigned (regcache, PPC_TRAP_REGNUM, -1);
1123 }
1124
1125 static int
1126 ppc_linux_spu_section (bfd *abfd, asection *asect, void *user_data)
1127 {
1128 return strncmp (bfd_section_name (abfd, asect), "SPU/", 4) == 0;
1129 }
1130
1131 static const struct target_desc *
1132 ppc_linux_core_read_description (struct gdbarch *gdbarch,
1133 struct target_ops *target,
1134 bfd *abfd)
1135 {
1136 asection *cell = bfd_sections_find_if (abfd, ppc_linux_spu_section, NULL);
1137 asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
1138 asection *vsx = bfd_get_section_by_name (abfd, ".reg-ppc-vsx");
1139 asection *section = bfd_get_section_by_name (abfd, ".reg");
1140 if (! section)
1141 return NULL;
1142
1143 switch (bfd_section_size (abfd, section))
1144 {
1145 case 48 * 4:
1146 if (cell)
1147 return tdesc_powerpc_cell32l;
1148 else if (vsx)
1149 return tdesc_powerpc_vsx32l;
1150 else if (altivec)
1151 return tdesc_powerpc_altivec32l;
1152 else
1153 return tdesc_powerpc_32l;
1154
1155 case 48 * 8:
1156 if (cell)
1157 return tdesc_powerpc_cell64l;
1158 else if (vsx)
1159 return tdesc_powerpc_vsx64l;
1160 else if (altivec)
1161 return tdesc_powerpc_altivec64l;
1162 else
1163 return tdesc_powerpc_64l;
1164
1165 default:
1166 return NULL;
1167 }
1168 }
1169
1170
1171 /* Cell/B.E. active SPE context tracking support. */
1172
1173 static struct objfile *spe_context_objfile = NULL;
1174 static CORE_ADDR spe_context_lm_addr = 0;
1175 static CORE_ADDR spe_context_offset = 0;
1176
1177 static ptid_t spe_context_cache_ptid;
1178 static CORE_ADDR spe_context_cache_address;
1179
1180 /* Hook into inferior_created, solib_loaded, and solib_unloaded observers
1181 to track whether we've loaded a version of libspe2 (as static or dynamic
1182 library) that provides the __spe_current_active_context variable. */
1183 static void
1184 ppc_linux_spe_context_lookup (struct objfile *objfile)
1185 {
1186 struct minimal_symbol *sym;
1187
1188 if (!objfile)
1189 {
1190 spe_context_objfile = NULL;
1191 spe_context_lm_addr = 0;
1192 spe_context_offset = 0;
1193 spe_context_cache_ptid = minus_one_ptid;
1194 spe_context_cache_address = 0;
1195 return;
1196 }
1197
1198 sym = lookup_minimal_symbol ("__spe_current_active_context", NULL, objfile);
1199 if (sym)
1200 {
1201 spe_context_objfile = objfile;
1202 spe_context_lm_addr = svr4_fetch_objfile_link_map (objfile);
1203 spe_context_offset = SYMBOL_VALUE_ADDRESS (sym);
1204 spe_context_cache_ptid = minus_one_ptid;
1205 spe_context_cache_address = 0;
1206 return;
1207 }
1208 }
1209
1210 static void
1211 ppc_linux_spe_context_inferior_created (struct target_ops *t, int from_tty)
1212 {
1213 struct objfile *objfile;
1214
1215 ppc_linux_spe_context_lookup (NULL);
1216 ALL_OBJFILES (objfile)
1217 ppc_linux_spe_context_lookup (objfile);
1218 }
1219
1220 static void
1221 ppc_linux_spe_context_solib_loaded (struct so_list *so)
1222 {
1223 if (strstr (so->so_original_name, "/libspe") != NULL)
1224 {
1225 solib_read_symbols (so, 0);
1226 ppc_linux_spe_context_lookup (so->objfile);
1227 }
1228 }
1229
1230 static void
1231 ppc_linux_spe_context_solib_unloaded (struct so_list *so)
1232 {
1233 if (so->objfile == spe_context_objfile)
1234 ppc_linux_spe_context_lookup (NULL);
1235 }
1236
1237 /* Retrieve contents of the N'th element in the current thread's
1238 linked SPE context list into ID and NPC. Return the address of
1239 said context element, or 0 if not found. */
1240 static CORE_ADDR
1241 ppc_linux_spe_context (int wordsize, enum bfd_endian byte_order,
1242 int n, int *id, unsigned int *npc)
1243 {
1244 CORE_ADDR spe_context = 0;
1245 gdb_byte buf[16];
1246 int i;
1247
1248 /* Quick exit if we have not found __spe_current_active_context. */
1249 if (!spe_context_objfile)
1250 return 0;
1251
1252 /* Look up cached address of thread-local variable. */
1253 if (!ptid_equal (spe_context_cache_ptid, inferior_ptid))
1254 {
1255 struct target_ops *target = &current_target;
1256 volatile struct gdb_exception ex;
1257
1258 while (target && !target->to_get_thread_local_address)
1259 target = find_target_beneath (target);
1260 if (!target)
1261 return 0;
1262
1263 TRY_CATCH (ex, RETURN_MASK_ERROR)
1264 {
1265 /* We do not call target_translate_tls_address here, because
1266 svr4_fetch_objfile_link_map may invalidate the frame chain,
1267 which must not do while inside a frame sniffer.
1268
1269 Instead, we have cached the lm_addr value, and use that to
1270 directly call the target's to_get_thread_local_address. */
1271 spe_context_cache_address
1272 = target->to_get_thread_local_address (target, inferior_ptid,
1273 spe_context_lm_addr,
1274 spe_context_offset);
1275 spe_context_cache_ptid = inferior_ptid;
1276 }
1277
1278 if (ex.reason < 0)
1279 return 0;
1280 }
1281
1282 /* Read variable value. */
1283 if (target_read_memory (spe_context_cache_address, buf, wordsize) == 0)
1284 spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1285
1286 /* Cyle through to N'th linked list element. */
1287 for (i = 0; i < n && spe_context; i++)
1288 if (target_read_memory (spe_context + align_up (12, wordsize),
1289 buf, wordsize) == 0)
1290 spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1291 else
1292 spe_context = 0;
1293
1294 /* Read current context. */
1295 if (spe_context
1296 && target_read_memory (spe_context, buf, 12) != 0)
1297 spe_context = 0;
1298
1299 /* Extract data elements. */
1300 if (spe_context)
1301 {
1302 if (id)
1303 *id = extract_signed_integer (buf, 4, byte_order);
1304 if (npc)
1305 *npc = extract_unsigned_integer (buf + 4, 4, byte_order);
1306 }
1307
1308 return spe_context;
1309 }
1310
1311
1312 /* Cell/B.E. cross-architecture unwinder support. */
1313
1314 struct ppu2spu_cache
1315 {
1316 struct frame_id frame_id;
1317 struct regcache *regcache;
1318 };
1319
1320 static struct gdbarch *
1321 ppu2spu_prev_arch (struct frame_info *this_frame, void **this_cache)
1322 {
1323 struct ppu2spu_cache *cache = *this_cache;
1324 return get_regcache_arch (cache->regcache);
1325 }
1326
1327 static void
1328 ppu2spu_this_id (struct frame_info *this_frame,
1329 void **this_cache, struct frame_id *this_id)
1330 {
1331 struct ppu2spu_cache *cache = *this_cache;
1332 *this_id = cache->frame_id;
1333 }
1334
1335 static struct value *
1336 ppu2spu_prev_register (struct frame_info *this_frame,
1337 void **this_cache, int regnum)
1338 {
1339 struct ppu2spu_cache *cache = *this_cache;
1340 struct gdbarch *gdbarch = get_regcache_arch (cache->regcache);
1341 gdb_byte *buf;
1342
1343 buf = alloca (register_size (gdbarch, regnum));
1344 regcache_cooked_read (cache->regcache, regnum, buf);
1345 return frame_unwind_got_bytes (this_frame, regnum, buf);
1346 }
1347
1348 struct ppu2spu_data
1349 {
1350 struct gdbarch *gdbarch;
1351 int id;
1352 unsigned int npc;
1353 gdb_byte gprs[128*16];
1354 };
1355
1356 static int
1357 ppu2spu_unwind_register (void *src, int regnum, gdb_byte *buf)
1358 {
1359 struct ppu2spu_data *data = src;
1360 enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
1361
1362 if (regnum >= 0 && regnum < SPU_NUM_GPRS)
1363 memcpy (buf, data->gprs + 16*regnum, 16);
1364 else if (regnum == SPU_ID_REGNUM)
1365 store_unsigned_integer (buf, 4, byte_order, data->id);
1366 else if (regnum == SPU_PC_REGNUM)
1367 store_unsigned_integer (buf, 4, byte_order, data->npc);
1368 else
1369 return 0;
1370
1371 return 1;
1372 }
1373
1374 static int
1375 ppu2spu_sniffer (const struct frame_unwind *self,
1376 struct frame_info *this_frame, void **this_prologue_cache)
1377 {
1378 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1379 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1380 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1381 struct ppu2spu_data data;
1382 struct frame_info *fi;
1383 CORE_ADDR base, func, backchain, spe_context;
1384 gdb_byte buf[8];
1385 int n = 0;
1386
1387 /* Count the number of SPU contexts already in the frame chain. */
1388 for (fi = get_next_frame (this_frame); fi; fi = get_next_frame (fi))
1389 if (get_frame_type (fi) == ARCH_FRAME
1390 && gdbarch_bfd_arch_info (get_frame_arch (fi))->arch == bfd_arch_spu)
1391 n++;
1392
1393 base = get_frame_sp (this_frame);
1394 func = get_frame_pc (this_frame);
1395 if (target_read_memory (base, buf, tdep->wordsize))
1396 return 0;
1397 backchain = extract_unsigned_integer (buf, tdep->wordsize, byte_order);
1398
1399 spe_context = ppc_linux_spe_context (tdep->wordsize, byte_order,
1400 n, &data.id, &data.npc);
1401 if (spe_context && base <= spe_context && spe_context < backchain)
1402 {
1403 char annex[32];
1404
1405 /* Find gdbarch for SPU. */
1406 struct gdbarch_info info;
1407 gdbarch_info_init (&info);
1408 info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
1409 info.byte_order = BFD_ENDIAN_BIG;
1410 info.osabi = GDB_OSABI_LINUX;
1411 info.tdep_info = (void *) &data.id;
1412 data.gdbarch = gdbarch_find_by_info (info);
1413 if (!data.gdbarch)
1414 return 0;
1415
1416 xsnprintf (annex, sizeof annex, "%d/regs", data.id);
1417 if (target_read (&current_target, TARGET_OBJECT_SPU, annex,
1418 data.gprs, 0, sizeof data.gprs)
1419 == sizeof data.gprs)
1420 {
1421 struct ppu2spu_cache *cache
1422 = FRAME_OBSTACK_CALLOC (1, struct ppu2spu_cache);
1423
1424 struct address_space *aspace = get_frame_address_space (this_frame);
1425 struct regcache *regcache = regcache_xmalloc (data.gdbarch, aspace);
1426 struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
1427 regcache_save (regcache, ppu2spu_unwind_register, &data);
1428 discard_cleanups (cleanups);
1429
1430 cache->frame_id = frame_id_build (base, func);
1431 cache->regcache = regcache;
1432 *this_prologue_cache = cache;
1433 return 1;
1434 }
1435 }
1436
1437 return 0;
1438 }
1439
1440 static void
1441 ppu2spu_dealloc_cache (struct frame_info *self, void *this_cache)
1442 {
1443 struct ppu2spu_cache *cache = this_cache;
1444 regcache_xfree (cache->regcache);
1445 }
1446
1447 static const struct frame_unwind ppu2spu_unwind = {
1448 ARCH_FRAME,
1449 ppu2spu_this_id,
1450 ppu2spu_prev_register,
1451 NULL,
1452 ppu2spu_sniffer,
1453 ppu2spu_dealloc_cache,
1454 ppu2spu_prev_arch,
1455 };
1456
1457
1458 static void
1459 ppc_linux_init_abi (struct gdbarch_info info,
1460 struct gdbarch *gdbarch)
1461 {
1462 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1463 struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
1464
1465 /* PPC GNU/Linux uses either 64-bit or 128-bit long doubles; where
1466 128-bit, they are IBM long double, not IEEE quad long double as
1467 in the System V ABI PowerPC Processor Supplement. We can safely
1468 let them default to 128-bit, since the debug info will give the
1469 size of type actually used in each case. */
1470 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
1471 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
1472
1473 /* Handle inferior calls during interrupted system calls. */
1474 set_gdbarch_write_pc (gdbarch, ppc_linux_write_pc);
1475
1476 /* Get the syscall number from the arch's register. */
1477 set_gdbarch_get_syscall_number (gdbarch, ppc_linux_get_syscall_number);
1478
1479 if (tdep->wordsize == 4)
1480 {
1481 /* Until November 2001, gcc did not comply with the 32 bit SysV
1482 R4 ABI requirement that structures less than or equal to 8
1483 bytes should be returned in registers. Instead GCC was using
1484 the the AIX/PowerOpen ABI - everything returned in memory
1485 (well ignoring vectors that is). When this was corrected, it
1486 wasn't fixed for GNU/Linux native platform. Use the
1487 PowerOpen struct convention. */
1488 set_gdbarch_return_value (gdbarch, ppc_linux_return_value);
1489
1490 set_gdbarch_memory_remove_breakpoint (gdbarch,
1491 ppc_linux_memory_remove_breakpoint);
1492
1493 /* Shared library handling. */
1494 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1495 set_solib_svr4_fetch_link_map_offsets
1496 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
1497
1498 /* Setting the correct XML syscall filename. */
1499 set_xml_syscall_file_name (XML_SYSCALL_FILENAME_PPC);
1500
1501 /* Trampolines. */
1502 tramp_frame_prepend_unwinder (gdbarch, &ppc32_linux_sigaction_tramp_frame);
1503 tramp_frame_prepend_unwinder (gdbarch, &ppc32_linux_sighandler_tramp_frame);
1504
1505 /* BFD target for core files. */
1506 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1507 set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpcle");
1508 else
1509 set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc");
1510 }
1511
1512 if (tdep->wordsize == 8)
1513 {
1514 /* Handle PPC GNU/Linux 64-bit function pointers (which are really
1515 function descriptors). */
1516 set_gdbarch_convert_from_func_ptr_addr
1517 (gdbarch, ppc64_linux_convert_from_func_ptr_addr);
1518
1519 /* Shared library handling. */
1520 set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);
1521 set_solib_svr4_fetch_link_map_offsets
1522 (gdbarch, svr4_lp64_fetch_link_map_offsets);
1523
1524 /* Setting the correct XML syscall filename. */
1525 set_xml_syscall_file_name (XML_SYSCALL_FILENAME_PPC64);
1526
1527 /* Trampolines. */
1528 tramp_frame_prepend_unwinder (gdbarch, &ppc64_linux_sigaction_tramp_frame);
1529 tramp_frame_prepend_unwinder (gdbarch, &ppc64_linux_sighandler_tramp_frame);
1530
1531 /* BFD target for core files. */
1532 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1533 set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpcle");
1534 else
1535 set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc");
1536 }
1537 set_gdbarch_regset_from_core_section (gdbarch, ppc_linux_regset_from_core_section);
1538 set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
1539
1540 /* Supported register sections. */
1541 if (tdesc_find_feature (info.target_desc,
1542 "org.gnu.gdb.power.vsx"))
1543 set_gdbarch_core_regset_sections (gdbarch, ppc_linux_vsx_regset_sections);
1544 else if (tdesc_find_feature (info.target_desc,
1545 "org.gnu.gdb.power.altivec"))
1546 set_gdbarch_core_regset_sections (gdbarch, ppc_linux_vmx_regset_sections);
1547 else
1548 set_gdbarch_core_regset_sections (gdbarch, ppc_linux_fp_regset_sections);
1549
1550 /* Enable TLS support. */
1551 set_gdbarch_fetch_tls_load_module_address (gdbarch,
1552 svr4_fetch_objfile_link_map);
1553
1554 if (tdesc_data)
1555 {
1556 const struct tdesc_feature *feature;
1557
1558 /* If we have target-described registers, then we can safely
1559 reserve a number for PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM
1560 (whether they are described or not). */
1561 gdb_assert (gdbarch_num_regs (gdbarch) <= PPC_ORIG_R3_REGNUM);
1562 set_gdbarch_num_regs (gdbarch, PPC_TRAP_REGNUM + 1);
1563
1564 /* If they are present, then assign them to the reserved number. */
1565 feature = tdesc_find_feature (info.target_desc,
1566 "org.gnu.gdb.power.linux");
1567 if (feature != NULL)
1568 {
1569 tdesc_numbered_register (feature, tdesc_data,
1570 PPC_ORIG_R3_REGNUM, "orig_r3");
1571 tdesc_numbered_register (feature, tdesc_data,
1572 PPC_TRAP_REGNUM, "trap");
1573 }
1574 }
1575
1576 /* Enable Cell/B.E. if supported by the target. */
1577 if (tdesc_compatible_p (info.target_desc,
1578 bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu)))
1579 {
1580 /* Cell/B.E. multi-architecture support. */
1581 set_spu_solib_ops (gdbarch);
1582
1583 /* Cell/B.E. cross-architecture unwinder support. */
1584 frame_unwind_prepend_unwinder (gdbarch, &ppu2spu_unwind);
1585
1586 /* The default displaced_step_at_entry_point doesn't work for
1587 SPU stand-alone executables. */
1588 set_gdbarch_displaced_step_location (gdbarch,
1589 ppc_linux_displaced_step_location);
1590 }
1591 }
1592
1593 /* Provide a prototype to silence -Wmissing-prototypes. */
1594 extern initialize_file_ftype _initialize_ppc_linux_tdep;
1595
1596 void
1597 _initialize_ppc_linux_tdep (void)
1598 {
1599 /* Register for all sub-familes of the POWER/PowerPC: 32-bit and
1600 64-bit PowerPC, and the older rs6k. */
1601 gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_LINUX,
1602 ppc_linux_init_abi);
1603 gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64, GDB_OSABI_LINUX,
1604 ppc_linux_init_abi);
1605 gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
1606 ppc_linux_init_abi);
1607
1608 /* Attach to inferior_created observer. */
1609 observer_attach_inferior_created (ppc_linux_inferior_created);
1610
1611 /* Attach to observers to track __spe_current_active_context. */
1612 observer_attach_inferior_created (ppc_linux_spe_context_inferior_created);
1613 observer_attach_solib_loaded (ppc_linux_spe_context_solib_loaded);
1614 observer_attach_solib_unloaded (ppc_linux_spe_context_solib_unloaded);
1615
1616 /* Initialize the Linux target descriptions. */
1617 initialize_tdesc_powerpc_32l ();
1618 initialize_tdesc_powerpc_altivec32l ();
1619 initialize_tdesc_powerpc_cell32l ();
1620 initialize_tdesc_powerpc_vsx32l ();
1621 initialize_tdesc_powerpc_isa205_32l ();
1622 initialize_tdesc_powerpc_isa205_altivec32l ();
1623 initialize_tdesc_powerpc_isa205_vsx32l ();
1624 initialize_tdesc_powerpc_64l ();
1625 initialize_tdesc_powerpc_altivec64l ();
1626 initialize_tdesc_powerpc_cell64l ();
1627 initialize_tdesc_powerpc_vsx64l ();
1628 initialize_tdesc_powerpc_isa205_64l ();
1629 initialize_tdesc_powerpc_isa205_altivec64l ();
1630 initialize_tdesc_powerpc_isa205_vsx64l ();
1631 initialize_tdesc_powerpc_e500l ();
1632 }