hi,
Valgrind reports the correct wirte as an invalid write. It is
occurring at /usr/libexec/ld.so.
I run following program.
$ cat main.c
#include <stdio.h>
int
main(int argc, char *argv[])
{
printf("Hello, world\n");
return (0);
}
$ cc -g main.c
$ valgrind ./a.out
==46291== Memcheck, a memory error detector
==46291== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==46291== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==46291== Command: /home/asou/tmp/a.out
==46291==
==46291== Invalid write of size 1
==46291== at 0x410730C: ???
==46291== by 0x4103CC8: ???
==46291== by 0x41032EE: ???
==46291== by 0x4102605: ???
==46291== Address 0x40052d0 is not stack'd, malloc'd or (recently) free'd
==46291==
==46291== Invalid write of size 1
==46291== at 0x410730E: ???
==46291== by 0x4103CC8: ???
==46291== by 0x41032EE: ???
==46291== by 0x4102605: ???
==46291== Address 0x40052d1 is not stack'd, malloc'd or (recently) free'd
==46291==
</snip>
==46291== For counts of detected and suppressed errors, rerun with: -v
==46291== Use --track-origins=yes to see where uninitialised values come from
==46291== ERROR SUMMARY: 3209 errors from 357 contexts (suppressed: 0 from 0)
$
I got 3209 errors.
However, when the following patch was applied, the error was reduced
to four as below:
$ valgrind ./a.out
==7449== Memcheck, a memory error detector
==7449== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==7449== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==7449== Command: /home/asou/tmp/a.out
==7449==
==7449== Use of uninitialised value of size 8
==7449== at 0x4ACB969: write (sys/w_write.c:26)
==7449== by 0x4AB60DF: __sflush (stdio/fflush.c:80)
==7449== by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
==7449== by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
==7449== by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
==7449== by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
==7449== by 0x4A43DB0: printf (stdio/printf.c:44)
==7449== by 0x109374: main (main.c:6)
==7449==
==7449== Use of uninitialised value of size 8
==7449== at 0x4ACB97A: write (sys/w_write.c:26)
==7449== by 0x4AB60DF: __sflush (stdio/fflush.c:80)
==7449== by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
==7449== by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
==7449== by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
==7449== by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
==7449== by 0x4A43DB0: printf (stdio/printf.c:44)
==7449== by 0x109374: main (main.c:6)
==7449==
Hello, world
==7449== Use of uninitialised value of size 8
==7449== at 0x4ACB98E: write (sys/w_write.c:28)
==7449== by 0x4AB60DF: __sflush (stdio/fflush.c:80)
==7449== by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
==7449== by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
==7449== by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
==7449== by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
==7449== by 0x4A43DB0: printf (stdio/printf.c:44)
==7449== by 0x109374: main (main.c:6)
==7449==
==7449== Use of uninitialised value of size 8
==7449== at 0x4ACC31C: _thread_finalize (stdlib/atexit.c:131)
==7449== by 0x4ACC31C: __cxa_finalize (stdlib/atexit.c:153)
==7449== by 0x4AD13C0: exit (stdlib/exit.c:54)
==7449== by 0x109141: ___start (in /home/asou/tmp/a.out)
==7449==
==7449==
==7449== FILE DESCRIPTORS: 3 open at exit.
==7449== Open file descriptor 2:
==7449== <inherited from parent>
==7449==
==7449== Open file descriptor 1:
==7449== <inherited from parent>
==7449==
==7449== Open file descriptor 0:
==7449== <inherited from parent>
==7449==
==7449==
==7449== HEAP SUMMARY:
==7449== in use at exit: 65,536 bytes in 1 blocks
==7449== total heap usage: 1 allocs, 0 frees, 65,536 bytes allocated
==7449==
==7449== LEAK SUMMARY:
==7449== definitely lost: 0 bytes in 0 blocks
==7449== indirectly lost: 0 bytes in 0 blocks
==7449== possibly lost: 0 bytes in 0 blocks
==7449== still reachable: 65,536 bytes in 1 blocks
==7449== suppressed: 0 bytes in 0 blocks
==7449== Rerun with --leak-check=full to see details of leaked memory
==7449==
==7449== For counts of detected and suppressed errors, rerun with: -v
==7449== Use --track-origins=yes to see where uninitialised values come from
==7449== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
$
The patch to Makefile is a temporary. Because, my previous patch
https://marc.info/?l=openbsd-ports&m=158624064212984&w=2
does not get OK.
ok?
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/valgrind/Makefile,v
retrieving revision 1.23
diff -u -p -u -r1.23 Makefile
--- Makefile 23 Dec 2019 23:26:32 -0000 1.23
+++ Makefile 30 Apr 2020 06:39:41 -0000
@@ -7,7 +7,7 @@ CATEGORIES = devel
V = 3.10.1
PV = 20160331
-REVISION = 16
+REVISION = 17
DISTNAME = valgrind-${V}
EXTRACT_SUFX = .tar.bz2
Index: patches/patch-coregrind_m_syswrap_syswrap_openbsd_c
===================================================================
RCS file:
/cvs/ports/devel/valgrind/patches/patch-coregrind_m_syswrap_syswrap_openbsd_c,v
retrieving revision 1.2
diff -u -p -u -r1.2 patch-coregrind_m_syswrap_syswrap_openbsd_c
--- patches/patch-coregrind_m_syswrap_syswrap_openbsd_c 23 Dec 2019 23:26:32
-0000 1.2
+++ patches/patch-coregrind_m_syswrap_syswrap_openbsd_c 30 Apr 2020 06:39:41
-0000
@@ -55,7 +55,7 @@
PRE(sys_getsockname)
{
PRINT("sys_getsockname ( %ld, %#lx, %#lx )",ARG1,ARG2,ARG3);
-@@ -791,15 +791,6 @@
+@@ -780,15 +791,6 @@
SET_STATUS_Success(0);
}
@@ -71,7 +71,7 @@
PRE(sys_getlogin)
{
PRINT("sys_getlogin ( %#lx, %ld )",ARG1,ARG2);
-@@ -2787,17 +2778,40 @@
+@@ -2776,17 +2778,40 @@
PRE(sys___thrsleep)
{
@@ -115,7 +115,7 @@
}
PRE(sys___thrsigdivert)
-@@ -2830,6 +2843,68 @@
+@@ -2819,6 +2844,68 @@
// XXXTBD
}
@@ -184,7 +184,7 @@
PRE(sys_utimensat)
{
// XXXTBD
-@@ -3961,7 +4036,7 @@
+@@ -3950,7 +4037,7 @@
GENXY(__NR_close, sys_close), // 6
BSDXY(__NR_getentropy, sys_getentropy), // 7
@@ -193,7 +193,16 @@
GENX_(__NR_link, sys_link), // 9
GENX_(__NR_unlink, sys_unlink), // 10
-@@ -4053,7 +4128,7 @@
+@@ -4031,7 +4118,7 @@
+ GENX_(__NR_select, sys_select), // 71
+ BSDXY(__NR_kevent, sys_kevent), // 72
+ GENX_(__NR_munmap, sys_munmap), // 73
+- GENX_(__NR_mprotect, sys_mprotect), // 74
++ GENXY(__NR_mprotect, sys_mprotect), // 74
+ GENX_(__NR_madvise, sys_madvise), // 75
+
+ GENX_(__NR_utimes, sys_utimes), // 76
+@@ -4042,7 +4129,7 @@
GENX_(__NR_getpgrp, sys_getpgrp), // 81
GENX_(__NR_setpgid, sys_setpgid), // 82
@@ -202,7 +211,7 @@
BSDX_(__NR_utimensat, sys_utimensat), // 84
BSDX_(__NR_futimens, sys_futimens), // 85
-@@ -4079,7 +4094,7 @@
+@@ -4079,7 +4166,7 @@
BSDX_(__NR_sigsuspend, sys_sigsuspend), // 111
BSDX_(__NR_sendsyslog, sys_sendsyslog), // 112
// obsol orecvmsg // 113
--
ASOU Masato