a4f86df26615405a12be10f37e4016dba0f82761
Per RISC-V ISA Manual, vol II, section 3.1.6.6, page 25, the FS field of the mstatus register encodes the status of the floating point unit, including the floating point registers. Per page 27, microarchitecture can choose to set the FS field to Dirty even if the floating point unit has not been modified. Per section 3.1.6, page 20, the FS field is located at bits 14..13 of the mstatus register. Per section 3.1.6.6, page 27, the FS field is used for saving context. Upon a system call, the Linux kernel relies on mstatus for choosing registers to save for switching to kernel code. In particular, if the SD bit (updating this bit is also a bug in gem5 and will be explained in the next commit) is not set properly due to the FS field being incorrect, the process of saving the context and restoring the context result in the floating point registers being zeroed out. I.e., upon the saving context function call, the floating point registers are not saved, while in restore context function call, the floating point registers are overwritten with zero bits. Previously, in gem5 RISC-V ISA, the FS field is not updated upon floating point instruction execution. This caused issue on context saving described above. This change conservatively updates the FS field to Dirty on the execution of any floating point instruction. Change-Id: I8b3b4922e8da483cff3a2210ee80c163cace182a Signed-off-by: Hoa Nguyen <hoanguyen@ucdavis.edu> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/65272 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
…
This is the gem5 simulator. The main website can be found at http://www.gem5.org A good starting point is http://www.gem5.org/about, and for more information about building the simulator and getting started please see http://www.gem5.org/documentation and http://www.gem5.org/documentation/learning_gem5/introduction. To build gem5, you will need the following software: g++ or clang, Python (gem5 links in the Python interpreter), SCons, zlib, m4, and lastly protobuf if you want trace capture and playback support. Please see http://www.gem5.org/documentation/general_docs/building for more details concerning the minimum versions of these tools. Once you have all dependencies resolved, type 'scons build/<CONFIG>/gem5.opt' where CONFIG is one of the options in build_opts like ARM, NULL, MIPS, POWER, SPARC, X86, Garnet_standalone, etc. This will build an optimized version of the gem5 binary (gem5.opt) with the the specified configuration. See http://www.gem5.org/documentation/general_docs/building for more details and options. The main source tree includes these subdirectories: - build_opts: pre-made default configurations for gem5 - build_tools: tools used internally by gem5's build process. - configs: example simulation configuration scripts - ext: less-common external packages needed to build gem5 - include: include files for use in other programs - site_scons: modular components of the build system - src: source code of the gem5 simulator - system: source for some optional system software for simulated systems - tests: regression tests - util: useful utility programs and files To run full-system simulations, you may need compiled system firmware, kernel binaries and one or more disk images, depending on gem5's configuration and what type of workload you're trying to run. Many of those resources can be downloaded from http://resources.gem5.org, and/or from the git repository here: https://gem5.googlesource.com/public/gem5-resources/ If you have questions, please send mail to gem5-users@gem5.org Enjoy using gem5 and please share your modifications and extensions.
Description