cirosantilli / linux-kernel-module-cheat

The perfect emulation setup to study and develop the Linux kernel v5.4.3, kernel modules, QEMU, gem5 and x86_64, ARMv7 and ARMv8 userland and baremetal assembly, ANSI C, C++ and POSIX. GDB step debug and KGDB just work. Powered by Buildroot and crosstool-NG. Highly automated. Thoroughly documented. Automated tests. "Tested" in an Ubuntu 24.04 host.
https://cirosantilli.com/linux-kernel-module-cheat
GNU General Public License v3.0
4.2k stars 605 forks source link

Error with syscall 318 for gem5 in syscall mode SE, when executing with a multi agent reinforcement learning algorithm #161

Open kailashg26 opened 3 years ago

kailashg26 commented 3 years ago

I'm trying to execute a python algorithm (https://github.com/shariqiqbal2810/maddpg-pytorch) on gem5 in se mode in X86. But, at first I got an error syscall 318 out of range. So, I tried to import the get random function into the syscalltlb64 source code, like this:

{ 313, "finit_module" }, { 314, "sched_setattr" }, { 315, "sched_getattr" }, { 316, "renameat2" }, { 317, "seccomp" }, { 318, "getrandom"}, { 319, "memfd_create" }, { 320, "kexec_file_load" }, { 321, "bpf" },

I'm trying to execute a python algorithm (https://github.com/shariqiqbal2810/maddpg-pytorch) on gem5 in se mode in X86. But, at first I got an error syscall 318 out of range. So, I tried to import the get random function into the syscalltlb64 source code, like this:

{ 313, "finit_module" }, { 314, "sched_setattr" }, { 315, "sched_getattr" }, { 316, "renameat2" }, { 317, "seccomp" }, { 318, "getrandom"}, { 319, "memfd_create" }, { 320, "kexec_file_load" }, { 321, "bpf" },

Again, I got an error saying syscall 318 unimplemented. So, I just did:

{ 318, "getrandom", getrandomFunc},

Again, the problem continues as I got an error saying:

    {318, "getrandom", <expression error>}, {319, "memfd_create"}, {320, "kexec_file_load"}, {321, "bpf"}}' from '<brace-enclosed initializer list>' to 'gem5::SyscallDescTable<gem5::X86ISA::EmuLinux::SyscallABI64>'
  374 | };
      | ^
      | |
      | <brace-enclosed initializer list>
scons: *** [build/X86/arch/x86/linux/syscall_tbl64.o] Error 1
scons: building terminated because of errors.
*** Summary of Warnings ***

Can anyone help me how to solve this problem? Note: My linux kernel version is 5.4.0-88-generic and I'm using ubuntu 20.04 LTS. Thanks for the help

cirosantilli commented 3 years ago

You need to have a look at the compilation error closely, there should be something above the lines you gave that explains the problem better. Try to do something more similar to other nearby lines above.

