v8/tools/debug_helper
Seth Brenith ecaac3292f [torque] Begin porting ScopeInfo to Torque
This change adds Torque field definitions for ScopeInfo and begins to
use the Torque-generated accessors in some places. It does not change
the in-memory layout of ScopeInfo.

Torque compiler changes:

- Fix an issue where the parser created constexpr types for classes
  based on the class name rather than the `generates` clause. This meant
  that generated accessors referred to the imaginary type HashTable
  rather than the real C++ type FixedArray.
- Don't pass Isolate* through the generated runtime functions that
  implement Torque macros. Maybe we'll need it eventually, but we don't
  right now and it complicates a lot of things.
- Don't emit `kSomeFieldOffset` if some_field has an unknown offset.
  Instead, emit a member function `SomeFieldOffset()` which fetches the
  slice for some_field and returns its offset.
- Emit an `AllocatedSize()` member function for classes which have
  complex length expressions. It fetches the slice for the last field
  and performs the multiply&add to compute the total object size.
- Emit field accessors for fields with complex length expressions, using
  the new offset functions.
- Fix a few minor bugs where Torque can write uncompilable code.

With this change, most code still treats ScopeInfo like a FixedArray, so
I would like to follow up with some additional changes:

1. Generate a GC visitor for ScopeInfo and use it
2. Generate accessors for struct-typed fields (indexed or otherwise),
   and use them
3. Get rid of the FixedArray-style get and set accessors; use
   TaggedField::load and similar instead
4. Inherit from HeapObject rather than FixedArrayBase to remove the
   unnecessary `length` field

After that, there will only be one ugly part left: initialization. I
think it's possible to generate a factory function that takes a bunch of
iterator parameters and returns a fully-formed, verifiably correct
ScopeInfo instance, but doing so is more complicated than the four
mostly-mechanical changes listed above.

Bug: v8:7793
Change-Id: I55fcfe9189e4d1613c68d49e378da5dc02597b36
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2357758
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Peter Marshall <petermarshall@chromium.org>
Reviewed-by: Dominik Inführ <dinfuehr@chromium.org>
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#72187}
2021-01-20 11:56:21 +00:00
..
BUILD.gn [v8windbg] Generate debug macros files 2021-01-19 12:07:38 +00:00
compiler-types.cc [v8windbg] Show bitset name of compiler type 2020-06-23 19:36:36 +00:00
debug-helper-internal.cc Reland "[torque] refactor: use -tq only in filenames derived from .tq files" 2020-09-25 15:04:18 +00:00
debug-helper-internal.h [v8windbg] Display js function only for js frame 2020-09-21 07:50:14 +00:00
debug-helper.h [v8windbg] Display js function only for js frame 2020-09-21 07:50:14 +00:00
debug-macro-shims.h [torque] Begin porting ScopeInfo to Torque 2021-01-20 11:56:21 +00:00
DEPS Reland "Add postmortem debugging helper library" 2019-07-31 14:30:19 +00:00
gen-heap-constants.py [tools] Fix v8windbg behavior on Map's bit_field2 2020-03-09 17:36:27 +00:00
get-object-properties.cc [cleanup] Remove remaining uses of DISALLOW_COPY_AND_ASSIGN 2020-12-03 12:24:03 +00:00
heap-constants.cc [tools] Fix v8windbg behavior on Map's bit_field2 2020-03-09 17:36:27 +00:00
heap-constants.h [tools] Fix v8windbg behavior on Map's bit_field2 2020-03-09 17:36:27 +00:00
list-object-classes.cc Reland "[torque] refactor: use -tq only in filenames derived from .tq files" 2020-09-25 15:04:18 +00:00
OWNERS Add myself as an owner for debug-helper and v8windbg 2020-09-21 15:19:27 +00:00
README.md Reland "Add postmortem debugging helper library" 2019-07-31 14:30:19 +00:00

V8 debug helper

This library is for debugging V8 itself, not debugging JavaScript running within V8. It is designed to be called from a debugger extension running within a native debugger such as WinDbg or LLDB. It can be used on live processes or crash dumps, and cannot assume that all memory is available in a dump.