Module Name: src
Committed By: mrg
Date: Mon Sep 4 20:58:52 UTC 2023
Modified Files:
src/sys/arch/amd64/include: cpu.h
src/sys/arch/i386/include: cpu.h
Log Message:
x86: avoid annoying GCC 12 bounds check in curcpu() and curlwp().
these functions read %gs and return an pointer at an offset from this
value (the current cpu, or lwp pointers), and GCC is complaining that
they're accessing a array cpu_info[0] (ie, zero length, no storage.)
several attempts to workaround it have failed, and because of the
asm volatile nature of this, it seems very unlikely a compiler would
take this and do something wrong with it.
To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 src/sys/arch/amd64/include/cpu.h
cvs rdiff -u -r1.184 -r1.185 src/sys/arch/i386/include/cpu.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/include/cpu.h
diff -u src/sys/arch/amd64/include/cpu.h:1.71 src/sys/arch/amd64/include/cpu.h:1.72
--- src/sys/arch/amd64/include/cpu.h:1.71 Sun Apr 9 08:17:56 2023
+++ src/sys/arch/amd64/include/cpu.h Mon Sep 4 20:58:52 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.71 2023/04/09 08:17:56 riastradh Exp $ */
+/* $NetBSD: cpu.h,v 1.72 2023/09/04 20:58:52 mrg Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -48,6 +48,14 @@
static struct cpu_info *x86_curcpu(void);
static lwp_t *x86_curlwp(void);
+/*
+ * XXXGCC12 has:
+ * ./machine/cpu.h:57:9: error: array subscript 0 is outside array bounds of 'struct cpu_info * const[0]' [-Werror=array-bounds]
+ * 56 | __asm("movq %%gs:%1, %0" :
+ */
+#pragma GCC push_options
+#pragma GCC diagnostic ignored "-Warray-bounds"
+
__inline __always_inline static struct cpu_info * __unused __nomsan
x86_curcpu(void)
{
@@ -72,6 +80,8 @@ x86_curlwp(void)
return l;
}
+#pragma GCC pop_options
+
#endif /* __GNUC__ && !_MODULE */
#ifdef XENPV
Index: src/sys/arch/i386/include/cpu.h
diff -u src/sys/arch/i386/include/cpu.h:1.184 src/sys/arch/i386/include/cpu.h:1.185
--- src/sys/arch/i386/include/cpu.h:1.184 Sun Apr 9 08:18:03 2023
+++ src/sys/arch/i386/include/cpu.h Mon Sep 4 20:58:52 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.184 2023/04/09 08:18:03 riastradh Exp $ */
+/* $NetBSD: cpu.h,v 1.185 2023/09/04 20:58:52 mrg Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -45,6 +45,14 @@
static struct cpu_info *x86_curcpu(void);
static lwp_t *x86_curlwp(void);
+/*
+ * XXXGCC12 has:
+ * ./machine/cpu.h:57:9: error: array subscript 0 is outside array bounds of 'struct cpu_info * const[0]' [-Werror=array-bounds]
+ * 56 | __asm("movq %%gs:%1, %0" :
+ */
+#pragma GCC push_options
+#pragma GCC diagnostic ignored "-Warray-bounds"
+
__inline __always_inline static struct cpu_info * __unused
x86_curcpu(void)
{
@@ -68,7 +76,10 @@ x86_curlwp(void)
(*(struct cpu_info * const *)offsetof(struct cpu_info, ci_curlwp)));
return l;
}
-#endif
+
+#pragma GCC pop_options
+
+#endif /* __GNUC__ && !_MODULE */
#ifdef XENPV
#define CLKF_USERMODE(frame) (curcpu()->ci_xen_clockf_usermode)