1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 08:28:11 +00:00
Commit graph

11395 commits

Author SHA1 Message Date
Andreas Kling
2a2e76c802 UserspaceEmulator: Mark mmap and shbuf regions as initialized up front
A lot of software relies on the fact that mmap and shbuf memory is
zeroed out by the kernel, so we should consider it initialized from the
shadow bit perspective as well.
2020-07-21 16:28:44 +02:00
Andreas Kling
903c5b0833 UserspaceEmulator: Mark the full initial TCB as initialized memory 2020-07-21 16:27:54 +02:00
Andreas Kling
685e006e27 LibWeb: Use "namespace Web::Foo {" since C++20 allows it :^)
Thanks @nico for teaching me about this!
2020-07-21 16:23:08 +02:00
AnotherTest
4065182811 LibTLS: Reschedule the timeout if we're too slow
Previously, we would not care if the handshake timer timed out because
the server was too slow, or because we were too slow, this caused
connections to fail when the system was under heavy load.
This patch fixes this behaviour (and closes #2843) by checking if the
timeout delay was within margin of error of the max timeout.
2020-07-21 13:01:35 +02:00
Andreas Kling
be5f42adea UserspaceEmulator+LibX86: Start tracking uninitialized memory :^)
This patch introduces the concept of shadow bits. For every byte of
memory there is a corresponding shadow byte that contains metadata
about that memory.

Initially, the only metadata is whether the byte has been initialized
or not. That's represented by the least significant shadow bit.

Shadow bits travel together with regular values throughout the entire
CPU and MMU emulation. There are two main helper classes to facilitate
this: ValueWithShadow and ValueAndShadowReference.

ValueWithShadow<T> is basically a struct { T value; T shadow; } whereas
ValueAndShadowReference<T> is struct { T& value; T& shadow; }.

The latter is used as a wrapper around general-purpose registers, since
they can't use the plain ValueWithShadow memory as we need to be able
to address individual 8-bit and 16-bit subregisters (EAX, AX, AL, AH.)

Whenever a computation is made using uninitialized inputs, the result
is tainted and becomes uninitialized as well. This allows us to track
this state as it propagates throughout memory and registers.

This patch doesn't yet keep track of tainted flags, that will be an
important upcoming improvement to this.

I'm sure I've messed up some things here and there, but it seems to
basically work, so we have a place to start! :^)
2020-07-21 02:37:29 +02:00
Muhammad Zahalqa
f2d3cc7325 LibPThread: Make pthread_exit a noreturn function
LibPThread: mark pthread_exit a noreturn function using compiler attributes
LibThread: remove a call to pthread_exit from Thread::start lambda expression
as it make the return of teh lambda unreachable.
2020-07-21 01:10:41 +02:00
Luke
19d6884529 LibWeb: Implement quirks mode detection
This allows us to determine which mode to render the page in.

Exposes "doctype" and "compatMode" on Document.
Exposes "name", "publicId" and "systemId" on DocumentType.
2020-07-21 01:08:32 +02:00
Luke
a5ecb9bd6b AK: Add case insensitive version of starts_with 2020-07-21 01:08:32 +02:00
Sahan Fernando
ccc929dcf9 TextEditor: Preserve preview scroll position across page refreshes 2020-07-20 21:04:19 +02:00
thankyouverycool
c90fe7ce93 LibGUI: Use ControlBoxButtons in SpinBox and ComboBox
Converts the buttons of these widgets into ControlBoxButtons.
2020-07-20 21:03:48 +02:00
thankyouverycool
bf59cd7ca5 LibGUI: Add ControlBoxButton to LibGUI
ControlBoxButton consolidates the paint_event for buttons
used in composite box widgets like ComboBox and SpinBox. Its
button bitmaps are built with create_from_ascii like WindowFrame
and ScrollBar controls, making theming more uniform.
2020-07-20 21:03:48 +02:00
Andreas Kling
76523a3d2d LibGUI: Show the special home directory icon in GUI::FilePicker 2020-07-19 21:42:00 +02:00
Andreas Kling
f286eb7fcd FileManager: Show a special icon for the home directory
The home-directory icon now shows up in the FileManager title bar,
and alongside the path in the location textbox. Very nice. :^)
2020-07-19 21:37:25 +02:00
Andreas Kling
dc696ba85c LibGUI: Show a special icon for the home directory in FileSystemModel 2020-07-19 21:37:19 +02:00
Andreas Kling
3a62029dee Base: Add special icons for the home directory
It's filetype-folder but with little houses on them. :^)
2020-07-19 21:36:54 +02:00
Andreas Kling
9710c9742c LibGUI+FileManager: Add setting for showing/hiding dotfiles
GUI::FileSystemModel can now be told to display (or not display) files
whose name start with a dot (other than . and ..)
2020-07-19 21:15:00 +02:00
Andreas Kling
ad57a2f18b FileManager: Use new TextBox::DisplayOnly mode in the properties dialog
Use this instead of disabling the name TextBox. This looks a little bit
nicer than the grayed-out appearance. :^)
2020-07-19 21:15:00 +02:00
Peter Elliott
b44a7f68cd Userland: add mkfifo(1) 2020-07-19 11:46:37 +02:00
Peter Elliott
82ba7d546a LibC: add mkfifo(3) 2020-07-19 11:46:37 +02:00
Peter Elliott
b9619989dd Userland: mknod: Don't use major/minor when creating a pipe 2020-07-19 11:46:37 +02:00
Peter Elliott
d01eba6fa3 Kernel: Implement FIFOs/named pipes 2020-07-19 11:46:37 +02:00
Brian Gianforcaro
76e34968fa Demos: Setup window icon for Mouse demo
The icon was set in the launcher, and the About dialog, but was
missing form the actual window.
2020-07-19 11:18:27 +02:00
Andreas Kling
a49c794725 UserspaceEmulator: Add the get_dir_entries() syscall + an ioctl() stub 2020-07-18 17:57:40 +02:00
Andreas Kling
e4b068aec5 UserspaceEmulator: Fix buggy IDIV instructions
These were not doing mashing together the signed double-size results
correctly and lost bits in the signed/unsigned casting process.
2020-07-18 17:57:40 +02:00
Andreas Kling
9e6d002660 UserspaceEmulator: Fix buggy IMUL instructions
These were not recording the higher part of the result correctly.
Since the flags are much less complicated than the inline assembly
here, just implement IMUL in C++ instead.
2020-07-18 17:57:40 +02:00
Andreas Kling
70cb4491d7 AK: Use "signed char" as the opposite of "unsigned char"
I totally forgot about the C++ basics here. There are three distinct
types: "char", "signed char" and "unsigned char". Whether "char" is
signed or unsigned is implementation specific.
2020-07-18 17:57:40 +02:00
Andreas Kling
02882d5345 UserspaceEmulator: Add single-operand MUL and DIV instructions
These are the unsigned variants. Signed variants sold separately.
2020-07-18 17:57:40 +02:00
Andreas Kling
30d512144e UserspaceEmulator: Implement the BSF and BSF instructions
BSF maps nicely to __builtin_ctz(), but for BSR we have to bust out
some inline assembly to get exactly what we want.
2020-07-18 17:57:40 +02:00
thankyouverycool
a4b2d6cf1e LibGUI: Set parent icon, margins and disable resize for InputBox
Gives a more compact, uniform appearance to input boxes.
2020-07-18 16:27:57 +02:00
thankyouverycool
d976b31ef6 LibGUI: Paint slider knob as indented when disabled
Better visual feedback when sliders won't budge.
2020-07-18 16:27:57 +02:00
thankyouverycool
19e883e45a WidgetGallery: Add more widgets
Adds combo and input boxes + more variation for existing widgets.
2020-07-18 16:27:57 +02:00
Nico Weber
b5565b478f System Monitor: Sort Address column in memory map numerically 2020-07-18 15:52:08 +02:00
Nico Weber
a98d960ad4 Taskbar: Use Name from .af file as tooltip
With this, System Monitor has "System Monitor" instead of
"SystemMonitor" as tooltip, matching the app's title bar
and menu bar title.

