/* Common target-dependent code for ppc64 GDB, the GNU debugger.
- Copyright (C) 1986-2018 Free Software Foundation, Inc.
+ Copyright (C) 1986-2020 Free Software Foundation, Inc.
This file is part of GDB.
you can use -1 to make masks. */
#define insn_d(opcd, rts, ra, d) \
- ((((opcd) & 0x3f) << 26) \
- | (((rts) & 0x1f) << 21) \
- | (((ra) & 0x1f) << 16) \
- | ((d) & 0xffff))
+ ((((unsigned (opcd)) & 0x3f) << 26) \
+ | (((unsigned (rts)) & 0x1f) << 21) \
+ | (((unsigned (ra)) & 0x1f) << 16) \
+ | ((unsigned (d)) & 0xffff))
#define insn_ds(opcd, rts, ra, d, xo) \
- ((((opcd) & 0x3f) << 26) \
- | (((rts) & 0x1f) << 21) \
- | (((ra) & 0x1f) << 16) \
- | ((d) & 0xfffc) \
- | ((xo) & 0x3))
+ ((((unsigned (opcd)) & 0x3f) << 26) \
+ | (((unsigned (rts)) & 0x1f) << 21) \
+ | (((unsigned (ra)) & 0x1f) << 16) \
+ | ((unsigned (d)) & 0xfffc) \
+ | ((unsigned (xo)) & 0x3))
#define insn_xfx(opcd, rts, spr, xo) \
- ((((opcd) & 0x3f) << 26) \
- | (((rts) & 0x1f) << 21) \
- | (((spr) & 0x1f) << 16) \
- | (((spr) & 0x3e0) << 6) \
- | (((xo) & 0x3ff) << 1))
+ ((((unsigned (opcd)) & 0x3f) << 26) \
+ | (((unsigned (rts)) & 0x1f) << 21) \
+ | (((unsigned (spr)) & 0x1f) << 16) \
+ | (((unsigned (spr)) & 0x3e0) << 6) \
+ | (((unsigned (xo)) & 0x3ff) << 1))
/* PLT_OFF is the TOC-relative offset of a 64-bit PowerPC PLT entry.
Return the function's entry point. */
/* Old ELFv1 PLT call stub. */
-static struct ppc_insn_pattern ppc64_standard_linkage1[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage1[] =
{
/* addis r12, r2, <any> */
{ insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 },
/* std r2, 40(r1) */
- { -1, insn_ds (62, 2, 1, 40, 0), 0 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 0 },
/* ld r11, <any>(r12) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 },
/* bctr */
- { -1, 0x4e800420, 0 },
+ { (unsigned) -1, 0x4e800420, 0 },
{ 0, 0, 0 }
};
instructions following "cmpldi r2, 0", "bnectr+" and "b <glink_i>",
but there isn't any need to match them. */
-static struct ppc_insn_pattern ppc64_standard_linkage2[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage2[] =
{
/* std r2, 40(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 40, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 },
/* addis r12, r2, <any> */
{ insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 },
/* std r2, 40(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 40, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 },
/* ld r11, <any>(r12) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 },
/* xor r11, r11, r11 <optional> */
- { -1, 0x7d6b5a78, 1 },
+ { (unsigned) -1, 0x7d6b5a78, 1 },
/* add r12, r12, r11 <optional> */
- { -1, 0x7d8c5a14, 1 },
+ { (unsigned) -1, 0x7d8c5a14, 1 },
/* ld r2, <any>(r12) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 },
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 },
/* bctr <optional> */
- { -1, 0x4e800420, 1 },
+ { (unsigned) -1, 0x4e800420, 1 },
/* cmpldi r2, 0 <optional> */
- { -1, 0x28220000, 1 },
+ { (unsigned) -1, 0x28220000, 1 },
{ 0, 0, 0 }
};
/* ELFv1 PLT call stub to access PLT entries within +/- 32k of r2. */
-static struct ppc_insn_pattern ppc64_standard_linkage3[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage3[] =
{
/* std r2, 40(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 40, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 },
/* ld r11, <any>(r2) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 },
/* xor r11, r11, r11 <optional> */
- { -1, 0x7d6b5a78, 1 },
+ { (unsigned) -1, 0x7d6b5a78, 1 },
/* add r2, r2, r11 <optional> */
- { -1, 0x7c425a14, 1 },
+ { (unsigned) -1, 0x7c425a14, 1 },
/* ld r11, <any>(r2) <optional> */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 },
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 },
/* bctr <optional> */
- { -1, 0x4e800420, 1 },
+ { (unsigned) -1, 0x4e800420, 1 },
/* cmpldi r2, 0 <optional> */
- { -1, 0x28220000, 1 },
+ { (unsigned) -1, 0x28220000, 1 },
{ 0, 0, 0 }
};
A more modern variant of ppc64_standard_linkage2 differing in
register usage. */
-static struct ppc_insn_pattern ppc64_standard_linkage4[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage4[] =
{
/* std r2, 40(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 40, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 },
/* addis r11, r2, <any> */
{ insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 },
/* xor r2, r12, r12 <optional> */
- { -1, 0x7d826278, 1 },
+ { (unsigned) -1, 0x7d826278, 1 },
/* add r11, r11, r2 <optional> */
- { -1, 0x7d6b1214, 1 },
+ { (unsigned) -1, 0x7d6b1214, 1 },
/* ld r2, <any>(r11) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 11, 0, 0), 0 },
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 11, 0, 0), 1 },
/* bctr <optional> */
- { -1, 0x4e800420, 1 },
+ { (unsigned) -1, 0x4e800420, 1 },
/* cmpldi r2, 0 <optional> */
- { -1, 0x28220000, 1 },
+ { (unsigned) -1, 0x28220000, 1 },
{ 0, 0, 0 }
};
A more modern variant of ppc64_standard_linkage3 differing in
register usage. */
-static struct ppc_insn_pattern ppc64_standard_linkage5[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage5[] =
{
/* std r2, 40(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 40, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 },
/* ld r12, <any>(r2) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 },
/* xor r11, r12, r12 <optional> */
- { -1, 0x7d8b6278, 1 },
+ { (unsigned) -1, 0x7d8b6278, 1 },
/* add r2, r2, r11 <optional> */
- { -1, 0x7c425a14, 1 },
+ { (unsigned) -1, 0x7c425a14, 1 },
/* ld r11, <any>(r2) <optional> */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 },
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 },
/* bctr <optional> */
- { -1, 0x4e800420, 1 },
+ { (unsigned) -1, 0x4e800420, 1 },
/* cmpldi r2, 0 <optional> */
- { -1, 0x28220000, 1 },
+ { (unsigned) -1, 0x28220000, 1 },
{ 0, 0, 0 }
};
/* ELFv2 PLT call stub to access PLT entries more than +/- 32k from r2. */
-static struct ppc_insn_pattern ppc64_standard_linkage6[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage6[] =
{
/* std r2, 24(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 24, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 },
/* addis r11, r2, <any> */
{ insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 },
/* bctr */
- { -1, 0x4e800420, 0 },
+ { (unsigned) -1, 0x4e800420, 0 },
{ 0, 0, 0 }
};
/* ELFv2 PLT call stub to access PLT entries within +/- 32k of r2. */
-static struct ppc_insn_pattern ppc64_standard_linkage7[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage7[] =
{
/* std r2, 24(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 24, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 },
/* ld r12, <any>(r2) */
{ insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 },
/* bctr */
- { -1, 0x4e800420, 0 },
+ { (unsigned) -1, 0x4e800420, 0 },
{ 0, 0, 0 }
};
/* ELFv2 PLT call stub to access PLT entries more than +/- 32k from r2,
supporting fusion. */
-static struct ppc_insn_pattern ppc64_standard_linkage8[] =
+static const struct ppc_insn_pattern ppc64_standard_linkage8[] =
{
/* std r2, 24(r1) <optional> */
- { -1, insn_ds (62, 2, 1, 24, 0), 1 },
+ { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 },
/* addis r12, r2, <any> */
{ insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 },
{ insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 },
/* bctr */
- { -1, 0x4e800420, 0 },
+ { (unsigned) -1, 0x4e800420, 0 },
{ 0, 0, 0 }
};
}
/* The PLT descriptor will either point to the already resolved target
- address, or else to a glink stub. As the latter carry synthetic @plt
- symbols, find_solib_trampoline_target should be able to resolve them. */
+ address, or else to a glink stub. As the latter carry synthetic @plt
+ symbols, find_solib_trampoline_target should be able to resolve them. */
target = find_solib_trampoline_target (frame, pc);
return target ? target : pc;
}
s->the_bfd_section,
&buf, addr - s->addr, 8);
if (res != 0)
- return extract_unsigned_integer (buf, 8, byte_order)
- - bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr;
+ return (extract_unsigned_integer (buf, 8, byte_order)
+ - bfd_section_vma (s->the_bfd_section) + s->addr);
}
return addr;