gem5 syscall emulation arm C hello world fails with “fatal: syscall gettid (#224) unimplemented”

后端 未结 2 1872
被撕碎了的回忆
被撕碎了的回忆 2021-01-24 01:15

I am having the following error in gem5. This happens in ARM only. With X86 I see some syscalls being ignored but none causing a fatal error.

tomas@ubuntu:~/gem5         


        
相关标签:
2条回答
  • 2021-01-24 01:30

    uclibc is the answer for compiling for gem5. It doesn't use a bunch of syscalls that glibc uses and that gem5 doesn't have implemented. So using crosstool-ng and arm-unknown-linux-uclibcgnueabi solved the issue.

    0 讨论(0)
  • 2021-01-24 01:55

    update: x86, arm and aarch64 C hello world is working on Ubuntu 18.04 pre-packaged toolchain, see: How to compile and run an executable in gem5 syscall emulation mode with se.py?

    "FATAL: kernel too old" has been previously asked at: How to solve "FATAL: kernel too old" when running gem5 in syscall emulation SE mode?

    As explained in that page, that message comes from a glibc sanity check, and ct-ng is the sanest approach to overcome it.

    As for the unimplemented syscalls, I don't know why x86 ignores them and arm blows up, but it should be easy to grep that up in the source if you give the x86 syscall ignored message.

    But the blow up behavior does seem sensible: how can you expect your program to work properly when it tries to run an unimplemented syscall?

    Most syscalls are unimplemented in both archs as can be seen at:

    • https://github.com/gem5/gem5/blob/5de8ca95506a5f15bfbfdd2ca9babd282a882d1f/src/arch/arm/linux/process.cc#L123
    • https://github.com/gem5/gem5/blob/5de8ca95506a5f15bfbfdd2ca9babd282a882d1f/src/arch/x86/linux/process.cc#L222

    So, I only see two sensible solutions:

    • implement the syscall, which is easy for most of them, and send gem5 a patch
      • have a look if other archs implement it by grepping, sometimes another arch has already implemented it and you just need to write things up
      • you could also try to ignore the syscall, TODO: is there a good way in ARM? But you have to be pretty sure that it won't matter.
    • give up on syscall emulation and just use full system which is saner: When to use full system FS vs syscall emulation SE with userland programs in gem5?
    0 讨论(0)
提交回复
热议问题