[fpc-pascal] fpmmap problem 64 bit linux
Rainer Stratmann
rainerstratmann at t-online.de
Sun Nov 22 17:53:47 CET 2020
mmap2 could be helpful.
The mmap2() system call provides the same interface as mmap(),
except that the final argument specifies the offset into the file in
4096-byte units (instead of bytes, as is done by mmap()). This
enables applications that use a 32-bit off_t to map large files (up
to 2^44 bytes).
https://man7.org/linux/man-pages/man2/mmap2.2.html
But it is not yet implemented.
FPC 3.0.4
Am Samstag, 21. November 2020, 13:31:22 CET schrieb Rainer Stratmann via fpc-
pascal:
> I watched the syscalls with strace and my assumption was confirmed.
>
> function Fpmmap( start: pointer; len: size_t; prot: cint; flags: cint;
> fd:cint; offst: off_t ):pointer;
>
> My offst value for fpmmap is $100000000.
>
> strace output:
>
> mmap(NULL, 1920000, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_32BIT, 3, 0) = -1
> EINVAL
>
> Here the value is 0.
>
> It is likely that the offst value is stripped to 32 bit before passed to the
> mmap syscall.
>
>
>
> Am Samstag, 21. November 2020, 01:15:20 CET schrieb Alexander Grotewohl via
>
> fpc-pascal:
> > It would seem C handles this at compile time with a define.. mapping mmap
> > to mmap64. Which would almost seem to imply you'd end up with a 32 bit
> > binary that would only work on 64 bit systems. I'm not really sure how
> > this would work for Pascal. You could start by looking in the file listed
> > in the fpmmap docs you posted. My guess is the easiest answer is
> > "distribute both 32 and 64 bit versions," but that doesn't help when you
> > need to test the 32 bit one..
> >
> > --
> > Alexander Grotewohl
> > https://dcclost.com
> >
> > --
> > Alexander Grotewohl
> > https://dcclost.com
> > ________________________________
> > From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> on behalf of
> > Rainer Stratmann via fpc-pascal <fpc-pascal at lists.freepascal.org> Sent:
> > Friday, November 20, 2020 6:33:51 PM
> > To: fpc-pascal at lists.freepascal.org <fpc-pascal at lists.freepascal.org>
> > Cc: Rainer Stratmann <rainerstratmann at t-online.de>
> > Subject: [fpc-pascal] fpmmap problem 64 bit linux
> >
> > A 32 bit freepascal program on a 32 bit Linux Debian system is working
> > properly. It uses fpmmap for getting the adress of a kms framebuffer.
> >
> > The same 32 bit program on a 64 bit Linux Debian system *** is not
> > working.
> > When it comes to the fpmmap it gives an error:
> >
> > Sys_EINVAL
> >
> > One of the record fields Start, length or offset is invalid.
> >
> > https://www.freepascal.org/docs-html/rtl/baseunix/fpmmap.html
> >
> > I figured out that it likely can only be the offset value since start and
> > length are always the same.
> >
> > The offset value I got from a previous DRM function.
> >
> > On the 32 bit System this offset value is $10000000 (fits in 32 bit)
> > And on the 64 bit System this offset value is $100000000 (does not fit in
> > 32 bit).
> >
> > Can it be possible that the fpmmap function strips the offset value to 32
> > bit? Is there another way to call fpmmap more directly?
> > What does fpmmap exactly?
> > Where can I research?
> >
> >
> > ***
> > dpkg --add-architecture i386
> > apt-get update
> > apt-get install libc6-i386
> >
> >
> > _______________________________________________
> > fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list