fpgetrlimit/fpugetrlimit with RLIMIT_STACK argument gives bogus values under i386-linux target.
Original Reporter info from Mantis: Cyrax
-
Reporter name:
Original Reporter info from Mantis: Cyrax
- Reporter name:
Description:
I noticed this bug during my debugging session on why lazbuild fails randomly by trying to limit how much stack is reserved on program and threads it creates (https://bugs.freepascal.org/view.php?id=37179)
Also setting stack values (namely rlim_cur) will fail under i386-linux.
x86_64-linux target does not inhibit this problem.
Fix is to change calls to syscall_nr_getrlimit, syscall_nr_ugetrlimit and syscall_nr_setrlimit to syscall_nr_prlimit64 one.
See attached test project (project1.zip) and patch (ossysc.inc.diff) for more info.
Additional information:
test project output under i386-linux target:
syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : alimits.rlim_cur 9223372032568197120 syscall_nr_getrlimit : alimits.rlim_max 0 syscall_nr_ugetrlimit : success TRUE syscall_nr_ugetrlimit : alimits.rlim_cur 18446744069422972928 syscall_nr_ugetrlimit : alimits.rlim_max 0 syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : blimits.rlim_cur 9223372032568197120 syscall_nr_getrlimit : blimits.rlim_max 0 set syscall_nr_setrlimit : blimits.rlim_cur 2097152 syscall_nr_setrlimit : success FALSE syscall_nr_setrlimit : blimits.rlim_cur 2097152 syscall_nr_setrlimit : blimits.rlim_max 0 syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : blimits.rlim_cur 9223372032568197120 syscall_nr_getrlimit : blimits.rlim_max 0 get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 8388608 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615 get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 8388608 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615 set syscall_nr_prlimit64 : alimits.rlim_cur 2097152 set syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 2097152 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615
---
test project output under x86_64-linux target:
syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : alimits.rlim_cur 8388608 syscall_nr_getrlimit : alimits.rlim_max 18446744073709551615 syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : blimits.rlim_cur 8388608 syscall_nr_getrlimit : blimits.rlim_max 18446744073709551615 set syscall_nr_setrlimit : blimits.rlim_cur 2097152 syscall_nr_setrlimit : success TRUE syscall_nr_setrlimit : blimits.rlim_cur 2097152 syscall_nr_setrlimit : blimits.rlim_max 18446744073709551615 syscall_nr_getrlimit : success TRUE syscall_nr_getrlimit : blimits.rlim_cur 2097152 syscall_nr_getrlimit : blimits.rlim_max 18446744073709551615 get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 2097152 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615 get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 2097152 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615 set syscall_nr_prlimit64 : alimits.rlim_cur 2097152 set syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : success TRUE get syscall_nr_prlimit64 : alimits.rlim_cur 2097152 get syscall_nr_prlimit64 : alimits.rlim_max 18446744073709551615
Mantis conversion info:
- Mantis ID: 37345
- OS: Arch
- OS Build: 3.17.4-1
- Build: r45773
- Platform: Linux x86_64
- Version: 3.3.1