More narrowing failures, this time on ARM.
Bug: 1292951
Change-Id: I6e6342f8b5fc6a8062acc0e1ed2a948d0198ef5f
Reviewed-on: https://chromium-review.googlesource.com/c/linux-syscall-support/+/3846859
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/linux_syscall_support.h b/linux_syscall_support.h
index 7d42507..bfa95f4 100644
--- a/linux_syscall_support.h
+++ b/linux_syscall_support.h
@@ -365,9 +365,14 @@
/* include/asm-{arm,aarch64,i386,mips,ppc,s390}/stat.h */
#ifdef __mips__
#if _MIPS_SIM == _MIPS_SIM_ABI64
-typedef long long kernel_off_t;
typedef unsigned long long kernel_blkcnt_t;
+typedef unsigned kernel_dev_t;
+typedef unsigned kernel_gid_t;
+typedef unsigned long long kernel_ino_t;
+typedef unsigned kernel_nlink_t;
+typedef long long kernel_off_t;
typedef unsigned kernel_time_t;
+typedef unsigned kernel_uid_t;
struct kernel_stat {
#else
struct kernel_stat64 {
@@ -462,23 +467,28 @@
/* include/asm-{arm,aarch64,i386,mips,x86_64,ppc,s390}/stat.h */
#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
-typedef unsigned kernel_off_t;
typedef unsigned kernel_blkcnt_t;
+typedef unsigned short kernel_dev_t;
+typedef unsigned short kernel_gid_t;
+typedef unsigned kernel_ino_t;
+typedef unsigned short kernel_nlink_t;
+typedef unsigned kernel_off_t;
typedef unsigned kernel_time_t;
+typedef unsigned short kernel_uid_t;
struct kernel_stat {
/* The kernel headers suggest that st_dev and st_rdev should be 32bit
* quantities encoding 12bit major and 20bit minor numbers in an interleaved
* format. In reality, we do not see useful data in the top bits. So,
* we'll leave the padding in here, until we find a better solution.
*/
- unsigned short st_dev;
+ kernel_dev_t st_dev;
short pad1;
- unsigned st_ino;
+ kernel_ino_t st_ino;
unsigned short st_mode;
- unsigned short st_nlink;
- unsigned short st_uid;
- unsigned short st_gid;
- unsigned short st_rdev;
+ kernel_nlink_t st_nlink;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
+ kernel_dev_t st_rdev;
short pad2;
kernel_off_t st_size;
unsigned st_blksize;
@@ -493,18 +503,23 @@
unsigned __unused5;
};
#elif defined(__x86_64__)
-typedef int64_t kernel_off_t;
typedef int64_t kernel_blkcnt_t;
+typedef uint64_t kernel_dev_t;
+typedef unsigned kernel_gid_t;
+typedef uint64_t kernel_ino_t;
+typedef uint64_t kernel_nlink_t;
+typedef int64_t kernel_off_t;
typedef uint64_t kernel_time_t;
+typedef unsigned kernel_uid_t;
struct kernel_stat {
- uint64_t st_dev;
- uint64_t st_ino;
- uint64_t st_nlink;
+ kernel_dev_t st_dev;
+ kernel_ino_t st_ino;
+ kernel_nlink_t st_nlink;
unsigned st_mode;
- unsigned st_uid;
- unsigned st_gid;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
unsigned __pad0;
- uint64_t st_rdev;
+ kernel_dev_t st_rdev;
kernel_off_t st_size;
int64_t st_blksize;
kernel_blkcnt_t st_blocks;
@@ -517,18 +532,23 @@
int64_t __unused4[3];
};
#elif defined(__PPC__)
-typedef long kernel_off_t;
typedef unsigned long kernel_blkcnt_t;
+typedef unsigned kernel_dev_t;
+typedef unsigned kernel_gid_t;
+typedef unsigned long kernel_ino_t;
+typedef unsigned short kernel_nlink_t;
+typedef long kernel_off_t;
typedef unsigned long kernel_time_t;
+typedef unsigned kernel_uid_t;
struct kernel_stat {
- unsigned st_dev;
- unsigned long st_ino; // ino_t
- unsigned long st_mode; // mode_t
- unsigned short st_nlink; // nlink_t
- unsigned st_uid; // uid_t
- unsigned st_gid; // gid_t
- unsigned st_rdev;
- kernel_off_t st_size; // off_t
+ kernel_dev_t st_dev;
+ kernel_ino_t st_ino;
+ unsigned long st_mode;
+ kernel_nlink_t st_nlink;
+ kernel_gid_t st_uid;
+ kernel_uid_t st_gid;
+ kernel_dev_t st_rdev;
+ kernel_off_t st_size;
unsigned long st_blksize;
kernel_blkcnt_t st_blocks;
kernel_time_t st_atime_;
@@ -541,18 +561,23 @@
unsigned long __unused5;
};
#elif (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64)
-typedef long kernel_off_t;
typedef int kernel_blkcnt_t;
+typedef unsigned kernel_dev_t;
+typedef unsigned kernel_gid_t;
+typedef unsigned kernel_ino_t;
+typedef unsigned kernel_nlink_t;
+typedef long kernel_off_t;
typedef long kernel_time_t;
+typedef unsigned kernel_uid_t;
struct kernel_stat {
- unsigned st_dev;
+ kernel_dev_t st_dev;
int st_pad1[3];
- unsigned st_ino;
+ kernel_ino_t st_ino;
unsigned st_mode;
- unsigned st_nlink;
- unsigned st_uid;
- unsigned st_gid;
- unsigned st_rdev;
+ kernel_nlink_t st_nlink;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
+ kernel_dev_t st_rdev;
int st_pad2[2];
kernel_off_t st_size;
int st_pad3;
@@ -567,17 +592,22 @@
int st_pad4[14];
};
#elif defined(__aarch64__) || defined(__riscv) || defined(__loongarch_lp64)
-typedef long kernel_off_t;
typedef long kernel_blkcnt_t;
+typedef unsigned long kernel_dev_t;
+typedef unsigned int kernel_gid_t;
+typedef unsigned long kernel_ino_t;
+typedef unsigned int kernel_nlink_t;
+typedef long kernel_off_t;
typedef long kernel_time_t;
+typedef unsigned int kernel_uid_t;
struct kernel_stat {
- unsigned long st_dev;
- unsigned long st_ino;
+ kernel_dev_t st_dev;
+ kernel_ino_t st_ino;
unsigned int st_mode;
- unsigned int st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- unsigned long st_rdev;
+ kernel_nlink_t st_nlink;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
+ kernel_dev_t st_rdev;
unsigned long __pad1;
kernel_off_t st_size;
int st_blksize;
@@ -593,18 +623,23 @@
unsigned int __unused5;
};
#elif defined(__s390x__)
-typedef unsigned long kernel_off_t;
typedef long kernel_blkcnt_t;
+typedef unsigned long kernel_dev_t;
+typedef unsigned int kernel_gid_t;
+typedef unsigned long kernel_ino_t;
+typedef unsigned long kernel_nlink_t;
+typedef unsigned long kernel_off_t;
typedef unsigned long kernel_time_t;
+typedef unsigned int kernel_uid_t;
struct kernel_stat {
- unsigned long st_dev;
- unsigned long st_ino;
- unsigned long st_nlink;
+ kernel_dev_t st_dev;
+ kernel_ino_t st_ino;
+ kernel_nlink_t st_nlink;
unsigned int st_mode;
- unsigned int st_uid;
- unsigned int st_gid;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
unsigned int __pad1;
- unsigned long st_rdev;
+ kernel_dev_t st_rdev;
kernel_off_t st_size;
kernel_time_t st_atime_;
unsigned long st_atime_nsec_;
@@ -617,18 +652,23 @@
unsigned long __unused[3];
};
#elif defined(__s390__)
-typedef unsigned long kernel_off_t;
typedef unsigned long kernel_blkcnt_t;
+typedef unsigned short kernel_dev_t;
+typedef unsigned short kernel_gid_t;
+typedef unsigned long kernel_ino_t;
+typedef unsigned short kernel_nlink_t;
+typedef unsigned long kernel_off_t;
typedef unsigned long kernel_time_t;
+typedef unsigned short kernel_uid_t;
struct kernel_stat {
- unsigned short st_dev;
+ kernel_dev_t st_dev;
unsigned short __pad1;
- unsigned long st_ino;
+ kernel_ino_t st_ino;
unsigned short st_mode;
- unsigned short st_nlink;
- unsigned short st_uid;
- unsigned short st_gid;
- unsigned short st_rdev;
+ kernel_nlink_t st_nlink;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
+ kernel_dev_t st_rdev;
unsigned short __pad2;
kernel_off_t st_size;
unsigned long st_blksize;
@@ -643,17 +683,22 @@
unsigned long __unused5;
};
#elif defined(__e2k__)
-typedef unsigned long kernel_off_t;
typedef unsigned long kernel_blkcnt_t;
+typedef unsigned long kernel_dev_t;
+typedef unsigned int kernel_gid_t;
+typedef unsigned long kernel_ino_t;
+typedef unsigned long kernel_nlink_t;
+typedef unsigned long kernel_off_t;
typedef unsigned long kernel_time_t;
+typedef unsigned int kernel_uid_t;
struct kernel_stat {
- unsigned long st_dev;
- unsigned long st_ino;
+ kernel_dev_t st_dev;
+ kernel_ino_t st_ino;
unsigned int st_mode;
- unsigned long st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- unsigned long st_rdev;
+ kernel_nlink_t st_nlink;
+ kernel_uid_t st_uid;
+ kernel_gid_t st_gid;
+ kernel_dev_t st_rdev;
kernel_off_t st_size;
unsigned long st_blksize;
kernel_blkcnt_t st_blocks;
@@ -5135,17 +5180,17 @@
LSS_INLINE void LSS_NAME(cp_stat_statx)(struct kernel_stat *to,
struct kernel_statx *from) {
memset(to, 0, sizeof(struct kernel_stat));
- to->st_dev = ((from->stx_dev_minor & 0xff) |
- ((from->stx_dev_major & 0xfff) << 8) |
- ((from->stx_dev_minor & ~0xffu) << 12));
- to->st_rdev = ((from->stx_rdev_minor & 0xff) |
- ((from->stx_rdev_major & 0xfff) << 8) |
- ((from->stx_rdev_minor & ~0xffu) << 12));
- to->st_ino = from->stx_ino;
+ to->st_dev = (kernel_dev_t)((from->stx_dev_minor & 0xff) |
+ ((from->stx_dev_major & 0xfff) << 8) |
+ ((from->stx_dev_minor & ~0xffu) << 12));
+ to->st_rdev = (kernel_dev_t)((from->stx_rdev_minor & 0xff) |
+ ((from->stx_rdev_major & 0xfff) << 8) |
+ ((from->stx_rdev_minor & ~0xffu) << 12));
+ to->st_ino = (kernel_ino_t)from->stx_ino;
to->st_mode = from->stx_mode;
- to->st_nlink = from->stx_nlink;
- to->st_uid = from->stx_uid;
- to->st_gid = from->stx_gid;
+ to->st_nlink = (kernel_nlink_t)from->stx_nlink;
+ to->st_uid = (kernel_uid_t)from->stx_uid;
+ to->st_gid = (kernel_gid_t)from->stx_gid;
to->st_atime_ = (kernel_time_t)(from->stx_atime.tv_sec);
to->st_atime_nsec_ = from->stx_atime.tv_nsec;
to->st_mtime_ = (kernel_time_t)(from->stx_mtime.tv_sec);