[PATCH v4 09/13] LoongArch: Linux ABI
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon May 16 18:49:28 GMT 2022
On 15/05/2022 00:32, caiyinyu wrote:
>
> 在 2022/5/11 下午3:08, Arnd Bergmann 写道:
>> On Mon, May 9, 2022 at 4:26 AM caiyinyu <caiyinyu@loongson.cn> wrote:
>>> +
>>> +#include <bits/wordsize.h>
>>> +
>>> +/* In 64-bit ISA files are always with 64bit off_t and F_*LK64 are the same as
>>> + non-64-bit versions. It will need to be revised for 128-bit. */
>>> +#if __WORDSIZE == 64
>>> +#define __O_LARGEFILE 0
>>> +
>>> +#define F_GETLK64 5 /* Get record locking info. */
>>> +#define F_SETLK64 6 /* Set record locking info (non-blocking). */
>>> +#define F_SETLKW64 7 /* Set record locking info (blocking). */
>>> +#endif
>>> +
>>> +struct flock
>>> +{
>>> + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
>>> + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
>>> +#ifndef __USE_FILE_OFFSET64
>>> + __off_t l_start; /* Offset where the lock begins. */
>>> + __off_t l_len; /* Size of the locked area; zero means until EOF. */
>>> +#else
>>> + __off64_t l_start; /* Offset where the lock begins. */
>>> + __off64_t l_len; /* Size of the locked area; zero means until EOF. */
>>> +#endif
>>> + __pid_t l_pid; /* Process holding the lock. */
>>> +};
>>> +
>>> +#ifdef __USE_LARGEFILE64
>>> +struct flock64
>>> +{
>>> + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
>>> + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
>>> + __off64_t l_start; /* Offset where the lock begins. */
>>> + __off64_t l_len; /* Size of the locked area; zero means until EOF. */
>>> + __pid_t l_pid; /* Process holding the lock. */
>>> +};
>>> +#endif
>> Not sure why these are provided here, the kernel has no loongarch64 specific
>> interface for flock in the current version, so either this refers to
>> an older version
>> of the kernel port, or it is something that could be generalized into an
>> architecture-independent file in glibc.
>>
>> Arnd
>
>
> There are struct flock and flock64 we need in glibc bits/fcntl.h, but
> the macro F_GETLK64 F_SETLK64 F_SETLKW64 in
> sysdeps/unix/sysv/linux/bits/fcntl-linux.h are:
>
> ...
> # define F_GETLK64 12 /* Get record locking info. */
> # define F_SETLK64 13 /* Set record locking info (non-blocking). */
> # define F_SETLKW64 14 /* Set record locking info (blocking). */
> ...
>
> what we need:
>
> +#define F_GETLK64 5 /* Get record locking info. */
> +#define F_SETLK64 6 /* Set record locking info (non-blocking). */
> +#define F_SETLKW64 7 /* Set record locking info (blocking). */
>
> x86 ia64 s390 and aarch64 have the same problem and they all use their own fcntl.h.
>
> Define new value of these macro in sysdeps/unix/sysv/linux/bits/fcntl-linux.h or
> add fcntl-linux.h in loongarch port or keep the status quo??
Ideally I would like to have sysdeps/unix/sysv/linux/bits/fcntl.h with the
common fcntl.h definitions (including flock/flock64 definitions) and move
any arch-specific bits to sysdeps/unix/sysv/linux/<arch>/bits/fcntl-arch.h
and have a generic fcntl-arch.h with current linux UAPI definition (so
newer ports won't need to add anything, assuming its uses the expected
Linux definitions).
It would require to change some non loongarch code, so I don't expect you
do push for this to get the loongarch code. Having a loonarch fcntl.h
should be fine for now.
More information about the Libc-alpha
mailing list