GDB (API)
|
00001 /* Common target-dependent code for ppc64 GDB, the GNU debugger. 00002 00003 Copyright (C) 1986-2013 Free Software Foundation, Inc. 00004 00005 This file is part of GDB. 00006 00007 This program is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 3 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00019 00020 #include "defs.h" 00021 #include "frame.h" 00022 #include "gdbcore.h" 00023 #include "ppc-tdep.h" 00024 #include "ppc64-tdep.h" 00025 #include "elf-bfd.h" 00026 00027 /* Macros for matching instructions. Note that, since all the 00028 operands are masked off before they're or-ed into the instruction, 00029 you can use -1 to make masks. */ 00030 00031 #define insn_d(opcd, rts, ra, d) \ 00032 ((((opcd) & 0x3f) << 26) \ 00033 | (((rts) & 0x1f) << 21) \ 00034 | (((ra) & 0x1f) << 16) \ 00035 | ((d) & 0xffff)) 00036 00037 #define insn_ds(opcd, rts, ra, d, xo) \ 00038 ((((opcd) & 0x3f) << 26) \ 00039 | (((rts) & 0x1f) << 21) \ 00040 | (((ra) & 0x1f) << 16) \ 00041 | ((d) & 0xfffc) \ 00042 | ((xo) & 0x3)) 00043 00044 #define insn_xfx(opcd, rts, spr, xo) \ 00045 ((((opcd) & 0x3f) << 26) \ 00046 | (((rts) & 0x1f) << 21) \ 00047 | (((spr) & 0x1f) << 16) \ 00048 | (((spr) & 0x3e0) << 6) \ 00049 | (((xo) & 0x3ff) << 1)) 00050 00051 /* If DESC is the address of a 64-bit PowerPC FreeBSD function 00052 descriptor, return the descriptor's entry point. */ 00053 00054 static CORE_ADDR 00055 ppc64_desc_entry_point (struct gdbarch *gdbarch, CORE_ADDR desc) 00056 { 00057 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 00058 /* The first word of the descriptor is the entry point. */ 00059 return (CORE_ADDR) read_memory_unsigned_integer (desc, 8, byte_order); 00060 } 00061 00062 /* Patterns for the standard linkage functions. These are built by 00063 build_plt_stub in bfd/elf64-ppc.c. */ 00064 00065 /* Old PLT call stub. */ 00066 00067 static struct ppc_insn_pattern ppc64_standard_linkage1[] = 00068 { 00069 /* addis r12, r2, <any> */ 00070 { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, 00071 00072 /* std r2, 40(r1) */ 00073 { -1, insn_ds (62, 2, 1, 40, 0), 0 }, 00074 00075 /* ld r11, <any>(r12) */ 00076 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, 00077 00078 /* addis r12, r12, 1 <optional> */ 00079 { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 }, 00080 00081 /* ld r2, <any>(r12) */ 00082 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, 00083 00084 /* addis r12, r12, 1 <optional> */ 00085 { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 }, 00086 00087 /* mtctr r11 */ 00088 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, 00089 00090 /* ld r11, <any>(r12) <optional> */ 00091 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, 00092 00093 /* bctr */ 00094 { -1, 0x4e800420, 0 }, 00095 00096 { 0, 0, 0 } 00097 }; 00098 00099 /* Current PLT call stub to access PLT entries more than +/- 32k from r2. 00100 Also supports older stub with different placement of std 2,40(1), 00101 a stub that omits the std 2,40(1), and both versions of power7 00102 thread safety read barriers. Note that there are actually two more 00103 instructions following "cmpldi r2, 0", "bnectr+" and "b <glink_i>", 00104 but there isn't any need to match them. */ 00105 00106 static struct ppc_insn_pattern ppc64_standard_linkage2[] = 00107 { 00108 /* std r2, 40(r1) <optional> */ 00109 { -1, insn_ds (62, 2, 1, 40, 0), 1 }, 00110 00111 /* addis r12, r2, <any> */ 00112 { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, 00113 00114 /* std r2, 40(r1) <optional> */ 00115 { -1, insn_ds (62, 2, 1, 40, 0), 1 }, 00116 00117 /* ld r11, <any>(r12) */ 00118 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, 00119 00120 /* addi r12, r12, <any> <optional> */ 00121 { insn_d (-1, -1, -1, 0), insn_d (14, 12, 12, 0), 1 }, 00122 00123 /* mtctr r11 */ 00124 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, 00125 00126 /* xor r11, r11, r11 <optional> */ 00127 { -1, 0x7d6b5a78, 1 }, 00128 00129 /* add r12, r12, r11 <optional> */ 00130 { -1, 0x7d8c5a14, 1 }, 00131 00132 /* ld r2, <any>(r12) */ 00133 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, 00134 00135 /* ld r11, <any>(r12) <optional> */ 00136 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, 00137 00138 /* bctr <optional> */ 00139 { -1, 0x4e800420, 1 }, 00140 00141 /* cmpldi r2, 0 <optional> */ 00142 { -1, 0x28220000, 1 }, 00143 00144 { 0, 0, 0 } 00145 }; 00146 00147 /* Current PLT call stub to access PLT entries within +/- 32k of r2. */ 00148 00149 static struct ppc_insn_pattern ppc64_standard_linkage3[] = 00150 { 00151 /* std r2, 40(r1) <optional> */ 00152 { -1, insn_ds (62, 2, 1, 40, 0), 1 }, 00153 00154 /* ld r11, <any>(r2) */ 00155 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 }, 00156 00157 /* addi r2, r2, <any> <optional> */ 00158 { insn_d (-1, -1, -1, 0), insn_d (14, 2, 2, 0), 1 }, 00159 00160 /* mtctr r11 */ 00161 { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, 00162 00163 /* xor r11, r11, r11 <optional> */ 00164 { -1, 0x7d6b5a78, 1 }, 00165 00166 /* add r2, r2, r11 <optional> */ 00167 { -1, 0x7c425a14, 1 }, 00168 00169 /* ld r11, <any>(r2) <optional> */ 00170 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 }, 00171 00172 /* ld r2, <any>(r2) */ 00173 { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 }, 00174 00175 /* bctr <optional> */ 00176 { -1, 0x4e800420, 1 }, 00177 00178 /* cmpldi r2, 0 <optional> */ 00179 { -1, 0x28220000, 1 }, 00180 00181 { 0, 0, 0 } 00182 }; 00183 00184 /* When the dynamic linker is doing lazy symbol resolution, the first 00185 call to a function in another object will go like this: 00186 00187 - The user's function calls the linkage function: 00188 00189 100003d4: 4b ff ff ad bl 10000380 <nnnn.plt_call.printf> 00190 100003d8: e8 41 00 28 ld r2,40(r1) 00191 00192 - The linkage function loads the entry point and toc pointer from 00193 the function descriptor in the PLT, and jumps to it: 00194 00195 <nnnn.plt_call.printf>: 00196 10000380: f8 41 00 28 std r2,40(r1) 00197 10000384: e9 62 80 78 ld r11,-32648(r2) 00198 10000388: 7d 69 03 a6 mtctr r11 00199 1000038c: e8 42 80 80 ld r2,-32640(r2) 00200 10000390: 28 22 00 00 cmpldi r2,0 00201 10000394: 4c e2 04 20 bnectr+ 00202 10000398: 48 00 03 a0 b 10000738 <printf@plt> 00203 00204 - But since this is the first time that PLT entry has been used, it 00205 sends control to its glink entry. That loads the number of the 00206 PLT entry and jumps to the common glink0 code: 00207 00208 <printf@plt>: 00209 10000738: 38 00 00 01 li r0,1 00210 1000073c: 4b ff ff bc b 100006f8 <__glink_PLTresolve> 00211 00212 - The common glink0 code then transfers control to the dynamic 00213 linker's fixup code: 00214 00215 100006f0: 0000000000010440 .quad plt0 - (. + 16) 00216 <__glink_PLTresolve>: 00217 100006f8: 7d 88 02 a6 mflr r12 00218 100006fc: 42 9f 00 05 bcl 20,4*cr7+so,10000700 00219 10000700: 7d 68 02 a6 mflr r11 00220 10000704: e8 4b ff f0 ld r2,-16(r11) 00221 10000708: 7d 88 03 a6 mtlr r12 00222 1000070c: 7d 82 5a 14 add r12,r2,r11 00223 10000710: e9 6c 00 00 ld r11,0(r12) 00224 10000714: e8 4c 00 08 ld r2,8(r12) 00225 10000718: 7d 69 03 a6 mtctr r11 00226 1000071c: e9 6c 00 10 ld r11,16(r12) 00227 10000720: 4e 80 04 20 bctr 00228 00229 Eventually, this code will figure out how to skip all of this, 00230 including the dynamic linker. At the moment, we just get through 00231 the linkage function. */ 00232 00233 /* If the current thread is about to execute a series of instructions 00234 at PC matching the ppc64_standard_linkage pattern, and INSN is the result 00235 from that pattern match, return the code address to which the 00236 standard linkage function will send them. (This doesn't deal with 00237 dynamic linker lazy symbol resolution stubs.) */ 00238 00239 static CORE_ADDR 00240 ppc64_standard_linkage1_target (struct frame_info *frame, 00241 CORE_ADDR pc, unsigned int *insn) 00242 { 00243 struct gdbarch *gdbarch = get_frame_arch (frame); 00244 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 00245 00246 /* The address of the function descriptor this linkage function 00247 references. */ 00248 CORE_ADDR desc 00249 = ((CORE_ADDR) get_frame_register_unsigned (frame, 00250 tdep->ppc_gp0_regnum + 2) 00251 + (ppc_insn_d_field (insn[0]) << 16) 00252 + ppc_insn_ds_field (insn[2])); 00253 00254 /* The first word of the descriptor is the entry point. Return that. */ 00255 return ppc64_desc_entry_point (gdbarch, desc); 00256 } 00257 00258 static CORE_ADDR 00259 ppc64_standard_linkage2_target (struct frame_info *frame, 00260 CORE_ADDR pc, unsigned int *insn) 00261 { 00262 struct gdbarch *gdbarch = get_frame_arch (frame); 00263 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 00264 00265 /* The address of the function descriptor this linkage function 00266 references. */ 00267 CORE_ADDR desc 00268 = ((CORE_ADDR) get_frame_register_unsigned (frame, 00269 tdep->ppc_gp0_regnum + 2) 00270 + (ppc_insn_d_field (insn[1]) << 16) 00271 + ppc_insn_ds_field (insn[3])); 00272 00273 /* The first word of the descriptor is the entry point. Return that. */ 00274 return ppc64_desc_entry_point (gdbarch, desc); 00275 } 00276 00277 static CORE_ADDR 00278 ppc64_standard_linkage3_target (struct frame_info *frame, 00279 CORE_ADDR pc, unsigned int *insn) 00280 { 00281 struct gdbarch *gdbarch = get_frame_arch (frame); 00282 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 00283 00284 /* The address of the function descriptor this linkage function 00285 references. */ 00286 CORE_ADDR desc 00287 = ((CORE_ADDR) get_frame_register_unsigned (frame, 00288 tdep->ppc_gp0_regnum + 2) 00289 + ppc_insn_ds_field (insn[1])); 00290 00291 /* The first word of the descriptor is the entry point. Return that. */ 00292 return ppc64_desc_entry_point (gdbarch, desc); 00293 } 00294 00295 00296 /* Given that we've begun executing a call trampoline at PC, return 00297 the entry point of the function the trampoline will go to. */ 00298 00299 CORE_ADDR 00300 ppc64_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) 00301 { 00302 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 00303 unsigned int insns[MAX (MAX (ARRAY_SIZE (ppc64_standard_linkage1), 00304 ARRAY_SIZE (ppc64_standard_linkage2)), 00305 ARRAY_SIZE (ppc64_standard_linkage3)) - 1]; 00306 CORE_ADDR target; 00307 00308 if (ppc_insns_match_pattern (frame, pc, ppc64_standard_linkage3, insns) 00309 && (insns[8] != 0 || insns[9] != 0)) 00310 pc = ppc64_standard_linkage3_target (frame, pc, insns); 00311 else if (ppc_insns_match_pattern (frame, pc, ppc64_standard_linkage2, insns) 00312 && (insns[10] != 0 || insns[11] != 0)) 00313 pc = ppc64_standard_linkage2_target (frame, pc, insns); 00314 else if (ppc_insns_match_pattern (frame, pc, ppc64_standard_linkage1, insns)) 00315 pc = ppc64_standard_linkage1_target (frame, pc, insns); 00316 else 00317 return 0; 00318 00319 /* The PLT descriptor will either point to the already resolved target 00320 address, or else to a glink stub. As the latter carry synthetic @plt 00321 symbols, find_solib_trampoline_target should be able to resolve them. */ 00322 target = find_solib_trampoline_target (frame, pc); 00323 return target ? target : pc; 00324 } 00325 00326 /* Support for convert_from_func_ptr_addr (ARCH, ADDR, TARG) on PPC64 00327 GNU/Linux. 00328 00329 Usually a function pointer's representation is simply the address 00330 of the function. On GNU/Linux on the PowerPC however, a function 00331 pointer may be a pointer to a function descriptor. 00332 00333 For PPC64, a function descriptor is a TOC entry, in a data section, 00334 which contains three words: the first word is the address of the 00335 function, the second word is the TOC pointer (r2), and the third word 00336 is the static chain value. 00337 00338 Throughout GDB it is currently assumed that a function pointer contains 00339 the address of the function, which is not easy to fix. In addition, the 00340 conversion of a function address to a function pointer would 00341 require allocation of a TOC entry in the inferior's memory space, 00342 with all its drawbacks. To be able to call C++ virtual methods in 00343 the inferior (which are called via function pointers), 00344 find_function_addr uses this function to get the function address 00345 from a function pointer. 00346 00347 If ADDR points at what is clearly a function descriptor, transform 00348 it into the address of the corresponding function, if needed. Be 00349 conservative, otherwise GDB will do the transformation on any 00350 random addresses such as occur when there is no symbol table. */ 00351 00352 CORE_ADDR 00353 ppc64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, 00354 CORE_ADDR addr, 00355 struct target_ops *targ) 00356 { 00357 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 00358 struct target_section *s = target_section_by_addr (targ, addr); 00359 00360 /* Check if ADDR points to a function descriptor. */ 00361 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0) 00362 { 00363 /* There may be relocations that need to be applied to the .opd 00364 section. Unfortunately, this function may be called at a time 00365 where these relocations have not yet been performed -- this can 00366 happen for example shortly after a library has been loaded with 00367 dlopen, but ld.so has not yet applied the relocations. 00368 00369 To cope with both the case where the relocation has been applied, 00370 and the case where it has not yet been applied, we do *not* read 00371 the (maybe) relocated value from target memory, but we instead 00372 read the non-relocated value from the BFD, and apply the relocation 00373 offset manually. 00374 00375 This makes the assumption that all .opd entries are always relocated 00376 by the same offset the section itself was relocated. This should 00377 always be the case for GNU/Linux executables and shared libraries. 00378 Note that other kind of object files (e.g. those added via 00379 add-symbol-files) will currently never end up here anyway, as this 00380 function accesses *target* sections only; only the main exec and 00381 shared libraries are ever added to the target. */ 00382 00383 gdb_byte buf[8]; 00384 int res; 00385 00386 res = bfd_get_section_contents (s->the_bfd_section->owner, 00387 s->the_bfd_section, 00388 &buf, addr - s->addr, 8); 00389 if (res != 0) 00390 return extract_unsigned_integer (buf, 8, byte_order) 00391 - bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr; 00392 } 00393 00394 return addr; 00395 } 00396 00397 /* A synthetic 'dot' symbols on ppc64 has the udata.p entry pointing 00398 back to the original ELF symbol it was derived from. Get the size 00399 from that symbol. */ 00400 00401 void 00402 ppc64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym) 00403 { 00404 if ((sym->flags & BSF_SYNTHETIC) != 0 && sym->udata.p != NULL) 00405 { 00406 elf_symbol_type *elf_sym = (elf_symbol_type *) sym->udata.p; 00407 SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size); 00408 } 00409 }