summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-12-12LibCore: Remove `Stream::is_{readable,writable}`Tim Schumacher
Next to functions like `is_eof` these were really confusing to use, and the `read`/`write` functions should fail anyways if a stream is not readable/writable.
2022-12-12Help+LibManual: Without arguments, open index page instead of crashingkleines Filmröllchen
This is the old behavior before the recent LibManual refactor. It also moves the definition of the index page into LibManual for better reuse.
2022-12-11Ports: Add zig port :^)sin-ack
:yakkie: The build process for the Zig compiler is more involved than most of the other ports, because the Zig compiler is mostly self-hosting. In order to build it, the zig-bootstrap build system is used, which does the following: 1) Build LLVM for the host OS; 2) Build Zig for the host OS with the SerenityOS target enabled; 3) Build zlib, zstd and LLVM for SerenityOS using `zig cc` as the C/C++ compiler; 4) Build Zig for SerenityOS using the host Zig. A few hacks are required in order to tell `zig cc` and zig about what Serenity's libc looks like in the build process, but other than that it's fairly straightforward. All of the patches that are included with this commit are Zig-upstream ready once the LLVM patches are upstreamed.
2022-12-11Ports: Export CMAKE_BUILD_PARALLEL_LEVEL for ports scriptssin-ack
When using cmake --build, CMake will look for this environment variable to enable parallelism. The Zig port, for example, uses cmake --build, and will otherwise use a single core if cmake selects Make as the build system. This should help with all ports which use cmake --build.
2022-12-11Kernel: Bump maximum pthread stack size to 32MiBsin-ack
The Zig compiler asks for this much stack on its main thread via the use of PT_GNU_STACK.
2022-12-11Kernel+LibC+LibELF: Set stack size based on PT_GNU_STACK during execvesin-ack
Some programs explicitly ask for a different initial stack size than what the OS provides. This is implemented in ELF by having a PT_GNU_STACK header which has its p_memsz set to the amount that the program requires. This commit implements this policy by reading the p_memsz of the header and setting the main thread stack size to that. ELF::Image::validate_program_headers ensures that the size attribute is a reasonable value.
2022-12-11Kernel: Implement flock downgradingsin-ack
This commit makes it possible for a process to downgrade a file lock it holds from a write (exclusive) lock to a read (shared) lock. For this, the process must point to the exact range of the flock, and must be the owner of the lock.
2022-12-11Kernel+LibC+Tests: Implement `pwritev(2)`sin-ack
While this isn't really POSIX, it's needed by the Zig port and was simple enough to implement.
2022-12-11Kernel+LibC: Implement `setregid(2)`sin-ack
This copies and adapts the setresgid syscall, following in the footsteps of setreuid and setresuid.
2022-12-11Kernel+LibC+LibCore+UserspaceEmulator: Implement `faccessat(2)`sin-ack
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
2022-12-11Kernel: Use real UID/GID when checking for file accesssin-ack
This aligns the rest of the system with POSIX, who says that access(2) must check against the real UID and GID, not effective ones.
2022-12-11Kernel: Remove InodeMetadata::may_{read,write,execute}(Process const&)sin-ack
These have no definition and are never used.
2022-12-11Kernel+LibC+LibCore: Implement `renameat(2)`sin-ack
Now with the ability to specify different bases for the old and new paths.
2022-12-11Kernel+LibC+LibCore: Implement `mkdirat(2)`sin-ack
2022-12-11Kernel+LibC: Implement `readlinkat(2)`sin-ack
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
2022-12-11Kernel+LibC+LibCore: Implement `symlinkat(2)`sin-ack
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
2022-12-11Kernel: Implement Process::custody_for_dirfdsin-ack
This allows deduplicating a bunch of code that has to work with POSIX' *at syscall semantics.
2022-12-11Tests: Update thread tests and make them passkleines Filmröllchen
The existing tests have only mildly changed, and there is another test for joining dead non-detached threads.
2022-12-11LibThreading: Overhaul thread behavior with ThreadStatekleines Filmröllchen
This replaces all state-related variables with a single ThreadState. These are simplified over what the Kernel has, but capture all userspace-available thread state. Locking the state behind an atomic and using proper atomic operations also gets rid of quite some deadlocks and race conditions that have existed around m_tid and others beforehand. In terms of behavior, this introduces the following changes: - All thread state mishandling (e.g. joining a detached thread) crashes the program. Mishandling thread state is a severe kind of concurrency bug that might also be indeterministic, so letting it silently disappear with the return value of pthread_ APIs is a bad idea. The thread state can always be checked beforehand to ensure that no crash happens. - Destructing a still-running thread will crash in AK/Function, so the Thread destructor issues its own warning for debugging purposes. - Thread issues warnings before crashes in many places to aid concurrency debugging (the most difficult kind of debugging). - Joining dead but not detached threads is legal, as per POSIX APIs. - The thread ID is never reset to 0 after the thread has been started and subsequently been assigned a valid thread ID. The thread's exit state is still obtainable. - Detaching threads that are about to exit is considered a programming bug and will often (not always, as we can't catch all execution sequences involved in such a situation) crash the program on purpose. If you want to detach a thread that will definitely exit on its own, you have to prevent it from exiting before detach() was called (e.g. with an "exit requested" flag).
2022-12-11LibThreading: Add a thread state enumkleines Filmröllchen
This will later be used by Thread to keep track of its state more simply and obviously.
2022-12-11LibThreading: Add Thread formatterkleines Filmröllchen
Printing a thread for debugging is used quite often.
2022-12-11LibThreading: Move now-trivial accessors of Thread to cpp filekleines Filmröllchen
Some of these might be changed in the future, and because Thread.h is a commonly included header file, we don't want to change it as much as possible.
2022-12-11LibThreading: Use Threading namespace in Thread.cppkleines Filmröllchen
2022-12-11Kernel: Allow dead threads to be joinedkleines Filmröllchen
Joining dead threads is allowed for two main reasons: - Thread join behavior should not be racy when a thread is joined and exiting at roughly the same time. This is common behavior when threads are given a signal to end (meaning they are going to exit ASAP) and then joined. - POSIX requires that exited threads are joinable (at least, there is no language in the specification forbidding it). The behavior is still well-defined; e.g. it doesn't allow a dead detached thread to be joined or a thread to be joined more than once.
2022-12-11LibSQL: Don't use the SQL socket file path as its descriptorTimothy Flynn
This is just used to key the socket fd for system server takeover. On macOS, this file path has a space in it, which trips up the parsing as it splits on spaces. That parsing should be fixed (probably shouldn't rely on spaces as a delimter), but for now, we can change the key to avoid spaces.
2022-12-11LibSQL: Do not fchmod the SQL socket on macOSTimothy Flynn
Similar to: 9a4ee9aa1a6d947c720b5a550d1d5e81e715ba98.
2022-12-11MasterWord: Display the last word in a different color for short inputArda Cinar
Previously, the word was highlighted red in case it was not found in the dictionary. That color was repurposed as a general "invalid input" color to nudge the player that something was wrong with the last input. Accordingly, the field m_last_word_not_in_dictionary was renamed to m_last_word_invalid
2022-12-11MasterWord: Display messages in a statusbarArda Cinar
In the "inspiration" for this game, messages are displayed on top of the game area in case an invalid guess is inputted. After a few seconds, they disappear. In a similar fashion, a statusbar is created on the game window and similar messages are outputted there.
2022-12-11LibWeb: Support `calc()` values in `background-position`MacDue
2022-12-11LibWeb: Use space_used_by_floats to get x offset of box that creates BFCAliaksandr Kalenik
y of box should be taken in account while calculating space used by floats.
2022-12-11LibWeb: Check if block creates BFC even if all it's children are inlineAliaksandr Kalenik
Even if block has all children inline there need to be a check if it creates BFC because otherwise IFC will be looking in wrong parent BFC to calculate space used by floats.
2022-12-11LibX86: Only pass ProcessorMode to Instruction constructorItamar
We previously passed both OperandSize and AddressSize to the constructor. Both values were only ever 32-bit at construction. We used AddressSize::Size64 to signify Long mode which was needlessly complicated.
2022-12-11LibX86: Use AddressSize::32 in Long modeItamar
As the existing near-by comment says, the default size of displacements & immediates is 32 bits even in Long mode. This makes `disasm` work on our binaries in x86-64 builds.
2022-12-11Help: Link to LibLocalekleines Filmröllchen
This managed to fly under my radar for the LibManual PR, and somehow it only happens for the Clang build but doesn't always trigger on CI.
2022-12-11LibGUI: Add shortcut for inserting new lineSnow
This adds shortcut for inserting a new empty indented line above/below current cursor position. - <Ctrl-Return> for inserting line below. - <Ctrl-Shift-Return> for inserting line above.
2022-12-11WindowServer: Remove unused bools in Menu::draw()thankyouverycool
Added in d522a6f and 1e604b7, their purpose snuffed out in 11bb88f like the faint pulse of a pleading candle, two lives of short excess, doomed to itemize their sins to no effect and for all eternity...
2022-12-11WindowServer: Include missing visibility argument when making MenuItemthankyouverycool
Fixes checkable MenuItems drawing incorrectly due to shifted defaults.
2022-12-11AK: Specialise AK::is() for NNRP<T>Ali Mohammad Pur
This is used by the Jakt runtime.
2022-12-11AK: Add an identity implementation of StringView::from_string_literal()Ali Mohammad Pur
This is required for the Jakt runtime.
2022-12-11AK: Add Optional-like value()/has_value() getters to WeakPtrAli Mohammad Pur
2022-12-11AK: Allow constructing WeakPtr<T> using OptionalNoneAli Mohammad Pur
The Jakt runtime requires this.
2022-12-11AK: Add Optional::lazy_emplace(Callable)Ali Mohammad Pur
This makes it possible to emplace using a given function instead of passing constructor arguments.
2022-12-11AK: Allow non-ascii characters to be printedAli Mohammad Pur
This keeps the FIXME, as well as the assertion.
2022-12-11AK: Format the contents of NNRP<T> if T is formattableAli Mohammad Pur
2022-12-11AK: Ignore "alternative" formatting of StringView instead of crashingAli Mohammad Pur
Jakt implements this in a different way, but it's a noop for StringViews anyway.
2022-12-11AK: Add a Error::__jakt_from_string_literal(StringView) factory functionAli Mohammad Pur
Note that Jakt only allows StringView creation from string literals, so none of the invariants in the class are broken by this (if used only from within Jakt).
2022-12-11AK: Let ErrorOr<T, E> expose its result/error typesAli Mohammad Pur
`ErrorOr<T, E>::ResultType` can now refer to `T`.
2022-12-11AK: Add support for modulo to Checked<T>Ali Mohammad Pur
This is used by the Jakt runtime.
2022-12-11AK: Allow Optional<T> to be constructed by OptionalNone()Ali Mohammad Pur
This is needed by the Jakt runtime too.
2022-12-11AK: Allow the user to access the variant indexAli Mohammad Pur
The average user has no need for this, but the Jakt compiler uses this to avoid going through the expensive ::visit() and ::get<>() APIs.