Commit graph

8593 commits

Author SHA1 Message Date
Itamar
9e51e295cf ptrace: Add PT_SETREGS
PT_SETTREGS sets the regsiters of the traced thread. It can only be
used when the tracee is stopped.

Also, refactor ptrace.
The implementation was getting long and cluttered the alraedy large
Process.cpp file.

This commit moves the bulk of the implementation to Kernel/Ptrace.cpp,
and factors out peek & poke to separate methods of the Process class.
2020-04-13 00:53:22 +02:00
Itamar
0431712660 ptrace: Stop a traced thread when it exists from execve
This was a missing feature in the PT_TRACEME command.

This feature allows the tracer to interact with the tracee before the
tracee has started executing its program.

It will be useful for automatically inserting a breakpoint at a
debugged program's entry point.
2020-04-13 00:53:22 +02:00
Itamar
4568a628f9 Thread: Set m_blocker to null in Thread::unblock()
Before this commit, m_blocker was only set to null in Thread::block,
after the thread has been unblocked.

Starting with this commit, m_blocker is also set to null in
Thread::unblock.

This change will allow us to implement a missing feature of the PT_TRACE
command of the ptrace syscall - stopping the traced thread when it
exits the execve syscall.

That feature will be implemented by sending a blocking SIGSTOP to the
traced thread after it has executed the execve logic and before it
starts executing the new program in userspace.

However, since Process::exec arranges the tss to return to userspace
(the so-called "yield-teleport"), the code in Thread::block that should
be run after the thread unblocks, and sets m_blocker to null, never
actually runs.

Setting m_blocker to null in Thread::unblock allows us to avoid an
incorrect state where the thread is in a Running state but conatins a
pointer to a Blocker.
2020-04-13 00:53:22 +02:00
Itamar
b306ac9b2b ptrace: Add PT_POKE
PT_POKE writes a single word to the tracee's address space.

Some caveats:
- If the user requests to write to an address in a read-only region, we
temporarily change the page's protections to allow it.

