Commit Graph

28850 Commits

Author SHA1 Message Date
Marcin Undak
d14d7ee78b Kernel: Discover initial exception level when booting Aarch64
When booting on RPI3 firmware puts CPU in EL2 mode which is
different from QEMU's default EL3.

I've added logic to discover initial mode at boot
and then act accordingly. This results in Serenity corectly
switching to EL1 on target hardware now.
2021-10-15 17:47:39 +01:00
Marcin Undak
ebf810f9a6 Kernel: Make Aarch64 register variables bit more descriptive 2021-10-15 17:47:39 +01:00
Marcin Undak
2d9fa8146c Kernel: Switch processor to EL1 immediately after boot on Aarch64 2021-10-15 17:47:39 +01:00
Marcin Undak
d6021300d5 Kernel: Move wait_cycles() function to Aarch_asm_utils.S
Just a bit of housekeeping.
2021-10-15 17:47:39 +01:00
Marcin Undak
18eb4a59d6 Kernel: Print current CPU exception level after booting on Aarch64
This is a first step to switch to exception level 1.

This is also my first patch for SerenityOS :)
2021-10-15 17:47:39 +01:00
davidot
7beccaf41b LibJS: Add comment clarifying the order of function properties 2021-10-15 17:47:27 +01:00
davidot
021691753d LibJS: Fix that proxy always said that it had a [[Construct]] slot 2021-10-15 10:27:16 +01:00
davidot
1c7c53e5a0 LibJS: Define length and name in function in correct order 2021-10-15 10:27:16 +01:00
davidot
9394cbcd24 LibJS: Do not save state for peeking at the next token from the lexer
This saves having to save and load the parser state.
This could give an incorrect token in some cases where the parser
communicates to the lexer. However this is not applicable in any of the
current usages and this would require one to parse the current token
as normal which is exactly what you don't want to do in that scenario.
2021-10-15 10:27:16 +01:00
davidot
c3cb44ca8a LibJS: Remove ErrorType::FixmeAddAnErrorStringWithMessage 2021-10-15 10:27:16 +01:00
davidot
1fe6a422f1 LibJS: Fix null deref in ObjectProperty::dump() 2021-10-15 10:27:16 +01:00
davidot
10bf91a293 LibJS: Enable now working tests for duplicated variable declarations 2021-10-15 10:27:16 +01:00
Ben Wiederhake
a8930997f0 LibGUI: Make Ctrl-Right at the end of a span work
There used to be the silly bug that when the cursor was already at the
end of a span (e.g. because the user just pressed Ctrl-Right), then
Ctrl-Right had no effect.

This bug does not appear with Ctrl-Left because due to the order in
which the spans are iterated, the effective result is always correct.

This patch also makes it more apparent that the algorithm is
unnecessarily inefficient.
2021-10-15 10:38:57 +02:00
Ben Wiederhake
3647001c93 LibGUI: Don't update selection twice after Ctrl-Right 2021-10-15 10:38:57 +02:00
Ben Wiederhake
68884eefc6 LibGUI: Make Ctrl-Shift-Home/-End work again
Previously, the initial call to update_selection() was missing, so if no
text was already selected, then Ctrl-Shift-End would only move the
cursor to the document end, but not select any text.
2021-10-15 10:38:57 +02:00
Ben Wiederhake
2f023acf78 LibGUI: Convert always-valid pointer to reference
The pointer is always assumed to be non-null, so let's change it to a
reference.
2021-10-15 10:38:57 +02:00
Linus Groh
5910a41adb LibJS: Implement ShadowRealm.prototype.importValue()
Well... sort of. This adds the function itself and all the scaffolding
from the ShadowRealm API (and basically completes its implementation).
However, we do not nearly have enough support for modules and imports,
so we currently pretend whatever was attempted to be imported failed -
once we have HostImportModuleDynamically it should be relatively easy to
complete the implementation.
2021-10-15 09:36:21 +01:00
Linus Groh
2ffb30a996 LibJS: Don't return empty value from PromiseReactionJob::call(), for now 2021-10-15 09:36:21 +01:00
Linus Groh
fb85fd4867 LibJS/Tests: Test ShadowRealm.prototype.evaluate() this value type check 2021-10-15 09:36:21 +01:00
Luke Wilde
09536f5f48 LibJS: Fix typo in LHS Object and RHS BigInt loosely equals check
Step 12 was using `lhs.is_bigint()` instead of `rhs.is_bigint()`,
meaning you got:
```js
1n == Object(1n); // true
Object(1n) == 1n; // false
```

