summaryrefslogtreecommitdiff
path: root/DevTools
AgeCommit message (Collapse)Author
2020-07-11UserspaceEmulator: Implement the RET instructionAndreas Kling
We can now return from a CALL! :^)
2020-07-11UserspaceEmulator: Symbolicate disassembly output :^)Andreas Kling
Since we have the ELF executable handy, we can actually symbolicate the disassembly trace output really easily. Very cool! :^)
2020-07-11UserspaceEmulator: Don't exit the emulation loop on "RET" :^)Andreas Kling
2020-07-11UserspaceEmulator: Implement PUSH_imm32 and PUSH_RM32Andreas Kling
2020-07-11UserspaceEmulator: Implement short-range jump instructionsAndreas Kling
2020-07-11UserspaceEmulator: Implement the CALL_imm32 instructionAndreas Kling
2020-07-11UserspaceEmulator: Fix broken inline assembly for asymmetric op_foosAndreas Kling
When the Destination and Source of an op_foo were types of different sizes, the generated assembly was not filling up the "source" register fully in some cases. This led to incorrect results.
2020-07-11UserspaceEmulator: Print out the current EIP as we execute instructionsAndreas Kling
2020-07-11UserspaceEmulator: Load the target executable ELF semi-properly :^)Andreas Kling
This patch adds a basic ELF program loader to the UserspaceEmulator and creates MMU regions for each PT_LOAD header. (Note that we don't yet respect the R/W/X flags etc.) We also turn the SoftCPU into an X86::InstructionStream and give it an EIP register so we can actually execute code by fetching memory through our MMU abstraction.
2020-07-11UserspaceEmulator: Set up a very basic program entry stackAndreas Kling
2020-07-11UserspaceEmulator: Convert the XOR instruction to inline assemblyAndreas Kling
2020-07-11UserspaceEmulator: Convert the SUB instruction to inline assemblyAndreas Kling
2020-07-11UserspaceEmulator: Tweak INC and SAR helpers to not be SoftCPU membersAndreas Kling
It's quite nice having these as compartmentalized free functions.
2020-07-11UserspaceEmulator: Add the INC and ADD instructionsAndreas Kling
More inline assembly. I'm still figuring out how to combine templates and inline assembly, but it's turning out pretty cool. :^)
2020-07-11UserspaceEmulator: Give SoftCPU an API for evaluating jump conditionsAndreas Kling
There are 16 conditions and they're all based on a combination of the CPU flags.
2020-07-11UserspaceEmulator: Split SAR inline assembly into 8/16/32 bit variantsAndreas Kling
2020-07-11UserspaceEmulator: Support MOV_RM32_reg32 with memory destinationAndreas Kling
2020-07-11UserspaceEmulator: Implement the CMP family of instructionsAndreas Kling
These are identical to SUB, except they don't store the result (they only upate the arithmetic flags.)
2020-07-10UserspaceEmulator: Warn in SoftMMU if accessing unknown memoryAndreas Kling
2020-07-10UserspaceEmulator: Implement a bunch of the MOV instructionsAndreas Kling
2020-07-10UserspaceEmulator: Implement the SAR instructionAndreas Kling
Let's try doing this with some inline assembly. We know we're running on an x86 target anyway. :^)
2020-07-10UserspaceEmulator: Implement the SUB family of instructionsAndreas Kling
2020-07-10UserspaceEmulator+LibX86: Implement all the forms of XORAndreas Kling
And they're all generic, which will make it easy to support more ops.
2020-07-10UserspaceEmulator: Better 8/16 bit GPR accessorsAndreas Kling
2020-07-10UserspaceEmulator: Add 8/16 bit memory read/write operationsAndreas Kling
2020-07-10UserspaceEmulator: First cut of generic instruction implementationsAndreas Kling
Let's use C++ templates to implement the generic parts of instructions. There are tons of them with the same set of inputs, just different behavior. Templates are perfect for this.
2020-07-10UserspaceEmulator: Add proper segment registersAndreas Kling
Some things will flow better if we're able to index into a table of our segment registers.
2020-07-10UserspaceEmulator: Add accessors for the 16-bit GPRsAndreas Kling
2020-07-10UserspaceEmulator: Fix a Clang warningAndreas Kling
Clang didn't like default construction of PartAddressableRegister, so let's just use memset() then.
2020-07-09UserspaceEmulator: Tidy up SoftCPU's general purpose registersAndreas Kling
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-09UserspaceEmulator: Add an initial stack and implement PUSH/POP reg32Andreas Kling
Programs now start out with a 64 KB stack at 0x10000000. :^)
2020-07-09UserspaceEmulator: Start sketching out a SoftMMU class :^)Andreas Kling
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-09UserspaceEmulator: Start executing in _start() instead of main()Andreas Kling
This is one step closer to the real thing. :^)
2020-07-07UserspaceEmulator: Implement XOR_RM32_reg32Andreas Kling
Note that this is a partial implementation since we don't have support for memory r/m variants yet.
2020-07-07UserspaceEmulator: Add arithmetic CPU flagsAndreas Kling
2020-07-07UserspaceEmulator: Break out of emulation when hitting a RETAndreas Kling
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-07UserspaceEmulator: Start building a userspace X86 emulator :^)Andreas Kling
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-04TextEditor: Tweak 16x16 iconAndreas Kling
In keeping with the slightly-higher-contrast theme.
2020-07-04Profiler: Use SortingProxyModel::set_sort_role()Andreas Kling
Use the new API to avoid duplicating code in the RunningProcessesModel.
2020-07-04LibGUI: Turn GUI::Application::the() into a pointerAndreas Kling
During app teardown, the Application object may be destroyed before something else, and so having Application::the() return a reference was obscuring the truth about its lifetime. This patch makes the API more honest by returning a pointer. While this makes call sites look a bit more sketchy, do note that the global Application pointer only becomes null during app teardown.
2020-07-04LibGUI: Make GUI::Application a Core::ObjectAndreas Kling
Having this on the stack makes whole-program teardown iffy. Turning it into a Core::Object allows anyone who needs it to extends its lifetime.
2020-07-02Profiler: Turn the "choose a process" functionality into a GUI::DialogAndreas Kling
This feels a bit nicer and make it possible to reuse this in other places as well. :^)
2020-07-02Profiler: Make the RunningProcessesModel actually sortableAndreas Kling
GUI::TableView looks at data(Model::Role::Sort) to know which order things should be in.
2020-07-01Profiler: Allow specifying a PID to profile with --pidAndreas Kling
2020-07-01Profiler: If run without arguments, let user select process from a listAndreas Kling
We now show a list of running processes that the user can choose from. After choosing one, we start profiling it and show a timer with a stop button that the user has to press to stop profiling.
2020-07-01Profiler: Rename from ProfileViewer :^)Andreas Kling
2020-07-01Inspector: Expand and show properties in a TreeViewAnotherTest
This allows the inspector to show arbitrary json structures.
2020-06-29Everywhere: Replace some uses of fork/exec with posix_spawnNico Weber
It's less code, and it's potentially more efficient once posix_spawn is a real syscall.
2020-06-21HackStudio: Use Web::PageView::load_html() for the documentation popupAndreas Kling
Also simplify the way we change the background color a little bit.
2020-06-13AK: JsonParser improvementsMatthew Olsson
- Parsing invalid JSON no longer asserts Instead of asserting when coming across malformed JSON, JsonParser::parse now returns an Optional<JsonValue>. - Disallow trailing commas in JSON objects and arrays - No longer parse 'undefined', as that is a purely JS thing - No longer allow non-whitespace after anything consumed by the initial parse() call. Examples of things that were valid and no longer are: - undefineddfz - {"foo": 1}abcd - [1,2,3]4 - JsonObject.for_each_member now iterates in original insertion order