[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-hackers
Subject: Re: Dtrace oddity
From: "Christopher R. Bowman" <crb () chrisbowman ! com>
Date: 2017-04-12 3:57:16
Message-ID: 15DF9D2C-40A4-4341-AE7E-E8A776ED3F09 () ChrisBowman ! com
[Download RAW message or body]
Fabian,
That was hugely helpful. I should have known about the extra mmap sys calls, but \
sometimes your mind only sees what it expects to see. Checking for negative values \
on open is also the right thing to do (I had mis-read the man page to imply that zero \
indicated a failure to open). But the real help was putting one of the flags for \
mmap. I don't think FreeBSD used to check for that as I have a vague recollection \
that this code used to work on a pervious version. Thanks SO SO much for the help!
Christopher
--------
Christopher R. Bowman
email: crb@ChrisBowman.com
World Wide GSM cell: +1 (408) 476-2299
> On Apr 11, 2017, at 6:14 AM, Fabian Keil <freebsd-listen@fabiankeil.de> wrote:
>
> 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't quite know good strategies to debug the
> > kernel (yet) so I thought I'd 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:
> >
> > crb@retread:60> dtrace -n 'syscall:freebsd:mmap:entry /execname == "test"/ {}'
> > dtrace: description 'syscall:freebsd:mmap:entry ' matched 1
> > probe CPU ID FUNCTION:NAME
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> > 0 63401 mmap:entry
> >
> > 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 = open (argv[1], O_RDWR);
> > if (device == 0) {
>
> You should check for -1 here.
>
> > void *pa = 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 flags
> > must be included.
>
> Fabian
_______________________________________________
freebsd-hackers@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic