Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Apr 2017 15:14:26 +0200
From:      Fabian Keil <freebsd-listen@fabiankeil.de>
To:        Christopher Bowman <crb@chrisbowman.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Dtrace oddity
Message-ID:  <20170411151426.3b760182@fabiankeil.de>
In-Reply-To: <CD5E9B03-6147-4E4D-BED6-6C45022051E3@chrisbowman.com>
References:  <CD5E9B03-6147-4E4D-BED6-6C45022051E3@chrisbowman.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/Wjcw_RzPb68pzBvBRYkVM4L
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Christopher Bowman <crb@chrisbowman.com> wrote:

> The man page lists a bunch of reasons for EINVAL so I want to
> investigate this and I don=E2=80=99t quite know good strategies to debug =
the
> kernel (yet) so I thought I=E2=80=99d experiment with Dtrace a bit.  Here=
 is the
> oddity: when I run Dtrace and then run my test program I get the
> following output from Dtrace:
>=20
> crb@retread:60> dtrace -n 'syscall:freebsd:mmap:entry /execname =3D=3D "t=
est"/ {}'
> dtrace: description 'syscall:freebsd:mmap:entry ' matched 1
> probe CPU     ID                    FUNCTION:NAME
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>   0  63401                       mmap:entry=20
>=20
> I think Dtrace is indicating that the mmap syscall was called 12 times
> by my test program yet I can see how the program below would have done
> that.

A bunch of mmap syscalls occur before main is even entered.
Try running your program with truss to see what's going on.

> Here is my program:
[...]
> 	printf("opening device %s\n", argv[1]);
> 	int device =3D open (argv[1], O_RDWR);
> 	if (device =3D=3D 0) {

You should check for -1 here.

> 	void *pa =3D mmap (0, 4095, PROT_READ | PROT_WRITE, 0, device, 0);

No flags? From the mmap man page:

|     [EINVAL]           None of MAP_ANON, MAP_PRIVATE, MAP_SHARED, or
|                        MAP_STACK was specified.  At least one of these fl=
ags
|                        must be included.

Fabian

--Sig_/Wjcw_RzPb68pzBvBRYkVM4L
Content-Type: application/pgp-signature
Content-Description: OpenPGP digital signature

-----BEGIN PGP SIGNATURE-----

iF0EARECAB0WIQTKUNd6H/m3+ByGULIFiohV/3dUnQUCWOzWswAKCRAFiohV/3dU
naR9AKC88uaGiPliml1AEINPpCMkoYMAWQCfSPsCr/Gj/fo9J+0zFGmy+EYYvXU=
=JFvI
-----END PGP SIGNATURE-----

--Sig_/Wjcw_RzPb68pzBvBRYkVM4L--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170411151426.3b760182>