Re: [fpc-pascal] fpmmap problem 64 bit linux
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 $1. > > strace output: > > mmap(NULL, 192, 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 on behalf of > > Rainer Stratmann via fpc-pascal Sent: > > Friday, November 20, 2020 6:33:51 PM > > To: fpc-pascal@lists.freepascal.org > > Cc: Rainer Stratmann > > 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 $1000 (fits in 32 bit) > > And on the 64 bit System this offset value is $1 (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@lists.freepascal.org > > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal > > ___ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] fpmmap problem 64 bit linux
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 $1. strace output: mmap(NULL, 192, 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 on behalf of > Rainer Stratmann via fpc-pascal Sent: > Friday, November 20, 2020 6:33:51 PM > To: fpc-pascal@lists.freepascal.org > Cc: Rainer Stratmann > 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 $1000 (fits in 32 bit) > And on the 64 bit System this offset value is $1 (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@lists.freepascal.org > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] fpmmap problem 64 bit linux
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 on behalf of Rainer Stratmann via fpc-pascal Sent: Friday, November 20, 2020 6:33:51 PM To: fpc-pascal@lists.freepascal.org Cc: Rainer Stratmann 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 $1000 (fits in 32 bit) And on the 64 bit System this offset value is $1 (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@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
[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 $1000 (fits in 32 bit) And on the 64 bit System this offset value is $1 (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@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal