Commit graph

11844 commits

Author SHA1 Message Date
Andreas Kling
45bfdd0063 LibX86: Add a templatized way to resolve ModR/M memory references
Hopefully this will be flexible enough for our SoftCPU. :^)
2020-07-10 20:20:27 +02:00
Andreas Kling
3a1cf9505d LibX86: Store Instruction's segment prefix as Optional<SegmentRegister>
Instead of having a dedicated enum value for the empty state.
2020-07-10 20:20:27 +02:00
Andreas Kling
f1801cfb28 UserspaceEmulator: Fix a Clang warning
Clang didn't like default construction of PartAddressableRegister,
so let's just use memset() then.
2020-07-10 20:20:27 +02:00
thankyouverycool
deceb91c48 FileManager: Show an open folder icon for the selected directory
The currently selected directory now displays an open folder icon
in the directory tree.
2020-07-10 19:44:18 +02:00
thankyouverycool
e6ddc7e022 LibGUI: Add missing on_toggle hook to TreeView
Alt+arrow toggles are now captured.
2020-07-10 19:44:18 +02:00
thankyouverycool
bd0a4cbbf9 Base: Update 16x16 filetype-folder icons
Update folder-open icon to match current folder icon, and shift
the current folder icon right 1 pixel for smoove animation.
2020-07-10 19:44:18 +02:00
Matthew Olsson
119386ffb0 LibJS: Add tests for symbol object integration 2020-07-09 23:33:00 +02:00
Matthew Olsson
7a1d485b19 LibJS: Integrate Symbols into objects as valid keys
This allows objects properties to be created for symbol keys in addition
to just plain strings/numbers
2020-07-09 23:33:00 +02:00
Matthew Olsson
9783a4936c LibJS: Add test for well-known symbols 2020-07-09 23:29:28 +02:00
Matthew Olsson
ffb569fd5d LibJS: Uncomment remaining symbol tests 2020-07-09 23:29:28 +02:00
Matthew Olsson
d9db6bec42 LibJS: Move global symbol map from SymbolObject to Interpreter
This allows different instances of the Interpreter to have their own
global symbols. Also makes Symbol non-copyable and non-moveable.
2020-07-09 23:29:28 +02:00
Andreas Kling
4d8683b632 UserspaceEmulator: Tidy up SoftCPU's general purpose registers
This patch adds a PartAddressableRegister type, which divides a 32-bit
value into separate parts needed for the EAX/AX/AL/AH register splits.

Clean up the code around register access to make it a little less
cumbersome to use.
2020-07-09 23:27:50 +02:00
Tom
b02d33bd63 Kernel: Fix some flaws that caused crashes or hangs during boot
We need to halt the BSP briefly until all APs are ready for the
first context switch, but we can't hold the same spinlock by all
of them while doing so. So, while the APs are waiting on each other
they need to release the scheduler lock, and then once signaled
re-acquire it. Should solve some timing dependent hangs or crashes,
most easily observed using qemu with kvm disabled.
2020-07-09 23:24:55 +02:00
Tom
5d9ea2c787 Shell: Pledge sigaction
The shell is wiring up signal handlers, and when they get torn
down by Core::EventLoop, they are reset, which requires sigaction.
2020-07-09 21:58:07 +02:00
Tom
6dfd503518 Shell: Handle signals asynchronously
Fixes #2717
2020-07-09 21:58:07 +02:00
Tom
6751d03ea7 LibCore: Add register_signal and unregister_signal to EventLoop
This allows safer asynchronous handling of signals. Signals are
dispatched with highest priority.
2020-07-09 21:58:07 +02:00
Tom
dadd53e4f2 AK: HashTable/HashMap return whether action was performed for set/remove
This allows performing an action based on whether something
was actually added or removed without having to look it up
prior to calling set() or remove().
2020-07-09 21:58:07 +02:00
Tom
df54229954 LibVT: Set scrollbar page size 2020-07-09 21:56:45 +02:00
Tom
fc568ea13a LibGUI: Make scrollbar thumb size relative to content size
In order to calculate a thumb size that is a representation
of the visible portion (page) of the content, that information
needs to be taken into account.
2020-07-09 21:56:45 +02:00
Tom
6df87b51f7
Kernel: Protect Inode list with SpinLock (#2748)
Fixes crashes when a context switch happens in the middle
of modifying it, or when another thread on another processor
modifies it at the same time.
2020-07-09 21:51:58 +02:00
Tom
d4b87fb18e LibGUI: Implement IconView auto-scrolling when trying to select items out of view
If selecting in a large icon view, and dragging the mouse outside
of the widget, or close to the border of it, start scrolling
automatically. This allows for selecting large amount of items
that exceed the amount that can be displayed.
2020-07-09 21:51:01 +02:00
Andreas Kling
d10765bec3 UserspaceEmulator: Add an initial stack and implement PUSH/POP reg32
Programs now start out with a 64 KB stack at 0x10000000. :^)
2020-07-09 16:20:08 +02:00
Andreas Kling
d5c46cf528 UserspaceEmulator: Start sketching out a SoftMMU class :^)
This Emulator sub-object will keep track of all active memory regions
and handle memory read/write operations from the CPU.

A memory region is currently represented by a virtual Region object
that can implement arbitrary behavior by overriding read/write ops.
2020-07-09 16:18:47 +02:00
Andreas Kling
3a73fdd244 UserspaceEmulator: Start executing in _start() instead of main()
This is one step closer to the real thing. :^)
2020-07-09 15:47:10 +02:00
thankyouverycool
066ae29c07 Base+Demos: Add icons to WidgetGallery 2020-07-08 23:48:26 +02:00
Tom
ce5ae83963 Kernel: Detect syscall/sysenter support 2020-07-08 23:47:36 +02:00
Kevin Meyer
5b6920a18a LibWeb: Don't call did_layout in non-main frame documents
Fixes https://github.com/SerenityOS/serenity/issues/2649

Loading a page with iframes could lead to a scenario, where the iframe
document finished layout prior to the main frame beeing laid out
initially. This caused a crash/assertion of the browser.
2020-07-08 23:45:12 +02:00
Kevin Meyer
a5b8cc2d0b LibWeb: Add type for FrameLoader::load
This should enable to destinguish between IFrame, Reload and Navigation
motivated loads in order to call the appropriate hooks.

This change is motivated as loading the IFrame test page causes the
IFrame url to be added to the history and shows up as the current
browser location bar.
2020-07-08 23:45:12 +02:00
Nico Weber
6105f063cb LibLine: Add ctrl-t shortcut for transposing characters 2020-07-07 23:13:25 +02:00
Linus Groh
ec5845212d WindowServer: Apply the "wait" cursor to unresponsive windows 2020-07-07 23:11:39 +02:00
Linus Groh
e99cb74a0c WidgetGallery: Add "Cursors" tab 2020-07-07 23:11:39 +02:00
Linus Groh
899dcba158 WindowServer+LibGUI: Add "wait" cursor 2020-07-07 23:11:39 +02:00
Linus Groh
b8a8e417f1 WindowServer+LibGUI: Add "help" cursor 2020-07-07 23:11:39 +02:00
Linus Groh
b86a59ec05 LibGUI: Use Resize{Column,Row} cursor for Splitter and AbstractTableView 2020-07-07 23:11:39 +02:00
Linus Groh
62866208ee WindowServer+LibGUI: Add "resize row/column" cursors 2020-07-07 23:11:39 +02:00
Nico Weber
2dd40aac4d Piano: Make menu bar consistent with other apps
"Help" should be after "Edit".

The "Quit" menu item should be at the end of the app menu, and
after a separator.
2020-07-07 23:11:08 +02:00
AnotherTest
173effc88d Shell: Suggest aliases when completing program names :^)
Closes #2732
2020-07-07 23:11:01 +02:00
Andreas Kling
8ab601f9e1 UserspaceEmulator: Implement XOR_RM32_reg32
Note that this is a partial implementation since we don't have support
for memory r/m variants yet.
2020-07-07 22:44:58 +02:00
Andreas Kling
934f0b999e UserspaceEmulator: Add arithmetic CPU flags 2020-07-07 22:44:58 +02:00
Andreas Kling
d0dbf92c8d UserspaceEmulator: Break out of emulation when hitting a RET
Until we learn more instructions, we'll have to exit somewhere, so let
us exit when we hit a RET instruction for now.
2020-07-07 22:44:58 +02:00
Andreas Kling
8d8bb07476 UserspaceEmulator: Start building a userspace X86 emulator :^)
This introduces a new X86 CPU emulator for running SerenityOS userspace
programs in a virtualized interpreter environment.

The main goal is to be able to instrument memory accesses and catch
interesting bugs that are very hard to find otherwise. But before we
can do fancy things like that, we have to build a competent emulator
able to actually run programs.

This initial version is able to run a very small program that makes
some tiny syscalls, but nothing more.
2020-07-07 22:44:58 +02:00
Andreas Kling
6440e59ead LibX86: Expose some more things on X86::Instruction 2020-07-07 22:44:58 +02:00
Andreas Kling
7ab2a4dde7 LibX86: Add an abstract X86::Interpreter class
This abstract class has a pure virtual member function for all of the
X86 instructions. This can be used to implement.. something. :^)
2020-07-07 22:44:58 +02:00
Nico Weber
ad8e784938 LibEdit: Make Ctrl-d on an empty line mean EOD again 2020-07-07 18:43:09 +02:00
Linus Groh
8f3151eea8 Base: Add link to test-common.js in test-js(1) man page
This is an easy way to view this file as the link will open it in Text
Editor :^)
2020-07-07 17:42:50 +02:00
Linus Groh
87465f7c54 Help: Handle external links
Links which do not have the "file" protocol (most commonly links to
external websites - http and https) are now not treated as file paths
anymore but instead handled by Desktop::Launcher.

The same applies to files outside of /usr/share/man.

Fixes #2727.
2020-07-07 17:42:50 +02:00
Andreas Kling
787673b743 WindowServer: Turn an assertion that happens sometimes into a dbg()
It's very annoying to crash the WindowServer when something harmless
is a little weird.
2020-07-07 17:10:12 +02:00
Andreas Kling
5975a425bd LibWeb: Turn floated display:inline elements into block-level elements 2020-07-07 17:10:12 +02:00
Andreas Kling
7527b9ee72 WindowServer: set_active_window() should not assume window has a client
I saw this assertion fire once and I don't know how I made it happen,
but it seems fine for client-less windows to become active, they just
don't have a menubar to install.
2020-07-07 17:10:12 +02:00
Linus Groh
e0e100f009 Base: Add "alias ll='ls -l'" to /etc/shellrc 2020-07-07 16:43:59 +02:00