This avoids a warning for CMake policy CMP0175, which is new with CMake
3.31. The warning is as follows:
Exactly one of PRE_BUILD, PRE_LINK, or POST_BUILD must be given.
Assuming POST_BUILD to preserve backward compatibility.
To preserve behavior, mark these as POST_BUILD. It might not be the
ideal way to have the custom commands run, but it is behavior-preserving
Previously, the buttons would be cropped (by the border thickness) as
the border is not shown on maximized windows. This patch adjusts the
button positions to correct for that.
If you run `serenity.sh run` with missing fuse2fs and/or fusermount3,
then install the needed packages, and then try to run the script
again, rmdir step will fail with "non-empty directory" error
causing QEMU to not start. The patch avoids this by recursively
removing disk mount directory instead of just unlinking it.
atan() isn't implemented yet on non-x86, so this isn't super useful yet.
But it does handle a couple corner cases correctly already, and those
are even enough to make all the atan2 tests in Tests/LibC/TestMath.cpp
pass 🙃
With this, sin() and cos() are fairly close to the correct values
for all x. It's neither fast nor very accurate, but much better than
what we had before.
Now that we have fmod(), we can implement some symmetries for
sin() and cos(). The core approximation is still very simplistic,
but now it only has to approximate in [0, Pi/2]. So while its error
is still high, it's no longer unbounded.
`handle_crash` already calls `dump_registers`, so there is no need for
the AArch64 exception handler to do it as well.
The second register dump (the one made by `handle_crash`) previously
also often reported an incorrect ESR_EL1 value, as interrupts are
enabled at that point in time.
This problem can simply be solved by saving the ESR_EL1 value in the
`RegisterState`, similar to how we save `scause` on RISC-V.
The initial value we used for SCLTR_EL1 would allow EL0 to do things it
shouldn't be allowed to, like disabling interrupts.
Setting that register to more permissive values and overriding it later
shouldn't cause any problems, but it's still less confusing this way.
These mounts are the base set of mounts we need for a fully functional
system. The bind mounts are also there for protection from malicious
software or accidental overwrite/deletion of files.
Therefore, marking these mounts as immutable makes sense, because they
should not be changed during runtime anyway.
Immutable mounts are mounts that can't be changed in any aspect, if the
VFSRootContext that hold them is used by a process. This includes two
operations on a mount:
1. Trying to remove the mount from the mount table.
2. Trying to change the flags of the mount.
The condition of a VFSRootContext being held by a process or not is
crucial, as the intention is to allow removal of mounts that marked as
immutable if the VFSRootContext is not being used anymore (for example,
if the container that was created with such context stopped).
Marking mounts as immutable on the first VFS root context essentially
ensures they will never be modified because there will be a process
using that context (which is the "main" VFS root context in the system
runtime).
It should be noted that setting a mount as immutable can be done in
creation time of the mount by passing the MS_IMMUTABLE flag, or by doing
a remount with MS_IMMUTABLE flag.
This is a pretty naive implementation of exp2() that can be improved
a lot, but hey, it beats the sin() and cos() implementation on non-x86.
It also implements exp(x) as exp2(x * log2(e)), with the same
disclaimer.