kailashg26 commented 3 years ago
Hello cirosantilli, This is my compilation error. scons: Building targets ... [VER TAGS] -> X86/sim/tags.cc [ CXX] X86/arch/x86/linux/syscall_tbl64.cc -> .o build/X86/arch/x86/linux/syscall_tbl64.cc:370:25: error: 'getrandomFunc' was not declared in this scope 370 { 318, "getrandom", getrandomFunc}, ^~~~~ build/X86/arch/x86/linux/syscall_tbl64.cc:374:1: error: could not convert '{{0, "read", readFunc}, {1, "write", writeFunc}, {2, "open", openFunc}, {3, "close", gem5::closeFunc}, {4, "stat", stat64Func}, {5, "fstat", fstat64Func}, {6, "lstat", lstat64Func}, {7, "poll", pollFunc}, {8, "lseek", gem5::lseekFunc}, {9, "mmap", mmapFunc}, {10, "mprotect", gem5::ignoreFunc}, {11, "munmap", gem5::munmapFunc}, {12, "brk", gem5::brkFunc}, {13, "rt_sigaction", gem5::ignoreWarnOnceFunc}, {14, "rt_sigprocmask", gem5::ignoreWarnOnceFunc}, {15, "rt_sigreturn"}, {16, "ioctl", ioctlFunc}, {17, "pread64", pread64Func}, {18, "pwrite64", pwrite64Func}, {19, "readv", readvFunc}, {20, "writev", writevFunc}, {21, "access", gem5::ignoreFunc}, {22, "pipe", gem5::pipeFunc}, {23, "select", selectFunc}, {24, "sched_yield", gem5::ignoreWarnOnceFunc}, {25, "mremap", mremapFunc}, {26, "msync"}, {27, "mincore"}, {28, "madvise", gem5::ignoreFunc}, {29, "shmget"}, {30, "shmat"}, {31, "shmctl"}, {32, "dup", gem5::dupFunc}, {33, "dup2", gem5::dup2Func}, {34, "pause"}, {35, "nanosleep", gem5::ignoreWarnOnceFunc}, {36, "getitimer"}, {37, "alarm"}, {38, "setitimer"}, {39, "getpid", gem5::getpidFunc}, {40, "sendfile"}, {41, "socket", socketFunc}, {42, "connect", gem5::connectFunc}, {43, "accept", acceptFunc}, {44, "sendto", gem5::sendtoFunc}, {45, "recvfrom", gem5::recvfromFunc}, {46, "sendmsg", gem5::sendmsgFunc}, {47, "recvmsg", gem5::recvmsgFunc}, {48, "shutdown", gem5::shutdownFunc}, {49, "bind", gem5::bindFunc}, {50, "listen", gem5::listenFunc}, {51, "getsockname", gem5::getsocknameFunc}, {52, "getpeername", gem5::getpeernameFunc}, {53, "socketpair", socketpairFunc}, {54, "setsockopt", gem5::setsockoptFunc}, {55, "getsockopt", gem5::getsockoptFunc}, {56, "clone", cloneFunc}, {57, "fork"}, {58, "vfork"}, {59, "execve", execveFunc}, {60, "exit", gem5::exitFunc}, {61, "wait4", wait4Func}, {62, "kill"}, {63, "uname", gem5::X86ISA::unameFunc}, {64, "semget"}, {65, "semop"}, {66, "semctl"}, {67, "shmdt"}, {68, "msgget"}, {69, "msgsnd"}, {70, "msgrcv"}, {71, "msgctl"}, {72, "fcntl", gem5::fcntlFunc}, {73, "flock"}, {74, "fsync"}, {75, "fdatasync", gem5::ignoreFunc}, {76, "truncate", gem5::truncateFunc}, {77, "ftruncate", gem5::ftruncateFunc}, {78, "getdents", gem5::getdentsFunc}, {79, "getcwd", gem5::getcwdFunc}, {80, "chdir", gem5::chdirFunc}, {81, "fchdir"}, {82, "rename", gem5::renameFunc}, {83, "mkdir", gem5::mkdirFunc}, {84, "rmdir", gem5::rmdirFunc}, {85, "creat"}, {86, "link", gem5::linkFunc}, {87, "unlink", gem5::unlinkFunc}, {88, "symlink", gem5::symlinkFunc}, {89, "readlink", gem5::readlinkFunc}, {90, "chmod", gem5::ignoreFunc}, {91, "fchmod"}, {92, "chown"}, {93, "fchown"}, {94, "lchown"}, {95, "umask", gem5::umaskFunc}, {96, "gettimeofday", gettimeofdayFunc}, {97, "getrlimit", getrlimitFunc}, {98, "getrusage", getrusageFunc}, {99, "sysinfo", sysinfoFunc}, {100, "times", timesFunc}, {101, "ptrace"}, {102, "getuid", gem5::getuidFunc}, {103, "syslog"}, {104, "getgid", gem5::getgidFunc}, {105, "setuid"}, {106, "setgid"}, {107, "geteuid", gem5::geteuidFunc}, {108, "getegid", gem5::getegidFunc}, {109, "setpgid", gem5::setpgidFunc}, {110, "getppid", gem5::getppidFunc}, {111, "getpgrp", gem5::getpgrpFunc}, {112, "setsid"}, {113, "setreuid"}, {114, "setregid"}, {115, "getgroups"}, {116, "setgroups"}, {117, "setresuid", gem5::ignoreFunc}, {118, "getresuid"}, {119, "setresgid"}, {120, "getresgid"}, {121, "getpgid"}, {122, "setfsuid"}, {123, "setfsgid"}, {124, "getsid"}, {125, "capget"}, {126, "capset"}, {127, "rt_sigpending"}, {128, "rt_sigtimedwait"}, {129, "rt_sigqueueinfo"}, {130, "rt_sigsuspend"}, {131, "sigaltstack", gem5::ignoreFunc}, {132, "utime"}, {133, "mknod", gem5::mknodFunc}, {134, "uselib"}, {135, "personality"}, {136, "ustat"}, {137, "statfs", statfsFunc}, {138, "fstatfs", fstatfsFunc}, {139, "sysfs"}, {140, "getpriority"}, {141, "setpriority", gem5::ignoreFunc}, {142, "sched_setparam"}, {143, "sched_getparam"}, {144, "sched_setscheduler"}, {145, "sched_getscheduler"}, {146, "sched_get_priority_max"}, {147, "sched_get_priority_min"}, {148, "sched_rr_get_interval"}, {149, "mlock"}, {150, "munlock"}, {151, "mlockall"}, {152, "munlockall"}, {153, "vhangup"}, {154, "modify_ldt"}, {155, "pivot_root"}, {156, "_sysctl"}, {157, "prctl", gem5::ignoreFunc}, {158, "arch_prctl", gem5::X86ISA::archPrctlFunc}, {159, "adjtimex"}, {160, "setrlimit", gem5::ignoreFunc}, {161, "chroot"}, {162, "sync"}, {163, "acct"}, {164, "settimeofday"}, {165, "mount"}, {166, "umount2"}, {167, "swapon"}, {168, "swapoff"}, {169, "reboot"}, {170, "sethostname"}, {171, "setdomainname"}, {172, "iopl"}, {173, "ioperm"}, {174, "create_module"}, {175, "init_module"}, {176, "delete_module"}, {177, "get_kernel_syms"}, {178, "query_module"}, {179, "quotactl"}, {180, "nfsservctl"}, {181, "getpmsg"}, {182, "putpmsg"}, {183, "afs_syscall"}, {184, "tuxcall"}, {185, "security"}, {186, "gettid", gem5::gettidFunc}, {187, "readahead"}, {188, "setxattr"}, {189, "lsetxattr"}, {190, "fsetxattr"}, {191, "getxattr"}, {192, "lgetxattr"}, {193, "fgetxattr"}, {194, "listxattr"}, {195, "llistxattr"}, {196, "flistxattr"}, {197, "removexattr"}, {198, "lremovexattr"}, {199, "fremovexattr"}, {200, "tkill"}, {201, "time", timeFunc}, {202, "futex", futexFunc}, {203, "sched_setaffinity", gem5::ignoreFunc}, {204, "sched_getaffinity", schedGetaffinityFunc}, {205, "set_thread_area"}, {206, "io_setup"}, {207, "io_destroy"}, {208, "io_getevents"}, {209, "io_submit"}, {210, "io_cancel"}, {211, "get_thread_area"}, {212, "lookup_dcookie"}, {213, "epoll_create"}, {214, "epoll_ctl_old"}, {215, "epoll_wait_old"}, {216, "remap_file_pages"}, {217, "getdents64", gem5::getdents64Func}, {218, "set_tid_address", gem5::setTidAddressFunc}, {219, "restart_syscall"}, {220, "semtimedop"}, {221, "fadvise64", gem5::ignoreFunc}, {222, "timer_create"}, {223, "timer_settime"}, {224, "timer_gettime"}, {225, "timer_getoverrun"}, {226, "timer_delete"}, {227, "clock_settime"}, {228, "clock_gettime", clock_gettimeFunc}, {229, "clock_getres", clock_getresFunc}, {230, "clock_nanosleep"}, {231, "exit_group", gem5::exitGroupFunc}, {232, "epoll_wait"}, {233, "epoll_ctl"}, {234, "tgkill", tgkillFunc}, {235, "utimes"}, {236, "vserver"}, {237, "mbind", gem5::ignoreFunc}, {238, "set_mempolicy"}, {239, "get_mempolicy", gem5::ignoreFunc}, {240, "mq_open"}, {241, "mq_unlink"}, {242, "mq_timedsend"}, {243, "mq_timedreceive"}, {244, "mq_notify"}, {245, "mq_getsetattr"}, {246, "kexec_load"}, {247, "waitid"}, {248, "add_key"}, {249, "request_key"}, {250, "keyctl"}, {251, "ioprio_set"}, {252, "ioprio_get"}, {253, "inotify_init"}, {254, "inotify_add_watch"}, {255, "inotify_rm_watch"}, {256, "migrate_pages"}, {257, "openat", openatFunc}, {258, "mkdirat"}, {259, "mknodat"}, {260, "fchownat"}, {261, "futimesat"}, {262, "newfstatat"}, {263, "unlinkat"}, {264, "renameat"}, {265, "linkat"}, {266, "symlinkat"}, {267, "readlinkat", gem5::readlinkFunc}, {268, "fchmodat"}, {269, "faccessat"}, {270, "pselect6"}, {271, "ppoll"}, {272, "unshare"}, {273, "set_robust_list", gem5::ignoreFunc}, {274, "get_robust_list"}, {275, "splice"}, {276, "tee"}, {277, "sync_file_range"}, {278, "vmsplice"}, {279, "move_pages"}, {280, "utimensat"}, {281, "epoll_pwait"}, {282, "signalfd"}, {283, "timerfd_create"}, {284, "eventfd", eventfdFunc}, {285, "fallocate", gem5::fallocateFunc}, {286, "timerfd_settime"}, {287, "timerfd_gettime"}, {288, "accept4"}, {289, "signalfd4"}, {290, "eventfd2", eventfdFunc}, {291, "epoll_create1"}, {292, "dup3"}, {293, "pipe2", gem5::pipe2Func}, {294, "inotify_init1"}, {295, "preadv"}, {296, "pwritev"}, {297, "rt_tgsigqueueinfo"}, {298, "perf_event_open"}, {299, "recvmmsg"}, {300, "fanotify_init"}, {301, "fanotify_mark"}, {302, "prlimit64", prlimitFunc}, {303, "name_to_handle_at"}, {304, "open_by_handle_at"}, {305, "clock_adjtime"}, {306, "syncfs"}, {307, "sendmmsg"}, {308, "setns"}, {309, "getcpu", gem5::getcpuFunc}, {310, "proess_vm_readv"}, {311, "proess_vm_writev"}, {312, "kcmp"}, {313, "finit_module"}, {314, "sched_setattr"}, {315, "sched_getattr"}, {316, "renameat2"}, {317, "seccomp"}, {318, "getrandom", }, {319, "memfd_create"}, {320, "kexec_file_load"}, {321, "bpf"}}' from '' to 'gem5::SyscallDescTable' 374 }; ^

scons: [build/X86/arch/x86/linux/syscall_tbl64.o] Error 1 scons: building terminated because of errors. Summary of Warnings *** Warning: Deprecated namespaces are not supported by this compiler. Please make sure to check the mailing list for deprecation announcements. Warning: Couldn't find HDF5 C++ libraries. Disabling HDF5 support.

I'm not sure if the importing of getrandom function is correct or if you can point me to any resources that can help in integrating the getrandom function to gem5, that would be a great help. Thanks.