[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