[Mono-dev] Syscall.mmap problem
Jonathan Pryor
jonpryor at vt.edu
Sun Oct 28 19:31:04 EDT 2007
On Sun, 2007-10-28 at 18:20 -0300, Mauricio Henriquez wrote:
> in my mmap test the "/pr.txt" file exist so the "error handling" is only
> for test porpuses and to watch if any of the mmap paremeter is wronge
> (this is a test of the mmap not the final working with the mmap on the
> video4linus.net), in my case the file descriptor is correct (not < 0),
> in any case thak you Jonathan for your test code, if I run your code I
> get the same Console.WriteLine(start.ToString()) = -1 and this message
> with the error handling:
>
> mmap: Value too large for defined data type //I don't know what means
The only ideas I have left are:
1. What are the permissions of `/pr.txt'?
2. What platform is this on? x86? PPC? Which operating system?
3. What version of Mono?
4. Are you compiling Mono yourself?
The mere fact you got "mmap: Value too large for defined data type" as
output implies that you're running svn (as perror() used to always write
"Success"), and still suggests the problem is in
Mono_Posix_Syscall_mmap().
If this is the case, then please run within gdb (see input after (gdb)
prompts):
$ gdb `which mono`
(gdb) b Mono_Posix_Syscall_mmap
Function "Mono_Posix_Syscall_mmap" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (Mono_Posix_Syscall_mmap) pending.
(gdb) r mmap.exe /pr.txt
Starting program: /home/jon/Development/mono-HEAD/install/bin/mono
mmap.exe /pr.txt
warning: Lowest section in system-supplied DSO at 0xffffe000 is .hash at
ffffe0b4
[Thread debugging using libthread_db enabled]
[New Thread 4158057136 (LWP 20303)]
[New Thread 4149185440 (LWP 20306)]
[New Thread 4149037984 (LWP 20307)]
Breakpoint 2 at 0xf73a0da0: file sys-mman.c, line 27.
Pending breakpoint "Mono_Posix_Syscall_mmap" resolved
fstat ok
length = 6
[Switching to Thread 4158057136 (LWP 20303)]
Breakpoint 2, Mono_Posix_Syscall_mmap (start=0x0, length=6, prot=1,
flags=2, fd=6, offset=0) at sys-mman.c:27
27 mph_return_val_if_size_t_overflow (length, MAP_FAILED);
(gdb) n
24 {
(gdb) n
27 mph_return_val_if_size_t_overflow (length, MAP_FAILED);
(gdb) n
30 if (Mono_Posix_FromMmapProts (prot, &_prot) == -1)
(gdb) n
32 if (Mono_Posix_FromMmapFlags (flags, &_flags) == -1)
(gdb) n
35 return mmap (start, (size_t) length, _prot, _flags, fd,
(off_t) offset);
(gdb) n
36 }
(gdb) c
Continuing.
The point is to see where Mono_Posix_Syscall_mmap() returns -- does it
actually call mmap()? Or does it exit early because of an overflow or
translation error? If it does exit early, where does it ext?
Thanks,
- Jon
More information about the Mono-devel-list
mailing list