public inbox for glibc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug libc/27824] New: preadv2 and pwritev2 offset argument passing on 64bit targets @ 2021-05-04 14:56 nsz at gcc dot gnu.org 2021-05-04 15:21 ` [Bug libc/27824] " schwab@linux-m68k.org 2021-05-04 17:29 ` adhemerval.zanella at linaro dot org 0 siblings, 2 replies; 3+ messages in thread From: nsz at gcc dot gnu.org @ 2021-05-04 14:56 UTC (permalink / raw) To: glibc-bugs https://sourceware.org/bugzilla/show_bug.cgi?id=27824 Bug ID: 27824 Summary: preadv2 and pwritev2 offset argument passing on 64bit targets Product: glibc Version: 2.33 Status: NEW Severity: normal Priority: P2 Component: libc Assignee: unassigned at sourceware dot org Reporter: nsz at gcc dot gnu.org CC: drepper.fsp at gmail dot com Target Milestone: --- the linux preadv2 offset arg passing code is /* Provide a macro to pass the off{64}_t argument on p{readv,writev}{64}. */ #define LO_HI_LONG(val) \ (long) (val), \ (long) (((uint64_t) (val)) >> 32) on a 64bit target the first arg contains the entire 64bit offset but i'd expect the second arg to be fixed 0. linux does not seem to look at the second arg now on 64bit targets, but it seems cleaner to pass 0 instead of top 32bit of val. x86_64 seems to fixed this but other targets still have the >> 32 logic. -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug libc/27824] preadv2 and pwritev2 offset argument passing on 64bit targets 2021-05-04 14:56 [Bug libc/27824] New: preadv2 and pwritev2 offset argument passing on 64bit targets nsz at gcc dot gnu.org @ 2021-05-04 15:21 ` schwab@linux-m68k.org 2021-05-04 17:29 ` adhemerval.zanella at linaro dot org 1 sibling, 0 replies; 3+ messages in thread From: schwab@linux-m68k.org @ 2021-05-04 15:21 UTC (permalink / raw) To: glibc-bugs https://sourceware.org/bugzilla/show_bug.cgi?id=27824 --- Comment #1 from Andreas Schwab <schwab@linux-m68k.org> --- commit 468700675f claims to use __OFF_T_MATCHES_OFF64_T, but doesn't. -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug libc/27824] preadv2 and pwritev2 offset argument passing on 64bit targets 2021-05-04 14:56 [Bug libc/27824] New: preadv2 and pwritev2 offset argument passing on 64bit targets nsz at gcc dot gnu.org 2021-05-04 15:21 ` [Bug libc/27824] " schwab@linux-m68k.org @ 2021-05-04 17:29 ` adhemerval.zanella at linaro dot org 1 sibling, 0 replies; 3+ messages in thread From: adhemerval.zanella at linaro dot org @ 2021-05-04 17:29 UTC (permalink / raw) To: glibc-bugs https://sourceware.org/bugzilla/show_bug.cgi?id=27824 Adhemerval Zanella <adhemerval.zanella at linaro dot org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |adhemerval.zanella at linaro dot o | |rg --- Comment #2 from Adhemerval Zanella <adhemerval.zanella at linaro dot org> --- The preadv2/pwritev2 for x32 is slight different than the other architectures: i686 and x86_64 uses sys_pwritev2 entrypoint while x32 uses *compat_sys_pwritev64v2*: | asmlinkage long compat_sys_pwritev64v2(unsigned long fd, | const struct iovec __user *vec, | unsigned long vlen, loff_t pos, rwf_t flags); So x32 does require a specific LO_HI_LONG macro. However for other architecture I do think this is really and issue, the kernel entrypoints are defined. | SYSCALL_DEFINE6(preadv2, unsigned long, fd, const struct iovec __user *, vec, | unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h, | rwf_t, flags) | COMPAT_SYSCALL_DEFINE6(preadv2, compat_ulong_t, fd, | const struct iovec __user *, vec, | compat_ulong_t, vlen, u32, pos_low, u32, pos_high, | rwf_t, flags) So both do accept a pos_low, but it does make sense only for architectures where sizeof (unsigned long) < sizeof (off_t). Maybe by using: | #ifdef __WORDSIZE == 32 | # define LO_HI_LONG(val) \ | (unsigned long int) (val), (unsinged long int) (((uint64_t) (val) >> 32)) | #else | # define LO_HI_LONG(val) \ | (unsigned long int) (val), 0 | #endif It should cover all cases of compat and default usage, including mips64n32. x32 will need to continue use its own definition (since it defines __ASSUME_WORDSIZE64_ILP32). -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-05-04 17:29 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-05-04 14:56 [Bug libc/27824] New: preadv2 and pwritev2 offset argument passing on 64bit targets nsz at gcc dot gnu.org 2021-05-04 15:21 ` [Bug libc/27824] " schwab@linux-m68k.org 2021-05-04 17:29 ` adhemerval.zanella at linaro dot org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).