X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fppc64-tdep.c;h=b29d04c13542a850e1b7c5f13eeddc286de6e664;hb=b9a3f8429b012b753e30a4222bd8e4cbba019fad;hp=7417232c9402d9773d601216f2ae1985fcb99a21;hpb=e2882c85786571175a0b0bfc3bcd2f14620b1ea3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ppc64-tdep.c b/gdb/ppc64-tdep.c index 7417232c94..b29d04c135 100644 --- a/gdb/ppc64-tdep.c +++ b/gdb/ppc64-tdep.c @@ -1,6 +1,6 @@ /* Common target-dependent code for ppc64 GDB, the GNU debugger. - Copyright (C) 1986-2018 Free Software Foundation, Inc. + Copyright (C) 1986-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -30,24 +30,24 @@ 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. */ @@ -80,13 +80,13 @@ ppc64_plt_entry_point (struct frame_info *frame, CORE_ADDR plt_off) /* 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, */ { 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, (r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, @@ -107,7 +107,7 @@ static struct ppc_insn_pattern ppc64_standard_linkage1[] = { 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 } }; @@ -119,16 +119,16 @@ static struct ppc_insn_pattern ppc64_standard_linkage1[] = instructions following "cmpldi r2, 0", "bnectr+" and "b ", 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) */ - { -1, insn_ds (62, 2, 1, 40, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 }, /* addis r12, r2, */ { 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), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 }, /* ld r11, (r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, @@ -140,10 +140,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage2[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, /* xor r11, r11, r11 */ - { -1, 0x7d6b5a78, 1 }, + { (unsigned) -1, 0x7d6b5a78, 1 }, /* add r12, r12, r11 */ - { -1, 0x7d8c5a14, 1 }, + { (unsigned) -1, 0x7d8c5a14, 1 }, /* ld r2, (r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, @@ -152,20 +152,20 @@ static struct ppc_insn_pattern ppc64_standard_linkage2[] = { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, /* bctr */ - { -1, 0x4e800420, 1 }, + { (unsigned) -1, 0x4e800420, 1 }, /* cmpldi r2, 0 */ - { -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) */ - { -1, insn_ds (62, 2, 1, 40, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 }, /* ld r11, (r2) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 }, @@ -177,10 +177,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage3[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, /* xor r11, r11, r11 */ - { -1, 0x7d6b5a78, 1 }, + { (unsigned) -1, 0x7d6b5a78, 1 }, /* add r2, r2, r11 */ - { -1, 0x7c425a14, 1 }, + { (unsigned) -1, 0x7c425a14, 1 }, /* ld r11, (r2) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 }, @@ -189,10 +189,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage3[] = { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 }, /* bctr */ - { -1, 0x4e800420, 1 }, + { (unsigned) -1, 0x4e800420, 1 }, /* cmpldi r2, 0 */ - { -1, 0x28220000, 1 }, + { (unsigned) -1, 0x28220000, 1 }, { 0, 0, 0 } }; @@ -201,10 +201,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage3[] = 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) */ - { -1, insn_ds (62, 2, 1, 40, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 }, /* addis r11, r2, */ { insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 }, @@ -219,10 +219,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage4[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, /* xor r2, r12, r12 */ - { -1, 0x7d826278, 1 }, + { (unsigned) -1, 0x7d826278, 1 }, /* add r11, r11, r2 */ - { -1, 0x7d6b1214, 1 }, + { (unsigned) -1, 0x7d6b1214, 1 }, /* ld r2, (r11) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 11, 0, 0), 0 }, @@ -231,10 +231,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage4[] = { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 11, 0, 0), 1 }, /* bctr */ - { -1, 0x4e800420, 1 }, + { (unsigned) -1, 0x4e800420, 1 }, /* cmpldi r2, 0 */ - { -1, 0x28220000, 1 }, + { (unsigned) -1, 0x28220000, 1 }, { 0, 0, 0 } }; @@ -243,10 +243,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage4[] = 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) */ - { -1, insn_ds (62, 2, 1, 40, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 40, 0), 1 }, /* ld r12, (r2) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 }, @@ -258,10 +258,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage5[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, /* xor r11, r12, r12 */ - { -1, 0x7d8b6278, 1 }, + { (unsigned) -1, 0x7d8b6278, 1 }, /* add r2, r2, r11 */ - { -1, 0x7c425a14, 1 }, + { (unsigned) -1, 0x7c425a14, 1 }, /* ld r11, (r2) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 }, @@ -270,20 +270,20 @@ static struct ppc_insn_pattern ppc64_standard_linkage5[] = { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 }, /* bctr */ - { -1, 0x4e800420, 1 }, + { (unsigned) -1, 0x4e800420, 1 }, /* cmpldi r2, 0 */ - { -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) */ - { -1, insn_ds (62, 2, 1, 24, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 }, /* addis r11, r2, */ { insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 }, @@ -295,17 +295,17 @@ static struct ppc_insn_pattern ppc64_standard_linkage6[] = { 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) */ - { -1, insn_ds (62, 2, 1, 24, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 }, /* ld r12, (r2) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 }, @@ -314,7 +314,7 @@ static struct ppc_insn_pattern ppc64_standard_linkage7[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, /* bctr */ - { -1, 0x4e800420, 0 }, + { (unsigned) -1, 0x4e800420, 0 }, { 0, 0, 0 } }; @@ -322,10 +322,10 @@ static struct ppc_insn_pattern ppc64_standard_linkage7[] = /* 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) */ - { -1, insn_ds (62, 2, 1, 24, 0), 1 }, + { (unsigned) -1, insn_ds (62, 2, 1, 24, 0), 1 }, /* addis r12, r2, */ { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, @@ -337,7 +337,7 @@ static struct ppc_insn_pattern ppc64_standard_linkage8[] = { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, /* bctr */ - { -1, 0x4e800420, 0 }, + { (unsigned) -1, 0x4e800420, 0 }, { 0, 0, 0 } };