Description: Add loongarch64 support 
 .
 rust-libseccomp (0.3.0-9+loong64) unreleased; urgency=medium
 .
   * Add loongarch64 support.
Author: Dandan Zhang <zhangdandan@loongson.cn>
Last-Update: 2024-11-27

Index: libseccomp/src/api.rs
===================================================================
--- libseccomp.orig/src/api.rs
+++ libseccomp/src/api.rs
@@ -129,7 +129,7 @@ mod tests {
     use super::*;
 
     #[test]
-    #[cfg(not(target_arch = "loong64"))]
+    #[cfg(not(target_arch = "loongarch64"))]
     fn test_ensure_supported_api() {
         assert!(ensure_supported_api("test", 3, ScmpVersion::from((2, 4, 0))).is_ok());
         assert!(ensure_supported_api("test", 100, ScmpVersion::from((2, 4, 0))).is_err());
Index: libseccomp/src/arch.rs
===================================================================
--- libseccomp.orig/src/arch.rs
+++ libseccomp/src/arch.rs
@@ -25,6 +25,8 @@ pub enum ScmpArch {
     Arm,
     /// The AARCH64 architecture token
     Aarch64,
+    /// The LOONGARCH64 architecture token
+    Loongarch64,
     /// The MIPS architecture token
     Mips,
     /// The MIPS (64-bit) architecture token
@@ -64,6 +66,7 @@ impl ScmpArch {
             Self::X32 => SCMP_ARCH_X32,
             Self::Arm => SCMP_ARCH_ARM,
             Self::Aarch64 => SCMP_ARCH_AARCH64,
+            Self::Loongarch64 => SCMP_ARCH_LOONGARCH64,
             Self::Mips => SCMP_ARCH_MIPS,
             Self::Mips64 => SCMP_ARCH_MIPS64,
             Self::Mips64N32 => SCMP_ARCH_MIPS64N32,
@@ -89,6 +92,7 @@ impl ScmpArch {
             SCMP_ARCH_X32 => Ok(Self::X32),
             SCMP_ARCH_ARM => Ok(Self::Arm),
             SCMP_ARCH_AARCH64 => Ok(Self::Aarch64),
+            SCMP_ARCH_LOONGARCH64 => Ok(Self::Loongarch64),
             SCMP_ARCH_MIPS => Ok(Self::Mips),
             SCMP_ARCH_MIPS64 => Ok(Self::Mips64),
             SCMP_ARCH_MIPS64N32 => Ok(Self::Mips64N32),
@@ -144,6 +148,7 @@ impl FromStr for ScmpArch {
             "SCMP_ARCH_X32" => Ok(Self::X32),
             "SCMP_ARCH_ARM" => Ok(Self::Arm),
             "SCMP_ARCH_AARCH64" => Ok(Self::Aarch64),
+            "SCMP_ARCH_LOONGARCH64" => Ok(Self::Loongarch64),
             "SCMP_ARCH_MIPS" => Ok(Self::Mips),
             "SCMP_ARCH_MIPS64" => Ok(Self::Mips64),
             "SCMP_ARCH_MIPS64N32" => Ok(Self::Mips64N32),
@@ -176,6 +181,7 @@ mod tests {
             ("SCMP_ARCH_X32", ScmpArch::X32),
             ("SCMP_ARCH_ARM", ScmpArch::Arm),
             ("SCMP_ARCH_AARCH64", ScmpArch::Aarch64),
+            ("SCMP_ARCH_LOONGARCH64", ScmpArch::Loongarch64),
             ("SCMP_ARCH_MIPS", ScmpArch::Mips),
             ("SCMP_ARCH_MIPS64", ScmpArch::Mips64),
             ("SCMP_ARCH_MIPS64N32", ScmpArch::Mips64N32),
Index: libseccomp/src/syscall.rs
===================================================================
--- libseccomp.orig/src/syscall.rs
+++ libseccomp/src/syscall.rs
@@ -20,6 +20,9 @@ cfg_if::cfg_if! {
     } else if #[cfg(target_arch = "arm")] {
         mod arm;
         use arm::SYSCALLS;
+    } else if #[cfg(target_arch = "loongarch64")] {
+        mod loongarch64;
+        use loongarch64::SYSCALLS;
     } else if #[cfg(target_arch = "mips")] {
         mod mips;
         use mips::SYSCALLS;
Index: libseccomp/src/syscall/loongarch64.rs
===================================================================
--- /dev/null
+++ libseccomp/src/syscall/loongarch64.rs
@@ -0,0 +1,253 @@
+// SPDX-License-Identifier: Apache-2.0 or MIT
+//
+
+pub const SYSCALLS: &[(&str, i32)] = &[
+    ("socket", -101),
+    ("bind", -102),
+    ("connect", -103),
+    ("listen", -104),
+    ("accept", -105),
+    ("getsockname", -106),
+    ("getpeername", -107),
+    ("socketpair", -108),
+    ("send", -109),
+    ("recv", -110),
+    ("sendto", -111),
+    ("recvfrom", -112),
+    ("shutdown", -113),
+    ("setsockopt", -114),
+    ("getsockopt", -115),
+    ("sendmsg", -116),
+    ("recvmsg", -117),
+    ("accept4", -118),
+    ("recvmmsg", -119),
+    ("sendmmsg", -120),
+    ("semop", -201),
+    ("semget", -202),
+    ("semctl", -203),
+    ("semtimedop", -204),
+    ("msgsnd", -211),
+    ("msgrcv", -212),
+    ("msgget", -213),
+    ("msgctl", -214),
+    ("shmat", -221),
+    ("shmdt", -222),
+    ("shmget", -223),
+    ("shmctl", -224),
+    ("arch_prctl", -10001),
+    ("bdflush", -10002),
+    ("break", -10003),
+    ("chown32", -10004),
+    ("epoll_ctl_old", -10005),
+    ("epoll_wait_old", -10006),
+    ("fadvise64_64", -10007),
+    ("fchown32", -10008),
+    ("fcntl64", -10009),
+    ("fstat64", -10010),
+    ("fstatat64", -10011),
+    ("fstatfs64", -10012),
+    ("ftime", -10013),
+    ("ftruncate64", -10014),
+    ("getegid32", -10015),
+    ("geteuid32", -10016),
+    ("getgid32", -10017),
+    ("getgroups32", -10018),
+    ("getresgid32", -10019),
+    ("getresuid32", -10020),
+    ("getuid32", -10021),
+    ("gtty", -10022),
+    ("idle", -10023),
+    ("ipc", -10024),
+    ("lchown32", -10025),
+    ("_llseek", -10026),
+    ("lock", -10027),
+    ("lstat64", -10028),
+    ("mmap2", -10029),
+    ("mpx", -10030),
+    ("newfstatat", -10031),
+    ("_newselect", -10032),
+    ("nice", -10033),
+    ("oldfstat", -10034),
+    ("oldlstat", -10035),
+    ("oldolduname", -10036),
+    ("oldstat", -10037),
+    ("olduname", -10038),
+    ("prof", -10039),
+    ("profil", -10040),
+    ("readdir", -10041),
+    ("security", -10042),
+    ("sendfile64", -10043),
+    ("setfsgid32", -10044),
+    ("setfsuid32", -10045),
+    ("setgid32", -10046),
+    ("setgroups32", -10047),
+    ("setregid32", -10048),
+    ("setresgid32", -10049),
+    ("setresuid32", -10050),
+    ("setreuid32", -10051),
+    ("setuid32", -10052),
+    ("sgetmask", -10053),
+    ("sigaction", -10054),
+    ("signal", -10055),
+    ("sigpending", -10056),
+    ("sigprocmask", -10057),
+    ("sigreturn", -10058),
+    ("sigsuspend", -10059),
+    ("socketcall", -10060),
+    ("ssetmask", -10061),
+    ("stat64", -10062),
+    ("statfs64", -10063),
+    ("stime", -10064),
+    ("stty", -10065),
+    ("truncate64", -10066),
+    ("tuxcall", -10067),
+    ("ugetrlimit", -10068),
+    ("ulimit", -10069),
+    ("umount", -10070),
+    ("vm86", -10071),
+    ("vm86old", -10072),
+    ("waitpid", -10073),
+    ("create_module", -10074),
+    ("get_kernel_syms", -10075),
+    ("get_thread_area", -10076),
+    ("nfsservctl", -10077),
+    ("query_module", -10078),
+    ("set_thread_area", -10079),
+    ("_sysctl", -10080),
+    ("uselib", -10081),
+    ("vserver", -10082),
+    ("arm_fadvise64_64", -10083),
+    ("arm_sync_file_range", -10084),
+    ("pciconfig_iobase", -10086),
+    ("pciconfig_read", -10087),
+    ("pciconfig_write", -10088),
+    ("sync_file_range2", -10089),
+    ("syscall", -10090),
+    ("afs_syscall", -10091),
+    ("fadvise64", -10092),
+    ("getpmsg", -10093),
+    ("ioperm", -10094),
+    ("iopl", -10095),
+    ("migrate_pages", -10097),
+    ("modify_ldt", -10098),
+    ("putpmsg", -10099),
+    ("sync_file_range", -10100),
+    ("select", -10101),
+    ("vfork", -10102),
+    ("cachectl", -10103),
+    ("cacheflush", -10104),
+    ("sysmips", -10106),
+    ("timerfd", -10107),
+    ("time", -10108),
+    ("getrandom", -10109),
+    ("memfd_create", -10110),
+    ("kexec_file_load", -10111),
+    ("sysfs", -10145),
+    ("oldwait4", -10146),
+    ("access", -10147),
+    ("alarm", -10148),
+    ("chmod", -10149),
+    ("chown", -10150),
+    ("creat", -10151),
+    ("dup2", -10152),
+    ("epoll_create", -10153),
+    ("epoll_wait", -10154),
+    ("eventfd", -10155),
+    ("fork", -10156),
+    ("futimesat", -10157),
+    ("getdents", -10158),
+    ("getpgrp", -10159),
+    ("inotify_init", -10160),
+    ("lchown", -10161),
+    ("link", -10162),
+    ("lstat", -10163),
+    ("mkdir", -10164),
+    ("mknod", -10165),
+    ("open", -10166),
+    ("pause", -10167),
+    ("pipe", -10168),
+    ("poll", -10169),
+    ("readlink", -10170),
+    ("rename", -10171),
+    ("rmdir", -10172),
+    ("signalfd", -10173),
+    ("stat", -10174),
+    ("symlink", -10175),
+    ("unlink", -10176),
+    ("ustat", -10177),
+    ("utime", -10178),
+    ("utimes", -10179),
+    ("getrlimit", -10180),
+    ("mmap", -10181),
+    ("breakpoint", -10182),
+    ("set_tls", -10183),
+    ("usr26", -10184),
+    ("usr32", -10185),
+    ("multiplexer", -10186),
+    ("rtas", -10187),
+    ("spu_create", -10188),
+    ("spu_run", -10189),
+    ("swapcontext", -10190),
+    ("sys_debug_setcontext", -10191),
+    ("switch_endian", -10191),
+    ("get_mempolicy", -10192),
+    ("move_pages", -10193),
+    ("mbind", -10194),
+    ("set_mempolicy", -10195),
+    ("s390_runtime_instr", -10196),
+    ("s390_pci_mmio_read", -10197),
+    ("s390_pci_mmio_write", -10198),
+    ("membarrier", -10199),
+    ("userfaultfd", -10200),
+    ("pkey_mprotect", -10201),
+    ("pkey_alloc", -10202),
+    ("pkey_free", -10203),
+    ("get_tls", -10204),
+    ("s390_guarded_storage", -10205),
+    ("s390_sthyi", -10206),
+    ("subpage_prot", -10207),
+    ("statx", -10208),
+    ("io_pgetevents", -10209),
+    ("rseq", -10210),
+    ("setrlimit", -10211),
+    ("clock_adjtime64", -10212),
+    ("clock_getres_time64", -10213),
+    ("clock_gettime64", -10214),
+    ("clock_nanosleep_time64", -10215),
+    ("clock_settime64", -10216),
+    ("clone3", -10217),
+    ("fsconfig", -10218),
+    ("fsmount", -10219),
+    ("fsopen", -10220),
+    ("fspick", -10221),
+    ("futex_time64", -10222),
+    ("io_pgetevents_time64", -10223),
+    ("move_mount", -10224),
+    ("mq_timedreceive_time64", -10225),
+    ("mq_timedsend_time64", -10226),
+    ("open_tree", -10227),
+    ("pidfd_open", -10228),
+    ("pidfd_send_signal", -10229),
+    ("ppoll_time64", -10230),
+    ("pselect6_time64", -10231),
+    ("recvmmsg_time64", -10232),
+    ("rt_sigtimedwait_time64", -10233),
+    ("sched_rr_get_interval_time64", -10234),
+    ("semtimedop_time64", -10235),
+    ("timer_gettime64", -10236),
+    ("timer_settime64", -10237),
+    ("timerfd_gettime64", -10238),
+    ("timerfd_settime64", -10239),
+    ("utimensat_time64", -10240),
+    ("ppoll", -10241),
+    ("renameat", -10242),
+    ("riscv_flush_icache", -10243),
+    ("memfd_secret", -10244),
+    ("map_shadow_stack", -10245),
+    ("fstat", -10246),
+    ("atomic_barrier", -10247),
+    ("atomic_cmpxchg_32", -10248),
+    ("getpagesize", -10249),
+    ("riscv_hwprobe", -10250),
+    ("uretprobe", -10251),
+];
