From abea8f69d4841160e703e38a3ba397e0b236931b Mon Sep 17 00:00:00 2001 From: eabdullin Date: Fri, 20 Oct 2023 12:30:16 +0300 Subject: [PATCH] - Apply DWARF-Check-version-for-DW_FORM_ref_addr.patch - Apply PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch --- ...F-Check-version-for-DW_FORM_ref_addr.patch | 32 ++++ ...ssing-extended-dcbt-dcbtst-mnemonics.patch | 170 ++++++++++++++++++ SPECS/binutils.spec | 10 +- 3 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 SOURCES/DWARF-Check-version-for-DW_FORM_ref_addr.patch create mode 100644 SOURCES/PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch diff --git a/SOURCES/DWARF-Check-version-for-DW_FORM_ref_addr.patch b/SOURCES/DWARF-Check-version-for-DW_FORM_ref_addr.patch new file mode 100644 index 0000000..892660e --- /dev/null +++ b/SOURCES/DWARF-Check-version-for-DW_FORM_ref_addr.patch @@ -0,0 +1,32 @@ +From 51f6e7a9f4210aed0f8156c1d2e348de6f96f37d Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Thu, 18 Mar 2021 18:34:38 -0700 +Subject: [PATCH] DWARF: Check version >= 3 for DW_FORM_ref_addr + +Check version >= 3, instead of version == 3 || version == 4, for +DW_FORM_ref_addr. + +bfd/ + + PR ld/27587 + * dwarf2.c (read_attribute_value): Check version >= 3 for + DW_FORM_ref_addr. + +ld/ + +--- + bfd/dwarf2.c | 2 +- + +diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c +index b42e641aa3b9..1d5ddef33293 100644 +--- a/bfd/dwarf2.c ++++ b/bfd/dwarf2.c +@@ -1213,7 +1213,7 @@ read_attribute_value (struct attribute * attr, + case DW_FORM_ref_addr: + /* DW_FORM_ref_addr is an address in DWARF2, and an offset in + DWARF3. */ +- if (unit->version == 3 || unit->version == 4) ++ if (unit->version >= 3) + { + if (unit->offset_size == 4) + attr->u.val = read_4_bytes (unit->abfd, info_ptr, info_ptr_end); diff --git a/SOURCES/PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch b/SOURCES/PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch new file mode 100644 index 0000000..2d73fac --- /dev/null +++ b/SOURCES/PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch @@ -0,0 +1,170 @@ +From 97bf40d859ffe44892b3ad2c62f011fd26fca699 Mon Sep 17 00:00:00 2001 +From: Alan Modra +Date: Mon, 5 Apr 2021 08:17:06 +0930 +Subject: [PATCH] PR27676, PowerPC missing extended dcbt, dcbtst mnemonics + +Note that this doesn't implement the ISA to the letter regarding +dcbtds (and dcbtstds), which says that the TH field may be zero. That +doesn't make sense because allowing TH=0 would mean you no long have a +dcbtds but rather a dcbtct instruction. I'm interpreting the ISA +wording about allowing TH=0 to mean that the TH field of dcbtds is +optional (in which case the TH value is 0b1000). + +opcodes/ + PR 27676 + * ppc-opc.c (DCBT_EO): Move earlier. + (insert_thct, extract_thct, insert_thds, extract_thds): New functions. + (powerpc_operands): Add THCT and THDS entries. + (powerpc_opcodes): Add dcbtstct, dcbtstds, dcbna, dcbtct, dcbtds. +gas/ + * testsuite/gas/ppc/power4_32.d: Update. +--- + gas/testsuite/gas/ppc/power4_32.d | 6 +-- + opcodes/ppc-opc.c | 89 ++++++++++++++++++++++++++++--- + +diff --git a/gas/testsuite/gas/ppc/power4_32.d b/gas/testsuite/gas/ppc/power4_32.d +index 39c80dd4d2e5..8396d7d294fb 100644 +--- a/gas/testsuite/gas/ppc/power4_32.d ++++ b/gas/testsuite/gas/ppc/power4_32.d +@@ -41,7 +41,7 @@ Disassembly of section \.text: + 7c: (7c 01 17 ec|ec 17 01 7c) dcbz r1,r2 + 80: (7c 23 27 ec|ec 27 23 7c) dcbzl r3,r4 + 84: (7c 05 37 ec|ec 37 05 7c) dcbz r5,r6 +- 88: (7c 05 32 2c|2c 32 05 7c) dcbt r5,r6 +- 8c: (7c 05 32 2c|2c 32 05 7c) dcbt r5,r6 +- 90: (7d 05 32 2c|2c 32 05 7d) dcbt r5,r6,8 ++ 88: (7c 05 32 2c|2c 32 05 7c) dcbtct r5,r6 ++ 8c: (7c 05 32 2c|2c 32 05 7c) dcbtct r5,r6 ++ 90: (7d 05 32 2c|2c 32 05 7d) dcbtds r5,r6 + #pass +diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c +index 97982ab7e754..025a2ba2fba7 100644 +--- a/opcodes/ppc-opc.c ++++ b/opcodes/ppc-opc.c +@@ -2205,6 +2205,74 @@ extract_sxl (uint64_t insn, + return 1; + return (insn >> 11) & 0x1; + } ++ ++/* The list of embedded processors that use the embedded operand ordering ++ for the 3 operand dcbt and dcbtst instructions. */ ++#define DCBT_EO (PPC_OPCODE_E500 | PPC_OPCODE_E500MC | PPC_OPCODE_476 \ ++ | PPC_OPCODE_A2) ++ ++/* ISA 2.03 and later specify extended mnemonics dcbtct, dcbtds, and ++ dcbtstct, dcbtstds with a note saying these should be used in new ++ programs rather than the base mnemonics "so that it can be coded ++ with TH as the last operand for all categories". For that reason ++ the extended mnemonics are enabled in the assembler for the ++ embedded processors, but not for the disassembler so as to display ++ the embedded dcbt or dcbtst expected form with TH first for ++ embedded programmers. */ ++ ++static uint64_t ++insert_thct (uint64_t insn, ++ int64_t value, ++ ppc_cpu_t dialect ATTRIBUTE_UNUSED, ++ const char **errmsg) ++{ ++ if ((uint64_t) value > 7) ++ *errmsg = _("invalid TH value"); ++ return insn | ((value & 7) << 21); ++} ++ ++static int64_t ++extract_thct (uint64_t insn, ++ ppc_cpu_t dialect, ++ int *invalid) ++{ ++ /* Missing optional operands have a value of 0. */ ++ if (*invalid < 0) ++ return 0; ++ ++ int64_t value = (insn >> 21) & 0x1f; ++ if (value > 7 || (dialect & DCBT_EO) != 0) ++ *invalid = 1; ++ ++ return value; ++} ++ ++static uint64_t ++insert_thds (uint64_t insn, ++ int64_t value, ++ ppc_cpu_t dialect ATTRIBUTE_UNUSED, ++ const char **errmsg) ++{ ++ if (value < 8 || value > 15) ++ *errmsg = _("invalid TH value"); ++ return insn | ((value & 0x1f) << 21); ++} ++ ++static int64_t ++extract_thds (uint64_t insn, ++ ppc_cpu_t dialect, ++ int *invalid) ++{ ++ /* Missing optional operands have a value of 8. */ ++ if (*invalid < 0) ++ return 8; ++ ++ int64_t value = (insn >> 21) & 0x1f; ++ if (value < 8 || value > 15 || (dialect & DCBT_EO) != 0) ++ *invalid = 1; ++ ++ return value; ++} + + /* The operands table. + +@@ -2402,10 +2470,18 @@ const struct powerpc_operand powerpc_operands[] = + #define MO CT + { 0x1f, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + ++ /* The TH field in dcbtct. */ ++#define THCT CT + 1 ++ { 0x1f, 21, insert_thct, extract_thct, PPC_OPERAND_OPTIONAL }, ++ ++ /* The TH field in dcbtds. */ ++#define THDS THCT + 1 ++ { 0x1f, 21, insert_thds, extract_thds, PPC_OPERAND_OPTIONAL }, ++ + /* The D field in a D form instruction. This is a displacement off + a register, and implies that the next operand is a register in + parentheses. */ +-#define D CT + 1 ++#define D THDS + 1 + { 0xffff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED }, + + /* The D8 field in a D form instruction. This is a displacement off +@@ -4211,12 +4287,6 @@ const unsigned int num_powerpc_operands = (sizeof (powerpc_operands) + #define PPCHTM PPC_OPCODE_POWER8 + #define E200Z4 PPC_OPCODE_E200Z4 + #define PPCLSP PPC_OPCODE_LSP +-/* The list of embedded processors that use the embedded operand ordering +- for the 3 operand dcbt and dcbtst instructions. */ +-#define DCBT_EO (PPC_OPCODE_E500 | PPC_OPCODE_E500MC | PPC_OPCODE_476 \ +- | PPC_OPCODE_A2) +- +- + + /* The opcode table. + +@@ -6592,6 +6662,8 @@ const struct powerpc_opcode powerpc_opcodes[] = { + {"mtvsrwz", X(31,243), XX1RB_MASK, PPCVSX2, 0, {XT6, RA}}, + + {"dcbtstt", XRT(31,246,0x10), XRT_MASK, POWER7, 0, {RA0, RB}}, ++{"dcbtstct", X(31,246), X_MASK, POWER4, 0, {RA0, RB, THCT}}, ++{"dcbtstds", X(31,246), X_MASK, POWER4, 0, {RA0, RB, THDS}}, + {"dcbtst", X(31,246), X_MASK, POWER4, DCBT_EO, {RA0, RB, CT}}, + {"dcbtst", X(31,246), X_MASK, DCBT_EO, 0, {CT, RA0, RB}}, + {"dcbtst", X(31,246), X_MASK, PPC, POWER4|DCBT_EO, {RA0, RB}}, +@@ -6643,6 +6715,9 @@ const struct powerpc_opcode powerpc_opcodes[] = { + {"lscbx.", XRC(31,277,1), X_MASK, M601, 0, {RT, RA, RB}}, + + {"dcbtt", XRT(31,278,0x10), XRT_MASK, POWER7, 0, {RA0, RB}}, ++{"dcbna", XRT(31,278,0x11), XRT_MASK, POWER10, 0, {RA0, RB}}, ++{"dcbtct", X(31,278), X_MASK, POWER4, 0, {RA0, RB, THCT}}, ++{"dcbtds", X(31,278), X_MASK, POWER4, 0, {RA0, RB, THDS}}, + {"dcbt", X(31,278), X_MASK, POWER4, DCBT_EO, {RA0, RB, CT}}, + {"dcbt", X(31,278), X_MASK, DCBT_EO, 0, {CT, RA0, RB}}, + {"dcbt", X(31,278), X_MASK, PPC, POWER4|DCBT_EO, {RA0, RB}}, diff --git a/SPECS/binutils.spec b/SPECS/binutils.spec index 6817158..4c07038 100644 --- a/SPECS/binutils.spec +++ b/SPECS/binutils.spec @@ -5,7 +5,7 @@ Summary: A GNU collection of binary utilities Name: %{?scl_prefix}%{?cross}binutils%{?_with_debug:-debug} Version: 2.36.1 -Release: 2%{?dist} +Release: 4%{?dist}.alma.1 License: GPLv3+ URL: https://sourceware.org/binutils @@ -252,6 +252,10 @@ Patch28: binutils-ppc-weak-undefined-plt-relocs.patch # Lifetime: Fixed in 2.38 (maybe) Patch29: binutils.unicode.patch +# Patches were taken from upstream +Patch30: PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch +Patch31: DWARF-Check-version-for-DW_FORM_ref_addr.patch + #---------------------------------------------------------------------------- Provides: bundled(libiberty) @@ -914,6 +918,10 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Fri Oct 20 2023 Eduard Abdullin - 2.36.1-4.alma.1 +- Apply DWARF-Check-version-for-DW_FORM_ref_addr.patch +- Apply PowerPC-missing-extended-dcbt-dcbtst-mnemonics.patch + * Fri Nov 26 2021 Nick Clifton - 2.36.1-2 - Add ability to control the display of unicode characters. (#2009183)