* [PATCH 1/5] include/hw/dma/xlnx_dpdma: Remove dependency on console.h
2025-05-08 14:41 [PATCH RESEND 0/5] Fix dependencies in arm machines and update OpenBSD to 7.7 Thomas Huth
@ 2025-05-08 14:41 ` Thomas Huth
2025-05-08 15:39 ` Philippe Mathieu-Daudé
2025-05-08 14:41 ` [PATCH 2/5] hw/display/bcm2835_fb: Move inclusion of console.h to the .c file Thomas Huth
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2025-05-08 14:41 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
From: Thomas Huth <thuth@redhat.com>
console.h brings a dependency on the <epoxy/opengl.h> and the pixman
header file (if available), so we should avoid to include this file
if it is not really necessary (otherwise we have to specify the
dependency in the meson.build file, too, to get the right include
paths everywhere). console.h does not seem to be necessary for the
xlnx_dpdma code, so drop the include here.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
include/hw/dma/xlnx_dpdma.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/include/hw/dma/xlnx_dpdma.h b/include/hw/dma/xlnx_dpdma.h
index 1ec0d265be2..484b2e377f0 100644
--- a/include/hw/dma/xlnx_dpdma.h
+++ b/include/hw/dma/xlnx_dpdma.h
@@ -26,7 +26,6 @@
#define XLNX_DPDMA_H
#include "hw/sysbus.h"
-#include "ui/console.h"
#include "system/dma.h"
#include "qom/object.h"
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 1/5] include/hw/dma/xlnx_dpdma: Remove dependency on console.h
2025-05-08 14:41 ` [PATCH 1/5] include/hw/dma/xlnx_dpdma: Remove dependency on console.h Thomas Huth
@ 2025-05-08 15:39 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-05-08 15:39 UTC (permalink / raw)
To: Thomas Huth, Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
On 8/5/25 16:41, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> console.h brings a dependency on the <epoxy/opengl.h> and the pixman
> header file (if available), so we should avoid to include this file
> if it is not really necessary (otherwise we have to specify the
> dependency in the meson.build file, too, to get the right include
> paths everywhere). console.h does not seem to be necessary for the
> xlnx_dpdma code, so drop the include here.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> include/hw/dma/xlnx_dpdma.h | 1 -
> 1 file changed, 1 deletion(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/5] hw/display/bcm2835_fb: Move inclusion of console.h to the .c file
2025-05-08 14:41 [PATCH RESEND 0/5] Fix dependencies in arm machines and update OpenBSD to 7.7 Thomas Huth
2025-05-08 14:41 ` [PATCH 1/5] include/hw/dma/xlnx_dpdma: Remove dependency on console.h Thomas Huth
@ 2025-05-08 14:41 ` Thomas Huth
2025-05-08 18:24 ` Daniel P. Berrangé
2025-05-08 14:41 ` [RFC PATCH 3/5] hw/arm: Compile musicpal and the xlnx machines with the right CFLAGS Thomas Huth
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2025-05-08 14:41 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
From: Thomas Huth <thuth@redhat.com>
The definitions from console.h are not needed in the bcm2835_fb.h
header file yet, so let's move it to the place that really needs
its definitions, i.e. into the bcm2835_fb.c file.
This way the header can also be used by code that is not compiled
with the CFLAGS that are required for pixman or OpenGL (in case
their headers do not reside under /usr/include).
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
include/hw/display/bcm2835_fb.h | 1 -
hw/display/bcm2835_fb.c | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h
index 49541bf08f4..acc9230b6a8 100644
--- a/include/hw/display/bcm2835_fb.h
+++ b/include/hw/display/bcm2835_fb.h
@@ -13,7 +13,6 @@
#define BCM2835_FB_H
#include "hw/sysbus.h"
-#include "ui/console.h"
#include "qom/object.h"
#define UPPER_RAM_BASE 0x40000000
diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c
index 820e67ac8bb..1bb2ee45a01 100644
--- a/hw/display/bcm2835_fb.c
+++ b/hw/display/bcm2835_fb.c
@@ -27,6 +27,7 @@
#include "hw/display/bcm2835_fb.h"
#include "hw/hw.h"
#include "hw/irq.h"
+#include "ui/console.h"
#include "framebuffer.h"
#include "ui/pixel_ops.h"
#include "hw/misc/bcm2835_mbox_defs.h"
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 2/5] hw/display/bcm2835_fb: Move inclusion of console.h to the .c file
2025-05-08 14:41 ` [PATCH 2/5] hw/display/bcm2835_fb: Move inclusion of console.h to the .c file Thomas Huth
@ 2025-05-08 18:24 ` Daniel P. Berrangé
0 siblings, 0 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2025-05-08 18:24 UTC (permalink / raw)
To: Thomas Huth
Cc: Peter Maydell, qemu-arm, Brad Smith, qemu-devel, Warner Losh,
Paolo Bonzini, Marc-André Lureau
On Thu, May 08, 2025 at 04:41:17PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> The definitions from console.h are not needed in the bcm2835_fb.h
> header file yet, so let's move it to the place that really needs
> its definitions, i.e. into the bcm2835_fb.c file.
> This way the header can also be used by code that is not compiled
> with the CFLAGS that are required for pixman or OpenGL (in case
> their headers do not reside under /usr/include).
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> include/hw/display/bcm2835_fb.h | 1 -
> hw/display/bcm2835_fb.c | 1 +
> 2 files changed, 1 insertion(+), 1 deletion(-)
It references the QemuConsole type, but we get that from typedefs.h
not console.h so
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 11+ messages in thread
* [RFC PATCH 3/5] hw/arm: Compile musicpal and the xlnx machines with the right CFLAGS
2025-05-08 14:41 [PATCH RESEND 0/5] Fix dependencies in arm machines and update OpenBSD to 7.7 Thomas Huth
2025-05-08 14:41 ` [PATCH 1/5] include/hw/dma/xlnx_dpdma: Remove dependency on console.h Thomas Huth
2025-05-08 14:41 ` [PATCH 2/5] hw/display/bcm2835_fb: Move inclusion of console.h to the .c file Thomas Huth
@ 2025-05-08 14:41 ` Thomas Huth
2025-05-08 14:41 ` [PATCH 4/5] tests/vm: Update OpenBSD to 7.7 Thomas Huth
2025-05-08 14:41 ` [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD" Thomas Huth
4 siblings, 0 replies; 11+ messages in thread
From: Thomas Huth @ 2025-05-08 14:41 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
From: Thomas Huth <thuth@redhat.com>
These machines include ui/console.h, which in turn includes the
pixman headers and <epoxy/gl.h> via ui/surface.h. If these library
headers are located outside of /usr/include (like gl.h on OpenBSD 7.7),
we must make sure to compile this code with the right CFLAGS so that
the headers can be found.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
Note: Paolo had a better suggestion here:
https://lists.libreplanet.org/archive/html/qemu-arm/2025-05/msg00571.html
hw/arm/meson.build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/arm/meson.build b/hw/arm/meson.build
index 5098795f61d..51d0c055abf 100644
--- a/hw/arm/meson.build
+++ b/hw/arm/meson.build
@@ -8,7 +8,7 @@ arm_common_ss.add(when: 'CONFIG_HIGHBANK', if_true: files('highbank.c'))
arm_common_ss.add(when: 'CONFIG_INTEGRATOR', if_true: files('integratorcp.c'))
arm_common_ss.add(when: 'CONFIG_MICROBIT', if_true: files('microbit.c'))
arm_common_ss.add(when: 'CONFIG_MPS3R', if_true: files('mps3r.c'))
-arm_common_ss.add(when: 'CONFIG_MUSICPAL', if_true: [pixman, files('musicpal.c')])
+arm_common_ss.add(when: 'CONFIG_MUSICPAL', if_true: [files('musicpal.c'), pixman, opengl])
arm_common_ss.add(when: 'CONFIG_NETDUINOPLUS2', if_true: files('netduinoplus2.c'))
arm_common_ss.add(when: 'CONFIG_OLIMEX_STM32_H405', if_true: files('olimex-stm32-h405.c'))
arm_common_ss.add(when: 'CONFIG_NPCM7XX', if_true: files('npcm7xx.c', 'npcm7xx_boards.c'))
@@ -34,7 +34,7 @@ arm_common_ss.add(when: 'CONFIG_STM32F205_SOC', if_true: files('stm32f205_soc.c'
arm_common_ss.add(when: 'CONFIG_STM32F405_SOC', if_true: files('stm32f405_soc.c'))
arm_common_ss.add(when: 'CONFIG_B_L475E_IOT01A', if_true: files('b-l475e-iot01a.c'))
arm_common_ss.add(when: 'CONFIG_STM32L4X5_SOC', if_true: files('stm32l4x5_soc.c'))
-arm_common_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp.c', 'xlnx-zcu102.c'))
+arm_common_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: [files('xlnx-zynqmp.c', 'xlnx-zcu102.c'), pixman, opengl])
arm_common_ss.add(when: 'CONFIG_XLNX_VERSAL', if_true: files('xlnx-versal.c', 'xlnx-versal-virt.c'))
arm_common_ss.add(when: 'CONFIG_FSL_IMX25', if_true: files('fsl-imx25.c', 'imx25_pdk.c'))
arm_common_ss.add(when: 'CONFIG_FSL_IMX31', if_true: files('fsl-imx31.c', 'kzm.c'))
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 4/5] tests/vm: Update OpenBSD to 7.7
2025-05-08 14:41 [PATCH RESEND 0/5] Fix dependencies in arm machines and update OpenBSD to 7.7 Thomas Huth
` (2 preceding siblings ...)
2025-05-08 14:41 ` [RFC PATCH 3/5] hw/arm: Compile musicpal and the xlnx machines with the right CFLAGS Thomas Huth
@ 2025-05-08 14:41 ` Thomas Huth
2025-05-08 18:25 ` Daniel P. Berrangé
2025-05-08 14:41 ` [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD" Thomas Huth
4 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2025-05-08 14:41 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
From: Thomas Huth <thuth@redhat.com>
OpenBSD 7.7 has been released at the end of April 2025, so let's
update to that version.
Reported-by: Brad Smith <brad@comstyle.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/vm/openbsd | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 5e4f76f3988..2ea86a01bad 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -22,8 +22,8 @@ class OpenBSDVM(basevm.BaseVM):
name = "openbsd"
arch = "x86_64"
- link = "https://cdn.openbsd.org/pub/OpenBSD/7.6/amd64/install76.iso"
- csum = "60cba8cb391b50bba8fa10fc768bd0529636f5345d82133c93e22c798d8e5269"
+ link = "https://cdn.openbsd.org/pub/OpenBSD/7.7/amd64/install77.iso"
+ csum = "da0106e39463f015524dca806f407c37a9bdd17e6dfffe533b06a2dd2edd8a27"
size = "20G"
pkgs = [
# tools
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 4/5] tests/vm: Update OpenBSD to 7.7
2025-05-08 14:41 ` [PATCH 4/5] tests/vm: Update OpenBSD to 7.7 Thomas Huth
@ 2025-05-08 18:25 ` Daniel P. Berrangé
0 siblings, 0 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2025-05-08 18:25 UTC (permalink / raw)
To: Thomas Huth
Cc: Peter Maydell, qemu-arm, Brad Smith, qemu-devel, Warner Losh,
Paolo Bonzini, Marc-André Lureau
On Thu, May 08, 2025 at 04:41:19PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> OpenBSD 7.7 has been released at the end of April 2025, so let's
> update to that version.
>
> Reported-by: Brad Smith <brad@comstyle.com>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> tests/vm/openbsd | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 11+ messages in thread
* [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD"
2025-05-08 14:41 [PATCH RESEND 0/5] Fix dependencies in arm machines and update OpenBSD to 7.7 Thomas Huth
` (3 preceding siblings ...)
2025-05-08 14:41 ` [PATCH 4/5] tests/vm: Update OpenBSD to 7.7 Thomas Huth
@ 2025-05-08 14:41 ` Thomas Huth
2025-05-08 18:26 ` Daniel P. Berrangé
4 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2025-05-08 14:41 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, Brad Smith, qemu-devel
Cc: Warner Losh, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé
From: Thomas Huth <thuth@redhat.com>
This reverts commit 2d6d995709482cc8b6a76dbb5334a28001a14a9a.
OpenBSD 7.7 fixed the problem with the -fzero-call-used-regs on OpenBSD,
see https://github.com/openbsd/src/commit/03eca72d1e030b7a542cd6aec1 for
the fix there.
Suggested-by: Brad Smith <brad@comstyle.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
Note: Marked as RFC since we likely can include this only once OpenBSD
7.6 goes out of service, see:
https://lists.libreplanet.org/archive/html/qemu-arm/2025-05/msg00559.html
meson.build | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/meson.build b/meson.build
index 6c61e1dcaec..5f0e6a65cb0 100644
--- a/meson.build
+++ b/meson.build
@@ -699,11 +699,7 @@ hardening_flags = [
#
# NB: Clang 17 is broken and SEGVs
# https://github.com/llvm/llvm-project/issues/75168
-#
-# NB2: This clashes with the "retguard" extension of OpenBSD's Clang
-# https://gitlab.com/qemu-project/qemu/-/issues/2278
-if host_os != 'openbsd' and \
- cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
+if cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
name: '-fzero-call-used-regs=used-gpr',
args: ['-O2', '-fzero-call-used-regs=used-gpr'])
hardening_flags += '-fzero-call-used-regs=used-gpr'
--
2.49.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD"
2025-05-08 14:41 ` [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD" Thomas Huth
@ 2025-05-08 18:26 ` Daniel P. Berrangé
2025-09-09 7:30 ` Thomas Huth
0 siblings, 1 reply; 11+ messages in thread
From: Daniel P. Berrangé @ 2025-05-08 18:26 UTC (permalink / raw)
To: Thomas Huth
Cc: Peter Maydell, qemu-arm, Brad Smith, qemu-devel, Warner Losh,
Paolo Bonzini, Marc-André Lureau
On Thu, May 08, 2025 at 04:41:20PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> This reverts commit 2d6d995709482cc8b6a76dbb5334a28001a14a9a.
>
> OpenBSD 7.7 fixed the problem with the -fzero-call-used-regs on OpenBSD,
> see https://github.com/openbsd/src/commit/03eca72d1e030b7a542cd6aec1 for
> the fix there.
>
> Suggested-by: Brad Smith <brad@comstyle.com>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> Note: Marked as RFC since we likely can include this only once OpenBSD
> 7.6 goes out of service, see:
> https://lists.libreplanet.org/archive/html/qemu-arm/2025-05/msg00559.html
Yep, we have to wait a bit longer, unless someone can confirm the
fix was backported to 7.6
>
> meson.build | 6 +-----
> 1 file changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 6c61e1dcaec..5f0e6a65cb0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -699,11 +699,7 @@ hardening_flags = [
> #
> # NB: Clang 17 is broken and SEGVs
> # https://github.com/llvm/llvm-project/issues/75168
> -#
> -# NB2: This clashes with the "retguard" extension of OpenBSD's Clang
> -# https://gitlab.com/qemu-project/qemu/-/issues/2278
> -if host_os != 'openbsd' and \
> - cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
> +if cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
> name: '-fzero-call-used-regs=used-gpr',
> args: ['-O2', '-fzero-call-used-regs=used-gpr'])
> hardening_flags += '-fzero-call-used-regs=used-gpr'
> --
> 2.49.0
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [RFC PATCH 5/5] Revert "meson.build: Disable -fzero-call-used-regs on OpenBSD"
2025-05-08 18:26 ` Daniel P. Berrangé
@ 2025-09-09 7:30 ` Thomas Huth
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Huth @ 2025-09-09 7:30 UTC (permalink / raw)
To: Daniel P. Berrangé
Cc: Peter Maydell, qemu-arm, Brad Smith, qemu-devel, Warner Losh,
Paolo Bonzini, Marc-André Lureau
On 08/05/2025 20.26, Daniel P. Berrangé wrote:
> On Thu, May 08, 2025 at 04:41:20PM +0200, Thomas Huth wrote:
>> From: Thomas Huth <thuth@redhat.com>
>>
>> This reverts commit 2d6d995709482cc8b6a76dbb5334a28001a14a9a.
>>
>> OpenBSD 7.7 fixed the problem with the -fzero-call-used-regs on OpenBSD,
>> see https://github.com/openbsd/src/commit/03eca72d1e030b7a542cd6aec1 for
>> the fix there.
>>
>> Suggested-by: Brad Smith <brad@comstyle.com>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>> Note: Marked as RFC since we likely can include this only once OpenBSD
>> 7.6 goes out of service, see:
>> https://lists.libreplanet.org/archive/html/qemu-arm/2025-05/msg00559.html
>
> Yep, we have to wait a bit longer, unless someone can confirm the
> fix was backported to 7.6
Now that QEMU 10.1 has been released, I'm going to include this patch in my
next pull request. OpenBSD 7.8 should get released in October, so 7.6 will
go out of service at that point in time, and our next QEMU release is likely
in December, so we should be fine. Or has anybody still concerns about
including this now?
Thomas
>>
>> meson.build | 6 +-----
>> 1 file changed, 1 insertion(+), 5 deletions(-)
>>
>> diff --git a/meson.build b/meson.build
>> index 6c61e1dcaec..5f0e6a65cb0 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -699,11 +699,7 @@ hardening_flags = [
>> #
>> # NB: Clang 17 is broken and SEGVs
>> # https://github.com/llvm/llvm-project/issues/75168
>> -#
>> -# NB2: This clashes with the "retguard" extension of OpenBSD's Clang
>> -# https://gitlab.com/qemu-project/qemu/-/issues/2278
>> -if host_os != 'openbsd' and \
>> - cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
>> +if cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }',
>> name: '-fzero-call-used-regs=used-gpr',
>> args: ['-O2', '-fzero-call-used-regs=used-gpr'])
>> hardening_flags += '-fzero-call-used-regs=used-gpr'
>> --
>> 2.49.0
>>
>
> With regards,
> Daniel
^ permalink raw reply [flat|nested] 11+ messages in thread