Copyright year update in most files of the GDB Project.
[deliverable/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-1997, 2000-2012 Free Software
4 Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22 #include "frame.h"
23 #include "inferior.h"
24 #include "symtab.h"
25 #include "target.h"
26 #include "gdbcore.h"
27 #include "gdbcmd.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "regcache.h"
31 #include "value.h"
32 #include "osabi.h"
33 #include "regset.h"
34 #include "solib-svr4.h"
35 #include "solib-spu.h"
36 #include "solib.h"
37 #include "solist.h"
38 #include "ppc-tdep.h"
39 #include "ppc-linux-tdep.h"
40 #include "trad-frame.h"
41 #include "frame-unwind.h"
42 #include "tramp-frame.h"
43 #include "observer.h"
44 #include "auxv.h"
45 #include "elf/common.h"
46 #include "exceptions.h"
47 #include "arch-utils.h"
48 #include "spu-tdep.h"
49 #include "xml-syscall.h"
50 #include "linux-tdep.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 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_raw_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", 48 * 4, "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", 48 * 4, "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", 48 * 4, "general-purpose" },
537 { ".reg2", 264, "floating-point" },
538 { NULL, 0}
539 };
540
541 static struct core_regset_section ppc64_linux_vsx_regset_sections[] =
542 {
543 { ".reg", 48 * 8, "general-purpose" },
544 { ".reg2", 264, "floating-point" },
545 { ".reg-ppc-vmx", 544, "ppc Altivec" },
546 { ".reg-ppc-vsx", 256, "POWER7 VSX" },
547 { NULL, 0}
548 };
549
550 static struct core_regset_section ppc64_linux_vmx_regset_sections[] =
551 {
552 { ".reg", 48 * 8, "general-purpose" },
553 { ".reg2", 264, "floating-point" },
554 { ".reg-ppc-vmx", 544, "ppc Altivec" },
555 { NULL, 0}
556 };
557
558 static struct core_regset_section ppc64_linux_fp_regset_sections[] =
559 {
560 { ".reg", 48 * 8, "general-purpose" },
561 { ".reg2", 264, "floating-point" },
562 { NULL, 0}
563 };
564
565 static CORE_ADDR
566 ppc64_standard_linkage2_target (struct frame_info *frame,
567 CORE_ADDR pc, unsigned int *insn)
568 {
569 struct gdbarch *gdbarch = get_frame_arch (frame);
570 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
571
572 /* The address of the function descriptor this linkage function
573 references. */
574 CORE_ADDR desc
575 = ((CORE_ADDR) get_frame_register_unsigned (frame,
576 tdep->ppc_gp0_regnum + 2)
577 + (insn_d_field (insn[0]) << 16)
578 + insn_ds_field (insn[2]));
579
580 /* The first word of the descriptor is the entry point. Return that. */
581 return ppc64_desc_entry_point (gdbarch, desc);
582 }
583
584 static CORE_ADDR
585 ppc64_standard_linkage3_target (struct frame_info *frame,
586 CORE_ADDR pc, unsigned int *insn)
587 {
588 struct gdbarch *gdbarch = get_frame_arch (frame);
589 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
590
591 /* The address of the function descriptor this linkage function
592 references. */
593 CORE_ADDR desc
594 = ((CORE_ADDR) get_frame_register_unsigned (frame,
595 tdep->ppc_gp0_regnum + 2)
596 + insn_ds_field (insn[1]));
597
598 /* The first word of the descriptor is the entry point. Return that. */
599 return ppc64_desc_entry_point (gdbarch, desc);
600 }
601
602
603 /* Given that we've begun executing a call trampoline at PC, return
604 the entry point of the function the trampoline will go to. */
605 static CORE_ADDR
606 ppc64_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
607 {
608 unsigned int ppc64_standard_linkage1_insn[PPC64_STANDARD_LINKAGE1_LEN];
609 unsigned int ppc64_standard_linkage2_insn[PPC64_STANDARD_LINKAGE2_LEN];
610 unsigned int ppc64_standard_linkage3_insn[PPC64_STANDARD_LINKAGE3_LEN];
611 CORE_ADDR target;
612
613 if (insns_match_pattern (pc, ppc64_standard_linkage1,
614 ppc64_standard_linkage1_insn))
615 pc = ppc64_standard_linkage1_target (frame, pc,
616 ppc64_standard_linkage1_insn);
617 else if (insns_match_pattern (pc, ppc64_standard_linkage2,
618 ppc64_standard_linkage2_insn))
619 pc = ppc64_standard_linkage2_target (frame, pc,
620 ppc64_standard_linkage2_insn);
621 else if (insns_match_pattern (pc, ppc64_standard_linkage3,
622 ppc64_standard_linkage3_insn))
623 pc = ppc64_standard_linkage3_target (frame, pc,
624 ppc64_standard_linkage3_insn);
625 else
626 return 0;
627
628 /* The PLT descriptor will either point to the already resolved target
629 address, or else to a glink stub. As the latter carry synthetic @plt
630 symbols, find_solib_trampoline_target should be able to resolve them. */
631 target = find_solib_trampoline_target (frame, pc);
632 return target? target : pc;
633 }
634
635
636 /* Support for convert_from_func_ptr_addr (ARCH, ADDR, TARG) on PPC64
637 GNU/Linux.
638
639 Usually a function pointer's representation is simply the address
640 of the function. On GNU/Linux on the PowerPC however, a function
641 pointer may be a pointer to a function descriptor.
642
643 For PPC64, a function descriptor is a TOC entry, in a data section,
644 which contains three words: the first word is the address of the
645 function, the second word is the TOC pointer (r2), and the third word
646 is the static chain value.
647
648 Throughout GDB it is currently assumed that a function pointer contains
649 the address of the function, which is not easy to fix. In addition, the
650 conversion of a function address to a function pointer would
651 require allocation of a TOC entry in the inferior's memory space,
652 with all its drawbacks. To be able to call C++ virtual methods in
653 the inferior (which are called via function pointers),
654 find_function_addr uses this function to get the function address
655 from a function pointer.
656
657 If ADDR points at what is clearly a function descriptor, transform
658 it into the address of the corresponding function, if needed. Be
659 conservative, otherwise GDB will do the transformation on any
660 random addresses such as occur when there is no symbol table. */
661
662 static CORE_ADDR
663 ppc64_linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
664 CORE_ADDR addr,
665 struct target_ops *targ)
666 {
667 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
668 struct target_section *s = target_section_by_addr (targ, addr);
669
670 /* Check if ADDR points to a function descriptor. */
671 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
672 {
673 /* There may be relocations that need to be applied to the .opd
674 section. Unfortunately, this function may be called at a time
675 where these relocations have not yet been performed -- this can
676 happen for example shortly after a library has been loaded with
677 dlopen, but ld.so has not yet applied the relocations.
678
679 To cope with both the case where the relocation has been applied,
680 and the case where it has not yet been applied, we do *not* read
681 the (maybe) relocated value from target memory, but we instead
682 read the non-relocated value from the BFD, and apply the relocation
683 offset manually.
684
685 This makes the assumption that all .opd entries are always relocated
686 by the same offset the section itself was relocated. This should
687 always be the case for GNU/Linux executables and shared libraries.
688 Note that other kind of object files (e.g. those added via
689 add-symbol-files) will currently never end up here anyway, as this
690 function accesses *target* sections only; only the main exec and
691 shared libraries are ever added to the target. */
692
693 gdb_byte buf[8];
694 int res;
695
696 res = bfd_get_section_contents (s->bfd, s->the_bfd_section,
697 &buf, addr - s->addr, 8);
698 if (res != 0)
699 return extract_unsigned_integer (buf, 8, byte_order)
700 - bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr;
701 }
702
703 return addr;
704 }
705
706 /* Wrappers to handle Linux-only registers. */
707
708 static void
709 ppc_linux_supply_gregset (const struct regset *regset,
710 struct regcache *regcache,
711 int regnum, const void *gregs, size_t len)
712 {
713 const struct ppc_reg_offsets *offsets = regset->descr;
714
715 ppc_supply_gregset (regset, regcache, regnum, gregs, len);
716
717 if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
718 {
719 /* "orig_r3" is stored 2 slots after "pc". */
720 if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
721 ppc_supply_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
722 offsets->pc_offset + 2 * offsets->gpr_size,
723 offsets->gpr_size);
724
725 /* "trap" is stored 8 slots after "pc". */
726 if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
727 ppc_supply_reg (regcache, PPC_TRAP_REGNUM, gregs,
728 offsets->pc_offset + 8 * offsets->gpr_size,
729 offsets->gpr_size);
730 }
731 }
732
733 static void
734 ppc_linux_collect_gregset (const struct regset *regset,
735 const struct regcache *regcache,
736 int regnum, void *gregs, size_t len)
737 {
738 const struct ppc_reg_offsets *offsets = regset->descr;
739
740 /* Clear areas in the linux gregset not written elsewhere. */
741 if (regnum == -1)
742 memset (gregs, 0, len);
743
744 ppc_collect_gregset (regset, regcache, regnum, gregs, len);
745
746 if (ppc_linux_trap_reg_p (get_regcache_arch (regcache)))
747 {
748 /* "orig_r3" is stored 2 slots after "pc". */
749 if (regnum == -1 || regnum == PPC_ORIG_R3_REGNUM)
750 ppc_collect_reg (regcache, PPC_ORIG_R3_REGNUM, gregs,
751 offsets->pc_offset + 2 * offsets->gpr_size,
752 offsets->gpr_size);
753
754 /* "trap" is stored 8 slots after "pc". */
755 if (regnum == -1 || regnum == PPC_TRAP_REGNUM)
756 ppc_collect_reg (regcache, PPC_TRAP_REGNUM, gregs,
757 offsets->pc_offset + 8 * offsets->gpr_size,
758 offsets->gpr_size);
759 }
760 }
761
762 /* Regset descriptions. */
763 static const struct ppc_reg_offsets ppc32_linux_reg_offsets =
764 {
765 /* General-purpose registers. */
766 /* .r0_offset = */ 0,
767 /* .gpr_size = */ 4,
768 /* .xr_size = */ 4,
769 /* .pc_offset = */ 128,
770 /* .ps_offset = */ 132,
771 /* .cr_offset = */ 152,
772 /* .lr_offset = */ 144,
773 /* .ctr_offset = */ 140,
774 /* .xer_offset = */ 148,
775 /* .mq_offset = */ 156,
776
777 /* Floating-point registers. */
778 /* .f0_offset = */ 0,
779 /* .fpscr_offset = */ 256,
780 /* .fpscr_size = */ 8,
781
782 /* AltiVec registers. */
783 /* .vr0_offset = */ 0,
784 /* .vscr_offset = */ 512 + 12,
785 /* .vrsave_offset = */ 528
786 };
787
788 static const struct ppc_reg_offsets ppc64_linux_reg_offsets =
789 {
790 /* General-purpose registers. */
791 /* .r0_offset = */ 0,
792 /* .gpr_size = */ 8,
793 /* .xr_size = */ 8,
794 /* .pc_offset = */ 256,
795 /* .ps_offset = */ 264,
796 /* .cr_offset = */ 304,
797 /* .lr_offset = */ 288,
798 /* .ctr_offset = */ 280,
799 /* .xer_offset = */ 296,
800 /* .mq_offset = */ 312,
801
802 /* Floating-point registers. */
803 /* .f0_offset = */ 0,
804 /* .fpscr_offset = */ 256,
805 /* .fpscr_size = */ 8,
806
807 /* AltiVec registers. */
808 /* .vr0_offset = */ 0,
809 /* .vscr_offset = */ 512 + 12,
810 /* .vrsave_offset = */ 528
811 };
812
813 static const struct regset ppc32_linux_gregset = {
814 &ppc32_linux_reg_offsets,
815 ppc_linux_supply_gregset,
816 ppc_linux_collect_gregset,
817 NULL
818 };
819
820 static const struct regset ppc64_linux_gregset = {
821 &ppc64_linux_reg_offsets,
822 ppc_linux_supply_gregset,
823 ppc_linux_collect_gregset,
824 NULL
825 };
826
827 static const struct regset ppc32_linux_fpregset = {
828 &ppc32_linux_reg_offsets,
829 ppc_supply_fpregset,
830 ppc_collect_fpregset,
831 NULL
832 };
833
834 static const struct regset ppc32_linux_vrregset = {
835 &ppc32_linux_reg_offsets,
836 ppc_supply_vrregset,
837 ppc_collect_vrregset,
838 NULL
839 };
840
841 static const struct regset ppc32_linux_vsxregset = {
842 &ppc32_linux_reg_offsets,
843 ppc_supply_vsxregset,
844 ppc_collect_vsxregset,
845 NULL
846 };
847
848 const struct regset *
849 ppc_linux_gregset (int wordsize)
850 {
851 return wordsize == 8 ? &ppc64_linux_gregset : &ppc32_linux_gregset;
852 }
853
854 const struct regset *
855 ppc_linux_fpregset (void)
856 {
857 return &ppc32_linux_fpregset;
858 }
859
860 static const struct regset *
861 ppc_linux_regset_from_core_section (struct gdbarch *core_arch,
862 const char *sect_name, size_t sect_size)
863 {
864 struct gdbarch_tdep *tdep = gdbarch_tdep (core_arch);
865 if (strcmp (sect_name, ".reg") == 0)
866 {
867 if (tdep->wordsize == 4)
868 return &ppc32_linux_gregset;
869 else
870 return &ppc64_linux_gregset;
871 }
872 if (strcmp (sect_name, ".reg2") == 0)
873 return &ppc32_linux_fpregset;
874 if (strcmp (sect_name, ".reg-ppc-vmx") == 0)
875 return &ppc32_linux_vrregset;
876 if (strcmp (sect_name, ".reg-ppc-vsx") == 0)
877 return &ppc32_linux_vsxregset;
878 return NULL;
879 }
880
881 static void
882 ppc_linux_sigtramp_cache (struct frame_info *this_frame,
883 struct trad_frame_cache *this_cache,
884 CORE_ADDR func, LONGEST offset,
885 int bias)
886 {
887 CORE_ADDR base;
888 CORE_ADDR regs;
889 CORE_ADDR gpregs;
890 CORE_ADDR fpregs;
891 int i;
892 struct gdbarch *gdbarch = get_frame_arch (this_frame);
893 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
894 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
895
896 base = get_frame_register_unsigned (this_frame,
897 gdbarch_sp_regnum (gdbarch));
898 if (bias > 0 && get_frame_pc (this_frame) != func)
899 /* See below, some signal trampolines increment the stack as their
900 first instruction, need to compensate for that. */
901 base -= bias;
902
903 /* Find the address of the register buffer pointer. */
904 regs = base + offset;
905 /* Use that to find the address of the corresponding register
906 buffers. */
907 gpregs = read_memory_unsigned_integer (regs, tdep->wordsize, byte_order);
908 fpregs = gpregs + 48 * tdep->wordsize;
909
910 /* General purpose. */
911 for (i = 0; i < 32; i++)
912 {
913 int regnum = i + tdep->ppc_gp0_regnum;
914 trad_frame_set_reg_addr (this_cache,
915 regnum, gpregs + i * tdep->wordsize);
916 }
917 trad_frame_set_reg_addr (this_cache,
918 gdbarch_pc_regnum (gdbarch),
919 gpregs + 32 * tdep->wordsize);
920 trad_frame_set_reg_addr (this_cache, tdep->ppc_ctr_regnum,
921 gpregs + 35 * tdep->wordsize);
922 trad_frame_set_reg_addr (this_cache, tdep->ppc_lr_regnum,
923 gpregs + 36 * tdep->wordsize);
924 trad_frame_set_reg_addr (this_cache, tdep->ppc_xer_regnum,
925 gpregs + 37 * tdep->wordsize);
926 trad_frame_set_reg_addr (this_cache, tdep->ppc_cr_regnum,
927 gpregs + 38 * tdep->wordsize);
928
929 if (ppc_linux_trap_reg_p (gdbarch))
930 {
931 trad_frame_set_reg_addr (this_cache, PPC_ORIG_R3_REGNUM,
932 gpregs + 34 * tdep->wordsize);
933 trad_frame_set_reg_addr (this_cache, PPC_TRAP_REGNUM,
934 gpregs + 40 * tdep->wordsize);
935 }
936
937 if (ppc_floating_point_unit_p (gdbarch))
938 {
939 /* Floating point registers. */
940 for (i = 0; i < 32; i++)
941 {
942 int regnum = i + gdbarch_fp0_regnum (gdbarch);
943 trad_frame_set_reg_addr (this_cache, regnum,
944 fpregs + i * tdep->wordsize);
945 }
946 trad_frame_set_reg_addr (this_cache, tdep->ppc_fpscr_regnum,
947 fpregs + 32 * tdep->wordsize);
948 }
949 trad_frame_set_id (this_cache, frame_id_build (base, func));
950 }
951
952 static void
953 ppc32_linux_sigaction_cache_init (const struct tramp_frame *self,
954 struct frame_info *this_frame,
955 struct trad_frame_cache *this_cache,
956 CORE_ADDR func)
957 {
958 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
959 0xd0 /* Offset to ucontext_t. */
960 + 0x30 /* Offset to .reg. */,
961 0);
962 }
963
964 static void
965 ppc64_linux_sigaction_cache_init (const struct tramp_frame *self,
966 struct frame_info *this_frame,
967 struct trad_frame_cache *this_cache,
968 CORE_ADDR func)
969 {
970 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
971 0x80 /* Offset to ucontext_t. */
972 + 0xe0 /* Offset to .reg. */,
973 128);
974 }
975
976 static void
977 ppc32_linux_sighandler_cache_init (const struct tramp_frame *self,
978 struct frame_info *this_frame,
979 struct trad_frame_cache *this_cache,
980 CORE_ADDR func)
981 {
982 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
983 0x40 /* Offset to ucontext_t. */
984 + 0x1c /* Offset to .reg. */,
985 0);
986 }
987
988 static void
989 ppc64_linux_sighandler_cache_init (const struct tramp_frame *self,
990 struct frame_info *this_frame,
991 struct trad_frame_cache *this_cache,
992 CORE_ADDR func)
993 {
994 ppc_linux_sigtramp_cache (this_frame, this_cache, func,
995 0x80 /* Offset to struct sigcontext. */
996 + 0x38 /* Offset to .reg. */,
997 128);
998 }
999
1000 static struct tramp_frame ppc32_linux_sigaction_tramp_frame = {
1001 SIGTRAMP_FRAME,
1002 4,
1003 {
1004 { 0x380000ac, -1 }, /* li r0, 172 */
1005 { 0x44000002, -1 }, /* sc */
1006 { TRAMP_SENTINEL_INSN },
1007 },
1008 ppc32_linux_sigaction_cache_init
1009 };
1010 static struct tramp_frame ppc64_linux_sigaction_tramp_frame = {
1011 SIGTRAMP_FRAME,
1012 4,
1013 {
1014 { 0x38210080, -1 }, /* addi r1,r1,128 */
1015 { 0x380000ac, -1 }, /* li r0, 172 */
1016 { 0x44000002, -1 }, /* sc */
1017 { TRAMP_SENTINEL_INSN },
1018 },
1019 ppc64_linux_sigaction_cache_init
1020 };
1021 static struct tramp_frame ppc32_linux_sighandler_tramp_frame = {
1022 SIGTRAMP_FRAME,
1023 4,
1024 {
1025 { 0x38000077, -1 }, /* li r0,119 */
1026 { 0x44000002, -1 }, /* sc */
1027 { TRAMP_SENTINEL_INSN },
1028 },
1029 ppc32_linux_sighandler_cache_init
1030 };
1031 static struct tramp_frame ppc64_linux_sighandler_tramp_frame = {
1032 SIGTRAMP_FRAME,
1033 4,
1034 {
1035 { 0x38210080, -1 }, /* addi r1,r1,128 */
1036 { 0x38000077, -1 }, /* li r0,119 */
1037 { 0x44000002, -1 }, /* sc */
1038 { TRAMP_SENTINEL_INSN },
1039 },
1040 ppc64_linux_sighandler_cache_init
1041 };
1042
1043
1044 /* Address to use for displaced stepping. When debugging a stand-alone
1045 SPU executable, entry_point_address () will point to an SPU local-store
1046 address and is thus not usable as displaced stepping location. We use
1047 the auxiliary vector to determine the PowerPC-side entry point address
1048 instead. */
1049
1050 static CORE_ADDR ppc_linux_entry_point_addr = 0;
1051
1052 static void
1053 ppc_linux_inferior_created (struct target_ops *target, int from_tty)
1054 {
1055 ppc_linux_entry_point_addr = 0;
1056 }
1057
1058 static CORE_ADDR
1059 ppc_linux_displaced_step_location (struct gdbarch *gdbarch)
1060 {
1061 if (ppc_linux_entry_point_addr == 0)
1062 {
1063 CORE_ADDR addr;
1064
1065 /* Determine entry point from target auxiliary vector. */
1066 if (target_auxv_search (&current_target, AT_ENTRY, &addr) <= 0)
1067 error (_("Cannot find AT_ENTRY auxiliary vector entry."));
1068
1069 /* Make certain that the address points at real code, and not a
1070 function descriptor. */
1071 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
1072 &current_target);
1073
1074 /* Inferior calls also use the entry point as a breakpoint location.
1075 We don't want displaced stepping to interfere with those
1076 breakpoints, so leave space. */
1077 ppc_linux_entry_point_addr = addr + 3 * PPC_INSN_SIZE;
1078 }
1079
1080 return ppc_linux_entry_point_addr;
1081 }
1082
1083
1084 /* Return 1 if PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM are usable. */
1085 int
1086 ppc_linux_trap_reg_p (struct gdbarch *gdbarch)
1087 {
1088 /* If we do not have a target description with registers, then
1089 the special registers will not be included in the register set. */
1090 if (!tdesc_has_registers (gdbarch_target_desc (gdbarch)))
1091 return 0;
1092
1093 /* If we do, then it is safe to check the size. */
1094 return register_size (gdbarch, PPC_ORIG_R3_REGNUM) > 0
1095 && register_size (gdbarch, PPC_TRAP_REGNUM) > 0;
1096 }
1097
1098 /* Return the current system call's number present in the
1099 r0 register. When the function fails, it returns -1. */
1100 static LONGEST
1101 ppc_linux_get_syscall_number (struct gdbarch *gdbarch,
1102 ptid_t ptid)
1103 {
1104 struct regcache *regcache = get_thread_regcache (ptid);
1105 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1106 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1107 struct cleanup *cleanbuf;
1108 /* The content of a register */
1109 gdb_byte *buf;
1110 /* The result */
1111 LONGEST ret;
1112
1113 /* Make sure we're in a 32- or 64-bit machine */
1114 gdb_assert (tdep->wordsize == 4 || tdep->wordsize == 8);
1115
1116 buf = (gdb_byte *) xmalloc (tdep->wordsize * sizeof (gdb_byte));
1117
1118 cleanbuf = make_cleanup (xfree, buf);
1119
1120 /* Getting the system call number from the register.
1121 When dealing with PowerPC architecture, this information
1122 is stored at 0th register. */
1123 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum, buf);
1124
1125 ret = extract_signed_integer (buf, tdep->wordsize, byte_order);
1126 do_cleanups (cleanbuf);
1127
1128 return ret;
1129 }
1130
1131 static void
1132 ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
1133 {
1134 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1135
1136 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch), pc);
1137
1138 /* Set special TRAP register to -1 to prevent the kernel from
1139 messing with the PC we just installed, if we happen to be
1140 within an interrupted system call that the kernel wants to
1141 restart.
1142
1143 Note that after we return from the dummy call, the TRAP and
1144 ORIG_R3 registers will be automatically restored, and the
1145 kernel continues to restart the system call at this point. */
1146 if (ppc_linux_trap_reg_p (gdbarch))
1147 regcache_cooked_write_unsigned (regcache, PPC_TRAP_REGNUM, -1);
1148 }
1149
1150 static int
1151 ppc_linux_spu_section (bfd *abfd, asection *asect, void *user_data)
1152 {
1153 return strncmp (bfd_section_name (abfd, asect), "SPU/", 4) == 0;
1154 }
1155
1156 static const struct target_desc *
1157 ppc_linux_core_read_description (struct gdbarch *gdbarch,
1158 struct target_ops *target,
1159 bfd *abfd)
1160 {
1161 asection *cell = bfd_sections_find_if (abfd, ppc_linux_spu_section, NULL);
1162 asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
1163 asection *vsx = bfd_get_section_by_name (abfd, ".reg-ppc-vsx");
1164 asection *section = bfd_get_section_by_name (abfd, ".reg");
1165 if (! section)
1166 return NULL;
1167
1168 switch (bfd_section_size (abfd, section))
1169 {
1170 case 48 * 4:
1171 if (cell)
1172 return tdesc_powerpc_cell32l;
1173 else if (vsx)
1174 return tdesc_powerpc_vsx32l;
1175 else if (altivec)
1176 return tdesc_powerpc_altivec32l;
1177 else
1178 return tdesc_powerpc_32l;
1179
1180 case 48 * 8:
1181 if (cell)
1182 return tdesc_powerpc_cell64l;
1183 else if (vsx)
1184 return tdesc_powerpc_vsx64l;
1185 else if (altivec)
1186 return tdesc_powerpc_altivec64l;
1187 else
1188 return tdesc_powerpc_64l;
1189
1190 default:
1191 return NULL;
1192 }
1193 }
1194
1195
1196 /* Cell/B.E. active SPE context tracking support. */
1197
1198 static struct objfile *spe_context_objfile = NULL;
1199 static CORE_ADDR spe_context_lm_addr = 0;
1200 static CORE_ADDR spe_context_offset = 0;
1201
1202 static ptid_t spe_context_cache_ptid;
1203 static CORE_ADDR spe_context_cache_address;
1204
1205 /* Hook into inferior_created, solib_loaded, and solib_unloaded observers
1206 to track whether we've loaded a version of libspe2 (as static or dynamic
1207 library) that provides the __spe_current_active_context variable. */
1208 static void
1209 ppc_linux_spe_context_lookup (struct objfile *objfile)
1210 {
1211 struct minimal_symbol *sym;
1212
1213 if (!objfile)
1214 {
1215 spe_context_objfile = NULL;
1216 spe_context_lm_addr = 0;
1217 spe_context_offset = 0;
1218 spe_context_cache_ptid = minus_one_ptid;
1219 spe_context_cache_address = 0;
1220 return;
1221 }
1222
1223 sym = lookup_minimal_symbol ("__spe_current_active_context", NULL, objfile);
1224 if (sym)
1225 {
1226 spe_context_objfile = objfile;
1227 spe_context_lm_addr = svr4_fetch_objfile_link_map (objfile);
1228 spe_context_offset = SYMBOL_VALUE_ADDRESS (sym);
1229 spe_context_cache_ptid = minus_one_ptid;
1230 spe_context_cache_address = 0;
1231 return;
1232 }
1233 }
1234
1235 static void
1236 ppc_linux_spe_context_inferior_created (struct target_ops *t, int from_tty)
1237 {
1238 struct objfile *objfile;
1239
1240 ppc_linux_spe_context_lookup (NULL);
1241 ALL_OBJFILES (objfile)
1242 ppc_linux_spe_context_lookup (objfile);
1243 }
1244
1245 static void
1246 ppc_linux_spe_context_solib_loaded (struct so_list *so)
1247 {
1248 if (strstr (so->so_original_name, "/libspe") != NULL)
1249 {
1250 solib_read_symbols (so, 0);
1251 ppc_linux_spe_context_lookup (so->objfile);
1252 }
1253 }
1254
1255 static void
1256 ppc_linux_spe_context_solib_unloaded (struct so_list *so)
1257 {
1258 if (so->objfile == spe_context_objfile)
1259 ppc_linux_spe_context_lookup (NULL);
1260 }
1261
1262 /* Retrieve contents of the N'th element in the current thread's
1263 linked SPE context list into ID and NPC. Return the address of
1264 said context element, or 0 if not found. */
1265 static CORE_ADDR
1266 ppc_linux_spe_context (int wordsize, enum bfd_endian byte_order,
1267 int n, int *id, unsigned int *npc)
1268 {
1269 CORE_ADDR spe_context = 0;
1270 gdb_byte buf[16];
1271 int i;
1272
1273 /* Quick exit if we have not found __spe_current_active_context. */
1274 if (!spe_context_objfile)
1275 return 0;
1276
1277 /* Look up cached address of thread-local variable. */
1278 if (!ptid_equal (spe_context_cache_ptid, inferior_ptid))
1279 {
1280 struct target_ops *target = &current_target;
1281 volatile struct gdb_exception ex;
1282
1283 while (target && !target->to_get_thread_local_address)
1284 target = find_target_beneath (target);
1285 if (!target)
1286 return 0;
1287
1288 TRY_CATCH (ex, RETURN_MASK_ERROR)
1289 {
1290 /* We do not call target_translate_tls_address here, because
1291 svr4_fetch_objfile_link_map may invalidate the frame chain,
1292 which must not do while inside a frame sniffer.
1293
1294 Instead, we have cached the lm_addr value, and use that to
1295 directly call the target's to_get_thread_local_address. */
1296 spe_context_cache_address
1297 = target->to_get_thread_local_address (target, inferior_ptid,
1298 spe_context_lm_addr,
1299 spe_context_offset);
1300 spe_context_cache_ptid = inferior_ptid;
1301 }
1302
1303 if (ex.reason < 0)
1304 return 0;
1305 }
1306
1307 /* Read variable value. */
1308 if (target_read_memory (spe_context_cache_address, buf, wordsize) == 0)
1309 spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1310
1311 /* Cyle through to N'th linked list element. */
1312 for (i = 0; i < n && spe_context; i++)
1313 if (target_read_memory (spe_context + align_up (12, wordsize),
1314 buf, wordsize) == 0)
1315 spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
1316 else
1317 spe_context = 0;
1318
1319 /* Read current context. */
1320 if (spe_context
1321 && target_read_memory (spe_context, buf, 12) != 0)
1322 spe_context = 0;
1323
1324 /* Extract data elements. */
1325 if (spe_context)
1326 {
1327 if (id)
1328 *id = extract_signed_integer (buf, 4, byte_order);
1329 if (npc)
1330 *npc = extract_unsigned_integer (buf + 4, 4, byte_order);
1331 }
1332
1333 return spe_context;
1334 }
1335
1336
1337 /* Cell/B.E. cross-architecture unwinder support. */
1338
1339 struct ppu2spu_cache
1340 {
1341 struct frame_id frame_id;
1342 struct regcache *regcache;
1343 };
1344
1345 static struct gdbarch *
1346 ppu2spu_prev_arch (struct frame_info *this_frame, void **this_cache)
1347 {
1348 struct ppu2spu_cache *cache = *this_cache;
1349 return get_regcache_arch (cache->regcache);
1350 }
1351
1352 static void
1353 ppu2spu_this_id (struct frame_info *this_frame,
1354 void **this_cache, struct frame_id *this_id)
1355 {
1356 struct ppu2spu_cache *cache = *this_cache;
1357 *this_id = cache->frame_id;
1358 }
1359
1360 static struct value *
1361 ppu2spu_prev_register (struct frame_info *this_frame,
1362 void **this_cache, int regnum)
1363 {
1364 struct ppu2spu_cache *cache = *this_cache;
1365 struct gdbarch *gdbarch = get_regcache_arch (cache->regcache);
1366 gdb_byte *buf;
1367
1368 buf = alloca (register_size (gdbarch, regnum));
1369
1370 if (regnum < gdbarch_num_regs (gdbarch))
1371 regcache_raw_read (cache->regcache, regnum, buf);
1372 else
1373 gdbarch_pseudo_register_read (gdbarch, cache->regcache, regnum, buf);
1374
1375 return frame_unwind_got_bytes (this_frame, regnum, buf);
1376 }
1377
1378 struct ppu2spu_data
1379 {
1380 struct gdbarch *gdbarch;
1381 int id;
1382 unsigned int npc;
1383 gdb_byte gprs[128*16];
1384 };
1385
1386 static int
1387 ppu2spu_unwind_register (void *src, int regnum, gdb_byte *buf)
1388 {
1389 struct ppu2spu_data *data = src;
1390 enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
1391
1392 if (regnum >= 0 && regnum < SPU_NUM_GPRS)
1393 memcpy (buf, data->gprs + 16*regnum, 16);
1394 else if (regnum == SPU_ID_REGNUM)
1395 store_unsigned_integer (buf, 4, byte_order, data->id);
1396 else if (regnum == SPU_PC_REGNUM)
1397 store_unsigned_integer (buf, 4, byte_order, data->npc);
1398 else
1399 return REG_UNAVAILABLE;
1400
1401 return REG_VALID;
1402 }
1403
1404 static int
1405 ppu2spu_sniffer (const struct frame_unwind *self,
1406 struct frame_info *this_frame, void **this_prologue_cache)
1407 {
1408 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1409 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1410 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1411 struct ppu2spu_data data;
1412 struct frame_info *fi;
1413 CORE_ADDR base, func, backchain, spe_context;
1414 gdb_byte buf[8];
1415 int n = 0;
1416
1417 /* Count the number of SPU contexts already in the frame chain. */
1418 for (fi = get_next_frame (this_frame); fi; fi = get_next_frame (fi))
1419 if (get_frame_type (fi) == ARCH_FRAME
1420 && gdbarch_bfd_arch_info (get_frame_arch (fi))->arch == bfd_arch_spu)
1421 n++;
1422
1423 base = get_frame_sp (this_frame);
1424 func = get_frame_pc (this_frame);
1425 if (target_read_memory (base, buf, tdep->wordsize))
1426 return 0;
1427 backchain = extract_unsigned_integer (buf, tdep->wordsize, byte_order);
1428
1429 spe_context = ppc_linux_spe_context (tdep->wordsize, byte_order,
1430 n, &data.id, &data.npc);
1431 if (spe_context && base <= spe_context && spe_context < backchain)
1432 {
1433 char annex[32];
1434
1435 /* Find gdbarch for SPU. */
1436 struct gdbarch_info info;
1437 gdbarch_info_init (&info);
1438 info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
1439 info.byte_order = BFD_ENDIAN_BIG;
1440 info.osabi = GDB_OSABI_LINUX;
1441 info.tdep_info = (void *) &data.id;
1442 data.gdbarch = gdbarch_find_by_info (info);
1443 if (!data.gdbarch)
1444 return 0;
1445
1446 xsnprintf (annex, sizeof annex, "%d/regs", data.id);
1447 if (target_read (&current_target, TARGET_OBJECT_SPU, annex,
1448 data.gprs, 0, sizeof data.gprs)
1449 == sizeof data.gprs)
1450 {
1451 struct ppu2spu_cache *cache
1452 = FRAME_OBSTACK_CALLOC (1, struct ppu2spu_cache);
1453
1454 struct address_space *aspace = get_frame_address_space (this_frame);
1455 struct regcache *regcache = regcache_xmalloc (data.gdbarch, aspace);
1456 struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
1457 regcache_save (regcache, ppu2spu_unwind_register, &data);
1458 discard_cleanups (cleanups);
1459
1460 cache->frame_id = frame_id_build (base, func);
1461 cache->regcache = regcache;
1462 *this_prologue_cache = cache;
1463 return 1;
1464 }
1465 }
1466
1467 return 0;
1468 }
1469
1470 static void
1471 ppu2spu_dealloc_cache (struct frame_info *self, void *this_cache)
1472 {
1473 struct ppu2spu_cache *cache = this_cache;
1474 regcache_xfree (cache->regcache);
1475 }
1476
1477 static const struct frame_unwind ppu2spu_unwind = {
1478 ARCH_FRAME,
1479 default_frame_unwind_stop_reason,
1480 ppu2spu_this_id,
1481 ppu2spu_prev_register,
1482 NULL,
1483 ppu2spu_sniffer,
1484 ppu2spu_dealloc_cache,
1485 ppu2spu_prev_arch,
1486 };
1487
1488
1489 static void
1490 ppc_linux_init_abi (struct gdbarch_info info,
1491 struct gdbarch *gdbarch)
1492 {
1493 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1494 struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
1495
1496 linux_init_abi (info, gdbarch);
1497
1498 /* PPC GNU/Linux uses either 64-bit or 128-bit long doubles; where
1499 128-bit, they are IBM long double, not IEEE quad long double as
1500 in the System V ABI PowerPC Processor Supplement. We can safely
1501 let them default to 128-bit, since the debug info will give the
1502 size of type actually used in each case. */
1503 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
1504 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
1505
1506 /* Handle inferior calls during interrupted system calls. */
1507 set_gdbarch_write_pc (gdbarch, ppc_linux_write_pc);
1508
1509 /* Get the syscall number from the arch's register. */
1510 set_gdbarch_get_syscall_number (gdbarch, ppc_linux_get_syscall_number);
1511
1512 if (tdep->wordsize == 4)
1513 {
1514 /* Until November 2001, gcc did not comply with the 32 bit SysV
1515 R4 ABI requirement that structures less than or equal to 8
1516 bytes should be returned in registers. Instead GCC was using
1517 the AIX/PowerOpen ABI - everything returned in memory
1518 (well ignoring vectors that is). When this was corrected, it
1519 wasn't fixed for GNU/Linux native platform. Use the
1520 PowerOpen struct convention. */
1521 set_gdbarch_return_value (gdbarch, ppc_linux_return_value);
1522
1523 set_gdbarch_memory_remove_breakpoint (gdbarch,
1524 ppc_linux_memory_remove_breakpoint);
1525
1526 /* Shared library handling. */
1527 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1528 set_solib_svr4_fetch_link_map_offsets
1529 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
1530
1531 /* Setting the correct XML syscall filename. */
1532 set_xml_syscall_file_name (XML_SYSCALL_FILENAME_PPC);
1533
1534 /* Trampolines. */
1535 tramp_frame_prepend_unwinder (gdbarch,
1536 &ppc32_linux_sigaction_tramp_frame);
1537 tramp_frame_prepend_unwinder (gdbarch,
1538 &ppc32_linux_sighandler_tramp_frame);
1539
1540 /* BFD target for core files. */
1541 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1542 set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpcle");
1543 else
1544 set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc");
1545
1546 /* Supported register sections. */
1547 if (tdesc_find_feature (info.target_desc,
1548 "org.gnu.gdb.power.vsx"))
1549 set_gdbarch_core_regset_sections (gdbarch,
1550 ppc_linux_vsx_regset_sections);
1551 else if (tdesc_find_feature (info.target_desc,
1552 "org.gnu.gdb.power.altivec"))
1553 set_gdbarch_core_regset_sections (gdbarch,
1554 ppc_linux_vmx_regset_sections);
1555 else
1556 set_gdbarch_core_regset_sections (gdbarch,
1557 ppc_linux_fp_regset_sections);
1558 }
1559
1560 if (tdep->wordsize == 8)
1561 {
1562 /* Handle PPC GNU/Linux 64-bit function pointers (which are really
1563 function descriptors). */
1564 set_gdbarch_convert_from_func_ptr_addr
1565 (gdbarch, ppc64_linux_convert_from_func_ptr_addr);
1566
1567 /* Shared library handling. */
1568 set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);
1569 set_solib_svr4_fetch_link_map_offsets
1570 (gdbarch, svr4_lp64_fetch_link_map_offsets);
1571
1572 /* Setting the correct XML syscall filename. */
1573 set_xml_syscall_file_name (XML_SYSCALL_FILENAME_PPC64);
1574
1575 /* Trampolines. */
1576 tramp_frame_prepend_unwinder (gdbarch,
1577 &ppc64_linux_sigaction_tramp_frame);
1578 tramp_frame_prepend_unwinder (gdbarch,
1579 &ppc64_linux_sighandler_tramp_frame);
1580
1581 /* BFD target for core files. */
1582 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1583 set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpcle");
1584 else
1585 set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc");
1586
1587 /* Supported register sections. */
1588 if (tdesc_find_feature (info.target_desc,
1589 "org.gnu.gdb.power.vsx"))
1590 set_gdbarch_core_regset_sections (gdbarch,
1591 ppc64_linux_vsx_regset_sections);
1592 else if (tdesc_find_feature (info.target_desc,
1593 "org.gnu.gdb.power.altivec"))
1594 set_gdbarch_core_regset_sections (gdbarch,
1595 ppc64_linux_vmx_regset_sections);
1596 else
1597 set_gdbarch_core_regset_sections (gdbarch,
1598 ppc64_linux_fp_regset_sections);
1599 }
1600 set_gdbarch_regset_from_core_section (gdbarch,
1601 ppc_linux_regset_from_core_section);
1602 set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
1603
1604 /* Enable TLS support. */
1605 set_gdbarch_fetch_tls_load_module_address (gdbarch,
1606 svr4_fetch_objfile_link_map);
1607
1608 if (tdesc_data)
1609 {
1610 const struct tdesc_feature *feature;
1611
1612 /* If we have target-described registers, then we can safely
1613 reserve a number for PPC_ORIG_R3_REGNUM and PPC_TRAP_REGNUM
1614 (whether they are described or not). */
1615 gdb_assert (gdbarch_num_regs (gdbarch) <= PPC_ORIG_R3_REGNUM);
1616 set_gdbarch_num_regs (gdbarch, PPC_TRAP_REGNUM + 1);
1617
1618 /* If they are present, then assign them to the reserved number. */
1619 feature = tdesc_find_feature (info.target_desc,
1620 "org.gnu.gdb.power.linux");
1621 if (feature != NULL)
1622 {
1623 tdesc_numbered_register (feature, tdesc_data,
1624 PPC_ORIG_R3_REGNUM, "orig_r3");
1625 tdesc_numbered_register (feature, tdesc_data,
1626 PPC_TRAP_REGNUM, "trap");
1627 }
1628 }
1629
1630 /* Enable Cell/B.E. if supported by the target. */
1631 if (tdesc_compatible_p (info.target_desc,
1632 bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu)))
1633 {
1634 /* Cell/B.E. multi-architecture support. */
1635 set_spu_solib_ops (gdbarch);
1636
1637 /* Cell/B.E. cross-architecture unwinder support. */
1638 frame_unwind_prepend_unwinder (gdbarch, &ppu2spu_unwind);
1639
1640 /* The default displaced_step_at_entry_point doesn't work for
1641 SPU stand-alone executables. */
1642 set_gdbarch_displaced_step_location (gdbarch,
1643 ppc_linux_displaced_step_location);
1644 }
1645 }
1646
1647 /* Provide a prototype to silence -Wmissing-prototypes. */
1648 extern initialize_file_ftype _initialize_ppc_linux_tdep;
1649
1650 void
1651 _initialize_ppc_linux_tdep (void)
1652 {
1653 /* Register for all sub-familes of the POWER/PowerPC: 32-bit and
1654 64-bit PowerPC, and the older rs6k. */
1655 gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_LINUX,
1656 ppc_linux_init_abi);
1657 gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64, GDB_OSABI_LINUX,
1658 ppc_linux_init_abi);
1659 gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
1660 ppc_linux_init_abi);
1661
1662 /* Attach to inferior_created observer. */
1663 observer_attach_inferior_created (ppc_linux_inferior_created);
1664
1665 /* Attach to observers to track __spe_current_active_context. */
1666 observer_attach_inferior_created (ppc_linux_spe_context_inferior_created);
1667 observer_attach_solib_loaded (ppc_linux_spe_context_solib_loaded);
1668 observer_attach_solib_unloaded (ppc_linux_spe_context_solib_unloaded);
1669
1670 /* Initialize the Linux target descriptions. */
1671 initialize_tdesc_powerpc_32l ();
1672 initialize_tdesc_powerpc_altivec32l ();
1673 initialize_tdesc_powerpc_cell32l ();
1674 initialize_tdesc_powerpc_vsx32l ();
1675 initialize_tdesc_powerpc_isa205_32l ();
1676 initialize_tdesc_powerpc_isa205_altivec32l ();
1677 initialize_tdesc_powerpc_isa205_vsx32l ();
1678 initialize_tdesc_powerpc_64l ();
1679 initialize_tdesc_powerpc_altivec64l ();
1680 initialize_tdesc_powerpc_cell64l ();
1681 initialize_tdesc_powerpc_vsx64l ();
1682 initialize_tdesc_powerpc_isa205_64l ();
1683 initialize_tdesc_powerpc_isa205_altivec64l ();
1684 initialize_tdesc_powerpc_isa205_vsx64l ();
1685 initialize_tdesc_powerpc_e500l ();
1686 }
This page took 0.063096 seconds and 5 git commands to generate.