You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
|
2
|
3
|
4
(2) |
|
5
|
6
|
7
|
8
(7) |
9
|
10
|
11
(1) |
|
12
(4) |
13
|
14
|
15
|
16
|
17
(12) |
18
|
|
19
|
20
|
21
|
22
|
23
(3) |
24
(1) |
25
|
|
26
(1) |
27
(17) |
28
(1) |
29
|
30
(2) |
|
|
|
From: Paul F. <pj...@wa...> - 2020-04-27 20:09:33
|
Hi I’ve just debugged a problem with the aux vector and the dynamic linker. Is there any clean way to copy or duplicate an aux vector entry that points to an array of 2 or 3 ints? [initimg / setup_client_stack] I’ve tried just copying the pointer and duplicating via VG_(malloc), but these result in ‘Invalid reads’. ATM that’s the lesser of the two evils, but I’d like to find something cleaner. A+ Paul |
|
From: Philippe W. <phi...@sk...> - 2020-04-27 19:08:40
|
Hello Ross,
Yes, valgrind development is an evening, night
or (mostly) week-end activity.
There is not a lot of development effort available,
and so patches are not often worked on immediately.
Storing them in bugzilla helps to keep track of them.
Thanks again for your work
Philippe
On Mon, 2020-04-27 at 11:04 -0700, Ross Martin wrote:
> Hi Philippe,
>
> This is pro bono work on my end. Possibly yours also? Use the patch or lose the patch, as you wish.
>
> I'll keep your preference in mind for the future.
>
> Ross
>
>
> On Mon, Apr 27, 2020, 9:03 AM Philippe Waroquiers <phi...@sk...> wrote:
> > Hello Ross,
> >
> > Thanks for the patch.
> > Patches have somewhat a trend to be lost when (only) sent to a mailing list.
> > The best is to file a bug in the valgrind bugzilla and attach the patch.
> >
> > Thanks
> >
> > Philippe
> >
> > On Sun, 2020-04-26 at 14:03 -0700, Ross Martin wrote:
> > > I use valgrind quite a bit; unfortunately it didn’t support some of the ioctl’s I’m using for my current project. Here’s the patch.
> > >
> > >
> > > diff -ruw valgrind-3.15.0-orig/config.h valgrind-3.15.0/config.h
> > > --- valgrind-3.15.0-orig/config.h 2019-04-13 03:57:38.000000000 -0700
> > > +++ valgrind-3.15.0/config.h 2020-04-24 19:05:10.315888225 -0700
> > > @@ -60,7 +60,7 @@
> > > #define HAVE_ASM_UNISTD_H 1
> > >
> > > /* Define to 1 if as supports fxsave64/fxrstor64. */
> > > -#define HAVE_AS_AMD64_FXSAVE64 1
> > > +/* #undef HAVE_AS_AMD64_FXSAVE64 */
> > >
> > > /* Define to 1 if as supports floating point phased out category. */
> > > /* #undef HAVE_AS_PPC_FPPO */
> > > @@ -216,7 +216,7 @@
> > > #define HAVE_PTHREAD_YIELD 1
> > >
> > > /* Define to 1 if you have the `PTRACE_GETREGS' ptrace request. */
> > > -#define HAVE_PTRACE_GETREGS 1
> > > +/* #undef HAVE_PTRACE_GETREGS */
> > >
> > > /* Define to 1 if you have the `readlinkat' function. */
> > > #define HAVE_READLINKAT 1
> > > diff -ruw valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c
> > > --- valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c 2019-04-13 03:56:21.000000000 -0700
> > > +++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c 2020-04-26 13:36:42.197565742 -0700
> > > @@ -8036,6 +8036,165 @@
> > > PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).size", (Addr)&data->size, sizeof(data->size));
> > > }
> > > break;
> > > + case VKI_DRM_IOCTL_SET_MASTER:
> > > + PRINT("ioctl(DRM_MODE_SET_MASTER)\n");
> > > + break;
> > > + case VKI_DRM_IOCTL_DROP_MASTER:
> > > + PRINT("ioctl(DRM_MODE_DROP_MASTER)\n");
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_crtc_page_flip* data = (struct vki_drm_mode_crtc_page_flip*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_PAGE_FLIP)\n");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).flags", (Addr)&data->flags, sizeof(data->flags));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).reserved", (Addr)&data->reserved, sizeof(data->reserved));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).user_data", (Addr)&data->user_data, sizeof(data->user_data));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_ADDFB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_fb_cmd* data = (struct vki_drm_mode_fb_cmd*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_ADDFB)\n");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).width", (Addr)&data->width, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).height", (Addr)&data->height, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).pitch", (Addr)&data->pitch, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).bpp", (Addr)&data->bpp, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).depth", (Addr)&data->depth, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).handle", (Addr)&data->handle, sizeof(data->width));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_ADDFB).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETENCODER:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_get_encoder* data = (struct vki_drm_mode_get_encoder*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_GETENCODER)\n");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETENCODER).encoder_id", (Addr)&data->encoder_id, sizeof(data->encoder_id));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).encoder_type", (Addr)&data->encoder_type, sizeof(data->encoder_type));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_crtcs", (Addr)&data->possible_crtcs, sizeof(data->possible_crtcs));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_clones", (Addr)&data->possible_clones, sizeof(data->possible_clones));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETCRTC:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_crtc* data = (struct vki_drm_mode_crtc*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_GETCRTC)\n");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr", (Addr)&data->set_connectors_ptr, sizeof(data->set_connectors_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).x", (Addr)&data->x, sizeof(data->x));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).y", (Addr)&data->y, sizeof(data->y));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).gamma_size", (Addr)&data->gamma_size, sizeof(data->gamma_size));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode_valid", (Addr)&data->mode_valid, sizeof(data->mode_valid));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode", (Addr)&data->mode, sizeof(data->mode));
> > > + if(data->set_connectors_ptr && data->count_connectors)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr[]", (Addr)data->set_connectors_ptr, data->count_connectors*sizeof(__vki_u32));
> > > + }
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_card_res* data = (struct vki_drm_mode_card_res*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_GETRESOURCES)\n");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr", (Addr)&data->fb_id_ptr, sizeof(data->fb_id_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr", (Addr)&data->crtc_id_ptr, sizeof(data->crtc_id_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr", (Addr)&data->connector_id_ptr, sizeof(data->connector_id_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr", (Addr)&data->encoder_id_ptr, sizeof(data->encoder_id_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_fbs", (Addr)&data->count_fbs, sizeof(data->count_fbs));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_crtcs", (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_fbs", (Addr)&data->count_fbs, sizeof(data->count_fbs));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_crtcs", (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + if(data->fb_id_ptr && data->count_fbs)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr[]", (Addr)data->fb_id_ptr, data->count_fbs*sizeof(__vki_u32));
> > > + }
> > > + if(data->crtc_id_ptr && data->count_crtcs)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr[]", (Addr)data->crtc_id_ptr, data->count_crtcs*sizeof(__vki_u32));
> > > + }
> > > + if(data->connector_id_ptr && data->count_connectors)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr[]", (Addr)data->connector_id_ptr, data->count_connectors*sizeof(__vki_u32));
> > > + }
> > > + if(data->encoder_id_ptr && data->count_encoders)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr[]", (Addr)data->encoder_id_ptr, data->count_encoders*sizeof(__vki_u32));
> > > + }
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_width", (Addr)&data->min_width, sizeof(data->min_width));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_width", (Addr)&data->max_width, sizeof(data->max_width));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_height", (Addr)&data->min_height, sizeof(data->min_height));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_height", (Addr)&data->max_height, sizeof(data->max_height));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_get_connector* data = (struct vki_drm_mode_get_connector*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_GETCONNECTOR) for id %ld\n", (long)data->connector_id);
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).connector_id", (Addr)&data->connector_id, sizeof(data->connector_id));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr", (Addr)&data->encoders_ptr, sizeof(data->encoders_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr", (Addr)&data->modes_ptr, sizeof(data->modes_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).props_ptr", (Addr)&data->props_ptr, sizeof(data->props_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr", (Addr)&data->prop_values_ptr, sizeof(data->prop_values_ptr));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_modes", (Addr)&data->count_modes, sizeof(data->count_modes));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_props", (Addr)&data->count_props, sizeof(data->count_props));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_modes", (Addr)&data->count_modes, sizeof(data->count_modes));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_props", (Addr)&data->count_props, sizeof(data->count_props));
> > > + if(data->encoders_ptr && data->count_modes)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr[]", (Addr)data->encoders_ptr, data->count_encoders*sizeof(__vki_u32));
> > > + }
> > > + if(data->modes_ptr && data->count_modes)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr[]", (Addr)data->modes_ptr, data->count_modes*sizeof(struct vki_drm_mode_modeinfo));
> > > + }
> > > + if(data->props_ptr && data->count_props)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).props_ptr[]", (Addr)data->props_ptr, data->count_props*sizeof(__vki_u32));
> > > + }
> > > + if(data->prop_values_ptr && data->count_props)
> > > + {
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr[]", (Addr)data->prop_values_ptr, data->count_props*sizeof(__vki_u64));
> > > + }
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoder_id", (Addr)&data->encoder_id, sizeof(data->encoder_id));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type", (Addr)&data->connector_type, sizeof(data->connector_type));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type_id", (Addr)&data->connector_type_id, sizeof(data->connector_type_id));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connection", (Addr)&data->connection, sizeof(data->connection));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_width", (Addr)&data->mm_width, sizeof(data->mm_width));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_height", (Addr)&data->mm_height, sizeof(data->mm_height));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).subpixel", (Addr)&data->subpixel, sizeof(data->subpixel));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_create_dumb* data = (struct vki_drm_mode_create_dumb*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_CREATE_DUMB) size (%ldx%ld), %ld bits per pixel\n", (long)data->width, (long)data->height, (long)data->bpp);
> > > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).width", (Addr)&data->width, sizeof(data->width));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).height", (Addr)&data->height, sizeof(data->height));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).bpp", (Addr)&data->bpp, sizeof(data->bpp));
> > > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).flags", (Addr)&data->flags, sizeof(data->flags));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).pitch", (Addr)&data->pitch, sizeof(data->pitch));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).handle", (Addr)&data->handle, sizeof(data->handle));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).size", (Addr)&data->size, sizeof(data->size));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_map_dumb* data = (struct vki_drm_mode_map_dumb*)(Addr)ARG3;
> > > + PRINT("ioctl(DRM_MODE_MAP_DUMB)");
> > > + PRE_MEM_READ("ioctl(DRM_MODE_MAP_DUMB).handle", (Addr)&data->handle, sizeof(data->handle));
> > > + PRE_MEM_WRITE("ioctl(DRM_MODE_MAP_DUMB).offset", (Addr)&data->offset, sizeof(data->offset));
> > > + }
> > > + break;
> > > case VKI_DRM_IOCTL_I915_GETPARAM:
> > > if (ARG3) {
> > > vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
> > > @@ -9316,6 +9475,9 @@
> > > PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3, sizeof(__vki_u64));
> > > break;
> > >
> > > + case VKI_EVIOCGRAB:
> > > + break;
> > > +
> > > default:
> > > /* EVIOC* are variable length and return size written on success */
> > > switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> > > @@ -10606,6 +10768,119 @@
> > > POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> > > }
> > > break;
> > > + case VKI_DRM_IOCTL_SET_MASTER:
> > > + break;
> > > + case VKI_DRM_IOCTL_DROP_MASTER:
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_ADDFB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_fb_cmd* data = (struct vki_drm_mode_fb_cmd*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->fb_id, sizeof(data->fb_id));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETENCODER:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_get_encoder* data = (struct vki_drm_mode_get_encoder*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->encoder_type, sizeof(data->encoder_type));
> > > + POST_MEM_WRITE((Addr)&data->crtc_id, sizeof(data->crtc_id));
> > > + POST_MEM_WRITE((Addr)&data->possible_crtcs, sizeof(data->possible_crtcs));
> > > + POST_MEM_WRITE((Addr)&data->possible_clones, sizeof(data->possible_clones));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETCRTC:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_crtc* data = (struct vki_drm_mode_crtc*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->fb_id, sizeof(data->fb_id));
> > > + POST_MEM_WRITE((Addr)&data->x, sizeof(data->x));
> > > + POST_MEM_WRITE((Addr)&data->y, sizeof(data->y));
> > > + POST_MEM_WRITE((Addr)&data->gamma_size, sizeof(data->gamma_size));
> > > + POST_MEM_WRITE((Addr)&data->mode_valid, sizeof(data->mode_valid));
> > > + if(data->mode_valid)
> > > + {
> > > + POST_MEM_WRITE((Addr)&data->mode, sizeof(data->mode));
> > > + }
> > > + if(data->set_connectors_ptr && data->count_connectors)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->set_connectors_ptr, data->count_connectors*sizeof(__vki_u32));
> > > + }
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_card_res* data = (struct vki_drm_mode_card_res*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->count_fbs, sizeof(data->count_fbs));
> > > + POST_MEM_WRITE((Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> > > + POST_MEM_WRITE((Addr)&data->count_connectors, sizeof(data->count_connectors));
> > > + POST_MEM_WRITE((Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + if(data->fb_id_ptr && data->count_fbs)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->fb_id_ptr, data->count_fbs*sizeof(__vki_u32));
> > > + }
> > > + if(data->crtc_id_ptr && data->count_crtcs)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->crtc_id_ptr, data->count_crtcs*sizeof(__vki_u32));
> > > + }
> > > + if(data->connector_id_ptr && data->count_connectors)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->connector_id_ptr, data->count_connectors*sizeof(__vki_u32));
> > > + }
> > > + if(data->encoder_id_ptr && data->count_encoders)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->encoder_id_ptr, data->count_encoders*sizeof(__vki_u32));
> > > + }
> > > + POST_MEM_WRITE((Addr)&data->min_width, sizeof(data->min_width));
> > > + POST_MEM_WRITE((Addr)&data->max_width, sizeof(data->max_width));
> > > + POST_MEM_WRITE((Addr)&data->min_height, sizeof(data->min_height));
> > > + POST_MEM_WRITE((Addr)&data->max_height, sizeof(data->max_height));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_get_connector* data = (struct vki_drm_mode_get_connector*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->count_encoders, sizeof(data->count_encoders));
> > > + POST_MEM_WRITE((Addr)&data->count_modes, sizeof(data->count_modes));
> > > + POST_MEM_WRITE((Addr)&data->count_props, sizeof(data->count_props));
> > > + if(data->encoders_ptr && data->count_modes)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->encoders_ptr, data->count_encoders*sizeof(__vki_u32));
> > > + }
> > > + if(data->modes_ptr && data->count_modes)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->modes_ptr, data->count_modes*sizeof(struct vki_drm_mode_modeinfo));
> > > + }
> > > + if(data->props_ptr && data->count_props)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->props_ptr, data->count_props*sizeof(__vki_u32));
> > > + }
> > > + if(data->prop_values_ptr && data->count_props)
> > > + {
> > > + POST_MEM_WRITE((Addr)data->prop_values_ptr, data->count_props*sizeof(__vki_u64));
> > > + }
> > > + POST_MEM_WRITE((Addr)&data->encoder_id, sizeof(data->encoder_id));
> > > + POST_MEM_WRITE((Addr)&data->connector_type, sizeof(data->connector_type));
> > > + POST_MEM_WRITE((Addr)&data->connector_type_id, sizeof(data->connector_type_id));
> > > + POST_MEM_WRITE((Addr)&data->connection, sizeof(data->connection));
> > > + POST_MEM_WRITE((Addr)&data->mm_width, sizeof(data->mm_width));
> > > + POST_MEM_WRITE((Addr)&data->mm_height, sizeof(data->mm_height));
> > > + POST_MEM_WRITE((Addr)&data->subpixel, sizeof(data->subpixel));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_create_dumb* data = (struct vki_drm_mode_create_dumb*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->pitch, sizeof(data->pitch));
> > > + POST_MEM_WRITE((Addr)&data->handle, sizeof(data->handle));
> > > + POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> > > + }
> > > + break;
> > > + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> > > + if (ARG3) {
> > > + struct vki_drm_mode_map_dumb* data = (struct vki_drm_mode_map_dumb*)(Addr)ARG3;
> > > + POST_MEM_WRITE((Addr)&data->offset, sizeof(data->offset));
> > > + }
> > > + break;
> > > case VKI_DRM_IOCTL_I915_GETPARAM:
> > > if (ARG3) {
> > > vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
> > > @@ -11313,6 +11588,9 @@
> > > POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64));
> > > break;
> > >
> > > + case VKI_EVIOCGRAB:
> > > + break;
> > > +
> > > default:
> > > /* EVIOC* are variable length and return size written on success */
> > > switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> > > diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux-drm.h valgrind-3.15.0/include/vki/vki-linux-drm.h
> > > --- valgrind-3.15.0-orig/include/vki/vki-linux-drm.h 2019-04-13 03:56:21.000000000 -0700
> > > +++ valgrind-3.15.0/include/vki/vki-linux-drm.h 2020-04-26 11:09:08.471160985 -0700
> > > @@ -440,6 +440,64 @@
> > > __vki_u64 green;
> > > __vki_u64 blue;
> > > };
> > > +struct vki_drm_mode_crtc_page_flip {
> > > + __vki_u32 crtc_id;
> > > + __vki_u32 fb_id;
> > > + __vki_u32 flags;
> > > + __vki_u32 reserved;
> > > + __vki_u64 user_data;
> > > +};
> > > +struct vki_drm_mode_get_connector {
> > > +
> > > + __vki_u64 encoders_ptr;
> > > + __vki_u64 modes_ptr;
> > > + __vki_u64 props_ptr;
> > > + __vki_u64 prop_values_ptr;
> > > +
> > > + __vki_u32 count_modes;
> > > + __vki_u32 count_props;
> > > + __vki_u32 count_encoders;
> > > +
> > > + __vki_u32 encoder_id; /**< Current Encoder */
> > > + __vki_u32 connector_id; /**< Id */
> > > + __vki_u32 connector_type;
> > > + __vki_u32 connector_type_id;
> > > +
> > > + __vki_u32 connection;
> > > + __vki_u32 mm_width; /**< width in millimeters */
> > > + __vki_u32 mm_height; /**< height in millimeters */
> > > + __vki_u32 subpixel;
> > > +
> > > + __vki_u32 pad;
> > > +};
> > > +/* create a dumb scanout buffer */
> > > +struct vki_drm_mode_create_dumb {
> > > + __vki_u32 height;
> > > + __vki_u32 width;
> > > + __vki_u32 bpp;
> > > + __vki_u32 flags;
> > > + /* handle, pitch, size will be returned */
> > > + __vki_u32 handle;
> > > + __vki_u32 pitch;
> > > + __vki_u64 size;
> > > +};
> > > +
> > > +/* set up for mmap of a dumb scanout buffer */
> > > +struct vki_drm_mode_map_dumb {
> > > + /** Handle for the object being mapped. */
> > > + __vki_u32 handle;
> > > + __vki_u32 pad;
> > > + /**
> > > + * Fake offset to use for subsequent mmap call
> > > + *
> > > + * This is a fixed-size type for 32/64 compatibility.
> > > + */
> > > + __vki_u64 offset;
> > > +};
> > > +
> > > +struct vki_drm_mode_destroy_dumb {
> > > + __vki_u32 handle;
> > > +};
> > >
> > > //----------------------------------------------------------------------
> > > // From include/drm/drm.h
> > > @@ -533,6 +591,13 @@
> > > #define VKI_DRM_IOCTL_MODE_GETFB VKI_DRM_IOWR(0xAD, struct vki_drm_mode_fb_cmd)
> > > #define VKI_DRM_IOCTL_MODE_ADDFB VKI_DRM_IOWR(0xAE, struct vki_drm_mode_fb_cmd)
> > > #define VKI_DRM_IOCTL_MODE_RMFB VKI_DRM_IOWR(0xAF, unsigned int)
> > > +#define VKI_DRM_IOCTL_MODE_PAGE_FLIP VKI_DRM_IOWR(0xB0, struct vki_drm_mode_crtc_page_flip)
> > > +
> > > +
> > > +#define VKI_DRM_IOCTL_MODE_CREATE_DUMB VKI_DRM_IOWR(0xB2, struct vki_drm_mode_create_dumb)
> > > +#define VKI_DRM_IOCTL_MODE_MAP_DUMB VKI_DRM_IOWR(0xB3, struct vki_drm_mode_map_dumb)
> > > +#define VKI_DRM_IOCTL_MODE_DESTROY_DUMB VKI_DRM_IOWR(0xB4, struct vki_drm_mode_destroy_dumb)
> > > +
> > >
> > > #define VKI_DRM_COMMAND_BASE 0x40
> > > #define VKI_DRM_COMMAND_END 0xA0
> > > diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux.h valgrind-3.15.0/include/vki/vki-linux.h
> > > --- valgrind-3.15.0-orig/include/vki/vki-linux.h 2019-04-13 03:56:21.000000000 -0700
> > > +++ valgrind-3.15.0/include/vki/vki-linux.h 2020-04-26 13:34:12.921637068 -0700
> > > @@ -3058,6 +3058,8 @@
> > >
> > > #define VKI_EVIOCGBIT(ev,len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
> > >
> > > +#define VKI_EVIOCGRAB _VKI_IOW('E', 0x90, int) /* Grab/Release device */
> > > +
> > > /*
> > > * Event types
> > > */
> > >
> > >
> > >
> > > _______________________________________________
> > > Valgrind-developers mailing list
> > > Val...@li...
> > > https://lists.sourceforge.net/lists/listinfo/valgrind-developers
> >
|
|
From: Bart V. A. <bva...@so...> - 2020-04-27 18:57:44
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=0788b1cf7b3e300d6a68dc228f5beeacb1b58a52 commit 0788b1cf7b3e300d6a68dc228f5beeacb1b58a52 Author: Bart Van Assche <bva...@ac...> Date: Mon Apr 27 11:57:21 2020 -0700 NEWS: Mention the MinGW include/valgrind.h fix Diff: --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index a8f37d49e5..ef95c3f90f 100644 --- a/NEWS +++ b/NEWS @@ -153,6 +153,7 @@ n-i-bz Fix non-glibc build of test suite with s390x_features 418435 s390x: spurious "Conditional jump or move depends on uninitialised [..]" 418997 s390x: Support Iex_ITE for float and vector types 419503 s390x: Avoid modifying registers returned from isel functions +n-i-bz MinGW, include/valgrind.h: Fix detection of 64-bit mode Release 3.15.0 (12 April 2019) |
|
From: Martin S. <ma...@ma...> - 2020-04-27 18:57:13
|
On Mon, 27 Apr 2020, Bart Van Assche wrote: > On 2020-04-27 11:31, Martin Storsjö wrote: >> Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 >> as well, and there are mingw toolchains that target those architectures. > > This patch has been applied on the master branch. Thanks for the patch! Thank you! // Martin |
|
From: Bart V. A. <bva...@ac...> - 2020-04-27 18:55:10
|
On 2020-04-27 11:31, Martin Storsjö wrote: > Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 > as well, and there are mingw toolchains that target those architectures. This patch has been applied on the master branch. Thanks for the patch! Bart. |
|
From: Bart V. A. <bva...@so...> - 2020-04-27 18:54:43
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=7359c5fd9f312cddd62146896558d8c9bd2bd4cf commit 7359c5fd9f312cddd62146896558d8c9bd2bd4cf Author: Martin Storsjö <ma...@ma...> Date: Mon Apr 27 21:31:51 2020 +0300 mingw: Fix arch detection ifdefs for non-x86 mingw platforms Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 as well, and there are mingw toolchains that target those architectures. This mirrors how the MSVC parts of the same expressions are written, as (defined(_WIN32) && defined(_M_IX86)) and (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 or __MINGW32__/__MINGW64__ alone to indicate architecture. Change the __MINGW64__ and _WIN64 ifdefs into plain __MINGW32__ and _WIN32 as well, for clarity - these defines mostly imply platform. Diff: --- include/valgrind.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/valgrind.h b/include/valgrind.h index c8b24a38e8..00e985dca8 100644 --- a/include/valgrind.h +++ b/include/valgrind.h @@ -131,12 +131,13 @@ # define PLAT_x86_darwin 1 #elif defined(__APPLE__) && defined(__x86_64__) # define PLAT_amd64_darwin 1 -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ +#elif (defined(__MINGW32__) && defined(__i386__)) \ || defined(__CYGWIN32__) \ || (defined(_WIN32) && defined(_M_IX86)) # define PLAT_x86_win32 1 -#elif defined(__MINGW64__) \ - || (defined(_WIN64) && defined(_M_X64)) +#elif (defined(__MINGW32__) && defined(__x86_64__)) \ + || (defined(_WIN32) && defined(_M_X64)) +/* __MINGW32__ and _WIN32 are defined in 64 bit mode as well. */ # define PLAT_amd64_win64 1 #elif defined(__linux__) && defined(__i386__) # define PLAT_x86_linux 1 |
|
From: Martin S. <ma...@ma...> - 2020-04-27 18:32:02
|
Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64
as well, and there are mingw toolchains that target those architectures.
This mirrors how the MSVC parts of the same expressions are written,
as (defined(_WIN32) && defined(_M_IX86)) and
(defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64
or __MINGW32__/__MINGW64__ alone to indicate architecture.
Change the __MINGW64__ and _WIN64 ifdefs into plain __MINGW32__
and _WIN32 as well, for clarity - these defines mostly imply
platform.
---
include/valgrind.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/include/valgrind.h b/include/valgrind.h
index c8b24a38e..00e985dca 100644
--- a/include/valgrind.h
+++ b/include/valgrind.h
@@ -131,12 +131,13 @@
# define PLAT_x86_darwin 1
#elif defined(__APPLE__) && defined(__x86_64__)
# define PLAT_amd64_darwin 1
-#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \
+#elif (defined(__MINGW32__) && defined(__i386__)) \
|| defined(__CYGWIN32__) \
|| (defined(_WIN32) && defined(_M_IX86))
# define PLAT_x86_win32 1
-#elif defined(__MINGW64__) \
- || (defined(_WIN64) && defined(_M_X64))
+#elif (defined(__MINGW32__) && defined(__x86_64__)) \
+ || (defined(_WIN32) && defined(_M_X64))
+/* __MINGW32__ and _WIN32 are defined in 64 bit mode as well. */
# define PLAT_amd64_win64 1
#elif defined(__linux__) && defined(__i386__)
# define PLAT_x86_linux 1
--
2.17.1
|
|
From: Bart V. A. <bva...@ac...> - 2020-04-27 18:09:51
|
On 2020-04-27 11:04, Martin Storsjö wrote: > On Mon, 27 Apr 2020, Bart Van Assche wrote: > >> On 2020-04-04 13:35, Martin Storsjö wrote: >>> Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 >>> as well, and there are mingw toolchains that target those architectures. >>> >>> This mirrors how the MSVC part of the same expressions are written, >>> as (defined(_WIN32) && defined(_M_IX86)) and >>> (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 >>> or __MINGW32__/__MINGW64__ alone to indicate architecture. >>> --- >>> include/valgrind.h | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/include/valgrind.h b/include/valgrind.h >>> index c8b24a38e..e8195c1ce 100644 >>> --- a/include/valgrind.h >>> +++ b/include/valgrind.h >>> @@ -131,11 +131,11 @@ >>> # define PLAT_x86_darwin 1 >>> #elif defined(__APPLE__) && defined(__x86_64__) >>> # define PLAT_amd64_darwin 1 >>> -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ >>> +#elif (defined(__MINGW32__) && defined(__i386__)) \ >>> || defined(__CYGWIN32__) \ >>> || (defined(_WIN32) && defined(_M_IX86)) >>> # define PLAT_x86_win32 1 >>> -#elif defined(__MINGW64__) \ >>> +#elif (defined(__MINGW64__) && defined(__x86_64__)) \ >>> || (defined(_WIN64) && defined(_M_X64)) >>> # define PLAT_amd64_win64 1 >>> #elif defined(__linux__) && defined(__i386__) >> >> How about changing __MINGW64__ into __MINGW32__? I think that will >> make this patch easier to read. From commit d406e8725c09: "mingw64 >> also defines __MINGW32__". Please also add a comment that the MinGW64 >> compiler defines __MINGW32__. > > That's fine with me as well, but there is the same kind of tautology for > the MSVC variant of ifdefs right next to it, "defined(_WIN64) && > defined(_M_X64)". Should I keep that as is or do the same kind of > cleanup for that as well? If that additional change is made, please add an additional comment that explains that _WIN32 is also defined when targeting 64-bit mode. Thanks, Bart. |
|
From: Ross M. <ros...@ie...> - 2020-04-27 18:05:01
|
Hi Philippe,
This is pro bono work on my end. Possibly yours also? Use the patch or
lose the patch, as you wish.
I'll keep your preference in mind for the future.
Ross
On Mon, Apr 27, 2020, 9:03 AM Philippe Waroquiers <
phi...@sk...> wrote:
> Hello Ross,
>
> Thanks for the patch.
> Patches have somewhat a trend to be lost when (only) sent to a mailing
> list.
> The best is to file a bug in the valgrind bugzilla and attach the patch.
>
> Thanks
>
> Philippe
>
> On Sun, 2020-04-26 at 14:03 -0700, Ross Martin wrote:
> > I use valgrind quite a bit; unfortunately it didn’t support some of the
> ioctl’s I’m using for my current project. Here’s the patch.
> >
> >
> > diff -ruw valgrind-3.15.0-orig/config.h valgrind-3.15.0/config.h
> > --- valgrind-3.15.0-orig/config.h 2019-04-13 03:57:38.000000000 -0700
> > +++ valgrind-3.15.0/config.h 2020-04-24 19:05:10.315888225 -0700
> > @@ -60,7 +60,7 @@
> > #define HAVE_ASM_UNISTD_H 1
> >
> > /* Define to 1 if as supports fxsave64/fxrstor64. */
> > -#define HAVE_AS_AMD64_FXSAVE64 1
> > +/* #undef HAVE_AS_AMD64_FXSAVE64 */
> >
> > /* Define to 1 if as supports floating point phased out category. */
> > /* #undef HAVE_AS_PPC_FPPO */
> > @@ -216,7 +216,7 @@
> > #define HAVE_PTHREAD_YIELD 1
> >
> > /* Define to 1 if you have the `PTRACE_GETREGS' ptrace request. */
> > -#define HAVE_PTRACE_GETREGS 1
> > +/* #undef HAVE_PTRACE_GETREGS */
> >
> > /* Define to 1 if you have the `readlinkat' function. */
> > #define HAVE_READLINKAT 1
> > diff -ruw valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c
> valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c
> > --- valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c 2019-04-13
> 03:56:21.000000000 -0700
> > +++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c 2020-04-26
> 13:36:42.197565742 -0700
> > @@ -8036,6 +8036,165 @@
> > PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).size", (Addr)&data->size,
> sizeof(data->size));
> > }
> > break;
> > + case VKI_DRM_IOCTL_SET_MASTER:
> > + PRINT("ioctl(DRM_MODE_SET_MASTER)\n");
> > + break;
> > + case VKI_DRM_IOCTL_DROP_MASTER:
> > + PRINT("ioctl(DRM_MODE_DROP_MASTER)\n");
> > + break;
> > + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> > + if (ARG3) {
> > + struct vki_drm_mode_crtc_page_flip* data = (struct
> vki_drm_mode_crtc_page_flip*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_PAGE_FLIP)\n");
> > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).crtc_id",
> (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).fb_id",
> (Addr)&data->fb_id, sizeof(data->fb_id));
> > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).flags",
> (Addr)&data->flags, sizeof(data->flags));
> > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).reserved",
> (Addr)&data->reserved, sizeof(data->reserved));
> > + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).user_data",
> (Addr)&data->user_data, sizeof(data->user_data));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_ADDFB:
> > + if (ARG3) {
> > + struct vki_drm_mode_fb_cmd* data = (struct
> vki_drm_mode_fb_cmd*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_ADDFB)\n");
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).width", (Addr)&data->width,
> sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).height", (Addr)&data->height,
> sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).pitch", (Addr)&data->pitch,
> sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).bpp", (Addr)&data->bpp,
> sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).depth", (Addr)&data->depth,
> sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).handle", (Addr)&data->handle,
> sizeof(data->width));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_ADDFB).fb_id", (Addr)&data->fb_id,
> sizeof(data->fb_id));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETENCODER:
> > + if (ARG3) {
> > + struct vki_drm_mode_get_encoder* data = (struct
> vki_drm_mode_get_encoder*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_GETENCODER)\n");
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETENCODER).encoder_id",
> (Addr)&data->encoder_id, sizeof(data->encoder_id));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).encoder_type",
> (Addr)&data->encoder_type, sizeof(data->encoder_type));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).crtc_id",
> (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_crtcs",
> (Addr)&data->possible_crtcs, sizeof(data->possible_crtcs));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_clones",
> (Addr)&data->possible_clones, sizeof(data->possible_clones));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETCRTC:
> > + if (ARG3) {
> > + struct vki_drm_mode_crtc* data = (struct
> vki_drm_mode_crtc*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_GETCRTC)\n");
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).crtc_id",
> (Addr)&data->crtc_id, sizeof(data->crtc_id));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr",
> (Addr)&data->set_connectors_ptr, sizeof(data->set_connectors_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).count_connectors",
> (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).fb_id",
> (Addr)&data->fb_id, sizeof(data->fb_id));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).x",
> (Addr)&data->x, sizeof(data->x));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).y",
> (Addr)&data->y, sizeof(data->y));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).gamma_size",
> (Addr)&data->gamma_size, sizeof(data->gamma_size));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode_valid",
> (Addr)&data->mode_valid, sizeof(data->mode_valid));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode",
> (Addr)&data->mode, sizeof(data->mode));
> > + if(data->set_connectors_ptr && data->count_connectors)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr[]",
> (Addr)data->set_connectors_ptr, data->count_connectors*sizeof(__vki_u32));
> > + }
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> > + if (ARG3) {
> > + struct vki_drm_mode_card_res* data = (struct
> vki_drm_mode_card_res*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_GETRESOURCES)\n");
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr",
> (Addr)&data->fb_id_ptr, sizeof(data->fb_id_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr",
> (Addr)&data->crtc_id_ptr, sizeof(data->crtc_id_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr",
> (Addr)&data->connector_id_ptr, sizeof(data->connector_id_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr",
> (Addr)&data->encoder_id_ptr, sizeof(data->encoder_id_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_fbs",
> (Addr)&data->count_fbs, sizeof(data->count_fbs));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_crtcs",
> (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_connectors",
> (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_encoders",
> (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_fbs",
> (Addr)&data->count_fbs, sizeof(data->count_fbs));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_crtcs",
> (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_connectors",
> (Addr)&data->count_connectors, sizeof(data->count_connectors));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_encoders",
> (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > + if(data->fb_id_ptr && data->count_fbs)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr[]",
> (Addr)data->fb_id_ptr, data->count_fbs*sizeof(__vki_u32));
> > + }
> > + if(data->crtc_id_ptr && data->count_crtcs)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr[]",
> (Addr)data->crtc_id_ptr, data->count_crtcs*sizeof(__vki_u32));
> > + }
> > + if(data->connector_id_ptr && data->count_connectors)
> > + {
> > +
> PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr[]",
> (Addr)data->connector_id_ptr, data->count_connectors*sizeof(__vki_u32));
> > + }
> > + if(data->encoder_id_ptr && data->count_encoders)
> > + {
> > +
> PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr[]",
> (Addr)data->encoder_id_ptr, data->count_encoders*sizeof(__vki_u32));
> > + }
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_width",
> (Addr)&data->min_width, sizeof(data->min_width));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_width",
> (Addr)&data->max_width, sizeof(data->max_width));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_height",
> (Addr)&data->min_height, sizeof(data->min_height));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_height",
> (Addr)&data->max_height, sizeof(data->max_height));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> > + if (ARG3) {
> > + struct vki_drm_mode_get_connector* data = (struct
> vki_drm_mode_get_connector*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_GETCONNECTOR) for id %ld\n",
> (long)data->connector_id);
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).connector_id",
> (Addr)&data->connector_id, sizeof(data->connector_id));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr",
> (Addr)&data->encoders_ptr, sizeof(data->encoders_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr",
> (Addr)&data->modes_ptr, sizeof(data->modes_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).props_ptr",
> (Addr)&data->props_ptr, sizeof(data->props_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr",
> (Addr)&data->prop_values_ptr, sizeof(data->prop_values_ptr));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_encoders",
> (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_modes",
> (Addr)&data->count_modes, sizeof(data->count_modes));
> > + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_props",
> (Addr)&data->count_props, sizeof(data->count_props));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_encoders",
> (Addr)&data->count_encoders, sizeof(data->count_encoders));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_modes",
> (Addr)&data->count_modes, sizeof(data->count_modes));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_props",
> (Addr)&data->count_props, sizeof(data->count_props));
> > + if(data->encoders_ptr && data->count_modes)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr[]",
> (Addr)data->encoders_ptr, data->count_encoders*sizeof(__vki_u32));
> > + }
> > + if(data->modes_ptr && data->count_modes)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr[]",
> (Addr)data->modes_ptr, data->count_modes*sizeof(struct
> vki_drm_mode_modeinfo));
> > + }
> > + if(data->props_ptr && data->count_props)
> > + {
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).props_ptr[]",
> (Addr)data->props_ptr, data->count_props*sizeof(__vki_u32));
> > + }
> > + if(data->prop_values_ptr && data->count_props)
> > + {
> > +
> PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr[]",
> (Addr)data->prop_values_ptr, data->count_props*sizeof(__vki_u64));
> > + }
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoder_id",
> (Addr)&data->encoder_id, sizeof(data->encoder_id));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type",
> (Addr)&data->connector_type, sizeof(data->connector_type));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type_id",
> (Addr)&data->connector_type_id, sizeof(data->connector_type_id));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connection",
> (Addr)&data->connection, sizeof(data->connection));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_width",
> (Addr)&data->mm_width, sizeof(data->mm_width));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_height",
> (Addr)&data->mm_height, sizeof(data->mm_height));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).subpixel",
> (Addr)&data->subpixel, sizeof(data->subpixel));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> > + if (ARG3) {
> > + struct vki_drm_mode_create_dumb* data = (struct
> vki_drm_mode_create_dumb*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_CREATE_DUMB) size (%ldx%ld), %ld bits per
> pixel\n", (long)data->width, (long)data->height, (long)data->bpp);
> > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).width",
> (Addr)&data->width, sizeof(data->width));
> > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).height",
> (Addr)&data->height, sizeof(data->height));
> > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).bpp",
> (Addr)&data->bpp, sizeof(data->bpp));
> > + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).flags",
> (Addr)&data->flags, sizeof(data->flags));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).pitch",
> (Addr)&data->pitch, sizeof(data->pitch));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).handle",
> (Addr)&data->handle, sizeof(data->handle));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).size",
> (Addr)&data->size, sizeof(data->size));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> > + if (ARG3) {
> > + struct vki_drm_mode_map_dumb* data = (struct
> vki_drm_mode_map_dumb*)(Addr)ARG3;
> > + PRINT("ioctl(DRM_MODE_MAP_DUMB)");
> > + PRE_MEM_READ("ioctl(DRM_MODE_MAP_DUMB).handle",
> (Addr)&data->handle, sizeof(data->handle));
> > + PRE_MEM_WRITE("ioctl(DRM_MODE_MAP_DUMB).offset",
> (Addr)&data->offset, sizeof(data->offset));
> > + }
> > + break;
> > case VKI_DRM_IOCTL_I915_GETPARAM:
> > if (ARG3) {
> > vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t
> *)(Addr)ARG3;
> > @@ -9316,6 +9475,9 @@
> > PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3,
> sizeof(__vki_u64));
> > break;
> >
> > + case VKI_EVIOCGRAB:
> > + break;
> > +
> > default:
> > /* EVIOC* are variable length and return size written on success
> */
> > switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> > @@ -10606,6 +10768,119 @@
> > POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> > }
> > break;
> > + case VKI_DRM_IOCTL_SET_MASTER:
> > + break;
> > + case VKI_DRM_IOCTL_DROP_MASTER:
> > + break;
> > + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> > + break;
> > + case VKI_DRM_IOCTL_MODE_ADDFB:
> > + if (ARG3) {
> > + struct vki_drm_mode_fb_cmd* data = (struct
> vki_drm_mode_fb_cmd*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->fb_id, sizeof(data->fb_id));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETENCODER:
> > + if (ARG3) {
> > + struct vki_drm_mode_get_encoder* data = (struct
> vki_drm_mode_get_encoder*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->encoder_type,
> sizeof(data->encoder_type));
> > + POST_MEM_WRITE((Addr)&data->crtc_id,
> sizeof(data->crtc_id));
> > + POST_MEM_WRITE((Addr)&data->possible_crtcs,
> sizeof(data->possible_crtcs));
> > + POST_MEM_WRITE((Addr)&data->possible_clones,
> sizeof(data->possible_clones));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETCRTC:
> > + if (ARG3) {
> > + struct vki_drm_mode_crtc* data = (struct
> vki_drm_mode_crtc*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->fb_id,
> sizeof(data->fb_id));
> > + POST_MEM_WRITE((Addr)&data->x,
> sizeof(data->x));
> > + POST_MEM_WRITE((Addr)&data->y,
> sizeof(data->y));
> > + POST_MEM_WRITE((Addr)&data->gamma_size,
> sizeof(data->gamma_size));
> > + POST_MEM_WRITE((Addr)&data->mode_valid,
> sizeof(data->mode_valid));
> > + if(data->mode_valid)
> > + {
> > + POST_MEM_WRITE((Addr)&data->mode,
> sizeof(data->mode));
> > + }
> > + if(data->set_connectors_ptr && data->count_connectors)
> > + {
> > + POST_MEM_WRITE((Addr)data->set_connectors_ptr,
> data->count_connectors*sizeof(__vki_u32));
> > + }
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> > + if (ARG3) {
> > + struct vki_drm_mode_card_res* data = (struct
> vki_drm_mode_card_res*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->count_fbs,
> sizeof(data->count_fbs));
> > + POST_MEM_WRITE((Addr)&data->count_crtcs,
> sizeof(data->count_crtcs));
> > + POST_MEM_WRITE((Addr)&data->count_connectors,
> sizeof(data->count_connectors));
> > + POST_MEM_WRITE((Addr)&data->count_encoders,
> sizeof(data->count_encoders));
> > + if(data->fb_id_ptr && data->count_fbs)
> > + {
> > + POST_MEM_WRITE((Addr)data->fb_id_ptr,
> data->count_fbs*sizeof(__vki_u32));
> > + }
> > + if(data->crtc_id_ptr && data->count_crtcs)
> > + {
> > + POST_MEM_WRITE((Addr)data->crtc_id_ptr,
> data->count_crtcs*sizeof(__vki_u32));
> > + }
> > + if(data->connector_id_ptr && data->count_connectors)
> > + {
> > + POST_MEM_WRITE((Addr)data->connector_id_ptr,
> data->count_connectors*sizeof(__vki_u32));
> > + }
> > + if(data->encoder_id_ptr && data->count_encoders)
> > + {
> > + POST_MEM_WRITE((Addr)data->encoder_id_ptr,
> data->count_encoders*sizeof(__vki_u32));
> > + }
> > + POST_MEM_WRITE((Addr)&data->min_width, sizeof(data->min_width));
> > + POST_MEM_WRITE((Addr)&data->max_width, sizeof(data->max_width));
> > + POST_MEM_WRITE((Addr)&data->min_height, sizeof(data->min_height));
> > + POST_MEM_WRITE((Addr)&data->max_height, sizeof(data->max_height));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> > + if (ARG3) {
> > + struct vki_drm_mode_get_connector* data = (struct
> vki_drm_mode_get_connector*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->count_encoders,
> sizeof(data->count_encoders));
> > + POST_MEM_WRITE((Addr)&data->count_modes,
> sizeof(data->count_modes));
> > + POST_MEM_WRITE((Addr)&data->count_props,
> sizeof(data->count_props));
> > + if(data->encoders_ptr && data->count_modes)
> > + {
> > + POST_MEM_WRITE((Addr)data->encoders_ptr,
> data->count_encoders*sizeof(__vki_u32));
> > + }
> > + if(data->modes_ptr && data->count_modes)
> > + {
> > + POST_MEM_WRITE((Addr)data->modes_ptr,
> data->count_modes*sizeof(struct vki_drm_mode_modeinfo));
> > + }
> > + if(data->props_ptr && data->count_props)
> > + {
> > + POST_MEM_WRITE((Addr)data->props_ptr,
> data->count_props*sizeof(__vki_u32));
> > + }
> > + if(data->prop_values_ptr && data->count_props)
> > + {
> > + POST_MEM_WRITE((Addr)data->prop_values_ptr,
> data->count_props*sizeof(__vki_u64));
> > + }
> > + POST_MEM_WRITE((Addr)&data->encoder_id,
> sizeof(data->encoder_id));
> > + POST_MEM_WRITE((Addr)&data->connector_type,
> sizeof(data->connector_type));
> > + POST_MEM_WRITE((Addr)&data->connector_type_id,
> sizeof(data->connector_type_id));
> > + POST_MEM_WRITE((Addr)&data->connection,
> sizeof(data->connection));
> > + POST_MEM_WRITE((Addr)&data->mm_width,
> sizeof(data->mm_width));
> > + POST_MEM_WRITE((Addr)&data->mm_height,
> sizeof(data->mm_height));
> > + POST_MEM_WRITE((Addr)&data->subpixel,
> sizeof(data->subpixel));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> > + if (ARG3) {
> > + struct vki_drm_mode_create_dumb* data = (struct
> vki_drm_mode_create_dumb*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->pitch, sizeof(data->pitch));
> > + POST_MEM_WRITE((Addr)&data->handle, sizeof(data->handle));
> > + POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> > + }
> > + break;
> > + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> > + if (ARG3) {
> > + struct vki_drm_mode_map_dumb* data = (struct
> vki_drm_mode_map_dumb*)(Addr)ARG3;
> > + POST_MEM_WRITE((Addr)&data->offset, sizeof(data->offset));
> > + }
> > + break;
> > case VKI_DRM_IOCTL_I915_GETPARAM:
> > if (ARG3) {
> > vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t
> *)(Addr)ARG3;
> > @@ -11313,6 +11588,9 @@
> > POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64));
> > break;
> >
> > + case VKI_EVIOCGRAB:
> > + break;
> > +
> > default:
> > /* EVIOC* are variable length and return size written on success
> */
> > switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> > diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux-drm.h
> valgrind-3.15.0/include/vki/vki-linux-drm.h
> > --- valgrind-3.15.0-orig/include/vki/vki-linux-drm.h 2019-04-13
> 03:56:21.000000000 -0700
> > +++ valgrind-3.15.0/include/vki/vki-linux-drm.h 2020-04-26
> 11:09:08.471160985 -0700
> > @@ -440,6 +440,64 @@
> > __vki_u64 green;
> > __vki_u64 blue;
> > };
> > +struct vki_drm_mode_crtc_page_flip {
> > + __vki_u32 crtc_id;
> > + __vki_u32 fb_id;
> > + __vki_u32 flags;
> > + __vki_u32 reserved;
> > + __vki_u64 user_data;
> > +};
> > +struct vki_drm_mode_get_connector {
> > +
> > + __vki_u64 encoders_ptr;
> > + __vki_u64 modes_ptr;
> > + __vki_u64 props_ptr;
> > + __vki_u64 prop_values_ptr;
> > +
> > + __vki_u32 count_modes;
> > + __vki_u32 count_props;
> > + __vki_u32 count_encoders;
> > +
> > + __vki_u32 encoder_id; /**< Current Encoder */
> > + __vki_u32 connector_id; /**< Id */
> > + __vki_u32 connector_type;
> > + __vki_u32 connector_type_id;
> > +
> > + __vki_u32 connection;
> > + __vki_u32 mm_width; /**< width in millimeters */
> > + __vki_u32 mm_height; /**< height in millimeters */
> > + __vki_u32 subpixel;
> > +
> > + __vki_u32 pad;
> > +};
> > +/* create a dumb scanout buffer */
> > +struct vki_drm_mode_create_dumb {
> > + __vki_u32 height;
> > + __vki_u32 width;
> > + __vki_u32 bpp;
> > + __vki_u32 flags;
> > + /* handle, pitch, size will be returned */
> > + __vki_u32 handle;
> > + __vki_u32 pitch;
> > + __vki_u64 size;
> > +};
> > +
> > +/* set up for mmap of a dumb scanout buffer */
> > +struct vki_drm_mode_map_dumb {
> > + /** Handle for the object being mapped. */
> > + __vki_u32 handle;
> > + __vki_u32 pad;
> > + /**
>
> > + * Fake offset to use for subsequent mmap call
>
> > + *
>
> > + * This is a fixed-size type for 32/64 compatibility.
>
> > + */
> > + __vki_u64 offset;
> > +};
> > +
> > +struct vki_drm_mode_destroy_dumb {
> > + __vki_u32 handle;
> > +};
> >
> > //----------------------------------------------------------------------
> > // From include/drm/drm.h
> > @@ -533,6 +591,13 @@
> > #define VKI_DRM_IOCTL_MODE_GETFB VKI_DRM_IOWR(0xAD, struct
> vki_drm_mode_fb_cmd)
> > #define VKI_DRM_IOCTL_MODE_ADDFB VKI_DRM_IOWR(0xAE, struct
> vki_drm_mode_fb_cmd)
> > #define VKI_DRM_IOCTL_MODE_RMFB VKI_DRM_IOWR(0xAF,
> unsigned int)
> > +#define VKI_DRM_IOCTL_MODE_PAGE_FLIP VKI_DRM_IOWR(0xB0, struct
> vki_drm_mode_crtc_page_flip)
> > +
> > +
> > +#define VKI_DRM_IOCTL_MODE_CREATE_DUMB VKI_DRM_IOWR(0xB2, struct
> vki_drm_mode_create_dumb)
> > +#define VKI_DRM_IOCTL_MODE_MAP_DUMB VKI_DRM_IOWR(0xB3, struct
> vki_drm_mode_map_dumb)
> > +#define VKI_DRM_IOCTL_MODE_DESTROY_DUMB VKI_DRM_IOWR(0xB4, struct
> vki_drm_mode_destroy_dumb)
> > +
> >
> > #define VKI_DRM_COMMAND_BASE 0x40
> > #define VKI_DRM_COMMAND_END 0xA0
> > diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux.h
> valgrind-3.15.0/include/vki/vki-linux.h
> > --- valgrind-3.15.0-orig/include/vki/vki-linux.h 2019-04-13
> 03:56:21.000000000 -0700
> > +++ valgrind-3.15.0/include/vki/vki-linux.h 2020-04-26
> 13:34:12.921637068 -0700
> > @@ -3058,6 +3058,8 @@
> >
> > #define VKI_EVIOCGBIT(ev,len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x20
> + ev, len) /* get event bits */
> >
> > +#define VKI_EVIOCGRAB _VKI_IOW('E', 0x90, int)
> /* Grab/Release device */
> > +
> > /*
> > * Event types
> > */
> >
> >
> >
> > _______________________________________________
> > Valgrind-developers mailing list
> > Val...@li...
> > https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>
>
|
|
From: Martin S. <ma...@ma...> - 2020-04-27 18:04:33
|
On Mon, 27 Apr 2020, Bart Van Assche wrote: > On 2020-04-04 13:35, Martin Storsjö wrote: >> Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 >> as well, and there are mingw toolchains that target those architectures. >> >> This mirrors how the MSVC part of the same expressions are written, >> as (defined(_WIN32) && defined(_M_IX86)) and >> (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 >> or __MINGW32__/__MINGW64__ alone to indicate architecture. >> --- >> include/valgrind.h | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/include/valgrind.h b/include/valgrind.h >> index c8b24a38e..e8195c1ce 100644 >> --- a/include/valgrind.h >> +++ b/include/valgrind.h >> @@ -131,11 +131,11 @@ >> # define PLAT_x86_darwin 1 >> #elif defined(__APPLE__) && defined(__x86_64__) >> # define PLAT_amd64_darwin 1 >> -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ >> +#elif (defined(__MINGW32__) && defined(__i386__)) \ >> || defined(__CYGWIN32__) \ >> || (defined(_WIN32) && defined(_M_IX86)) >> # define PLAT_x86_win32 1 >> -#elif defined(__MINGW64__) \ >> +#elif (defined(__MINGW64__) && defined(__x86_64__)) \ >> || (defined(_WIN64) && defined(_M_X64)) >> # define PLAT_amd64_win64 1 >> #elif defined(__linux__) && defined(__i386__) > > How about changing __MINGW64__ into __MINGW32__? I think that will make > this patch easier to read. From commit d406e8725c09: "mingw64 also > defines __MINGW32__". Please also add a comment that the MinGW64 > compiler defines __MINGW32__. That's fine with me as well, but there is the same kind of tautology for the MSVC variant of ifdefs right next to it, "defined(_WIN64) && defined(_M_X64)". Should I keep that as is or do the same kind of cleanup for that as well? // Martin |
|
From: Bart V. A. <bva...@ac...> - 2020-04-27 17:59:00
|
On 2020-04-04 13:35, Martin Storsjö wrote: > Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 > as well, and there are mingw toolchains that target those architectures. > > This mirrors how the MSVC part of the same expressions are written, > as (defined(_WIN32) && defined(_M_IX86)) and > (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 > or __MINGW32__/__MINGW64__ alone to indicate architecture. > --- > include/valgrind.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/valgrind.h b/include/valgrind.h > index c8b24a38e..e8195c1ce 100644 > --- a/include/valgrind.h > +++ b/include/valgrind.h > @@ -131,11 +131,11 @@ > # define PLAT_x86_darwin 1 > #elif defined(__APPLE__) && defined(__x86_64__) > # define PLAT_amd64_darwin 1 > -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ > +#elif (defined(__MINGW32__) && defined(__i386__)) \ > || defined(__CYGWIN32__) \ > || (defined(_WIN32) && defined(_M_IX86)) > # define PLAT_x86_win32 1 > -#elif defined(__MINGW64__) \ > +#elif (defined(__MINGW64__) && defined(__x86_64__)) \ > || (defined(_WIN64) && defined(_M_X64)) > # define PLAT_amd64_win64 1 > #elif defined(__linux__) && defined(__i386__) How about changing __MINGW64__ into __MINGW32__? I think that will make this patch easier to read. From commit d406e8725c09: "mingw64 also defines __MINGW32__". Please also add a comment that the MinGW64 compiler defines __MINGW32__. Thanks, Bart. |
|
From: Philippe W. <phi...@sk...> - 2020-04-27 16:05:34
|
Hello Martin, Thanks for the patch and the ping. Patches have a trend to be forgotten when sent (only) to mailing list, so it is best to enter a bug in valgrind bugzilla. Thanks Philippe On Mon, 2020-04-27 at 16:16 +0300, Martin Storsjö wrote: > On Sat, 4 Apr 2020, Martin Storsjö wrote: > > > Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 > > as well, and there are mingw toolchains that target those architectures. > > > > This mirrors how the MSVC part of the same expressions are written, > > as (defined(_WIN32) && defined(_M_IX86)) and > > (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 > > or __MINGW32__/__MINGW64__ alone to indicate architecture. > > --- > > include/valgrind.h | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/include/valgrind.h b/include/valgrind.h > > index c8b24a38e..e8195c1ce 100644 > > --- a/include/valgrind.h > > +++ b/include/valgrind.h > > @@ -131,11 +131,11 @@ > > # define PLAT_x86_darwin 1 > > #elif defined(__APPLE__) && defined(__x86_64__) > > # define PLAT_amd64_darwin 1 > > -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ > > +#elif (defined(__MINGW32__) && defined(__i386__)) \ > > || defined(__CYGWIN32__) \ > > || (defined(_WIN32) && defined(_M_IX86)) > > # define PLAT_x86_win32 1 > > -#elif defined(__MINGW64__) \ > > +#elif (defined(__MINGW64__) && defined(__x86_64__)) \ > > || (defined(_WIN64) && defined(_M_X64)) > > # define PLAT_amd64_win64 1 > > #elif defined(__linux__) && defined(__i386__) > > -- > > 2.17.1 > > Ping, any comments on this? > > It's not directly related to valgrind functionality, but glib includes > this header, and this header breaks compilation on non-x86 windows > platforms in its current form. > > // Martin > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: Philippe W. <phi...@sk...> - 2020-04-27 16:04:09
|
Hello Ross,
Thanks for the patch.
Patches have somewhat a trend to be lost when (only) sent to a mailing list.
The best is to file a bug in the valgrind bugzilla and attach the patch.
Thanks
Philippe
On Sun, 2020-04-26 at 14:03 -0700, Ross Martin wrote:
> I use valgrind quite a bit; unfortunately it didn’t support some of the ioctl’s I’m using for my current project. Here’s the patch.
>
>
> diff -ruw valgrind-3.15.0-orig/config.h valgrind-3.15.0/config.h
> --- valgrind-3.15.0-orig/config.h 2019-04-13 03:57:38.000000000 -0700
> +++ valgrind-3.15.0/config.h 2020-04-24 19:05:10.315888225 -0700
> @@ -60,7 +60,7 @@
> #define HAVE_ASM_UNISTD_H 1
>
> /* Define to 1 if as supports fxsave64/fxrstor64. */
> -#define HAVE_AS_AMD64_FXSAVE64 1
> +/* #undef HAVE_AS_AMD64_FXSAVE64 */
>
> /* Define to 1 if as supports floating point phased out category. */
> /* #undef HAVE_AS_PPC_FPPO */
> @@ -216,7 +216,7 @@
> #define HAVE_PTHREAD_YIELD 1
>
> /* Define to 1 if you have the `PTRACE_GETREGS' ptrace request. */
> -#define HAVE_PTRACE_GETREGS 1
> +/* #undef HAVE_PTRACE_GETREGS */
>
> /* Define to 1 if you have the `readlinkat' function. */
> #define HAVE_READLINKAT 1
> diff -ruw valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c
> --- valgrind-3.15.0-orig/coregrind/m_syswrap/syswrap-linux.c 2019-04-13 03:56:21.000000000 -0700
> +++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c 2020-04-26 13:36:42.197565742 -0700
> @@ -8036,6 +8036,165 @@
> PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).size", (Addr)&data->size, sizeof(data->size));
> }
> break;
> + case VKI_DRM_IOCTL_SET_MASTER:
> + PRINT("ioctl(DRM_MODE_SET_MASTER)\n");
> + break;
> + case VKI_DRM_IOCTL_DROP_MASTER:
> + PRINT("ioctl(DRM_MODE_DROP_MASTER)\n");
> + break;
> + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> + if (ARG3) {
> + struct vki_drm_mode_crtc_page_flip* data = (struct vki_drm_mode_crtc_page_flip*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_PAGE_FLIP)\n");
> + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).flags", (Addr)&data->flags, sizeof(data->flags));
> + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).reserved", (Addr)&data->reserved, sizeof(data->reserved));
> + PRE_MEM_READ("ioctl(DRM_MODE_PAGE_FLIP).user_data", (Addr)&data->user_data, sizeof(data->user_data));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_ADDFB:
> + if (ARG3) {
> + struct vki_drm_mode_fb_cmd* data = (struct vki_drm_mode_fb_cmd*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_ADDFB)\n");
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).width", (Addr)&data->width, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).height", (Addr)&data->height, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).pitch", (Addr)&data->pitch, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).bpp", (Addr)&data->bpp, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).depth", (Addr)&data->depth, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_ADDFB).handle", (Addr)&data->handle, sizeof(data->width));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_ADDFB).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETENCODER:
> + if (ARG3) {
> + struct vki_drm_mode_get_encoder* data = (struct vki_drm_mode_get_encoder*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_GETENCODER)\n");
> + PRE_MEM_READ("ioctl(DRM_MODE_GETENCODER).encoder_id", (Addr)&data->encoder_id, sizeof(data->encoder_id));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).encoder_type", (Addr)&data->encoder_type, sizeof(data->encoder_type));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_crtcs", (Addr)&data->possible_crtcs, sizeof(data->possible_crtcs));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETENCODER).possible_clones", (Addr)&data->possible_clones, sizeof(data->possible_clones));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETCRTC:
> + if (ARG3) {
> + struct vki_drm_mode_crtc* data = (struct vki_drm_mode_crtc*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_GETCRTC)\n");
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).crtc_id", (Addr)&data->crtc_id, sizeof(data->crtc_id));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr", (Addr)&data->set_connectors_ptr, sizeof(data->set_connectors_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCRTC).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).fb_id", (Addr)&data->fb_id, sizeof(data->fb_id));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).x", (Addr)&data->x, sizeof(data->x));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).y", (Addr)&data->y, sizeof(data->y));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).gamma_size", (Addr)&data->gamma_size, sizeof(data->gamma_size));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode_valid", (Addr)&data->mode_valid, sizeof(data->mode_valid));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).mode", (Addr)&data->mode, sizeof(data->mode));
> + if(data->set_connectors_ptr && data->count_connectors)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCRTC).set_connectors_ptr[]", (Addr)data->set_connectors_ptr, data->count_connectors*sizeof(__vki_u32));
> + }
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> + if (ARG3) {
> + struct vki_drm_mode_card_res* data = (struct vki_drm_mode_card_res*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_GETRESOURCES)\n");
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr", (Addr)&data->fb_id_ptr, sizeof(data->fb_id_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr", (Addr)&data->crtc_id_ptr, sizeof(data->crtc_id_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr", (Addr)&data->connector_id_ptr, sizeof(data->connector_id_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr", (Addr)&data->encoder_id_ptr, sizeof(data->encoder_id_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_fbs", (Addr)&data->count_fbs, sizeof(data->count_fbs));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_crtcs", (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETRESOURCES).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_fbs", (Addr)&data->count_fbs, sizeof(data->count_fbs));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_crtcs", (Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_connectors", (Addr)&data->count_connectors, sizeof(data->count_connectors));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> + if(data->fb_id_ptr && data->count_fbs)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).fb_id_ptr[]", (Addr)data->fb_id_ptr, data->count_fbs*sizeof(__vki_u32));
> + }
> + if(data->crtc_id_ptr && data->count_crtcs)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).crtc_id_ptr[]", (Addr)data->crtc_id_ptr, data->count_crtcs*sizeof(__vki_u32));
> + }
> + if(data->connector_id_ptr && data->count_connectors)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).connector_id_ptr[]", (Addr)data->connector_id_ptr, data->count_connectors*sizeof(__vki_u32));
> + }
> + if(data->encoder_id_ptr && data->count_encoders)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).encoder_id_ptr[]", (Addr)data->encoder_id_ptr, data->count_encoders*sizeof(__vki_u32));
> + }
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_width", (Addr)&data->min_width, sizeof(data->min_width));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_width", (Addr)&data->max_width, sizeof(data->max_width));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).min_height", (Addr)&data->min_height, sizeof(data->min_height));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETRESOURCES).max_height", (Addr)&data->max_height, sizeof(data->max_height));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> + if (ARG3) {
> + struct vki_drm_mode_get_connector* data = (struct vki_drm_mode_get_connector*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_GETCONNECTOR) for id %ld\n", (long)data->connector_id);
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).connector_id", (Addr)&data->connector_id, sizeof(data->connector_id));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr", (Addr)&data->encoders_ptr, sizeof(data->encoders_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr", (Addr)&data->modes_ptr, sizeof(data->modes_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).props_ptr", (Addr)&data->props_ptr, sizeof(data->props_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr", (Addr)&data->prop_values_ptr, sizeof(data->prop_values_ptr));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_modes", (Addr)&data->count_modes, sizeof(data->count_modes));
> + PRE_MEM_READ("ioctl(DRM_MODE_GETCONNECTOR).count_props", (Addr)&data->count_props, sizeof(data->count_props));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_encoders", (Addr)&data->count_encoders, sizeof(data->count_encoders));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_modes", (Addr)&data->count_modes, sizeof(data->count_modes));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).count_props", (Addr)&data->count_props, sizeof(data->count_props));
> + if(data->encoders_ptr && data->count_modes)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoders_ptr[]", (Addr)data->encoders_ptr, data->count_encoders*sizeof(__vki_u32));
> + }
> + if(data->modes_ptr && data->count_modes)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).modes_ptr[]", (Addr)data->modes_ptr, data->count_modes*sizeof(struct vki_drm_mode_modeinfo));
> + }
> + if(data->props_ptr && data->count_props)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).props_ptr[]", (Addr)data->props_ptr, data->count_props*sizeof(__vki_u32));
> + }
> + if(data->prop_values_ptr && data->count_props)
> + {
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).prop_values_ptr[]", (Addr)data->prop_values_ptr, data->count_props*sizeof(__vki_u64));
> + }
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).encoder_id", (Addr)&data->encoder_id, sizeof(data->encoder_id));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type", (Addr)&data->connector_type, sizeof(data->connector_type));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connector_type_id", (Addr)&data->connector_type_id, sizeof(data->connector_type_id));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).connection", (Addr)&data->connection, sizeof(data->connection));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_width", (Addr)&data->mm_width, sizeof(data->mm_width));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).mm_height", (Addr)&data->mm_height, sizeof(data->mm_height));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_GETCONNECTOR).subpixel", (Addr)&data->subpixel, sizeof(data->subpixel));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> + if (ARG3) {
> + struct vki_drm_mode_create_dumb* data = (struct vki_drm_mode_create_dumb*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_CREATE_DUMB) size (%ldx%ld), %ld bits per pixel\n", (long)data->width, (long)data->height, (long)data->bpp);
> + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).width", (Addr)&data->width, sizeof(data->width));
> + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).height", (Addr)&data->height, sizeof(data->height));
> + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).bpp", (Addr)&data->bpp, sizeof(data->bpp));
> + PRE_MEM_READ("ioctl(DRM_MODE_CREATE_DUMB).flags", (Addr)&data->flags, sizeof(data->flags));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).pitch", (Addr)&data->pitch, sizeof(data->pitch));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).handle", (Addr)&data->handle, sizeof(data->handle));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_CREATE_DUMB).size", (Addr)&data->size, sizeof(data->size));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> + if (ARG3) {
> + struct vki_drm_mode_map_dumb* data = (struct vki_drm_mode_map_dumb*)(Addr)ARG3;
> + PRINT("ioctl(DRM_MODE_MAP_DUMB)");
> + PRE_MEM_READ("ioctl(DRM_MODE_MAP_DUMB).handle", (Addr)&data->handle, sizeof(data->handle));
> + PRE_MEM_WRITE("ioctl(DRM_MODE_MAP_DUMB).offset", (Addr)&data->offset, sizeof(data->offset));
> + }
> + break;
> case VKI_DRM_IOCTL_I915_GETPARAM:
> if (ARG3) {
> vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
> @@ -9316,6 +9475,9 @@
> PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3, sizeof(__vki_u64));
> break;
>
> + case VKI_EVIOCGRAB:
> + break;
> +
> default:
> /* EVIOC* are variable length and return size written on success */
> switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> @@ -10606,6 +10768,119 @@
> POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> }
> break;
> + case VKI_DRM_IOCTL_SET_MASTER:
> + break;
> + case VKI_DRM_IOCTL_DROP_MASTER:
> + break;
> + case VKI_DRM_IOCTL_MODE_PAGE_FLIP:
> + break;
> + case VKI_DRM_IOCTL_MODE_ADDFB:
> + if (ARG3) {
> + struct vki_drm_mode_fb_cmd* data = (struct vki_drm_mode_fb_cmd*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->fb_id, sizeof(data->fb_id));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETENCODER:
> + if (ARG3) {
> + struct vki_drm_mode_get_encoder* data = (struct vki_drm_mode_get_encoder*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->encoder_type, sizeof(data->encoder_type));
> + POST_MEM_WRITE((Addr)&data->crtc_id, sizeof(data->crtc_id));
> + POST_MEM_WRITE((Addr)&data->possible_crtcs, sizeof(data->possible_crtcs));
> + POST_MEM_WRITE((Addr)&data->possible_clones, sizeof(data->possible_clones));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETCRTC:
> + if (ARG3) {
> + struct vki_drm_mode_crtc* data = (struct vki_drm_mode_crtc*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->fb_id, sizeof(data->fb_id));
> + POST_MEM_WRITE((Addr)&data->x, sizeof(data->x));
> + POST_MEM_WRITE((Addr)&data->y, sizeof(data->y));
> + POST_MEM_WRITE((Addr)&data->gamma_size, sizeof(data->gamma_size));
> + POST_MEM_WRITE((Addr)&data->mode_valid, sizeof(data->mode_valid));
> + if(data->mode_valid)
> + {
> + POST_MEM_WRITE((Addr)&data->mode, sizeof(data->mode));
> + }
> + if(data->set_connectors_ptr && data->count_connectors)
> + {
> + POST_MEM_WRITE((Addr)data->set_connectors_ptr, data->count_connectors*sizeof(__vki_u32));
> + }
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETRESOURCES:
> + if (ARG3) {
> + struct vki_drm_mode_card_res* data = (struct vki_drm_mode_card_res*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->count_fbs, sizeof(data->count_fbs));
> + POST_MEM_WRITE((Addr)&data->count_crtcs, sizeof(data->count_crtcs));
> + POST_MEM_WRITE((Addr)&data->count_connectors, sizeof(data->count_connectors));
> + POST_MEM_WRITE((Addr)&data->count_encoders, sizeof(data->count_encoders));
> + if(data->fb_id_ptr && data->count_fbs)
> + {
> + POST_MEM_WRITE((Addr)data->fb_id_ptr, data->count_fbs*sizeof(__vki_u32));
> + }
> + if(data->crtc_id_ptr && data->count_crtcs)
> + {
> + POST_MEM_WRITE((Addr)data->crtc_id_ptr, data->count_crtcs*sizeof(__vki_u32));
> + }
> + if(data->connector_id_ptr && data->count_connectors)
> + {
> + POST_MEM_WRITE((Addr)data->connector_id_ptr, data->count_connectors*sizeof(__vki_u32));
> + }
> + if(data->encoder_id_ptr && data->count_encoders)
> + {
> + POST_MEM_WRITE((Addr)data->encoder_id_ptr, data->count_encoders*sizeof(__vki_u32));
> + }
> + POST_MEM_WRITE((Addr)&data->min_width, sizeof(data->min_width));
> + POST_MEM_WRITE((Addr)&data->max_width, sizeof(data->max_width));
> + POST_MEM_WRITE((Addr)&data->min_height, sizeof(data->min_height));
> + POST_MEM_WRITE((Addr)&data->max_height, sizeof(data->max_height));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_GETCONNECTOR:
> + if (ARG3) {
> + struct vki_drm_mode_get_connector* data = (struct vki_drm_mode_get_connector*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->count_encoders, sizeof(data->count_encoders));
> + POST_MEM_WRITE((Addr)&data->count_modes, sizeof(data->count_modes));
> + POST_MEM_WRITE((Addr)&data->count_props, sizeof(data->count_props));
> + if(data->encoders_ptr && data->count_modes)
> + {
> + POST_MEM_WRITE((Addr)data->encoders_ptr, data->count_encoders*sizeof(__vki_u32));
> + }
> + if(data->modes_ptr && data->count_modes)
> + {
> + POST_MEM_WRITE((Addr)data->modes_ptr, data->count_modes*sizeof(struct vki_drm_mode_modeinfo));
> + }
> + if(data->props_ptr && data->count_props)
> + {
> + POST_MEM_WRITE((Addr)data->props_ptr, data->count_props*sizeof(__vki_u32));
> + }
> + if(data->prop_values_ptr && data->count_props)
> + {
> + POST_MEM_WRITE((Addr)data->prop_values_ptr, data->count_props*sizeof(__vki_u64));
> + }
> + POST_MEM_WRITE((Addr)&data->encoder_id, sizeof(data->encoder_id));
> + POST_MEM_WRITE((Addr)&data->connector_type, sizeof(data->connector_type));
> + POST_MEM_WRITE((Addr)&data->connector_type_id, sizeof(data->connector_type_id));
> + POST_MEM_WRITE((Addr)&data->connection, sizeof(data->connection));
> + POST_MEM_WRITE((Addr)&data->mm_width, sizeof(data->mm_width));
> + POST_MEM_WRITE((Addr)&data->mm_height, sizeof(data->mm_height));
> + POST_MEM_WRITE((Addr)&data->subpixel, sizeof(data->subpixel));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_CREATE_DUMB:
> + if (ARG3) {
> + struct vki_drm_mode_create_dumb* data = (struct vki_drm_mode_create_dumb*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->pitch, sizeof(data->pitch));
> + POST_MEM_WRITE((Addr)&data->handle, sizeof(data->handle));
> + POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
> + }
> + break;
> + case VKI_DRM_IOCTL_MODE_MAP_DUMB:
> + if (ARG3) {
> + struct vki_drm_mode_map_dumb* data = (struct vki_drm_mode_map_dumb*)(Addr)ARG3;
> + POST_MEM_WRITE((Addr)&data->offset, sizeof(data->offset));
> + }
> + break;
> case VKI_DRM_IOCTL_I915_GETPARAM:
> if (ARG3) {
> vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
> @@ -11313,6 +11588,9 @@
> POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64));
> break;
>
> + case VKI_EVIOCGRAB:
> + break;
> +
> default:
> /* EVIOC* are variable length and return size written on success */
> switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
> diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux-drm.h valgrind-3.15.0/include/vki/vki-linux-drm.h
> --- valgrind-3.15.0-orig/include/vki/vki-linux-drm.h 2019-04-13 03:56:21.000000000 -0700
> +++ valgrind-3.15.0/include/vki/vki-linux-drm.h 2020-04-26 11:09:08.471160985 -0700
> @@ -440,6 +440,64 @@
> __vki_u64 green;
> __vki_u64 blue;
> };
> +struct vki_drm_mode_crtc_page_flip {
> + __vki_u32 crtc_id;
> + __vki_u32 fb_id;
> + __vki_u32 flags;
> + __vki_u32 reserved;
> + __vki_u64 user_data;
> +};
> +struct vki_drm_mode_get_connector {
> +
> + __vki_u64 encoders_ptr;
> + __vki_u64 modes_ptr;
> + __vki_u64 props_ptr;
> + __vki_u64 prop_values_ptr;
> +
> + __vki_u32 count_modes;
> + __vki_u32 count_props;
> + __vki_u32 count_encoders;
> +
> + __vki_u32 encoder_id; /**< Current Encoder */
> + __vki_u32 connector_id; /**< Id */
> + __vki_u32 connector_type;
> + __vki_u32 connector_type_id;
> +
> + __vki_u32 connection;
> + __vki_u32 mm_width; /**< width in millimeters */
> + __vki_u32 mm_height; /**< height in millimeters */
> + __vki_u32 subpixel;
> +
> + __vki_u32 pad;
> +};
> +/* create a dumb scanout buffer */
> +struct vki_drm_mode_create_dumb {
> + __vki_u32 height;
> + __vki_u32 width;
> + __vki_u32 bpp;
> + __vki_u32 flags;
> + /* handle, pitch, size will be returned */
> + __vki_u32 handle;
> + __vki_u32 pitch;
> + __vki_u64 size;
> +};
> +
> +/* set up for mmap of a dumb scanout buffer */
> +struct vki_drm_mode_map_dumb {
> + /** Handle for the object being mapped. */
> + __vki_u32 handle;
> + __vki_u32 pad;
> + /**
> + * Fake offset to use for subsequent mmap call
> + *
> + * This is a fixed-size type for 32/64 compatibility.
> + */
> + __vki_u64 offset;
> +};
> +
> +struct vki_drm_mode_destroy_dumb {
> + __vki_u32 handle;
> +};
>
> //----------------------------------------------------------------------
> // From include/drm/drm.h
> @@ -533,6 +591,13 @@
> #define VKI_DRM_IOCTL_MODE_GETFB VKI_DRM_IOWR(0xAD, struct vki_drm_mode_fb_cmd)
> #define VKI_DRM_IOCTL_MODE_ADDFB VKI_DRM_IOWR(0xAE, struct vki_drm_mode_fb_cmd)
> #define VKI_DRM_IOCTL_MODE_RMFB VKI_DRM_IOWR(0xAF, unsigned int)
> +#define VKI_DRM_IOCTL_MODE_PAGE_FLIP VKI_DRM_IOWR(0xB0, struct vki_drm_mode_crtc_page_flip)
> +
> +
> +#define VKI_DRM_IOCTL_MODE_CREATE_DUMB VKI_DRM_IOWR(0xB2, struct vki_drm_mode_create_dumb)
> +#define VKI_DRM_IOCTL_MODE_MAP_DUMB VKI_DRM_IOWR(0xB3, struct vki_drm_mode_map_dumb)
> +#define VKI_DRM_IOCTL_MODE_DESTROY_DUMB VKI_DRM_IOWR(0xB4, struct vki_drm_mode_destroy_dumb)
> +
>
> #define VKI_DRM_COMMAND_BASE 0x40
> #define VKI_DRM_COMMAND_END 0xA0
> diff -ruw valgrind-3.15.0-orig/include/vki/vki-linux.h valgrind-3.15.0/include/vki/vki-linux.h
> --- valgrind-3.15.0-orig/include/vki/vki-linux.h 2019-04-13 03:56:21.000000000 -0700
> +++ valgrind-3.15.0/include/vki/vki-linux.h 2020-04-26 13:34:12.921637068 -0700
> @@ -3058,6 +3058,8 @@
>
> #define VKI_EVIOCGBIT(ev,len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
>
> +#define VKI_EVIOCGRAB _VKI_IOW('E', 0x90, int) /* Grab/Release device */
> +
> /*
> * Event types
> */
>
>
>
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
|
|
From: Julian S. <js...@ac...> - 2020-04-27 13:54:49
|
Greetings. Unfortunately the previous plan dated 5 Feb 2020 didn't work out, partly due to lack of time and partly because various architectures (MIPS, s390 and POWER) were still broken by the "grail" (&&-recovery) changes that landed at the start of the year. The situation has now improved. All architectures now work again -- a big thank-you to the port maintainers for fixing them. However, available time remains scarce, and the need to freeze and ship has increased. As the trunk seems in a fairly good state right now, the revised plan is as follows: at the end of day, UTC+2, Weds 29 April, a 3.16 branch will be made from the trunk. Then there will be a two week stabilisation period, so that the release will be made on 14 May. Once the branch has been made, we can cherry pick low-risk and/or important fixes that land on the trunk after the branching, providing there is a reasonable case for them. J |
|
From: Martin S. <ma...@ma...> - 2020-04-27 13:16:14
|
On Sat, 4 Apr 2020, Martin Storsjö wrote: > Don't assume that __MINGW32__ implies x86; Windows runs on ARM/ARM64 > as well, and there are mingw toolchains that target those architectures. > > This mirrors how the MSVC part of the same expressions are written, > as (defined(_WIN32) && defined(_M_IX86)) and > (defined(_WIN64) && defined(_M_X64)) - not relying on _WIN32/_WIN64 > or __MINGW32__/__MINGW64__ alone to indicate architecture. > --- > include/valgrind.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/valgrind.h b/include/valgrind.h > index c8b24a38e..e8195c1ce 100644 > --- a/include/valgrind.h > +++ b/include/valgrind.h > @@ -131,11 +131,11 @@ > # define PLAT_x86_darwin 1 > #elif defined(__APPLE__) && defined(__x86_64__) > # define PLAT_amd64_darwin 1 > -#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ > +#elif (defined(__MINGW32__) && defined(__i386__)) \ > || defined(__CYGWIN32__) \ > || (defined(_WIN32) && defined(_M_IX86)) > # define PLAT_x86_win32 1 > -#elif defined(__MINGW64__) \ > +#elif (defined(__MINGW64__) && defined(__x86_64__)) \ > || (defined(_WIN64) && defined(_M_X64)) > # define PLAT_amd64_win64 1 > #elif defined(__linux__) && defined(__i386__) > -- > 2.17.1 Ping, any comments on this? It's not directly related to valgrind functionality, but glib includes this header, and this header breaks compilation on non-x86 windows platforms in its current form. // Martin |
|
From: Ross M. <ros...@ie...> - 2020-04-27 13:11:07
|
You're undoubtedly correct, Paul, about config.h. I didn't make any changes to it though. You can discard changes to it if you wish. config.h was apparently in the original distribution, and was changed automatically when I built valgrind, so it got caught up in the diff. I'm guessing it probably shouldn't be in the distribution at all, if it's automatically rebuilt? I thought about editing it out of the diff, but opted not to, since I assumed it didn't matter -- those changes would be lost anyway when someone else reconfigured and rebuilt. Ross On Sun, Apr 26, 2020, 11:03 PM Paul Floyd <pj...@wa...> wrote: > > > > On 26 Apr 2020, at 23:03, Ross Martin <ros...@ie...> wrote: > > > > I use valgrind quite a bit; unfortunately it didn’t support some of the > ioctl’s I’m using for my current project. Here’s the patch. > > > > > > diff -ruw valgrind-3.15.0-orig/config.h valgrind-3.15.0/config.h > > --- valgrind-3.15.0-orig/config.h 2019-04-13 03:57:38.000000000 -0700 > > +++ valgrind-3.15.0/config.h 2020-04-24 19:05:10.315888225 -0700 > > @@ -60,7 +60,7 @@ > > #define HAVE_ASM_UNISTD_H 1 > > > > /* Define to 1 if as supports fxsave64/fxrstor64. */ > > -#define HAVE_AS_AMD64_FXSAVE64 1 > > +/* #undef HAVE_AS_AMD64_FXSAVE64 */ > > > Hi Ross > > I think that the changes to config.h should really be in config.h.in and > configure.ac > > A+ > Paul > > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers > |
|
From: Paul F. <pj...@wa...> - 2020-04-27 06:03:23
|
> On 26 Apr 2020, at 23:03, Ross Martin <ros...@ie...> wrote: > > I use valgrind quite a bit; unfortunately it didn’t support some of the ioctl’s I’m using for my current project. Here’s the patch. > > > diff -ruw valgrind-3.15.0-orig/config.h valgrind-3.15.0/config.h > --- valgrind-3.15.0-orig/config.h 2019-04-13 03:57:38.000000000 -0700 > +++ valgrind-3.15.0/config.h 2020-04-24 19:05:10.315888225 -0700 > @@ -60,7 +60,7 @@ > #define HAVE_ASM_UNISTD_H 1 > > /* Define to 1 if as supports fxsave64/fxrstor64. */ > -#define HAVE_AS_AMD64_FXSAVE64 1 > +/* #undef HAVE_AS_AMD64_FXSAVE64 */ Hi Ross I think that the changes to config.h should really be in config.h.in and configure.ac A+ Paul |