Same for File Manager and Text Editor.
2020-07-18 15:51:46 +02:00
Nico Weber
629410b3d6 TextEditor: Auto-select C++ syntax highlighting for more extensions 2020-07-18 15:19:58 +02:00
Andreas Kling
82c38f6fdf WindowServer: Decide on a window title before measuring its width
If we add "(Not responding)" to the title of an unresponsive window,
the title rect needs to be wider or we'll have text-on-stripes.

Thanks to @SharpOB for reporting this bug!
2020-07-18 01:50:24 +02:00
Andreas Kling
becbf36711 UserspaceEmulator: Fix XCHG_AX_reg16 overwriting entire EAX
This instruction should only write to the lower 16 bits (AX)
2020-07-18 00:25:02 +02:00
Andreas Kling
8959f9950a UserspaceEmulator: Simplify the STOSB/STOSW/STOSD instructions 2020-07-18 00:25:02 +02:00
Andreas Kling
79290696cf UserspaceEmulator: Simplify MOVSB/MOVSW/MOVSD instructions
Use the new loop instruction helpers.
2020-07-18 00:25:02 +02:00
Andreas Kling
f70f530722 UserspaceEmulator: Implement the SCASB/SCASW/SCASD instructions 2020-07-18 00:25:02 +02:00
Andreas Kling
41bbedc41d UserspaceEmulator: Implement the LODSB/LODSW/LODSD instructions
Look how nice they look with the new loop instruction helpers. :^)
2020-07-18 00:25:02 +02:00
Andreas Kling
c3441719ea UserspaceEmulator: Implement the JCXZ instruction 2020-07-18 00:25:02 +02:00
Andreas Kling
d321dc0a74 UserspaceEmulator: Fix too-wide accumulator used in 8/16 bit CMPXCHG 2020-07-18 00:25:02 +02:00
Andreas Kling
8ec8ec8b1c Kernel: Remove special-casing of sys$gettid() in syscall entry
We had a fast-path for the gettid syscall that was useful before
we started caching the thread ID in LibC. Just get rid of it. :^)
2020-07-18 00:25:02 +02:00
Andreas Kling
485d1faf09 UserspaceEmulator: Add helpers for making loop instructions generic
Use them to implement CMPSB/CMPSW/CMPSD.
2020-07-18 00:25:02 +02:00
Andreas Kling
28b6ba56aa UserspaceEmulator: Add the LOOP/LOOPZ/LOOPNZ instructions 2020-07-18 00:25:02 +02:00
Andreas Kling
af7a1eca0b UserspaceEmulator: Implement the XLAT instruction :^) 2020-07-18 00:25:02 +02:00
Andreas Kling
86a7820ad7 UserspaceEmulator: Add 16-bit PUSH/POP instructions 2020-07-18 00:25:02 +02:00
Andreas Kling
75500b449c UserspaceEmulator: Fix every line in backtraces showing EIP
Oops, we're supposed to show the return address for each frame, not the
current EIP every time. :^)
2020-07-18 00:25:02 +02:00
Andreas Kling
d153fbf44e UserspaceEmulator: Implement the BT/BTS/BTR/BTC instruction set 2020-07-18 00:25:02 +02:00
Andreas Kling
06669f3f0f UserspaceEmulator: Implement IMUL_RM8 and IMUL_RM32
These are both a little tricky since they produce a result wider than
the inputs.
2020-07-18 00:25:02 +02:00