This also adds spec comments to is_loosely_equal.
2021-10-15 01:59:09 +01:00
Timothy Flynn
3ad159537e LibUnicode: Use u16 for unique string indices instead of size_t
Typically size_t is used for indices, but we can take advantage of the
knowledge that there is approximately only 46K unique strings in the
generated UnicodeLocale.cpp file. Therefore, we can get away with using
u16 to store indices. There is a VERIFY that will fail if we ever exceed
the limits of u16.

On x86_64 builds, this reduces libunicode.so from 9.2 MiB to 7.3 MiB.
On i686 builds, this reduces libunicode.so from 3.9 MiB to 3.3 MiB.

These savings are entirely in the .rodata section of the shared library.
2021-10-15 00:06:18 +01:00
Andreas Kling
07096b7765 LibWeb: Compute horizontal overflow for the initial containing block
This finally allows LibWeb to scroll pages horizontally instead of just
clipping things at the right edge.
2021-10-15 00:11:21 +02:00
Linus Groh
0241071ca2 LibJS: Use GlobalObject::associated_realm() for function object realms
As outlined in the previous commit, this should be more reliable than
Interpreter::realm(), as we don't always have access to an Interpreter.
2021-10-14 23:02:19 +01:00
Linus Groh
cbbf4abb0d LibJS: Add a way to get from a GlobalObject to its associated Realm
This is just another workaround, but it should be much more reliable
than Interpreter::realm(), especially when allocating NativeFunctions
and ECMAScriptFunctionObjects: we're guaranteed to have a GlobalObject
at that point, and it likely was set as the GlobalObject of a Realm and
can lead us back to it. We're however not guaranteed that the VM can
give us an Interpreter, which is why functions in LibWeb can be a bit
crashy at the moment.

We use a WeakPtr<Realm> to properly handle the unlikely case where the
Realm goes away after associating a GlobalObject to it.

We'll always need _something_ of this sort if we want to support
OrdinaryFunctionCreate and CreateBuiltinFunction without the explicit
realm argument while no JS is running, because they want to use the
current Realm Record (always in the first and as fallback in the second
case).
2021-10-14 23:02:19 +01:00
Andreas Kling
2447b27d97 LibWeb: Implement position:fixed painting at the stacking context level
This makes everything within the stacking context stick show up in the
correct position.
2021-10-14 23:50:33 +02:00
Andreas Kling
7b0cd15495 LibWeb: Cleanup + spec comments in replaced element height computation 2021-10-14 23:22:59 +02:00
Andreas Kling
463ee07c00 LibWeb: Cleanup + spec comments in replaced element width computation 2021-10-14 23:22:59 +02:00
Andreas Kling
27d4ac316f LibWeb: Introduce simple scrollable overflow, size ICB to viewport
Per spec, the initial containing block (ICB) should have the size of the
viewport. We have only done this for the width until now, since we had
no way to express scrollable overflow.

This patch adds Layout::Box::m_overflow_data, an optional struct that
can hold on to information about a box's overflow. Then we have BFC
set the ICB up with some scrollable overflow instead of sizing it to fit
its content vertically.

This fixes a number of broken layouts where correctness depends on
having the appropriate ICB height.
2021-10-14 23:22:59 +02:00
Andreas Kling
c94873806c LibWeb: Make ReplacedBox intrinsic size setters take Optional<float>
This allows callers to unset the respective intrinsic sizes by passing
an empty Optional.
2021-10-14 23:22:59 +02:00
Valtteri Koskivuori
a38983dc0c ConfigServer: Sync config files to disk automatically
At the risk of introducing premature optimization, it only syncs to disk
5 seconds after the latest valid configuration update, to handle cases
where programs might send frequent updates that would go to disk every
time otherwise.
Also syncs to disk when the client connection closes.