- If the user requests to write to a region that's backed by a
SharedInodeVMObject, we replace the vmobject with a PrivateIndoeVMObject.
2020-04-13 00:53:22 +02:00
Itamar
924fda19b0 Debugger: Get entry point of debugged process
Also, start debugging only after execve is done
2020-04-13 00:53:22 +02:00
Itamar
984ff93406 ptrace: Add PT_PEEK
PT_PEEK reads a single word from the tracee's address space and returns
it to the tracer.
2020-04-13 00:53:22 +02:00
Itamar
77f671b462 CPU: Handle breakpoint trap
Also, start working on the debugger app.
2020-04-13 00:53:22 +02:00
AnotherTest
c112f53357 Shell: Complete .hidden files if token starts with a dot 2020-04-13 00:49:24 +02:00
AnotherTest
364dbe28d6 LibLine: Remove unused cut_mismatching_chars() function
This is superceded by the suggest() mechanism
2020-04-13 00:49:24 +02:00
AnotherTest
fa0525b8bf LibLine: Autocomplete single suggestions
`cd /h<tab>` -> `cd /home/`, pressing tab after that would
descend into `/home/' and show `/home/anon/`
2020-04-13 00:49:24 +02:00
AnotherTest
d3e735f279 Shell: Avoid spamming debug output with suggestions 2020-04-13 00:49:24 +02:00
AnotherTest
2a460aa369 Shell: Do not manually write to the editor buffer when completing paths 2020-04-13 00:49:24 +02:00
Linus Groh
6d5d668585 js: Coerce assert() argument to boolean
It's JavaScript after all :^)
2020-04-13 00:47:53 +02:00
Linus Groh
62d0fa5af8 LibWeb: Use specific error classes when throwing exceptions
Generally:

- interpreter.throw_exception<JS::Error>("TypeError", "Message");
+ interpreter.throw_exception<JS::TypeError>("Message");
2020-04-13 00:47:53 +02:00
Linus Groh
ad230e8839 Ports: Update git to 2.26.0 2020-04-13 00:46:58 +02:00
Stephan Unverwerth
f8f65053bd LibJS: Parse "this" as ThisExpression 2020-04-13 00:45:25 +02:00
Andreas Kling
110ca6b0b6 LibJS: Cache a FlyString for "this" to speed up variable lookup
We were hitting strcmp() in every variable lookup to see if the lookup
was for "this". Caching a FlyString("this") turns that check into one
pointer comparison instead. :^)
2020-04-12 20:40:02 +02:00
Andreas Kling
26a8984d03 AK: Inline Optional functions more aggressively
This turns into much less code in the most common cases, here's why:
The normal Optional usage pattern is something like:

    auto foo = get_me_an_optional();
    if (foo.has_value())
        do_stuff_with(foo.value());

In this typical scenario, we check has_value() before calling value().
Without inlining, value() will double-check has_value() itself and
assert if it fails. Inlining allows the compiler to optimize all of
this away.
2020-04-12 20:37:51 +02:00
Andreas Kling
c84b8e597a LibC: Cache the result of gettid() to avoid syscalls
We now use minherit(MAP_INHERIT_ZERO) to create a gettid() cache that
is automatically invalidated on fork(). This is needed since the TID
will be different in a forked child, and so we can't have a stale
cached TID lying around.

This is a gigantic speedup for LibJS (and everyone else too) :^)
2020-04-12 20:24:34 +02:00
Andreas Kling
c19b56dc99 Kernel+LibC: Add minherit() and MAP_INHERIT_ZERO
This patch adds the minherit() syscall originally invented by OpenBSD.
Only the MAP_INHERIT_ZERO mode is supported for now. If set on an mmap
region, that region will be zeroed out on fork().
2020-04-12 20:22:26 +02:00
Andreas Kling
dd00175ae2 LibWeb: Use an AffineTransform for CanvasRenderingContext2D :^)
This will allow us to support complex 2D transforms.
2020-04-12 19:23:39 +02:00
Andreas Kling
6f2c63000d LibGfx: Add a basic AffineTransform class
We can now perform some basic 2D transforms through an affine matrix.
This patch adds translate() and scale() :^)
2020-04-12 19:23:39 +02:00
Andreas Kling
3bbc2c7300 AK: Add LogStream operator<< overloads for float and double 2020-04-12 19:23:39 +02:00
Andreas Kling
5c780c9ef7 LibGfx: Allow constructing Float{Rect,Point,Size} from integer buddies 2020-04-12 19:23:39 +02:00
Linus Groh
dd7796515f LibJS: Add console.{debug,info,warn,error}() 2020-04-12 18:42:42 +02:00
Hüseyin ASLITÜRK
b1e8cc22bd QuickShow: Small code edits to fit standards 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
70873fdf02 QuickShow: Toolbar for who love to use mouse 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
6c1af174a1 QuickShow: Add Delete action
Delete current file from file system.
2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
f88ceb872a QuickShow: Use Core::ArgsParser to handle parameters 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
e0bf57d81f QuickShow: Add Fullscreen, Zoom options to View menu 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
d79c81a179 QuickShow: Rotate image left and right, flip vertical and horizontal 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
2689fdf1d8 QuickShow: Browse the files in the same folder 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
74a8e3fe1c Base: Add go-first, go-last, zoom-in, zoom-out icons 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
8e9d031cb3 LibGfx: Add Bitmap::rotated and Bitmap::flipped 2020-04-12 18:08:11 +02:00
Hüseyin ASLITÜRK
c6944f8cc2 LibGUI: Use parrent window icon for MessageBox dialog icon 2020-04-12 18:08:11 +02:00
Andreas Kling
264726b2d6 ProfileViewer: Switching to percent mode should take effect immediately 2020-04-12 15:23:24 +02:00
Andreas Kling
235ae80e5e LibGUI: Make TableView ignore custom colors for selected rows
This allows them to look selected instead.
2020-04-12 15:23:24 +02:00
Linus Groh
97de93eed1 LibJS: Add js_negative_infinity()
Value(-js_infinity().as_double()) is kind of awkward.
2020-04-12 14:39:38 +02:00
Linus Groh
f226746394 LibJS: Handle Infinity in Value::to_number() 2020-04-12 14:39:38 +02:00
Andreas Kling
477bacddad ProfileViewer: Symbolicate the disassembled instructions
Instead of "call 0x0811d6ac", we now say "call 0x0811d6ac <malloc>" :^)
2020-04-12 14:20:04 +02:00
Andreas Kling
e880e4c2d2 LibX86: Add a way for Instruction::to_string() to symbolicate addresses
This patch adds a pure virtual X86::SymbolProvider that can be passed
to Instruction::to_string(). If the instruction contains what appears
to be a program address, stringification will try to symbolicate that
address via the SymbolProvider.

This makes it possible (and very flexible) to add symbolication to
clients of the disassembler. :^)
2020-04-12 14:20:04 +02:00
Andreas Kling
5390d53a80 LibGUI: Remove debug spam in AbstractView::did_update_model() 2020-04-12 14:20:04 +02:00
Andreas Kling
8e4751a963 LibGUI: Add a way for models to update without invalidating indexes
This is really just a workaround to keep SystemMonitor's process table
working right wrt selection retention during resorts (while also doing
full index invalidation on things like ProfileViewer inversion.)

It's starting to feel like the model abstraction is not super great
and we'll need a better approach if we want to actually build some more
dynamic functionality into our views.
2020-04-12 12:03:33 +02:00
Andreas Kling
93f2a4edd3 Kernel: Bump the max stack frame count in sample profiles to 50
Maybe this should be configurable, who knows. For now, 50 works a bit
better for highly nested scenarios like LibJS.
2020-04-12 11:00:38 +02:00
Andreas Kling
ff33c5b286 LibJS: Let's show a few more decimals when stringifying numeric values
I'm not sure what the correct behavior is supposed to be, but at least
this makes printing numbers show some more interesting detail for now.
2020-04-12 10:59:29 +02:00
Andreas Kling
c596ef3c0e ProfileViewer: Put the tree and disasembly views in a vertical splitter 2020-04-12 10:57:44 +02:00
Brendan Coles
2d699cd5da LibWeb: Add port blacklist for ResourceLoader::load
`ResourceLoader::load` now rejects URLs which specify a `port`
associated with network services known to be vulnerable to
inter-protocol exploitation.

Fixes #1735
2020-04-12 10:33:35 +02:00
Linus Groh
c8d0a2eb3c AK: Parse query and fragment in URL::parse() 2020-04-12 01:18:39 +02:00
Linus Groh
21a61b276b AK: Support fragment in URL 2020-04-12 01:18:39 +02:00
Peter Nelson
eff27f39d5
Kernel: Store previous thread state upon all transitions to Stopped (#1753)
We now store the previous thread state in m_stop_state for all
transitions to the Stopped state via Thread::set_state.

Fixes #1752 whereupon resuming a thread that was stopped with SIGTSTP,
the previous state of the thread is not remembered correctly, resulting
in m_stop_state == State::Invalid and the associated assertion fails.
2020-04-11 23:39:46 +02:00