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);