NtMapViewOfSection - Chasing more holes

Robert Lunnon bobl at optushome.com.au
Sun Apr 17 07:26:06 CDT 2005


On Sun, 17 Apr 2005 03:38 pm, Robert Lunnon wrote:
> NtMapView of Section is returning bad values from the wineserver calls
> trace:virtual:MapViewOfFileEx Mapping Section View handle=58, pid=ffffffff,
> addr=0 zbits=0 commit=0, offs_l=0 offs_h=0 count=0
> trace:virtual:NtMapViewOfSection handle=58 process=ffffffff addr=0
> off=000000000 size=0 access=4
> View: 7f640000 - 7f640fff (anonymous)
>       7f640000 - 7f640fff c-rw-
> trace:virtual:NtMapViewOfSection handle=58 size=1000 offset=000000000
> trace:virtual:MapViewOfFileEx Mapping Section View handle=78, pid=ffffffff,
> addr=0 zbits=0 commit=0, offs_l=0 offs_h=0 count=0
> trace:virtual:NtMapViewOfSection handle=78 process=ffffffff addr=0
> off=000000000 size=0 access=2
>
> Breakpoint 2, NtMapViewOfSection (handle=0x78, process=0xffffffff,
> addr_ptr=0x7fd8ed48, zero_bits=0, commit_size=0, offset=0x7fd8ed1c,
>     size_ptr=0x7fd8ed44, inherit=ViewShare, alloc_type=0, protect=2) at
> virtual.c:1737
> 1737            ERR("Sizes larger than 4Gb not supported\n");
>
> (gdb) disp base
> 1: base = (void *) 0x0
> (gdb) disp header_size
> 2: header_size = 0
> (gdb) disp size_high
> 3: size_high = 74960
> (gdb) disp size_low
> 4: size_low = 77824
> (gdb) disp res
> 5: res = 0
> (gdb)
>
> This doesn't seem right to me.
>
>
> Bob

Well here I am talking to myself....

For those that care I have locaed this problem to this code in 
server/mapping.c function get_file_size()

*size_high = st.st_size >> 32;

it seems gcc gets this wrong when sizeof(st.st_size) == 4 

This following code fixes the problem
 
*size_high= (sizeof(st.st_size) >4) ?  (st.st_size >> 32) : 0;




More information about the wine-devel mailing list