Co-authored-by: Timothy Flynn <trflynn@pm.me>
2021-10-14 21:41:48 +02:00
Andreas Kling
410e2b43ce LibWeb: Use Box::has_intrinsic_aspect_ratio() check in FFC step 3
Now that we can ask any Box about its intrinsic aspect ratio, let's fix
a FIXME in FlexFormattingContext.
2021-10-14 19:42:09 +02:00
Andreas Kling
a58cc2eeb4 LibWeb: Rename "intrinsic ratio" => "intrinsic aspect ratio" 2021-10-14 18:48:49 +02:00
Andreas Kling
81590b1804 LibWeb: Make intrinsic width/height/ratio a Box concept and simplify it
Apparently it's not only replaced elements that can have intrinsic
sizes, so let's move this concept from ReplacedBox to Box. To avoid
bloating Box, we make the accessors virtual.
2021-10-14 18:39:27 +02:00
Linus Groh
1b1bf5c321 LibJS: Change normal_completion() parameter to Optional<Value>
The Completion constructor `VERIFY()`s that the passed argument is not
an empty Value, so normal_completion({}) would crash (although it's
currently not being used anywhere).
We want to pass an empty Optional<Value> instead.
2021-10-14 11:13:05 +01:00
James Mintram
a48985422c Kernel: Add UBSanitizer.cpp to the Aarch64 kernel build 2021-10-14 10:20:03 +01:00
Timothy Flynn
ebe704a03d LibWeb: Stub out a basic IntersectionObserver interface
Note there are a couple of type differences between the spec and the IDL
file added in this commit. For example, we will need to support a type
of Variant to handle spec types such as "(double or sequence<double>)".
But for now, this allows web pages to construct an IntersectionObserver
with any valid type.
2021-10-14 10:32:51 +02:00
Timothy Flynn
ff66218631 LibWeb: Allow creating "any" types in IDL with integral default values
This enables defining "any" types in IDL files such as:

    any threshold = 0;

This isn't able to parse decimal values yet.
2021-10-14 10:32:51 +02:00
Luke Wilde
b7404015aa Base: Add a test for the early return steps of "prepare a script"
This tests the early return steps of "prepare a script" that come
_before_ step 10 "Set the element's "already started" flag". The
relevant steps are steps 6, 7 and 8. If this algorithm returns on any
of these steps, the script can be reinserted matching the requirements
and will run.

https://html.spec.whatwg.org/multipage/scripting.html#prepare-a-script

I wrote this test page up while testing something else, but found a bug
in Firefox where it doesn't allow re-preparing the script if step 8
fails: https://bugzilla.mozilla.org/show_bug.cgi?id=1735590
2021-10-14 10:32:13 +02:00
James Mintram
ceb3328877 Kernel: Fix all linker errors for Aarch64 build 2021-10-14 01:23:08 +01:00
James Mintram
ab70268d61 Kernel: Add the AK sources to the Aarch64 kernel build 2021-10-14 01:23:08 +01:00
James Mintram
545ce5b595 Kernel: Add per platform Processor.h headers
The platform independent Processor.h file includes the shared processor
code and includes the specific platform header file.

All references to the Arch/x86/Processor.h file have been replaced with
a reference to Arch/Processor.h.
2021-10-14 01:23:08 +01:00
James Mintram
23676bee1f Kernel: Add -fsigned-char to ensure consistency across platforms 2021-10-14 01:23:08 +01:00
James Mintram
2a4969d281 Kernel: Move asserts inside platform #if clauses 2021-10-14 01:23:08 +01:00
James Mintram
580006d784 Kernel: Replace includes with a forward declaration 2021-10-14 01:23:08 +01:00
James Mintram
baa7925c0c Kernel: Remove unused includes 2021-10-14 01:23:08 +01:00
James Mintram
26d7c25076 Kernel: Add header includes closer to their use 2021-10-14 01:23:08 +01:00
Linus Groh
1adf57530c js: Implement pretty-printing of ShadowRealm 2021-10-14 00:41:41 +01:00
Linus Groh
c70784bb82 LibJS: Implement ShadowRealm.prototype.evaluate() 2021-10-14 00:41:41 +01:00
Linus Groh
b0ee7f38d0 LibJS: Implement ShadowRealm.prototype[@@toStringTag] 2021-10-14 00:41:41 +01:00
Linus Groh
d40331ef69 LibJS: Start implementing ShadowRealm
This commit adds the ShadowRealm object itself, its constructor, and
prototype (currently empty).
2021-10-14 00:41:41 +01:00