mirror of
https://git.yoctoproject.org/poky
synced 2026-01-30 05:18:43 +01:00
Compare commits
1 Commits
kirkstone-
...
uninative-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a8095c99ab |
@@ -2,11 +2,14 @@ require gcc-common.inc
|
||||
|
||||
# Third digit in PV should be incremented after a minor release
|
||||
|
||||
PV = "11.2.0"
|
||||
PV = "12.0.1"
|
||||
|
||||
# BINV should be incremented to a revision after a minor gcc release
|
||||
|
||||
BINV = "11.2.0"
|
||||
BINV = "12.0.1"
|
||||
|
||||
MAJOR = "12"
|
||||
SNAPSHOT = "20220313"
|
||||
|
||||
FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
|
||||
|
||||
@@ -26,7 +29,7 @@ LIC_FILES_CHKSUM = "\
|
||||
#RELEASE ?= "5b2ac9b40c325e9209c0bd55955db84aad4a0cc5"
|
||||
#BASEURI ?= "https://github.com/gcc-mirror/gcc/archive/${RELEASE}.zip;downloadfilename=gcc-${PV}-${RELEASE}.zip"
|
||||
|
||||
BASEURI ?= "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.xz \
|
||||
BASEURI ?= "https://mirror.koddos.net/gcc/snapshots/${MAJOR}-${SNAPSHOT}/gcc-${MAJOR}-${SNAPSHOT}.tar.xz \
|
||||
"
|
||||
SRC_URI = "\
|
||||
${BASEURI} \
|
||||
@@ -36,43 +39,27 @@ SRC_URI = "\
|
||||
file://0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \
|
||||
file://0009-cpp-honor-sysroot.patch \
|
||||
file://0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \
|
||||
file://0012-gcc-Fix-argument-list-too-long-error.patch \
|
||||
file://0014-libtool.patch \
|
||||
file://0015-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch \
|
||||
file://0016-Use-the-multilib-config-files-from-B-instead-of-usin.patch \
|
||||
file://0017-Avoid-using-libdir-from-.la-which-usually-points-to-.patch \
|
||||
file://0018-export-CPP.patch \
|
||||
file://0019-Ensure-target-gcc-headers-can-be-included.patch \
|
||||
file://0020-Don-t-search-host-directory-during-relink-if-inst_pr.patch \
|
||||
file://0023-libcc1-fix-libcc1-s-install-path-and-rpath.patch \
|
||||
file://0024-handle-sysroot-support-for-nativesdk-gcc.patch \
|
||||
file://0025-Search-target-sysroot-gcc-version-specific-dirs-with.patch \
|
||||
file://0027-nios2-Define-MUSL_DYNAMIC_LINKER.patch \
|
||||
file://0028-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch \
|
||||
file://0029-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch \
|
||||
file://0030-sync-gcc-stddef.h-with-musl.patch \
|
||||
file://0033-Re-introduce-spe-commandline-options.patch \
|
||||
file://0034-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch \
|
||||
file://0035-gentypes-genmodes-Do-not-use-__LINE__-for-maintainin.patch \
|
||||
file://0036-mingw32-Enable-operation_not_supported.patch \
|
||||
file://0037-libatomic-Do-not-enforce-march-on-aarch64.patch \
|
||||
file://0041-apply-debug-prefix-maps-before-checksumming-DIEs.patch \
|
||||
file://0006-If-CXXFLAGS-contains-something-unsupported-by-the-bu.patch \
|
||||
file://0001-Fix-install-path-of-linux64.h.patch \
|
||||
file://0001-CVE-2021-35465.patch \
|
||||
file://0002-CVE-2021-35465.patch \
|
||||
file://0003-CVE-2021-35465.patch \
|
||||
file://0004-CVE-2021-35465.patch \
|
||||
file://0001-CVE-2021-42574.patch \
|
||||
file://0002-CVE-2021-42574.patch \
|
||||
file://0003-CVE-2021-42574.patch \
|
||||
file://0004-CVE-2021-42574.patch \
|
||||
file://0001-CVE-2021-46195.patch \
|
||||
file://0042-Fix-thread-stack-size-init.patch \
|
||||
"
|
||||
SRC_URI[sha256sum] = "d08edc536b54c372a1010ff6619dd274c0f1603aa49212ba20f7aa2cda36fa8b"
|
||||
SRC_URI[sha256sum] = "979d8cbe9b2ed2ab4434f52097754e004a207cf6541aea3e167c5d0f74957633"
|
||||
|
||||
S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
|
||||
S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${MAJOR}-${SNAPSHOT}"
|
||||
|
||||
# For dev release snapshotting
|
||||
#S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${RELEASE}"
|
||||
@@ -2,7 +2,7 @@ require gcc-configure-common.inc
|
||||
|
||||
SUMMARY = "Runtime libraries from GCC"
|
||||
|
||||
# Over-ride the LICENSE set by gcc-${PV}.inc to remove "& GPL-3.0-only"
|
||||
# Over-ride the LICENSE set by gcc-${PV}.inc to remove "& GPLv3"
|
||||
# All gcc-runtime packages are now covered by the runtime exception.
|
||||
LICENSE = "GPL-3.0-with-GCC-exception"
|
||||
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
From 3929bca9ca95de9d35e82ae8828b188029e3eb70 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Earnshaw <rearnsha@arm.com>
|
||||
Date: Fri, 11 Jun 2021 16:02:05 +0100
|
||||
Subject: [PATCH] arm: Add command-line option for enabling CVE-2021-35465
|
||||
mitigation [PR102035]
|
||||
|
||||
Add a new option, -mfix-cmse-cve-2021-35465 and document it. Enable it
|
||||
automatically for cortex-m33, cortex-m35p and cortex-m55.
|
||||
|
||||
gcc:
|
||||
PR target/102035
|
||||
* config/arm/arm.opt (mfix-cmse-cve-2021-35465): New option.
|
||||
* doc/invoke.texi (Arm Options): Document it.
|
||||
* config/arm/arm-cpus.in (quirk_vlldm): New feature bit.
|
||||
(ALL_QUIRKS): Add quirk_vlldm.
|
||||
(cortex-m33): Add quirk_vlldm.
|
||||
(cortex-m35p, cortex-m55): Likewise.
|
||||
* config/arm/arm.c (arm_option_override): Enable fix_vlldm if
|
||||
targetting an affected CPU and not explicitly controlled on
|
||||
the command line.
|
||||
|
||||
CVE: CVE-2021-35465
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=3929bca9ca95de9d35e82ae8828b188029e3eb70]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
gcc/config/arm/arm-cpus.in | 9 +++++++--
|
||||
gcc/config/arm/arm.c | 9 +++++++++
|
||||
gcc/config/arm/arm.opt | 4 ++++
|
||||
gcc/doc/invoke.texi | 9 +++++++++
|
||||
4 files changed, 29 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
|
||||
--- a/gcc/config/arm/arm.c 2021-11-15 02:13:11.100579812 -0800
|
||||
+++ b/gcc/config/arm/arm.c 2021-11-15 02:17:36.988237692 -0800
|
||||
@@ -3610,6 +3610,15 @@ arm_option_override (void)
|
||||
fix_cm3_ldrd = 0;
|
||||
}
|
||||
|
||||
+ /* Enable fix_vlldm by default if required. */
|
||||
+ if (fix_vlldm == 2)
|
||||
+ {
|
||||
+ if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_vlldm))
|
||||
+ fix_vlldm = 1;
|
||||
+ else
|
||||
+ fix_vlldm = 0;
|
||||
+ }
|
||||
+
|
||||
/* Hot/Cold partitioning is not currently supported, since we can't
|
||||
handle literal pool placement in that case. */
|
||||
if (flag_reorder_blocks_and_partition)
|
||||
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
|
||||
--- a/gcc/config/arm/arm-cpus.in 2021-11-15 02:13:11.104579747 -0800
|
||||
+++ b/gcc/config/arm/arm-cpus.in 2021-11-15 02:17:36.984237757 -0800
|
||||
@@ -186,6 +186,9 @@ define feature quirk_armv6kz
|
||||
# Cortex-M3 LDRD quirk.
|
||||
define feature quirk_cm3_ldrd
|
||||
|
||||
+# v8-m/v8.1-m VLLDM errata.
|
||||
+define feature quirk_vlldm
|
||||
+
|
||||
# Don't use .cpu assembly directive
|
||||
define feature quirk_no_asmcpu
|
||||
|
||||
@@ -322,7 +325,7 @@ define implied vfp_base MVE MVE_FP ALL_F
|
||||
# architectures.
|
||||
# xscale isn't really a 'quirk', but it isn't an architecture either and we
|
||||
# need to ignore it for matching purposes.
|
||||
-define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu
|
||||
+define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd quirk_vlldm xscale quirk_no_asmcpu
|
||||
|
||||
define fgroup IGNORE_FOR_MULTILIB cdecp0 cdecp1 cdecp2 cdecp3 cdecp4 cdecp5 cdecp6 cdecp7
|
||||
|
||||
@@ -1570,6 +1573,7 @@ begin cpu cortex-m33
|
||||
architecture armv8-m.main+dsp+fp
|
||||
option nofp remove ALL_FP
|
||||
option nodsp remove armv7em
|
||||
+ isa quirk_vlldm
|
||||
costs v7m
|
||||
end cpu cortex-m33
|
||||
|
||||
@@ -1579,6 +1583,7 @@ begin cpu cortex-m35p
|
||||
architecture armv8-m.main+dsp+fp
|
||||
option nofp remove ALL_FP
|
||||
option nodsp remove armv7em
|
||||
+ isa quirk_vlldm
|
||||
costs v7m
|
||||
end cpu cortex-m35p
|
||||
|
||||
@@ -1590,7 +1595,7 @@ begin cpu cortex-m55
|
||||
option nomve remove mve mve_float
|
||||
option nofp remove ALL_FP mve_float
|
||||
option nodsp remove MVE mve_float
|
||||
- isa quirk_no_asmcpu
|
||||
+ isa quirk_no_asmcpu quirk_vlldm
|
||||
costs v7m
|
||||
vendor 41
|
||||
end cpu cortex-m55
|
||||
diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
|
||||
--- a/gcc/config/arm/arm.opt 2021-11-15 02:13:11.104579747 -0800
|
||||
+++ b/gcc/config/arm/arm.opt 2021-11-15 02:17:36.988237692 -0800
|
||||
@@ -268,6 +268,10 @@ Target Var(fix_cm3_ldrd) Init(2)
|
||||
Avoid overlapping destination and address registers on LDRD instructions
|
||||
that may trigger Cortex-M3 errata.
|
||||
|
||||
+mfix-cmse-cve-2021-35465
|
||||
+Target Var(fix_vlldm) Init(2)
|
||||
+Mitigate issues with VLLDM on some M-profile devices (CVE-2021-35465).
|
||||
+
|
||||
munaligned-access
|
||||
Target Var(unaligned_access) Init(2) Save
|
||||
Enable unaligned word and halfword accesses to packed data.
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
--- a/gcc/doc/invoke.texi 2021-11-15 02:13:11.112579616 -0800
|
||||
+++ b/gcc/doc/invoke.texi 2021-11-15 02:17:36.996237562 -0800
|
||||
@@ -804,6 +804,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-mverbose-cost-dump @gol
|
||||
-mpure-code @gol
|
||||
-mcmse @gol
|
||||
+-mfix-cmse-cve-2021-35465 @gol
|
||||
-mfdpic}
|
||||
|
||||
@emph{AVR Options}
|
||||
@@ -20487,6 +20488,14 @@ Generate secure code as per the "ARMv8-M
|
||||
Development Tools Engineering Specification", which can be found on
|
||||
@url{https://developer.arm.com/documentation/ecm0359818/latest/}.
|
||||
|
||||
+@item -mfix-cmse-cve-2021-35465
|
||||
+@opindex mfix-cmse-cve-2021-35465
|
||||
+Mitigate against a potential security issue with the @code{VLLDM} instruction
|
||||
+in some M-profile devices when using CMSE (CVE-2021-365465). This option is
|
||||
+enabled by default when the option @option{-mcpu=} is used with
|
||||
+@code{cortex-m33}, @code{cortex-m35p} or @code{cortex-m55}. The option
|
||||
+@option{-mno-fix-cmse-cve-2021-35465} can be used to disable the mitigation.
|
||||
+
|
||||
@item -mfdpic
|
||||
@itemx -mno-fdpic
|
||||
@opindex mfdpic
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,128 +0,0 @@
|
||||
From f10bec5ffa487ad3033ed5f38cfd0fc7d696deab Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 31 Jan 2022 14:28:42 +0000
|
||||
Subject: [PATCH] libiberty: Fix infinite recursion in rust demangler.
|
||||
|
||||
libiberty/
|
||||
PR demangler/98886
|
||||
PR demangler/99935
|
||||
* rust-demangle.c (struct rust_demangler): Add a recursion
|
||||
counter.
|
||||
(demangle_path): Increment/decrement the recursion counter upon
|
||||
entry and exit. Fail if the counter exceeds a fixed limit.
|
||||
(demangle_type): Likewise.
|
||||
(rust_demangle_callback): Initialise the recursion counter,
|
||||
disabling if requested by the option flags.
|
||||
|
||||
CVE: CVE-2021-46195
|
||||
Upstream-Status: Backport
|
||||
[https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=f10bec5ffa487ad3033ed5f38cfd0fc7d696deab]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
---
|
||||
libiberty/rust-demangle.c | 47 ++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 41 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c
|
||||
index 18c760491bd..3b24d63892a 100644
|
||||
--- a/libiberty/rust-demangle.c
|
||||
+++ b/libiberty/rust-demangle.c
|
||||
@@ -74,6 +74,12 @@ struct rust_demangler
|
||||
/* Rust mangling version, with legacy mangling being -1. */
|
||||
int version;
|
||||
|
||||
+ /* Recursion depth. */
|
||||
+ unsigned int recursion;
|
||||
+ /* Maximum number of times demangle_path may be called recursively. */
|
||||
+#define RUST_MAX_RECURSION_COUNT 1024
|
||||
+#define RUST_NO_RECURSION_LIMIT ((unsigned int) -1)
|
||||
+
|
||||
uint64_t bound_lifetime_depth;
|
||||
};
|
||||
|
||||
@@ -671,6 +677,15 @@ demangle_path (struct rust_demangler *rdm, int in_value)
|
||||
if (rdm->errored)
|
||||
return;
|
||||
|
||||
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
|
||||
+ {
|
||||
+ ++ rdm->recursion;
|
||||
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
|
||||
+ /* FIXME: There ought to be a way to report
|
||||
+ that the recursion limit has been reached. */
|
||||
+ goto fail_return;
|
||||
+ }
|
||||
+
|
||||
switch (tag = next (rdm))
|
||||
{
|
||||
case 'C':
|
||||
@@ -688,10 +703,7 @@ demangle_path (struct rust_demangler *rdm, int in_value)
|
||||
case 'N':
|
||||
ns = next (rdm);
|
||||
if (!ISLOWER (ns) && !ISUPPER (ns))
|
||||
- {
|
||||
- rdm->errored = 1;
|
||||
- return;
|
||||
- }
|
||||
+ goto fail_return;
|
||||
|
||||
demangle_path (rdm, in_value);
|
||||
|
||||
@@ -776,9 +788,15 @@ demangle_path (struct rust_demangler *rdm, int in_value)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
- rdm->errored = 1;
|
||||
- return;
|
||||
+ goto fail_return;
|
||||
}
|
||||
+ goto pass_return;
|
||||
+
|
||||
+ fail_return:
|
||||
+ rdm->errored = 1;
|
||||
+ pass_return:
|
||||
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
|
||||
+ -- rdm->recursion;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -870,6 +888,19 @@ demangle_type (struct rust_demangler *rdm)
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
|
||||
+ {
|
||||
+ ++ rdm->recursion;
|
||||
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
|
||||
+ /* FIXME: There ought to be a way to report
|
||||
+ that the recursion limit has been reached. */
|
||||
+ {
|
||||
+ rdm->errored = 1;
|
||||
+ -- rdm->recursion;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
switch (tag)
|
||||
{
|
||||
case 'R':
|
||||
@@ -1030,6 +1061,9 @@ demangle_type (struct rust_demangler *rdm)
|
||||
rdm->next--;
|
||||
demangle_path (rdm, 0);
|
||||
}
|
||||
+
|
||||
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
|
||||
+ -- rdm->recursion;
|
||||
}
|
||||
|
||||
/* A trait in a trait object may have some "existential projections"
|
||||
@@ -1320,6 +1354,7 @@ rust_demangle_callback (const char *mangled, int options,
|
||||
rdm.skipping_printing = 0;
|
||||
rdm.verbose = (options & DMGL_VERBOSE) != 0;
|
||||
rdm.version = 0;
|
||||
+ rdm.recursion = (options & DMGL_NO_RECURSE_LIMIT) ? RUST_NO_RECURSION_LIMIT : 0;
|
||||
rdm.bound_lifetime_depth = 0;
|
||||
|
||||
/* Rust symbols always start with _R (v0) or _ZN (legacy). */
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@@ -4,6 +4,7 @@ Date: Fri, 29 Mar 2013 08:37:11 +0400
|
||||
Subject: [PATCH] gcc-4.3.1: ARCH_FLAGS_FOR_TARGET
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Bernhard Rosenkraenzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
---
|
||||
@@ -12,10 +13,10 @@ Upstream-Status: Inappropriate [embedded specific]
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 504f6410274..bcebad264ec 100755
|
||||
index f7e0fa46c9c..ce1f596e4ca 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -9728,7 +9728,7 @@ fi
|
||||
@@ -10177,7 +10177,7 @@ fi
|
||||
# for target_alias and gcc doesn't manage it consistently.
|
||||
target_configargs="--cache-file=./config.cache ${target_configargs}"
|
||||
|
||||
@@ -25,10 +26,10 @@ index 504f6410274..bcebad264ec 100755
|
||||
*" newlib "*)
|
||||
case " $target_configargs " in
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 088e735c5db..1289fe08760 100644
|
||||
index 434b1a267a4..a139a3c80ad 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3240,7 +3240,7 @@ fi
|
||||
@@ -3348,7 +3348,7 @@ fi
|
||||
# for target_alias and gcc doesn't manage it consistently.
|
||||
target_configargs="--cache-file=./config.cache ${target_configargs}"
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
From 574e7950bd6b34e9e2cacce18c802b45505d1d0a Mon Sep 17 00:00:00 2001
|
||||
From: Richard Earnshaw <rearnsha@arm.com>
|
||||
Date: Fri, 18 Jun 2021 17:16:25 +0100
|
||||
Subject: [PATCH] arm: add erratum mitigation to __gnu_cmse_nonsecure_call
|
||||
[PR102035]
|
||||
|
||||
Add the recommended erratum mitigation sequence to
|
||||
__gnu_cmse_nonsecure_call for use on Armv8-m.main devices. Since this
|
||||
is in the library code we cannot know in advance whether the core we
|
||||
are running on will be affected by this, so always enable it.
|
||||
|
||||
libgcc:
|
||||
PR target/102035
|
||||
* config/arm/cmse_nonsecure_call.S (__gnu_cmse_nonsecure_call):
|
||||
Add vlldm erratum work-around.
|
||||
|
||||
CVE: CVE-2021-35465
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=574e7950bd6b34e9e2cacce18c802b45505d1d0a]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
libgcc/config/arm/cmse_nonsecure_call.S | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/libgcc/config/arm/cmse_nonsecure_call.S b/libgcc/config/arm/cmse_nonsecure_call.S
|
||||
--- a/libgcc/config/arm/cmse_nonsecure_call.S
|
||||
+++ b/libgcc/config/arm/cmse_nonsecure_call.S
|
||||
@@ -102,6 +102,11 @@ blxns r4
|
||||
#ifdef __ARM_PCS_VFP
|
||||
vpop.f64 {d8-d15}
|
||||
#else
|
||||
+/* VLLDM erratum mitigation sequence. */
|
||||
+mrs r5, control
|
||||
+tst r5, #8 /* CONTROL_S.SFPA */
|
||||
+it ne
|
||||
+.inst.w 0xeeb00a40 /* vmovne s0, s0 */
|
||||
vlldm sp /* Lazy restore of d0-d16 and FPSCR. */
|
||||
add sp, sp, #0x88 /* Free space used to save floating point registers. */
|
||||
#endif /* __ARM_PCS_VFP */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,14 +14,15 @@ wants this to be a failure, they can add "-Werror=poison-system-directories".
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
---
|
||||
gcc/common.opt | 4 ++++
|
||||
gcc/config.in | 10 ++++++++++
|
||||
gcc/configure | 19 +++++++++++++++++++
|
||||
gcc/configure.ac | 16 ++++++++++++++++
|
||||
gcc/doc/invoke.texi | 9 +++++++++
|
||||
gcc/gcc.c | 9 +++++++--
|
||||
gcc/incpath.c | 21 +++++++++++++++++++++
|
||||
gcc/gcc.cc | 9 +++++++--
|
||||
gcc/incpath.cc | 21 +++++++++++++++++++++
|
||||
7 files changed, 86 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
@@ -158,10 +159,10 @@ index 7a368959e5e..6659a903bf0 100644
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||
index 7837553958b..19c75b6e20d 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
--- a/gcc/gcc.cc
|
||||
+++ b/gcc/gcc.cc
|
||||
@@ -1152,6 +1152,8 @@ proper position among the other output files. */
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
@@ -185,10 +186,10 @@ index 7837553958b..19c75b6e20d 100644
|
||||
|
||||
/* Pass -d* flags, possibly modifying -dumpdir, -dumpbase et al.
|
||||
|
||||
diff --git a/gcc/incpath.c b/gcc/incpath.c
|
||||
diff --git a/gcc/incpath.cc b/gcc/incpath.cc
|
||||
index 446d280321d..fbfc0ce03b8 100644
|
||||
--- a/gcc/incpath.c
|
||||
+++ b/gcc/incpath.c
|
||||
--- a/gcc/incpath.cc
|
||||
+++ b/gcc/incpath.cc
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "intl.h"
|
||||
#include "incpath.h"
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
From 30461cf8dba3d3adb15a125e4da48800eb2b9b8f Mon Sep 17 00:00:00 2001
|
||||
From: Richard Earnshaw <rearnsha@arm.com>
|
||||
Date: Fri, 18 Jun 2021 17:18:37 +0100
|
||||
Subject: [PATCH] arm: fix vlldm erratum for Armv8.1-m [PR102035]
|
||||
|
||||
For Armv8.1-m we generate code that emits VLLDM directly and do not
|
||||
rely on support code in the library, so emit the mitigation directly
|
||||
as well, when required. In this case, we can use the compiler options
|
||||
to determine when to apply the fix and when it is safe to omit it.
|
||||
|
||||
gcc:
|
||||
PR target/102035
|
||||
* config/arm/arm.md (attribute arch): Add fix_vlldm.
|
||||
(arch_enabled): Use it.
|
||||
* config/arm/vfp.md (lazy_store_multiple_insn): Add alternative to
|
||||
use when erratum mitigation is needed.
|
||||
|
||||
CVE: CVE-2021-35465
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=30461cf8dba3d3adb15a125e4da48800eb2b9b8f]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
gcc/config/arm/arm.md | 11 +++++++++--
|
||||
gcc/config/arm/vfp.md | 10 +++++++---
|
||||
2 files changed, 16 insertions(+), 5 deletions(-)
|
||||
|
||||
diff -upr a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
|
||||
--- a/gcc/config/arm/arm.md 2020-07-22 23:35:17.344384552 -0700
|
||||
+++ b/gcc/config/arm/arm.md 2021-11-11 20:33:58.431543947 -0800
|
||||
@@ -132,9 +132,12 @@
|
||||
; TARGET_32BIT, "t1" or "t2" to specify a specific Thumb mode. "v6"
|
||||
; for ARM or Thumb-2 with arm_arch6, and nov6 for ARM without
|
||||
; arm_arch6. "v6t2" for Thumb-2 with arm_arch6 and "v8mb" for ARMv8-M
|
||||
-; Baseline. This attribute is used to compute attribute "enabled",
|
||||
+; Baseline. "fix_vlldm" is for fixing the v8-m/v8.1-m VLLDM erratum.
|
||||
+; This attribute is used to compute attribute "enabled",
|
||||
; use type "any" to enable an alternative in all cases.
|
||||
-(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,v6t2,v8mb,iwmmxt,iwmmxt2,armv6_or_vfpv3,neon,mve"
|
||||
+(define_attr "arch" "any, a, t, 32, t1, t2, v6,nov6, v6t2, \
|
||||
+ v8mb, fix_vlldm, iwmmxt, iwmmxt2, armv6_or_vfpv3, \
|
||||
+ neon, mve"
|
||||
(const_string "any"))
|
||||
|
||||
(define_attr "arch_enabled" "no,yes"
|
||||
@@ -177,6 +180,10 @@
|
||||
(match_test "TARGET_THUMB1 && arm_arch8"))
|
||||
(const_string "yes")
|
||||
|
||||
+ (and (eq_attr "arch" "fix_vlldm")
|
||||
+ (match_test "fix_vlldm"))
|
||||
+ (const_string "yes")
|
||||
+
|
||||
(and (eq_attr "arch" "iwmmxt2")
|
||||
(match_test "TARGET_REALLY_IWMMXT2"))
|
||||
(const_string "yes")
|
||||
diff -upr a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
|
||||
--- a/gcc/config/arm/vfp.md 2020-07-22 23:35:17.356384684 -0700
|
||||
+++ b/gcc/config/arm/vfp.md 2021-11-11 20:33:58.431543947 -0800
|
||||
@@ -1703,12 +1703,15 @@
|
||||
(set_attr "type" "mov_reg")]
|
||||
)
|
||||
|
||||
+;; Both this and the next instruction are treated by GCC in the same
|
||||
+;; way as a blockage pattern. That's perhaps stronger than it needs
|
||||
+;; to be, but we do not want accesses to the VFP register bank to be
|
||||
+;; moved across either instruction.
|
||||
+
|
||||
(define_insn "lazy_store_multiple_insn"
|
||||
- [(set (match_operand:SI 0 "s_register_operand" "+&rk")
|
||||
- (post_dec:SI (match_dup 0)))
|
||||
- (unspec_volatile [(const_int 0)
|
||||
- (mem:SI (post_dec:SI (match_dup 0)))]
|
||||
- VUNSPEC_VLSTM)]
|
||||
+ [(unspec_volatile
|
||||
+ [(mem:BLK (match_operand:SI 0 "s_register_operand" "rk"))]
|
||||
+ VUNSPEC_VLSTM)]
|
||||
"use_cmse && reload_completed"
|
||||
"vlstm%?\\t%0"
|
||||
[(set_attr "predicable" "yes")
|
||||
@@ -1716,14 +1719,16 @@
|
||||
)
|
||||
|
||||
(define_insn "lazy_load_multiple_insn"
|
||||
- [(set (match_operand:SI 0 "s_register_operand" "+&rk")
|
||||
- (post_inc:SI (match_dup 0)))
|
||||
- (unspec_volatile:SI [(const_int 0)
|
||||
- (mem:SI (match_dup 0))]
|
||||
- VUNSPEC_VLLDM)]
|
||||
+ [(unspec_volatile
|
||||
+ [(mem:BLK (match_operand:SI 0 "s_register_operand" "rk,rk"))]
|
||||
+ VUNSPEC_VLLDM)]
|
||||
"use_cmse && reload_completed"
|
||||
- "vlldm%?\\t%0"
|
||||
- [(set_attr "predicable" "yes")
|
||||
+ "@
|
||||
+ vscclrm\\t{vpr}\;vlldm\\t%0
|
||||
+ vlldm\\t%0"
|
||||
+ [(set_attr "arch" "fix_vlldm,*")
|
||||
+ (set_attr "predicable" "no")
|
||||
+ (set_attr "length" "8,4")
|
||||
(set_attr "type" "load_4")]
|
||||
)
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
From 1a7f2c0774129750fdf73e9f1b78f0ce983c9ab3 Mon Sep 17 00:00:00 2001
|
||||
From: David Malcolm <dmalcolm@redhat.com>
|
||||
Date: Tue, 2 Nov 2021 09:54:32 -0400
|
||||
Subject: [PATCH] libcpp: escape non-ASCII source bytes in -Wbidi-chars=
|
||||
[PR103026]
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This flags rich_locations associated with -Wbidi-chars= so that
|
||||
non-ASCII bytes will be escaped when printing the source lines
|
||||
(using the diagnostics support I added in
|
||||
r12-4825-gbd5e882cf6e0def3dd1bc106075d59a303fe0d1e).
|
||||
|
||||
In particular, this ensures that the printed source lines will
|
||||
be pure ASCII, and thus the visual ordering of the characters
|
||||
will be the same as the logical ordering.
|
||||
|
||||
Before:
|
||||
|
||||
Wbidi-chars-1.c: In function âmainâ:
|
||||
Wbidi-chars-1.c:6:43: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
6 | /*â® } â¦if (isAdmin)⩠⦠begin admins only */
|
||||
| ^
|
||||
Wbidi-chars-1.c:9:28: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
9 | /* end admins only â® { â¦*/
|
||||
| ^
|
||||
|
||||
Wbidi-chars-11.c:6:15: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
6 | int LRE_âª_PDF_\u202c;
|
||||
| ^
|
||||
Wbidi-chars-11.c:8:19: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
8 | int LRE_\u202a_PDF_â¬_;
|
||||
| ^
|
||||
Wbidi-chars-11.c:10:28: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
10 | const char *s1 = "LRE_âª_PDF_\u202c";
|
||||
| ^
|
||||
Wbidi-chars-11.c:12:33: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
12 | const char *s2 = "LRE_\u202a_PDF_â¬";
|
||||
| ^
|
||||
|
||||
After:
|
||||
|
||||
Wbidi-chars-1.c: In function âmainâ:
|
||||
Wbidi-chars-1.c:6:43: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
6 | /*<U+202E> } <U+2066>if (isAdmin)<U+2069> <U+2066> begin admins only */
|
||||
| ^
|
||||
Wbidi-chars-1.c:9:28: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
9 | /* end admins only <U+202E> { <U+2066>*/
|
||||
| ^
|
||||
|
||||
Wbidi-chars-11.c:6:15: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
6 | int LRE_<U+202A>_PDF_\u202c;
|
||||
| ^
|
||||
Wbidi-chars-11.c:8:19: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
8 | int LRE_\u202a_PDF_<U+202C>_;
|
||||
| ^
|
||||
Wbidi-chars-11.c:10:28: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
10 | const char *s1 = "LRE_<U+202A>_PDF_\u202c";
|
||||
| ^
|
||||
Wbidi-chars-11.c:12:33: warning: UTF-8 vs UCN mismatch when closing a context by "U+202C (POP DIRECTIONAL FORMATTING)" [-Wbidi-chars=]
|
||||
12 | const char *s2 = "LRE_\u202a_PDF_<U+202C>";
|
||||
| ^
|
||||
|
||||
libcpp/ChangeLog:
|
||||
PR preprocessor/103026
|
||||
* lex.c (maybe_warn_bidi_on_close): Use a rich_location
|
||||
and call set_escape_on_output (true) on it.
|
||||
(maybe_warn_bidi_on_char): Likewise.
|
||||
|
||||
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
CVE: CVE-2021-42574
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=1a7f2c0774129750fdf73e9f1b78f0ce983c9ab3]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
libcpp/lex.c | 29 +++++++++++++++++------------
|
||||
1 file changed, 17 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/libcpp/lex.c b/libcpp/lex.c
|
||||
index 8188e33b07d..2421d6c0f40 100644
|
||||
--- a/libcpp/lex.c
|
||||
+++ b/libcpp/lex.c
|
||||
@@ -1427,9 +1427,11 @@ maybe_warn_bidi_on_close (cpp_reader *pfile, const uchar *p)
|
||||
const location_t loc
|
||||
= linemap_position_for_column (pfile->line_table,
|
||||
CPP_BUF_COLUMN (pfile->buffer, p));
|
||||
- cpp_warning_with_line (pfile, CPP_W_BIDIRECTIONAL, loc, 0,
|
||||
- "unpaired UTF-8 bidirectional control character "
|
||||
- "detected");
|
||||
+ rich_location rich_loc (pfile->line_table, loc);
|
||||
+ rich_loc.set_escape_on_output (true);
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "unpaired UTF-8 bidirectional control character "
|
||||
+ "detected");
|
||||
}
|
||||
/* We're done with this context. */
|
||||
bidi::on_close ();
|
||||
@@ -1454,6 +1456,9 @@ maybe_warn_bidi_on_char (cpp_reader *pfile, const uchar *p, bidi::kind kind,
|
||||
const location_t loc
|
||||
= linemap_position_for_column (pfile->line_table,
|
||||
CPP_BUF_COLUMN (pfile->buffer, p));
|
||||
+ rich_location rich_loc (pfile->line_table, loc);
|
||||
+ rich_loc.set_escape_on_output (true);
|
||||
+
|
||||
/* It seems excessive to warn about a PDI/PDF that is closing
|
||||
an opened context because we've already warned about the
|
||||
opening character. Except warn when we have a UCN x UTF-8
|
||||
@@ -1462,20 +1467,20 @@ maybe_warn_bidi_on_char (cpp_reader *pfile, const uchar *p, bidi::kind kind,
|
||||
{
|
||||
if (warn_bidi == bidirectional_unpaired
|
||||
&& bidi::current_ctx_ucn_p () != ucn_p)
|
||||
- cpp_warning_with_line (pfile, CPP_W_BIDIRECTIONAL, loc, 0,
|
||||
- "UTF-8 vs UCN mismatch when closing "
|
||||
- "a context by \"%s\"", bidi::to_str (kind));
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "UTF-8 vs UCN mismatch when closing "
|
||||
+ "a context by \"%s\"", bidi::to_str (kind));
|
||||
}
|
||||
else if (warn_bidi == bidirectional_any)
|
||||
{
|
||||
if (kind == bidi::kind::PDF || kind == bidi::kind::PDI)
|
||||
- cpp_warning_with_line (pfile, CPP_W_BIDIRECTIONAL, loc, 0,
|
||||
- "\"%s\" is closing an unopened context",
|
||||
- bidi::to_str (kind));
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "\"%s\" is closing an unopened context",
|
||||
+ bidi::to_str (kind));
|
||||
else
|
||||
- cpp_warning_with_line (pfile, CPP_W_BIDIRECTIONAL, loc, 0,
|
||||
- "found problematic Unicode character \"%s\"",
|
||||
- bidi::to_str (kind));
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "found problematic Unicode character \"%s\"",
|
||||
+ bidi::to_str (kind));
|
||||
}
|
||||
}
|
||||
/* We're done with this context. */
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@@ -1,304 +0,0 @@
|
||||
From 809330ab8450261e05919b472783bf15e4b000f7 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Earnshaw <rearnsha@arm.com>
|
||||
Date: Tue, 6 Jul 2021 15:10:18 +0100
|
||||
Subject: [PATCH] arm: Add tests for VLLDM mitigation [PR102035]
|
||||
|
||||
New tests for the erratum mitigation.
|
||||
|
||||
gcc/testsuite:
|
||||
PR target/102035
|
||||
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c: New test.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c: Likewise.
|
||||
* gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c: Likewise.
|
||||
|
||||
CVE: CVE-2021-35465
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=809330ab8450261e05919b472783bf15e4b000f7]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
.../arm/cmse/mainline/8_1m/soft/cmse-13a.c | 31 +++++++++++++++++++
|
||||
.../arm/cmse/mainline/8_1m/soft/cmse-7a.c | 28 +++++++++++++++++
|
||||
.../arm/cmse/mainline/8_1m/soft/cmse-8a.c | 30 ++++++++++++++++++
|
||||
.../cmse/mainline/8_1m/softfp-sp/cmse-7a.c | 27 ++++++++++++++++
|
||||
.../cmse/mainline/8_1m/softfp-sp/cmse-8a.c | 29 +++++++++++++++++
|
||||
.../arm/cmse/mainline/8_1m/softfp/cmse-13a.c | 30 ++++++++++++++++++
|
||||
.../arm/cmse/mainline/8_1m/softfp/cmse-7a.c | 27 ++++++++++++++++
|
||||
.../arm/cmse/mainline/8_1m/softfp/cmse-8a.c | 29 +++++++++++++++++
|
||||
8 files changed, 231 insertions(+)
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-13a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,31 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=soft -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */
|
||||
+
|
||||
+#include "../../../cmse-13.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[1,4-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[1,4-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr2, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr3, r4" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r1, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[1,4-9\]|r10|fp|ip), ){9}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[1,4-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmov" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmsr" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-7a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,28 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=soft -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */
|
||||
+
|
||||
+#include "../../../cmse-7.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r0, )?(r1, )?(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[0-9\]|r10|fp|ip), ){12}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[0-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmov" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmsr" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/soft/cmse-8a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=soft -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */
|
||||
+
|
||||
+#include "../../../cmse-8.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[2-9\]|r10|fp|ip), ){10}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[2-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmov" } } */
|
||||
+/* { dg-final { scan-assembler-not "vmsr" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-13a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16 -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
|
||||
+/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
|
||||
+
|
||||
+#include "../../../cmse-13.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[1,4-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[1,4-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr2, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr3, r4" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r1, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[1,4-9\]|r10|fp|ip), ){9}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[1,4-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-7a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16 -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
|
||||
+/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
|
||||
+
|
||||
+#include "../../../cmse-7.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r0, )?(r1, )?(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[0-9\]|r10|fp|ip), ){12}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[0-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp/cmse-8a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-d16 -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
|
||||
+/* { dg-skip-if "Skip these if testing single precision" {*-*-*} {"-mfpu=*-sp-*"} {""} } */
|
||||
+
|
||||
+#include "../../../cmse-8.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[2-9\]|r10|fp|ip), ){10}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[2-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-7a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
|
||||
+/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
|
||||
+
|
||||
+#include "../../../cmse-7.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[0-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r0, )?(r1, )?(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[0-9\]|r10|fp|ip), ){12}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[0-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c
|
||||
--- a/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ b/gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/softfp-sp/cmse-8a.c 2021-11-15 02:30:37.210637445 -0800
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-mcmse -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -mfix-cmse-cve-2021-35465" } */
|
||||
+/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
|
||||
+/* { dg-skip-if "Skip these if testing double precision" {*-*-*} {"-mfpu=fpv[4-5]-d16"} {""} } */
|
||||
+
|
||||
+#include "../../../cmse-8.x"
|
||||
+
|
||||
+/* Checks for saving and clearing prior to function call. */
|
||||
+/* Shift on the same register as blxns. */
|
||||
+/* { dg-final { scan-assembler "lsrs\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler "lsls\t(r\[2-9\]|r10|fp|ip), \\1, #1.*blxns\t\\1" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr0, r4" } } */
|
||||
+/* { dg-final { scan-assembler-not "mov\tr1, r4" } } */
|
||||
+/* { dg-final { scan-assembler "push\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlstm\tsp" } } */
|
||||
+/* Check the right registers are cleared and none appears twice. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{(r2, )?(r3, )?(r4, )?(r5, )?(r6, )?(r7, )?(r8, )?(r9, )?(r10, )?(fp, )?(ip, )?APSR\}" } } */
|
||||
+/* Check that the right number of registers is cleared and thus only one
|
||||
+ register is missing. */
|
||||
+/* { dg-final { scan-assembler "clrm\t\{((r\[2-9\]|r10|fp|ip), ){10}APSR\}" } } */
|
||||
+/* Check that no cleared register is used for blxns. */
|
||||
+/* { dg-final { scan-assembler-not "clrm\t\{\[^\}\]\+(r\[2-9\]|r10|fp|ip),\[^\}\]\+\}.*blxns\t\\1" } } */
|
||||
+/* Check for v8.1-m variant of erratum work-around. */
|
||||
+/* { dg-final { scan-assembler "vscclrm\t\{vpr\}" } } */
|
||||
+/* { dg-final { scan-assembler "vlldm\tsp" } } */
|
||||
+/* { dg-final { scan-assembler "pop\t\{r4, r5, r6, r7, r8, r9, r10, fp\}" } } */
|
||||
+
|
||||
+/* Now we check that we use the correct intrinsic to call. */
|
||||
+/* { dg-final { scan-assembler "blxns" } } */
|
||||
@@ -1,573 +0,0 @@
|
||||
From bef32d4a28595e933f24fef378cf052a30b674a7 Mon Sep 17 00:00:00 2001
|
||||
From: David Malcolm <dmalcolm@redhat.com>
|
||||
Date: Tue, 2 Nov 2021 15:45:22 -0400
|
||||
Subject: [PATCH] libcpp: capture and underline ranges in -Wbidi-chars=
|
||||
[PR103026]
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This patch converts the bidi::vec to use a struct so that we can
|
||||
capture location_t values for the bidirectional control characters.
|
||||
|
||||
Before:
|
||||
|
||||
Wbidi-chars-1.c: In function âmainâ:
|
||||
Wbidi-chars-1.c:6:43: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
6 | /*<U+202E> } <U+2066>if (isAdmin)<U+2069> <U+2066> begin admins only */
|
||||
| ^
|
||||
Wbidi-chars-1.c:9:28: warning: unpaired UTF-8 bidirectional control character detected [-Wbidi-chars=]
|
||||
9 | /* end admins only <U+202E> { <U+2066>*/
|
||||
| ^
|
||||
|
||||
After:
|
||||
|
||||
Wbidi-chars-1.c: In function âmainâ:
|
||||
Wbidi-chars-1.c:6:43: warning: unpaired UTF-8 bidirectional control characters detected [-Wbidi-chars=]
|
||||
6 | /*<U+202E> } <U+2066>if (isAdmin)<U+2069> <U+2066> begin admins only */
|
||||
| ~~~~~~~~ ~~~~~~~~ ^
|
||||
| | | |
|
||||
| | | end of bidirectional context
|
||||
| U+202E (RIGHT-TO-LEFT OVERRIDE) U+2066 (LEFT-TO-RIGHT ISOLATE)
|
||||
Wbidi-chars-1.c:9:28: warning: unpaired UTF-8 bidirectional control characters detected [-Wbidi-chars=]
|
||||
9 | /* end admins only <U+202E> { <U+2066>*/
|
||||
| ~~~~~~~~ ~~~~~~~~ ^
|
||||
| | | |
|
||||
| | | end of bidirectional context
|
||||
| | U+2066 (LEFT-TO-RIGHT ISOLATE)
|
||||
| U+202E (RIGHT-TO-LEFT OVERRIDE)
|
||||
|
||||
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
PR preprocessor/103026
|
||||
* c-c++-common/Wbidi-chars-ranges.c: New test.
|
||||
|
||||
libcpp/ChangeLog:
|
||||
PR preprocessor/103026
|
||||
* lex.c (struct bidi::context): New.
|
||||
(bidi::vec): Convert to a vec of context rather than unsigned
|
||||
char.
|
||||
(bidi::ctx_at): Rename to...
|
||||
(bidi::pop_kind_at): ...this and reimplement for above change.
|
||||
(bidi::current_ctx): Update for change to vec.
|
||||
(bidi::current_ctx_ucn_p): Likewise.
|
||||
(bidi::current_ctx_loc): New.
|
||||
(bidi::on_char): Update for usage of context struct. Add "loc"
|
||||
param and pass it when pushing contexts.
|
||||
(get_location_for_byte_range_in_cur_line): New.
|
||||
(get_bidi_utf8): Rename to...
|
||||
(get_bidi_utf8_1): ...this, reintroducing...
|
||||
(get_bidi_utf8): ...as a wrapper, setting *OUT when the result is
|
||||
not NONE.
|
||||
(get_bidi_ucn): Rename to...
|
||||
(get_bidi_ucn_1): ...this, reintroducing...
|
||||
(get_bidi_ucn): ...as a wrapper, setting *OUT when the result is
|
||||
not NONE.
|
||||
(class unpaired_bidi_rich_location): New.
|
||||
(maybe_warn_bidi_on_close): Use unpaired_bidi_rich_location when
|
||||
reporting on unpaired bidi chars. Split into singular vs plural
|
||||
spellings.
|
||||
(maybe_warn_bidi_on_char): Pass in a location_t rather than a
|
||||
const uchar * and use it when emitting warnings, and when calling
|
||||
bidi::on_char.
|
||||
(_cpp_skip_block_comment): Capture location when kind is not NONE
|
||||
and pass it to maybe_warn_bidi_on_char.
|
||||
(skip_line_comment): Likewise.
|
||||
(forms_identifier_p): Likewise.
|
||||
(lex_raw_string): Likewise.
|
||||
(lex_string): Likewise.
|
||||
|
||||
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
CVE: CVE-2021-42574
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=bef32d4a28595e933f24fef378cf052a30b674a7]
|
||||
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
|
||||
|
||||
---
|
||||
.../c-c++-common/Wbidi-chars-ranges.c | 54 ++++
|
||||
libcpp/lex.c | 251 ++++++++++++++----
|
||||
2 files changed, 257 insertions(+), 48 deletions(-)
|
||||
create mode 100644 gcc/testsuite/c-c++-common/Wbidi-chars-ranges.c
|
||||
|
||||
diff --git a/gcc/testsuite/c-c++-common/Wbidi-chars-ranges.c b/gcc/testsuite/c-c++-common/Wbidi-chars-ranges.c
|
||||
new file mode 100644
|
||||
index 00000000000..298750a2a64
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/c-c++-common/Wbidi-chars-ranges.c
|
||||
@@ -0,0 +1,54 @@
|
||||
+/* PR preprocessor/103026 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-Wbidi-chars=unpaired -fdiagnostics-show-caret" } */
|
||||
+/* Verify that we escape and underline pertinent bidirectional
|
||||
+ control characters when quoting the source. */
|
||||
+
|
||||
+int test_unpaired_bidi () {
|
||||
+ int isAdmin = 0;
|
||||
+ /*â® } â¦if (isAdmin)⩠⦠begin admins only */
|
||||
+/* { dg-warning "bidirectional" "" { target *-*-* } .-1 } */
|
||||
+#if 0
|
||||
+ { dg-begin-multiline-output "" }
|
||||
+ /*<U+202E> } <U+2066>if (isAdmin)<U+2069> <U+2066> begin admins only */
|
||||
+ ~~~~~~~~ ~~~~~~~~ ^
|
||||
+ | | |
|
||||
+ | | end of bidirectional context
|
||||
+ U+202E (RIGHT-TO-LEFT OVERRIDE) U+2066 (LEFT-TO-RIGHT ISOLATE)
|
||||
+ { dg-end-multiline-output "" }
|
||||
+#endif
|
||||
+
|
||||
+ __builtin_printf("You are an admin.\n");
|
||||
+ /* end admins only â® { â¦*/
|
||||
+/* { dg-warning "bidirectional" "" { target *-*-* } .-1 } */
|
||||
+#if 0
|
||||
+ { dg-begin-multiline-output "" }
|
||||
+ /* end admins only <U+202E> { <U+2066>*/
|
||||
+ ~~~~~~~~ ~~~~~~~~ ^
|
||||
+ | | |
|
||||
+ | | end of bidirectional context
|
||||
+ | U+2066 (LEFT-TO-RIGHT ISOLATE)
|
||||
+ U+202E (RIGHT-TO-LEFT OVERRIDE)
|
||||
+ { dg-end-multiline-output "" }
|
||||
+#endif
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int LRE_âª_PDF_\u202c;
|
||||
+/* { dg-warning "mismatch" "" { target *-*-* } .-1 } */
|
||||
+#if 0
|
||||
+ { dg-begin-multiline-output "" }
|
||||
+ int LRE_<U+202A>_PDF_\u202c;
|
||||
+ ~~~~~~~~ ^~~~~~
|
||||
+ { dg-end-multiline-output "" }
|
||||
+#endif
|
||||
+
|
||||
+const char *s1 = "LRE_âª_PDF_\u202c";
|
||||
+/* { dg-warning "mismatch" "" { target *-*-* } .-1 } */
|
||||
+#if 0
|
||||
+ { dg-begin-multiline-output "" }
|
||||
+ const char *s1 = "LRE_<U+202A>_PDF_\u202c";
|
||||
+ ~~~~~~~~ ^~~~~~
|
||||
+ { dg-end-multiline-output "" }
|
||||
+#endif
|
||||
diff --git a/libcpp/lex.c b/libcpp/lex.c
|
||||
index 2421d6c0f40..94c36f0d014 100644
|
||||
--- a/libcpp/lex.c
|
||||
+++ b/libcpp/lex.c
|
||||
@@ -1172,11 +1172,34 @@ namespace bidi {
|
||||
/* All the UTF-8 encodings of bidi characters start with E2. */
|
||||
constexpr uchar utf8_start = 0xe2;
|
||||
|
||||
+ struct context
|
||||
+ {
|
||||
+ context () {}
|
||||
+ context (location_t loc, kind k, bool pdf, bool ucn)
|
||||
+ : m_loc (loc), m_kind (k), m_pdf (pdf), m_ucn (ucn)
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ kind get_pop_kind () const
|
||||
+ {
|
||||
+ return m_pdf ? kind::PDF : kind::PDI;
|
||||
+ }
|
||||
+ bool ucn_p () const
|
||||
+ {
|
||||
+ return m_ucn;
|
||||
+ }
|
||||
+
|
||||
+ location_t m_loc;
|
||||
+ kind m_kind;
|
||||
+ unsigned m_pdf : 1;
|
||||
+ unsigned m_ucn : 1;
|
||||
+ };
|
||||
+
|
||||
/* A vector holding currently open bidi contexts. We use a char for
|
||||
each context, its LSB is 1 if it represents a PDF context, 0 if it
|
||||
represents a PDI context. The next bit is 1 if this context was open
|
||||
by a bidi character written as a UCN, and 0 when it was UTF-8. */
|
||||
- semi_embedded_vec <unsigned char, 16> vec;
|
||||
+ semi_embedded_vec <context, 16> vec;
|
||||
|
||||
/* Close the whole comment/identifier/string literal/character constant
|
||||
context. */
|
||||
@@ -1193,19 +1216,19 @@ namespace bidi {
|
||||
vec.truncate (len - 1);
|
||||
}
|
||||
|
||||
- /* Return the context of the Ith element. */
|
||||
- kind ctx_at (unsigned int i)
|
||||
+ /* Return the pop kind of the context of the Ith element. */
|
||||
+ kind pop_kind_at (unsigned int i)
|
||||
{
|
||||
- return (vec[i] & 1) ? kind::PDF : kind::PDI;
|
||||
+ return vec[i].get_pop_kind ();
|
||||
}
|
||||
|
||||
- /* Return which context is currently opened. */
|
||||
+ /* Return the pop kind of the context that is currently opened. */
|
||||
kind current_ctx ()
|
||||
{
|
||||
unsigned int len = vec.count ();
|
||||
if (len == 0)
|
||||
return kind::NONE;
|
||||
- return ctx_at (len - 1);
|
||||
+ return vec[len - 1].get_pop_kind ();
|
||||
}
|
||||
|
||||
/* Return true if the current context comes from a UCN origin, that is,
|
||||
@@ -1214,11 +1237,19 @@ namespace bidi {
|
||||
{
|
||||
unsigned int len = vec.count ();
|
||||
gcc_checking_assert (len > 0);
|
||||
- return (vec[len - 1] >> 1) & 1;
|
||||
+ return vec[len - 1].m_ucn;
|
||||
}
|
||||
|
||||
- /* We've read a bidi char, update the current vector as necessary. */
|
||||
- void on_char (kind k, bool ucn_p)
|
||||
+ location_t current_ctx_loc ()
|
||||
+ {
|
||||
+ unsigned int len = vec.count ();
|
||||
+ gcc_checking_assert (len > 0);
|
||||
+ return vec[len - 1].m_loc;
|
||||
+ }
|
||||
+
|
||||
+ /* We've read a bidi char, update the current vector as necessary.
|
||||
+ LOC is only valid when K is not kind::NONE. */
|
||||
+ void on_char (kind k, bool ucn_p, location_t loc)
|
||||
{
|
||||
switch (k)
|
||||
{
|
||||
@@ -1226,12 +1257,12 @@ namespace bidi {
|
||||
case kind::RLE:
|
||||
case kind::LRO:
|
||||
case kind::RLO:
|
||||
- vec.push (ucn_p ? 3u : 1u);
|
||||
+ vec.push (context (loc, k, true, ucn_p));
|
||||
break;
|
||||
case kind::LRI:
|
||||
case kind::RLI:
|
||||
case kind::FSI:
|
||||
- vec.push (ucn_p ? 2u : 0u);
|
||||
+ vec.push (context (loc, k, false, ucn_p));
|
||||
break;
|
||||
/* PDF terminates the scope of the last LRE, RLE, LRO, or RLO
|
||||
whose scope has not yet been terminated. */
|
||||
@@ -1245,7 +1276,7 @@ namespace bidi {
|
||||
yet been terminated. */
|
||||
case kind::PDI:
|
||||
for (int i = vec.count () - 1; i >= 0; --i)
|
||||
- if (ctx_at (i) == kind::PDI)
|
||||
+ if (pop_kind_at (i) == kind::PDI)
|
||||
{
|
||||
vec.truncate (i);
|
||||
break;
|
||||
@@ -1295,10 +1326,47 @@ namespace bidi {
|
||||
}
|
||||
}
|
||||
|
||||
+/* Get location_t for the range of bytes [START, START + NUM_BYTES)
|
||||
+ within the current line in FILE, with the caret at START. */
|
||||
+
|
||||
+static location_t
|
||||
+get_location_for_byte_range_in_cur_line (cpp_reader *pfile,
|
||||
+ const unsigned char *const start,
|
||||
+ size_t num_bytes)
|
||||
+{
|
||||
+ gcc_checking_assert (num_bytes > 0);
|
||||
+
|
||||
+ /* CPP_BUF_COLUMN and linemap_position_for_column both refer
|
||||
+ to offsets in bytes, but CPP_BUF_COLUMN is 0-based,
|
||||
+ whereas linemap_position_for_column is 1-based. */
|
||||
+
|
||||
+ /* Get 0-based offsets within the line. */
|
||||
+ size_t start_offset = CPP_BUF_COLUMN (pfile->buffer, start);
|
||||
+ size_t end_offset = start_offset + num_bytes - 1;
|
||||
+
|
||||
+ /* Now convert to location_t, where "columns" are 1-based byte offsets. */
|
||||
+ location_t start_loc = linemap_position_for_column (pfile->line_table,
|
||||
+ start_offset + 1);
|
||||
+ location_t end_loc = linemap_position_for_column (pfile->line_table,
|
||||
+ end_offset + 1);
|
||||
+
|
||||
+ if (start_loc == end_loc)
|
||||
+ return start_loc;
|
||||
+
|
||||
+ source_range src_range;
|
||||
+ src_range.m_start = start_loc;
|
||||
+ src_range.m_finish = end_loc;
|
||||
+ location_t combined_loc = COMBINE_LOCATION_DATA (pfile->line_table,
|
||||
+ start_loc,
|
||||
+ src_range,
|
||||
+ NULL);
|
||||
+ return combined_loc;
|
||||
+}
|
||||
+
|
||||
/* Parse a sequence of 3 bytes starting with P and return its bidi code. */
|
||||
|
||||
static bidi::kind
|
||||
-get_bidi_utf8 (const unsigned char *const p)
|
||||
+get_bidi_utf8_1 (const unsigned char *const p)
|
||||
{
|
||||
gcc_checking_assert (p[0] == bidi::utf8_start);
|
||||
|
||||
@@ -1340,10 +1408,25 @@ get_bidi_utf8 (const unsigned char *cons
|
||||
return bidi::kind::NONE;
|
||||
}
|
||||
|
||||
+/* Parse a sequence of 3 bytes starting with P and return its bidi code.
|
||||
+ If the kind is not NONE, write the location to *OUT.*/
|
||||
+
|
||||
+static bidi::kind
|
||||
+get_bidi_utf8 (cpp_reader *pfile, const unsigned char *const p, location_t *out)
|
||||
+{
|
||||
+ bidi::kind result = get_bidi_utf8_1 (p);
|
||||
+ if (result != bidi::kind::NONE)
|
||||
+ {
|
||||
+ /* We have a sequence of 3 bytes starting at P. */
|
||||
+ *out = get_location_for_byte_range_in_cur_line (pfile, p, 3);
|
||||
+ }
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
/* Parse a UCN where P points just past \u or \U and return its bidi code. */
|
||||
|
||||
static bidi::kind
|
||||
-get_bidi_ucn (const unsigned char *p, bool is_U)
|
||||
+get_bidi_ucn_1 (const unsigned char *p, bool is_U)
|
||||
{
|
||||
/* 6.4.3 Universal Character Names
|
||||
\u hex-quad
|
||||
@@ -1412,6 +1495,62 @@ get_bidi_ucn (const unsigned char *p, bo
|
||||
return bidi::kind::NONE;
|
||||
}
|
||||
|
||||
+/* Parse a UCN where P points just past \u or \U and return its bidi code.
|
||||
+ If the kind is not NONE, write the location to *OUT.*/
|
||||
+
|
||||
+static bidi::kind
|
||||
+get_bidi_ucn (cpp_reader *pfile, const unsigned char *p, bool is_U,
|
||||
+ location_t *out)
|
||||
+{
|
||||
+ bidi::kind result = get_bidi_ucn_1 (p, is_U);
|
||||
+ if (result != bidi::kind::NONE)
|
||||
+ {
|
||||
+ const unsigned char *start = p - 2;
|
||||
+ size_t num_bytes = 2 + (is_U ? 8 : 4);
|
||||
+ *out = get_location_for_byte_range_in_cur_line (pfile, start, num_bytes);
|
||||
+ }
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+/* Subclass of rich_location for reporting on unpaired UTF-8
|
||||
+ bidirectional control character(s).
|
||||
+ Escape the source lines on output, and show all unclosed
|
||||
+ bidi context, labelling everything. */
|
||||
+
|
||||
+class unpaired_bidi_rich_location : public rich_location
|
||||
+{
|
||||
+ public:
|
||||
+ class custom_range_label : public range_label
|
||||
+ {
|
||||
+ public:
|
||||
+ label_text get_text (unsigned range_idx) const FINAL OVERRIDE
|
||||
+ {
|
||||
+ /* range 0 is the primary location; each subsequent range i + 1
|
||||
+ is for bidi::vec[i]. */
|
||||
+ if (range_idx > 0)
|
||||
+ {
|
||||
+ const bidi::context &ctxt (bidi::vec[range_idx - 1]);
|
||||
+ return label_text::borrow (bidi::to_str (ctxt.m_kind));
|
||||
+ }
|
||||
+ else
|
||||
+ return label_text::borrow (_("end of bidirectional context"));
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ unpaired_bidi_rich_location (cpp_reader *pfile, location_t loc)
|
||||
+ : rich_location (pfile->line_table, loc, &m_custom_label)
|
||||
+ {
|
||||
+ set_escape_on_output (true);
|
||||
+ for (unsigned i = 0; i < bidi::vec.count (); i++)
|
||||
+ add_range (bidi::vec[i].m_loc,
|
||||
+ SHOW_RANGE_WITHOUT_CARET,
|
||||
+ &m_custom_label);
|
||||
+ }
|
||||
+
|
||||
+ private:
|
||||
+ custom_range_label m_custom_label;
|
||||
+};
|
||||
+
|
||||
/* We're closing a bidi context, that is, we've encountered a newline,
|
||||
are closing a C-style comment, or are at the end of a string literal,
|
||||
character constant, or identifier. Warn if this context was not
|
||||
@@ -1427,11 +1566,17 @@ maybe_warn_bidi_on_close (cpp_reader *pf
|
||||
const location_t loc
|
||||
= linemap_position_for_column (pfile->line_table,
|
||||
CPP_BUF_COLUMN (pfile->buffer, p));
|
||||
- rich_location rich_loc (pfile->line_table, loc);
|
||||
- rich_loc.set_escape_on_output (true);
|
||||
- cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
- "unpaired UTF-8 bidirectional control character "
|
||||
- "detected");
|
||||
+ unpaired_bidi_rich_location rich_loc (pfile, loc);
|
||||
+ /* cpp_callbacks doesn't yet have a way to handle singular vs plural
|
||||
+ forms of a diagnostic, so fake it for now. */
|
||||
+ if (bidi::vec.count () > 1)
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "unpaired UTF-8 bidirectional control characters "
|
||||
+ "detected");
|
||||
+ else
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "unpaired UTF-8 bidirectional control character "
|
||||
+ "detected");
|
||||
}
|
||||
/* We're done with this context. */
|
||||
bidi::on_close ();
|
||||
@@ -1439,12 +1584,13 @@ maybe_warn_bidi_on_close (cpp_reader *pf
|
||||
|
||||
/* We're at the beginning or in the middle of an identifier/comment/string
|
||||
literal/character constant. Warn if we've encountered a bidi character.
|
||||
- KIND says which bidi character it was; P points to it in the character
|
||||
- stream. UCN_P is true iff this bidi character was written as a UCN. */
|
||||
+ KIND says which bidi control character it was; UCN_P is true iff this bidi
|
||||
+ control character was written as a UCN. LOC is the location of the
|
||||
+ character, but is only valid if KIND != bidi::kind::NONE. */
|
||||
|
||||
static void
|
||||
-maybe_warn_bidi_on_char (cpp_reader *pfile, const uchar *p, bidi::kind kind,
|
||||
- bool ucn_p)
|
||||
+maybe_warn_bidi_on_char (cpp_reader *pfile, bidi::kind kind,
|
||||
+ bool ucn_p, location_t loc)
|
||||
{
|
||||
if (__builtin_expect (kind == bidi::kind::NONE, 1))
|
||||
return;
|
||||
@@ -1453,9 +1599,6 @@ maybe_warn_bidi_on_char (cpp_reader *pfi
|
||||
|
||||
if (warn_bidi != bidirectional_none)
|
||||
{
|
||||
- const location_t loc
|
||||
- = linemap_position_for_column (pfile->line_table,
|
||||
- CPP_BUF_COLUMN (pfile->buffer, p));
|
||||
rich_location rich_loc (pfile->line_table, loc);
|
||||
rich_loc.set_escape_on_output (true);
|
||||
|
||||
@@ -1467,9 +1610,12 @@ maybe_warn_bidi_on_char (cpp_reader *pfi
|
||||
{
|
||||
if (warn_bidi == bidirectional_unpaired
|
||||
&& bidi::current_ctx_ucn_p () != ucn_p)
|
||||
- cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
- "UTF-8 vs UCN mismatch when closing "
|
||||
- "a context by \"%s\"", bidi::to_str (kind));
|
||||
+ {
|
||||
+ rich_loc.add_range (bidi::current_ctx_loc ());
|
||||
+ cpp_warning_at (pfile, CPP_W_BIDIRECTIONAL, &rich_loc,
|
||||
+ "UTF-8 vs UCN mismatch when closing "
|
||||
+ "a context by \"%s\"", bidi::to_str (kind));
|
||||
+ }
|
||||
}
|
||||
else if (warn_bidi == bidirectional_any)
|
||||
{
|
||||
@@ -1484,7 +1630,7 @@ maybe_warn_bidi_on_char (cpp_reader *pfi
|
||||
}
|
||||
}
|
||||
/* We're done with this context. */
|
||||
- bidi::on_char (kind, ucn_p);
|
||||
+ bidi::on_char (kind, ucn_p, loc);
|
||||
}
|
||||
|
||||
/* Skip a C-style block comment. We find the end of the comment by
|
||||
@@ -1552,8 +1698,9 @@ _cpp_skip_block_comment (cpp_reader *pfi
|
||||
a bidirectional control character. */
|
||||
else if (__builtin_expect (c == bidi::utf8_start, 0) && warn_bidi_p)
|
||||
{
|
||||
- bidi::kind kind = get_bidi_utf8 (cur - 1);
|
||||
- maybe_warn_bidi_on_char (pfile, cur, kind, /*ucn_p=*/false);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_utf8 (pfile, cur - 1, &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/false, loc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1586,9 +1733,9 @@ skip_line_comment (cpp_reader *pfile)
|
||||
{
|
||||
if (__builtin_expect (*buffer->cur == bidi::utf8_start, 0))
|
||||
{
|
||||
- bidi::kind kind = get_bidi_utf8 (buffer->cur);
|
||||
- maybe_warn_bidi_on_char (pfile, buffer->cur, kind,
|
||||
- /*ucn_p=*/false);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_utf8 (pfile, buffer->cur, &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/false, loc);
|
||||
}
|
||||
buffer->cur++;
|
||||
}
|
||||
@@ -1708,9 +1855,9 @@ forms_identifier_p (cpp_reader *pfile, i
|
||||
if (__builtin_expect (*buffer->cur == bidi::utf8_start, 0)
|
||||
&& warn_bidi_p)
|
||||
{
|
||||
- bidi::kind kind = get_bidi_utf8 (buffer->cur);
|
||||
- maybe_warn_bidi_on_char (pfile, buffer->cur, kind,
|
||||
- /*ucn_p=*/false);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_utf8 (pfile, buffer->cur, &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/false, loc);
|
||||
}
|
||||
if (_cpp_valid_utf8 (pfile, &buffer->cur, buffer->rlimit, 1 + !first,
|
||||
state, &s))
|
||||
@@ -1722,10 +1869,12 @@ forms_identifier_p (cpp_reader *pfile, i
|
||||
buffer->cur += 2;
|
||||
if (warn_bidi_p)
|
||||
{
|
||||
- bidi::kind kind = get_bidi_ucn (buffer->cur,
|
||||
- buffer->cur[-1] == 'U');
|
||||
- maybe_warn_bidi_on_char (pfile, buffer->cur, kind,
|
||||
- /*ucn_p=*/true);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_ucn (pfile,
|
||||
+ buffer->cur,
|
||||
+ buffer->cur[-1] == 'U',
|
||||
+ &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/true, loc);
|
||||
}
|
||||
if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first,
|
||||
state, &s, NULL, NULL))
|
||||
@@ -2336,8 +2485,11 @@ lex_raw_string (cpp_reader *pfile, cpp_t
|
||||
}
|
||||
else if (__builtin_expect ((unsigned char) c == bidi::utf8_start, 0)
|
||||
&& warn_bidi_p)
|
||||
- maybe_warn_bidi_on_char (pfile, pos - 1, get_bidi_utf8 (pos - 1),
|
||||
- /*ucn_p=*/false);
|
||||
+ {
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_utf8 (pfile, pos - 1, &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/false, loc);
|
||||
+ }
|
||||
}
|
||||
|
||||
if (warn_bidi_p)
|
||||
@@ -2447,8 +2599,10 @@ lex_string (cpp_reader *pfile, cpp_token
|
||||
{
|
||||
if ((cur[0] == 'u' || cur[0] == 'U') && warn_bidi_p)
|
||||
{
|
||||
- bidi::kind kind = get_bidi_ucn (cur + 1, cur[0] == 'U');
|
||||
- maybe_warn_bidi_on_char (pfile, cur, kind, /*ucn_p=*/true);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_ucn (pfile, cur + 1, cur[0] == 'U',
|
||||
+ &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/true, loc);
|
||||
}
|
||||
cur++;
|
||||
}
|
||||
@@ -2476,8 +2630,9 @@ lex_string (cpp_reader *pfile, cpp_token
|
||||
saw_NUL = true;
|
||||
else if (__builtin_expect (c == bidi::utf8_start, 0) && warn_bidi_p)
|
||||
{
|
||||
- bidi::kind kind = get_bidi_utf8 (cur - 1);
|
||||
- maybe_warn_bidi_on_char (pfile, cur - 1, kind, /*ucn_p=*/false);
|
||||
+ location_t loc;
|
||||
+ bidi::kind kind = get_bidi_utf8 (pfile, cur - 1, &loc);
|
||||
+ maybe_warn_bidi_on_char (pfile, kind, /*ucn_p=*/false, loc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,13 +22,14 @@ gcc/ChangeLog:
|
||||
* gcc.c: Pass sysroot options to cpp for preprocessed source
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
|
||||
[YOCTO #2074]
|
||||
|
||||
Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582725.html]
|
||||
---
|
||||
gcc/cp/lang-specs.h | 2 +-
|
||||
gcc/gcc.c | 2 +-
|
||||
gcc/gcc.cc | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gcc-11.2.0/gcc/cp/lang-specs.h
|
||||
@@ -44,10 +45,10 @@ Index: gcc-11.2.0/gcc/cp/lang-specs.h
|
||||
" %{!fsyntax-only:"
|
||||
" %{fmodule-only:%{!S:-o %g.s%V}}"
|
||||
" %{!fmodule-only:%{!fmodule-header*:%(invoke_as)}}}"
|
||||
Index: gcc-11.2.0/gcc/gcc.c
|
||||
Index: gcc-11.2.0/gcc/gcc.cc
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/gcc/gcc.c
|
||||
+++ gcc-11.2.0/gcc/gcc.c
|
||||
--- gcc-11.2.0.orig/gcc/gcc.cc
|
||||
+++ gcc-11.2.0/gcc/gcc.cc
|
||||
@@ -1470,7 +1470,7 @@ static const struct compiler default_com
|
||||
%W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0},
|
||||
{".i", "@cpp-output", 0, 0, 0},
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Subject: [PATCH 2/5] gcc: Fix "argument list too long" from install-plugins
|
||||
|
||||
When building in longer build paths (200+ characters), the
|
||||
"echo $(PLUGIN_HEADERS)" from the install-plugins target would cause an
|
||||
"argument list too long error" on some systems.
|
||||
|
||||
Avoid this by calling make's sort function on the list which removes
|
||||
duplicates and stops the overflow from reaching the echo command.
|
||||
The original sort is left to handle the the .h and .def files.
|
||||
|
||||
2021-10-26 Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* Makefile.in: Fix "argument list too long" from install-plugins
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582722.html]
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=66e157188bd2f789809e17e85f917534c9381599]
|
||||
---
|
||||
gcc/Makefile.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: gcc-11.2.0/gcc/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/gcc/Makefile.in
|
||||
+++ gcc-11.2.0/gcc/Makefile.in
|
||||
@@ -3678,7 +3678,7 @@ install-plugin: installdirs lang.install
|
||||
# We keep the directory structure for files in config, common/config or
|
||||
# c-family and .def files. All other files are flattened to a single directory.
|
||||
$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
|
||||
- headers=`echo $(PLUGIN_HEADERS) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
|
||||
+ headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
|
||||
for file in $$headers; do \
|
||||
if [ -f $$file ] ; then \
|
||||
@@ -1,199 +0,0 @@
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Subject: [PATCH 1/5] Makefile.in: Ensure build CPP/CPPFLAGS is used for build targets
|
||||
|
||||
During cross compiling, CPP is being set to the target compiler even for
|
||||
build targets. As an example, when building a cross compiler targetting
|
||||
mingw, the config.log for libiberty in
|
||||
build.x86_64-pokysdk-mingw32.i586-poky-linux/build-x86_64-linux/libiberty/config.log
|
||||
shows:
|
||||
|
||||
configure:3786: checking how to run the C preprocessor
|
||||
configure:3856: result: x86_64-pokysdk-mingw32-gcc -E --sysroot=[sysroot]/x86_64-nativesdk-mingw32-pokysdk-mingw32
|
||||
configure:3876: x86_64-pokysdk-mingw32-gcc -E --sysroot=[sysroot]/x86_64-nativesdk-mingw32-pokysdk-mingw32 conftest.c
|
||||
configure:3876: $? = 0
|
||||
|
||||
This is libiberty being built for the build environment, not the target one
|
||||
(i.e. in build-x86_64-linux). As such it should be using the build environment's
|
||||
gcc and not the target one. In the mingw case the system headers are quite
|
||||
different leading to build failures related to not being able to include a
|
||||
process.h file for pem-unix.c.
|
||||
|
||||
Further analysis shows the same issue occuring for CPPFLAGS too.
|
||||
|
||||
Fix this by adding support for CPP_FOR_BUILD and CPPFLAGS_FOR_BUILD which
|
||||
for example, avoids mixing the mingw headers for host binaries on linux
|
||||
systems.
|
||||
|
||||
2021-10-27 Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
ChangeLog:
|
||||
|
||||
* Makefile.tpl: Add CPP_FOR_BUILD and CPPFLAGS_FOR_BUILD support
|
||||
* Makefile.in: Regenerate.
|
||||
* configure: Regenerate.
|
||||
* configure.ac: Add CPP_FOR_BUILD and CPPFLAGS_FOR_BUILD support
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* configure: Regenerate.
|
||||
* configure.ac: Use CPPFLAGS_FOR_BUILD for GMPINC
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582727.html]
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=84401ce5fb4ecab55decb472b168100e7593e01f]
|
||||
---
|
||||
Makefile.in | 6 ++++++
|
||||
Makefile.tpl | 6 ++++++
|
||||
configure | 4 ++++
|
||||
configure.ac | 4 ++++
|
||||
gcc/configure | 2 +-
|
||||
gcc/configure.ac | 2 +-
|
||||
6 files changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gcc-11.2.0/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/Makefile.in
|
||||
+++ gcc-11.2.0/Makefile.in
|
||||
@@ -151,6 +151,8 @@ BUILD_EXPORTS = \
|
||||
CC="$(CC_FOR_BUILD)"; export CC; \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
|
||||
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
||||
+ CPP="$(CPP_FOR_BUILD)"; export CPP; \
|
||||
+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
|
||||
CXX="$(CXX_FOR_BUILD)"; export CXX; \
|
||||
CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
|
||||
GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
|
||||
@@ -198,6 +200,8 @@ HOST_EXPORTS = \
|
||||
AR="$(AR)"; export AR; \
|
||||
AS="$(AS)"; export AS; \
|
||||
CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
|
||||
+ CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
|
||||
+ CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
|
||||
CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
|
||||
DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
|
||||
LD="$(LD)"; export LD; \
|
||||
@@ -353,6 +357,8 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
|
||||
AS_FOR_BUILD = @AS_FOR_BUILD@
|
||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||
+CPP_FOR_BUILD = @CPP_FOR_BUILD@
|
||||
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
|
||||
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
|
||||
CXX_FOR_BUILD = @CXX_FOR_BUILD@
|
||||
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
|
||||
Index: gcc-11.2.0/Makefile.tpl
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/Makefile.tpl
|
||||
+++ gcc-11.2.0/Makefile.tpl
|
||||
@@ -154,6 +154,8 @@ BUILD_EXPORTS = \
|
||||
CC="$(CC_FOR_BUILD)"; export CC; \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
|
||||
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
||||
+ CPP="$(CPP_FOR_BUILD)"; export CPP; \
|
||||
+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
|
||||
CXX="$(CXX_FOR_BUILD)"; export CXX; \
|
||||
CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
|
||||
GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
|
||||
@@ -201,6 +203,8 @@ HOST_EXPORTS = \
|
||||
AR="$(AR)"; export AR; \
|
||||
AS="$(AS)"; export AS; \
|
||||
CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
|
||||
+ CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
|
||||
+ CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
|
||||
CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
|
||||
DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
|
||||
LD="$(LD)"; export LD; \
|
||||
@@ -356,6 +360,8 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
|
||||
AS_FOR_BUILD = @AS_FOR_BUILD@
|
||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||
+CPP_FOR_BUILD = @CPP_FOR_BUILD@
|
||||
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
|
||||
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
|
||||
CXX_FOR_BUILD = @CXX_FOR_BUILD@
|
||||
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
|
||||
Index: gcc-11.2.0/configure
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/configure
|
||||
+++ gcc-11.2.0/configure
|
||||
@@ -652,6 +652,8 @@ GFORTRAN_FOR_BUILD
|
||||
DLLTOOL_FOR_BUILD
|
||||
CXX_FOR_BUILD
|
||||
CXXFLAGS_FOR_BUILD
|
||||
+CPPFLAGS_FOR_BUILD
|
||||
+CPP_FOR_BUILD
|
||||
CFLAGS_FOR_BUILD
|
||||
CC_FOR_BUILD
|
||||
AS_FOR_BUILD
|
||||
@@ -4092,6 +4094,7 @@ if test "${build}" != "${host}" ; then
|
||||
AR_FOR_BUILD=${AR_FOR_BUILD-ar}
|
||||
AS_FOR_BUILD=${AS_FOR_BUILD-as}
|
||||
CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
|
||||
+ CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CPP)}"
|
||||
CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
|
||||
GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
|
||||
GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
|
||||
@@ -9809,6 +9812,7 @@ esac
|
||||
# our build compiler if desired.
|
||||
if test x"${build}" = x"${host}" ; then
|
||||
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
|
||||
+ CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
|
||||
CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
|
||||
LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
|
||||
fi
|
||||
Index: gcc-11.2.0/configure.ac
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/configure.ac
|
||||
+++ gcc-11.2.0/configure.ac
|
||||
@@ -1347,6 +1347,7 @@ if test "${build}" != "${host}" ; then
|
||||
AR_FOR_BUILD=${AR_FOR_BUILD-ar}
|
||||
AS_FOR_BUILD=${AS_FOR_BUILD-as}
|
||||
CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
|
||||
+ CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CPP)}"
|
||||
CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
|
||||
GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
|
||||
GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
|
||||
@@ -3321,6 +3322,7 @@ esac
|
||||
# our build compiler if desired.
|
||||
if test x"${build}" = x"${host}" ; then
|
||||
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
|
||||
+ CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
|
||||
CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
|
||||
LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
|
||||
fi
|
||||
@@ -3387,6 +3389,8 @@ AC_SUBST(AR_FOR_BUILD)
|
||||
AC_SUBST(AS_FOR_BUILD)
|
||||
AC_SUBST(CC_FOR_BUILD)
|
||||
AC_SUBST(CFLAGS_FOR_BUILD)
|
||||
+AC_SUBST(CPP_FOR_BUILD)
|
||||
+AC_SUBST(CPPFLAGS_FOR_BUILD)
|
||||
AC_SUBST(CXXFLAGS_FOR_BUILD)
|
||||
AC_SUBST(CXX_FOR_BUILD)
|
||||
AC_SUBST(DLLTOOL_FOR_BUILD)
|
||||
Index: gcc-11.2.0/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/gcc/configure
|
||||
+++ gcc-11.2.0/gcc/configure
|
||||
@@ -12699,7 +12699,7 @@ else
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
|
||||
LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
|
||||
- GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
|
||||
+ GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
|
||||
${realsrcdir}/configure \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
|
||||
Index: gcc-11.2.0/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/gcc/configure.ac
|
||||
+++ gcc-11.2.0/gcc/configure.ac
|
||||
@@ -2023,7 +2023,7 @@ else
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
CXX="${CXX_FOR_BUILD}" CXXFLAGS="${CXXFLAGS_FOR_BUILD}" \
|
||||
LD="${LD_FOR_BUILD}" LDFLAGS="${LDFLAGS_FOR_BUILD}" \
|
||||
- GMPINC="" CPPFLAGS="${CPPFLAGS} -DGENERATOR_FILE" \
|
||||
+ GMPINC="" CPPFLAGS="${CPPFLAGS_FOR_BUILD} -DGENERATOR_FILE" \
|
||||
${realsrcdir}/configure \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
${enable_obsolete+--enable-obsolete="$enable_obsolete"} \
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
gcc/Makefile.in | 2 ++
|
||||
gcc/config/linux.h | 8 ++++++++
|
||||
gcc/config/rs6000/sysv4.h | 8 ++++++++
|
||||
gcc/cppdefault.c | 4 ++++
|
||||
gcc/cppdefault.cc | 4 ++++
|
||||
4 files changed, 22 insertions(+)
|
||||
|
||||
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
|
||||
@@ -96,10 +96,10 @@ index 510abe169c5..0c2bba5ea32 100644
|
||||
INCLUDE_DEFAULTS_MUSL_NATIVE \
|
||||
{ GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
|
||||
{ 0, 0, 0, 0, 0, 0 } \
|
||||
diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
|
||||
diff --git a/gcc/cppdefault.cc b/gcc/cppdefault.cc
|
||||
index c503d14fc3f..d54d6ce0076 100644
|
||||
--- a/gcc/cppdefault.c
|
||||
+++ b/gcc/cppdefault.c
|
||||
--- a/gcc/cppdefault.cc
|
||||
+++ b/gcc/cppdefault.cc
|
||||
@@ -64,6 +64,10 @@ const struct default_include cpp_include_defaults[]
|
||||
/* This is the dir for gcc's private headers. */
|
||||
{ GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
|
||||
|
||||
@@ -34,21 +34,22 @@ if the executable is moved. (These paths were missed in the original
|
||||
implementation.)
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
---
|
||||
gcc/c-family/c-opts.c | 4 +--
|
||||
gcc/c-family/c-opts.cc | 4 +--
|
||||
gcc/config/linux.h | 24 +++++++--------
|
||||
gcc/config/rs6000/sysv4.h | 24 +++++++--------
|
||||
gcc/cppdefault.c | 63 ++++++++++++++++++++++++---------------
|
||||
gcc/cppdefault.cc | 63 ++++++++++++++++++++++++---------------
|
||||
gcc/cppdefault.h | 13 ++++----
|
||||
gcc/gcc.c | 20 +++++++++----
|
||||
gcc/incpath.c | 12 ++++----
|
||||
gcc/prefix.c | 6 ++--
|
||||
gcc/gcc.cc | 20 +++++++++----
|
||||
gcc/incpath.cc | 12 ++++----
|
||||
gcc/prefix.cc | 6 ++--
|
||||
8 files changed, 94 insertions(+), 72 deletions(-)
|
||||
|
||||
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
|
||||
diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
|
||||
index 89e05a4c551..5577383665d 100644
|
||||
--- a/gcc/c-family/c-opts.c
|
||||
+++ b/gcc/c-family/c-opts.c
|
||||
--- a/gcc/c-family/c-opts.cc
|
||||
+++ b/gcc/c-family/c-opts.cc
|
||||
@@ -1436,8 +1436,8 @@ add_prefixed_path (const char *suffix, incpath_kind chain)
|
||||
size_t prefix_len, suffix_len;
|
||||
|
||||
@@ -216,10 +217,10 @@ index 0c2bba5ea32..313a8de4417 100644
|
||||
{ 0, 0, 0, 0, 0, 0 } \
|
||||
}
|
||||
#endif
|
||||
diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
|
||||
diff --git a/gcc/cppdefault.cc b/gcc/cppdefault.cc
|
||||
index d54d6ce0076..784a92a0c24 100644
|
||||
--- a/gcc/cppdefault.c
|
||||
+++ b/gcc/cppdefault.c
|
||||
--- a/gcc/cppdefault.cc
|
||||
+++ b/gcc/cppdefault.cc
|
||||
@@ -35,6 +35,30 @@
|
||||
# undef CROSS_INCLUDE_DIR
|
||||
#endif
|
||||
@@ -377,10 +378,10 @@ index fd3c655db1c..20669ac427d 100644
|
||||
/* The run-time execution prefix. This is typically the lib/gcc
|
||||
subdirectory of the actual installation. */
|
||||
extern const char *gcc_exec_prefix;
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||
index 8737bae5353..aa6fbe43965 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
--- a/gcc/gcc.cc
|
||||
+++ b/gcc/gcc.cc
|
||||
@@ -252,6 +252,8 @@ FILE *report_times_to_file = NULL;
|
||||
#endif
|
||||
static const char *target_system_root = DEFAULT_TARGET_SYSTEM_ROOT;
|
||||
@@ -437,10 +438,10 @@ index 8737bae5353..aa6fbe43965 100644
|
||||
case 'S':
|
||||
value = do_spec_1 (startfile_spec, 0, NULL);
|
||||
if (value != 0)
|
||||
diff --git a/gcc/incpath.c b/gcc/incpath.c
|
||||
diff --git a/gcc/incpath.cc b/gcc/incpath.cc
|
||||
index fbfc0ce03b8..a82e543428b 100644
|
||||
--- a/gcc/incpath.c
|
||||
+++ b/gcc/incpath.c
|
||||
--- a/gcc/incpath.cc
|
||||
+++ b/gcc/incpath.cc
|
||||
@@ -131,7 +131,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
|
||||
int relocated = cpp_relocated ();
|
||||
size_t len;
|
||||
@@ -484,10 +485,10 @@ index fbfc0ce03b8..a82e543428b 100644
|
||||
NULL);
|
||||
str = update_path (ostr, p->component);
|
||||
free (ostr);
|
||||
diff --git a/gcc/prefix.c b/gcc/prefix.c
|
||||
diff --git a/gcc/prefix.cc b/gcc/prefix.cc
|
||||
index 747c09de638..f728638dc65 100644
|
||||
--- a/gcc/prefix.c
|
||||
+++ b/gcc/prefix.c
|
||||
--- a/gcc/prefix.cc
|
||||
+++ b/gcc/prefix.cc
|
||||
@@ -72,7 +72,9 @@ License along with GCC; see the file COPYING3. If not see
|
||||
#include "prefix.h"
|
||||
#include "common/common-target.h"
|
||||
|
||||
@@ -46,14 +46,15 @@ Upstream-Status: Pending
|
||||
RP 2015/7/31
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
---
|
||||
gcc/gcc.c | 29 ++++++++++++++++++++++++++++-
|
||||
gcc/gcc.cc | 29 ++++++++++++++++++++++++++++-
|
||||
1 file changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||
index aa6fbe43965..f8a71a13826 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
--- a/gcc/gcc.cc
|
||||
+++ b/gcc/gcc.cc
|
||||
@@ -2811,7 +2811,7 @@ for_each_path (const struct path_prefix *paths,
|
||||
if (path == NULL)
|
||||
{
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Subject: [PATCH 4/5] gcc/nios2: Define the musl linker
|
||||
|
||||
Add a definition of the musl linker used on the nios2 platform.
|
||||
|
||||
2021-10-26 Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* config/nios2/linux.h (MUSL_DYNAMIC_LINKER): Add musl linker
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582723.html]
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e5ddbbf992b909d8e38851bd3179d29389e6ac97]
|
||||
---
|
||||
gcc/config/nios2/linux.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: gcc-11.2.0/gcc/config/nios2/linux.h
|
||||
===================================================================
|
||||
--- gcc-11.2.0.orig/gcc/config/nios2/linux.h
|
||||
+++ gcc-11.2.0/gcc/config/nios2/linux.h
|
||||
@@ -30,6 +30,7 @@
|
||||
#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
|
||||
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1"
|
||||
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-nios2.so.1"
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC LINK_SPEC_ENDIAN \
|
||||
@@ -1,26 +0,0 @@
|
||||
From 695adb4dffb23c6f5cbc757e05cf4187a2bd6528 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 4 May 2016 21:11:34 -0700
|
||||
Subject: [PATCH] Link libgcc using LDFLAGS, not just SHLIB_LDFLAGS
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Christopher Larson <chris_larson@mentor.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
libgcc/config/t-slibgcc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libgcc/config/t-slibgcc b/libgcc/config/t-slibgcc
|
||||
index c59b43b7b69..ca4c141f526 100644
|
||||
--- a/libgcc/config/t-slibgcc
|
||||
+++ b/libgcc/config/t-slibgcc
|
||||
@@ -32,7 +32,7 @@ SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
|
||||
SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||
- $(SHLIB_LDFLAGS) \
|
||||
+ $(LDFLAGS) $(SHLIB_LDFLAGS) \
|
||||
-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
|
||||
$(SHLIB_OBJS) $(SHLIB_LC) && \
|
||||
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
|
||||
@@ -1,88 +0,0 @@
|
||||
From a9173429ae256c4b4a3ab4d758a6adf42f8c4239 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 3 Feb 2017 12:56:00 -0800
|
||||
Subject: [PATCH] sync gcc stddef.h with musl
|
||||
|
||||
musl defines ptrdiff_t size_t and wchar_t
|
||||
so dont define them here if musl is definining them
|
||||
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=85a438fc78dd12249ca854a3e5c577fefeb1a5cd]
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
gcc/ginclude/stddef.h | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
|
||||
index 66619fe43b1..3f843d6f365 100644
|
||||
--- a/gcc/ginclude/stddef.h
|
||||
+++ b/gcc/ginclude/stddef.h
|
||||
@@ -128,6 +128,7 @@ _TYPE_wchar_t;
|
||||
#ifndef ___int_ptrdiff_t_h
|
||||
#ifndef _GCC_PTRDIFF_T
|
||||
#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
|
||||
+#ifndef __DEFINED_ptrdiff_t /* musl */
|
||||
#define _PTRDIFF_T
|
||||
#define _T_PTRDIFF_
|
||||
#define _T_PTRDIFF
|
||||
@@ -137,10 +138,12 @@ _TYPE_wchar_t;
|
||||
#define ___int_ptrdiff_t_h
|
||||
#define _GCC_PTRDIFF_T
|
||||
#define _PTRDIFF_T_DECLARED
|
||||
+#define __DEFINED_ptrdiff_t /* musl */
|
||||
#ifndef __PTRDIFF_TYPE__
|
||||
#define __PTRDIFF_TYPE__ long int
|
||||
#endif
|
||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
+#endif /* __DEFINED_ptrdiff_t */
|
||||
#endif /* _PTRDIFF_T_DECLARED */
|
||||
#endif /* _GCC_PTRDIFF_T */
|
||||
#endif /* ___int_ptrdiff_t_h */
|
||||
@@ -178,6 +181,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
#ifndef _GCC_SIZE_T
|
||||
#ifndef _SIZET_
|
||||
#ifndef __size_t
|
||||
+#ifndef __DEFINED_size_t /* musl */
|
||||
#define __size_t__ /* BeOS */
|
||||
#define __SIZE_T__ /* Cray Unicos/Mk */
|
||||
#define _SIZE_T
|
||||
@@ -194,6 +198,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
#define ___int_size_t_h
|
||||
#define _GCC_SIZE_T
|
||||
#define _SIZET_
|
||||
+#define __DEFINED_size_t /* musl */
|
||||
#if defined (__FreeBSD__) \
|
||||
|| defined(__DragonFly__) \
|
||||
|| defined(__FreeBSD_kernel__) \
|
||||
@@ -228,6 +233,7 @@ typedef long ssize_t;
|
||||
#endif /* _SIZE_T */
|
||||
#endif /* __SIZE_T__ */
|
||||
#endif /* __size_t__ */
|
||||
+#endif /* __DEFINED_size_t */
|
||||
#undef __need_size_t
|
||||
#endif /* _STDDEF_H or __need_size_t. */
|
||||
|
||||
@@ -257,6 +263,7 @@ typedef long ssize_t;
|
||||
#ifndef ___int_wchar_t_h
|
||||
#ifndef __INT_WCHAR_T_H
|
||||
#ifndef _GCC_WCHAR_T
|
||||
+#ifndef __DEFINED_wchar_t /* musl */
|
||||
#define __wchar_t__ /* BeOS */
|
||||
#define __WCHAR_T__ /* Cray Unicos/Mk */
|
||||
#define _WCHAR_T
|
||||
@@ -272,6 +279,7 @@ typedef long ssize_t;
|
||||
#define __INT_WCHAR_T_H
|
||||
#define _GCC_WCHAR_T
|
||||
#define _WCHAR_T_DECLARED
|
||||
+#define __DEFINED_wchar_t /* musl */
|
||||
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
||||
@@ -337,6 +345,7 @@ typedef __WCHAR_TYPE__ wchar_t;
|
||||
#endif
|
||||
#endif /* __WCHAR_T__ */
|
||||
#endif /* __wchar_t__ */
|
||||
+#endif /* __DEFINED_wchar_t musl */
|
||||
#undef __need_wchar_t
|
||||
#endif /* _STDDEF_H or __need_wchar_t. */
|
||||
|
||||
@@ -32,16 +32,17 @@ gcc/Changelog:
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
---
|
||||
gcc/config/i386/i386-expand.c | 4 ++--
|
||||
libgcc/config/i386/cpuinfo.c | 6 +++---
|
||||
libgcc/config/i386/t-linux | 2 +-
|
||||
gcc/config/i386/i386-expand.cc | 4 ++--
|
||||
libgcc/config/i386/cpuinfo.c | 6 +++---
|
||||
libgcc/config/i386/t-linux | 2 +-
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
|
||||
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
|
||||
index ac69eed4d32..ffaa44a16fc 100644
|
||||
--- a/gcc/config/i386/i386-expand.c
|
||||
+++ b/gcc/config/i386/i386-expand.c
|
||||
--- a/gcc/config/i386/i386-expand.cc
|
||||
+++ b/gcc/config/i386/i386-expand.cc
|
||||
@@ -11038,10 +11038,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
|
||||
{
|
||||
case IX86_BUILTIN_CPU_INIT:
|
||||
|
||||
@@ -11,16 +11,17 @@ Upstream-Status: Inappropriate [OE Reproducibility specific]
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]
|
||||
---
|
||||
gcc/gengtype.c | 6 +++---
|
||||
gcc/genmodes.c | 32 ++++++++++++++++----------------
|
||||
gcc/gengtype.cc | 6 +++---
|
||||
gcc/genmodes.cc | 32 ++++++++++++++++----------------
|
||||
2 files changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
|
||||
index 5f50242e857..cbaca9b8cd0 100644
|
||||
--- a/gcc/gengtype.c
|
||||
+++ b/gcc/gengtype.c
|
||||
@@ -991,7 +991,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt,
|
||||
diff --git a/gcc/gengtype.cc b/gcc/gengtype.cc
|
||||
index 386ae1b0506..9762e914296 100644
|
||||
--- a/gcc/gengtype.cc
|
||||
+++ b/gcc/gengtype.cc
|
||||
@@ -1006,7 +1006,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt,
|
||||
/* Create a fake field with the given type and name. NEXT is the next
|
||||
field in the chain. */
|
||||
#define create_field(next,type,name) \
|
||||
@@ -29,7 +30,7 @@ index 5f50242e857..cbaca9b8cd0 100644
|
||||
|
||||
/* Like create_field, but the field is only valid when condition COND
|
||||
is true. */
|
||||
@@ -1024,7 +1024,7 @@ create_optional_field_ (pair_p next, type_p type, const char *name,
|
||||
@@ -1039,7 +1039,7 @@ create_optional_field_ (pair_p next, type_p type, const char *name,
|
||||
}
|
||||
|
||||
#define create_optional_field(next,type,name,cond) \
|
||||
@@ -38,7 +39,7 @@ index 5f50242e857..cbaca9b8cd0 100644
|
||||
|
||||
/* Reverse a linked list of 'struct pair's in place. */
|
||||
pair_p
|
||||
@@ -5189,7 +5189,7 @@ main (int argc, char **argv)
|
||||
@@ -5238,7 +5238,7 @@ main (int argc, char **argv)
|
||||
/* These types are set up with #define or else outside of where
|
||||
we can see them. We should initialize them before calling
|
||||
read_input_list. */
|
||||
@@ -47,11 +48,11 @@ index 5f50242e857..cbaca9b8cd0 100644
|
||||
Call;} while (0)
|
||||
POS_HERE (do_scalar_typedef ("CUMULATIVE_ARGS", &pos));
|
||||
POS_HERE (do_scalar_typedef ("REAL_VALUE_TYPE", &pos));
|
||||
diff --git a/gcc/genmodes.c b/gcc/genmodes.c
|
||||
index c268ebc4c6e..4361f3f1563 100644
|
||||
--- a/gcc/genmodes.c
|
||||
+++ b/gcc/genmodes.c
|
||||
@@ -438,7 +438,7 @@ complete_all_modes (void)
|
||||
diff --git a/gcc/genmodes.cc b/gcc/genmodes.cc
|
||||
index 59850bb070a..e187f8542a1 100644
|
||||
--- a/gcc/genmodes.cc
|
||||
+++ b/gcc/genmodes.cc
|
||||
@@ -440,7 +440,7 @@ complete_all_modes (void)
|
||||
}
|
||||
|
||||
/* For each mode in class CLASS, construct a corresponding complex mode. */
|
||||
@@ -60,7 +61,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
static void
|
||||
make_complex_modes (enum mode_class cl,
|
||||
const char *file, unsigned int line)
|
||||
@@ -497,7 +497,7 @@ make_complex_modes (enum mode_class cl,
|
||||
@@ -499,7 +499,7 @@ make_complex_modes (enum mode_class cl,
|
||||
having as many components as necessary. ORDER is the sorting order
|
||||
of the mode, with smaller numbers indicating a higher priority. */
|
||||
#define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W, ORDER) \
|
||||
@@ -69,16 +70,16 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
#define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W, 0)
|
||||
static void ATTRIBUTE_UNUSED
|
||||
make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
|
||||
@@ -549,7 +549,7 @@ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
|
||||
/* Create a vector of booleans called NAME with COUNT elements and
|
||||
@@ -552,7 +552,7 @@ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
|
||||
BYTESIZE bytes in total. */
|
||||
#define VECTOR_BOOL_MODE(NAME, COUNT, BYTESIZE) \
|
||||
- make_vector_bool_mode (#NAME, COUNT, BYTESIZE, __FILE__, __LINE__)
|
||||
+ make_vector_bool_mode (#NAME, COUNT, BYTESIZE, __FILE__, 0)
|
||||
#define VECTOR_BOOL_MODE(NAME, COUNT, COMPONENT, BYTESIZE) \
|
||||
make_vector_bool_mode (#NAME, COUNT, #COMPONENT, BYTESIZE, \
|
||||
- __FILE__, __LINE__)
|
||||
+ __FILE__, 0)
|
||||
static void ATTRIBUTE_UNUSED
|
||||
make_vector_bool_mode (const char *name, unsigned int count,
|
||||
unsigned int bytesize, const char *file,
|
||||
@@ -571,7 +571,7 @@ make_vector_bool_mode (const char *name, unsigned int count,
|
||||
const char *component, unsigned int bytesize,
|
||||
@@ -574,7 +574,7 @@ make_vector_bool_mode (const char *name, unsigned int count,
|
||||
/* Input. */
|
||||
|
||||
#define _SPECIAL_MODE(C, N) \
|
||||
@@ -87,7 +88,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
#define RANDOM_MODE(N) _SPECIAL_MODE (RANDOM, N)
|
||||
#define CC_MODE(N) _SPECIAL_MODE (CC, N)
|
||||
|
||||
@@ -584,7 +584,7 @@ make_special_mode (enum mode_class cl, const char *name,
|
||||
@@ -587,7 +587,7 @@ make_special_mode (enum mode_class cl, const char *name,
|
||||
|
||||
#define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1U, Y)
|
||||
#define FRACTIONAL_INT_MODE(N, B, Y) \
|
||||
@@ -96,7 +97,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
|
||||
static void
|
||||
make_int_mode (const char *name,
|
||||
@@ -611,16 +611,16 @@ make_opaque_mode (const char *name,
|
||||
@@ -628,16 +628,16 @@ make_opaque_mode (const char *name,
|
||||
}
|
||||
|
||||
#define FRACT_MODE(N, Y, F) \
|
||||
@@ -117,7 +118,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
|
||||
/* Create a fixed-point mode by setting CL, NAME, BYTESIZE, IBIT, FBIT,
|
||||
FILE, and LINE. */
|
||||
@@ -641,7 +641,7 @@ make_fixed_point_mode (enum mode_class cl,
|
||||
@@ -658,7 +658,7 @@ make_fixed_point_mode (enum mode_class cl,
|
||||
|
||||
#define FLOAT_MODE(N, Y, F) FRACTIONAL_FLOAT_MODE (N, -1U, Y, F)
|
||||
#define FRACTIONAL_FLOAT_MODE(N, B, Y, F) \
|
||||
@@ -126,7 +127,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
|
||||
static void
|
||||
make_float_mode (const char *name,
|
||||
@@ -658,7 +658,7 @@ make_float_mode (const char *name,
|
||||
@@ -675,7 +675,7 @@ make_float_mode (const char *name,
|
||||
#define DECIMAL_FLOAT_MODE(N, Y, F) \
|
||||
FRACTIONAL_DECIMAL_FLOAT_MODE (N, -1U, Y, F)
|
||||
#define FRACTIONAL_DECIMAL_FLOAT_MODE(N, B, Y, F) \
|
||||
@@ -135,7 +136,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
|
||||
static void
|
||||
make_decimal_float_mode (const char *name,
|
||||
@@ -673,7 +673,7 @@ make_decimal_float_mode (const char *name,
|
||||
@@ -690,7 +690,7 @@ make_decimal_float_mode (const char *name,
|
||||
}
|
||||
|
||||
#define RESET_FLOAT_FORMAT(N, F) \
|
||||
@@ -144,7 +145,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
static void ATTRIBUTE_UNUSED
|
||||
reset_float_format (const char *name, const char *format,
|
||||
const char *file, unsigned int line)
|
||||
@@ -694,7 +694,7 @@ reset_float_format (const char *name, const char *format,
|
||||
@@ -711,7 +711,7 @@ reset_float_format (const char *name, const char *format,
|
||||
|
||||
/* __intN support. */
|
||||
#define INT_N(M,PREC) \
|
||||
@@ -153,7 +154,7 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
static void ATTRIBUTE_UNUSED
|
||||
make_int_n (const char *m, int bitsize,
|
||||
const char *file, unsigned int line)
|
||||
@@ -723,7 +723,7 @@ make_int_n (const char *m, int bitsize,
|
||||
@@ -740,7 +740,7 @@ make_int_n (const char *m, int bitsize,
|
||||
/* Partial integer modes are specified by relation to a full integer
|
||||
mode. */
|
||||
#define PARTIAL_INT_MODE(M,PREC,NAME) \
|
||||
@@ -162,16 +163,16 @@ index c268ebc4c6e..4361f3f1563 100644
|
||||
static void ATTRIBUTE_UNUSED
|
||||
make_partial_integer_mode (const char *base, const char *name,
|
||||
unsigned int precision,
|
||||
@@ -750,7 +750,7 @@ make_partial_integer_mode (const char *base, const char *name,
|
||||
@@ -767,7 +767,7 @@ make_partial_integer_mode (const char *base, const char *name,
|
||||
/* A single vector mode can be specified by naming its component
|
||||
mode and the number of components. */
|
||||
#define VECTOR_MODE(C, M, N) \
|
||||
- make_vector_mode (MODE_##C, #M, N, __FILE__, __LINE__);
|
||||
+ make_vector_mode (MODE_##C, #M, N, __FILE__, 0);
|
||||
#define VECTOR_MODE_WITH_PREFIX(PREFIX, C, M, N, ORDER) \
|
||||
- make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, __LINE__);
|
||||
+ make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, 0);
|
||||
#define VECTOR_MODE(C, M, N) VECTOR_MODE_WITH_PREFIX(V, C, M, N, 0);
|
||||
static void ATTRIBUTE_UNUSED
|
||||
make_vector_mode (enum mode_class bclass,
|
||||
const char *base,
|
||||
@@ -793,7 +793,7 @@ make_vector_mode (enum mode_class bclass,
|
||||
@@ -814,7 +814,7 @@ make_vector_mode (enum mode_class bclass,
|
||||
|
||||
/* Adjustability. */
|
||||
#define _ADD_ADJUST(A, M, X, C1, C2) \
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
From 7cc2df084b7977653a9b59cbc34a9ad500ae619c Mon Sep 17 00:00:00 2001
|
||||
From: Richard Biener <rguenther@suse.de>
|
||||
Date: Tue, 20 Jul 2021 11:00:33 +0200
|
||||
Subject: [PATCH] debug/101473 - apply debug prefix maps before checksumming DIEs
|
||||
|
||||
The following makes sure to apply the debug prefix maps to filenames
|
||||
before checksumming DIEs to create the global symbol for the CU DIE
|
||||
used by LTO to link the late debug to the early debug. This avoids
|
||||
binary differences (in said symbol) when compiling with toolchains
|
||||
installed under a different path and that compensated with appropriate
|
||||
-fdebug-prefix-map options.
|
||||
|
||||
The easiest and most scalable way is to record both the unmapped
|
||||
and the remapped filename in the dwarf_file_data so the remapping
|
||||
process takes place at a single point and only once (otherwise it
|
||||
creates GC garbage at each point doing that).
|
||||
|
||||
2021-07-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/101473
|
||||
* dwarf2out.h (dwarf_file_data): Add key member.
|
||||
* dwarf2out.c (dwarf_file_hasher::equal): Compare key.
|
||||
(dwarf_file_hasher::hash): Hash key.
|
||||
(lookup_filename): Remap the filename and store it in the
|
||||
filename member of dwarf_file_data when creating a new
|
||||
dwarf_file_data.
|
||||
(file_name_acquire): Do not remap the filename again.
|
||||
(maybe_emit_file): Likewise.
|
||||
|
||||
[YOCTO #14481]
|
||||
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=7cc2df084b7977653a9b59cbc34a9ad500ae619c]
|
||||
|
||||
The upstream patch was modified to compensate for the definition of
|
||||
"struct dwarf_file_data" being in dwarf2out.c rather than dwarf2out.h in
|
||||
this version of gcc.
|
||||
|
||||
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
|
||||
---
|
||||
diff -urpN a/gcc/dwarf2out.c b/gcc/dwarf2out.c
|
||||
--- a/gcc/dwarf2out.c 2021-04-27 06:00:13.000000000 -0400
|
||||
+++ b/gcc/dwarf2out.c 2021-07-23 16:40:06.141886167 -0400
|
||||
@@ -1283,6 +1283,7 @@ dwarf2out_switch_text_section (void)
|
||||
|
||||
/* Data about a single source file. */
|
||||
struct GTY((for_user)) dwarf_file_data {
|
||||
+ const char * key;
|
||||
const char * filename;
|
||||
int emitted_number;
|
||||
};
|
||||
@@ -12334,7 +12335,7 @@ file_name_acquire (dwarf_file_data **slo
|
||||
|
||||
fi = fnad->files + fnad->used_files++;
|
||||
|
||||
- f = remap_debug_filename (d->filename);
|
||||
+ f = d->filename;
|
||||
|
||||
/* Skip all leading "./". */
|
||||
while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
|
||||
@@ -27231,13 +27232,13 @@ dwarf2out_ignore_block (const_tree block
|
||||
bool
|
||||
dwarf_file_hasher::equal (dwarf_file_data *p1, const char *p2)
|
||||
{
|
||||
- return filename_cmp (p1->filename, p2) == 0;
|
||||
+ return filename_cmp (p1->key, p2) == 0;
|
||||
}
|
||||
|
||||
hashval_t
|
||||
dwarf_file_hasher::hash (dwarf_file_data *p)
|
||||
{
|
||||
- return htab_hash_string (p->filename);
|
||||
+ return htab_hash_string (p->key);
|
||||
}
|
||||
|
||||
/* Lookup FILE_NAME (in the list of filenames that we know about here in
|
||||
@@ -27267,7 +27268,8 @@ lookup_filename (const char *file_name)
|
||||
return *slot;
|
||||
|
||||
created = ggc_alloc<dwarf_file_data> ();
|
||||
- created->filename = file_name;
|
||||
+ created->key = file_name;
|
||||
+ created->filename = remap_debug_filename (file_name);
|
||||
created->emitted_number = 0;
|
||||
*slot = created;
|
||||
return created;
|
||||
@@ -27293,8 +27295,7 @@ maybe_emit_file (struct dwarf_file_data
|
||||
if (output_asm_line_debug_info ())
|
||||
{
|
||||
fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
|
||||
- output_quoted_string (asm_out_file,
|
||||
- remap_debug_filename (fd->filename));
|
||||
+ output_quoted_string (asm_out_file, fd->filename);
|
||||
fputc ('\n', asm_out_file);
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
The patch is needed in order to support recent glibc (2.34).
|
||||
|
||||
Upstream-Status: Backport [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=91f8a7a34cf29ae7c465603a801326767f1cc7e9]
|
||||
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
---
|
||||
--- a/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp 2022-03-15 07:59:54.515325204 -0700
|
||||
+++ b/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp 2022-03-15 08:01:45.919405931 -0700
|
||||
@@ -166,9 +166,10 @@
|
||||
#if !SANITIZER_GO
|
||||
// TODO(glider): different tools may require different altstack size.
|
||||
static uptr GetAltStackSize() {
|
||||
- // SIGSTKSZ is not enough.
|
||||
- static const uptr kAltStackSize = SIGSTKSZ * 4;
|
||||
- return kAltStackSize;
|
||||
+ // Note: since GLIBC_2.31, SIGSTKSZ may be a function call, so this may be
|
||||
+ // more costly that you think. However GetAltStackSize is only call 2-3 times
|
||||
+ // per thread so don't cache the evaluation.
|
||||
+ return SIGSTKSZ * 4;
|
||||
}
|
||||
|
||||
void SetAlternateSignalStack() {
|
||||
Reference in New Issue
Block a user