Closed Bug 1724031 Opened 1 month ago Closed 22 days ago

Consider using reserved slots for JSFunction data

Categories

(Core :: JavaScript Engine, task, P3)

task

Tracking

()

RESOLVED FIXED
93 Branch
Tracking Status
firefox93 --- fixed

People

(Reporter: jonco, Assigned: jonco)

Details

Attachments

(15 files)

48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review

JSFunction is one of a few JSObject classes that uses its own custom data layout:

https://searchfox.org/mozilla-central/source/js/src/vm/JSFunction.h#43-131

This adds complexity to object allocation and in the GC (and probably other places too). It would be great if this could store its data in reserved slots instead.

Priority: -- → P3

There's no reason for these to be private when they all have operator=
implemented in terms of set() anyway.

Assignee: nobody → jcoppeard
Status: NEW → ASSIGNED

This is useful later on so we can update a function's flags with a single
expression rather than reading, updating and setting the flags separately.

Depends on D123080

In preparation for storing this in a slot, this stores the two values together
in the same field.

Depends on D123081

In preparation for storing them in a slot, store them in a Value. The value is
encoded as a private uint32 value.

Depends on D123082

In preparation for storing this in a slot, store it as a Value.

The native function is stored as a private value. This requires casting it to
void* which AFAIU only conditionally supported in the C++ spec but in practice
supported everwhere. We used to do this in other places, although we have
removed them now.

Depends on D123083

In preparation for storing this in a slot, store it as a JS::Value.

All values including JSScript pointers are stored as private values becuase the
JIT assumes it can access SelfHostedLazyScript pointers and JSScript pointers
in the same way. This means we will still need a trace hook when we store this
data in slots.

Depends on D123084

We will need to change this later as extended functions will have a different
class, so factor out the check.

Depends on D123086

GetClonedSelfHostedFunctionNameOffMainThread doesn't seem to be used any more,
so the JSFunction methods it used can go too.

Depends on D123087

Move class fields to fixed slots. I was originally going to remove the function
alloc kinds but they are used to iterate all functions for relazification.

Another complication is that the JIT assumes that the prototype property for
function constructors is always stored in the first dynamic slot, which
requires extended functions have a special size class with six fixed slots.

Depends on D123089

Still going through this, but do you know what the effect is on for instance "Base Content JS" (the SY(ab) task on Treeherder)?

Flags: needinfo?(jcoppeard)

(In reply to Jan de Mooij [:jandem] from comment #13)

Still going through this, but do you know what the effect is on for instance "Base Content JS" (the SY(ab) task on Treeherder)?

Whoops only 32-bit, of course. That's probably acceptable.

Flags: needinfo?(jcoppeard)

Functions can now have one of two classes so it's best if JSFunction::class_
doesn't exist or people may use that without thinking.

Depends on D123089

(In reply to Jan de Mooij [:jandem] from comment #14)
I ran the awsy tests and the results don't show any conclusive regressions although Base Content JS for 32 bit Windows shows a 3.88% regression at low confidence.

https://treeherder.mozilla.org/perfherder/compare?originalProject=try&originalRevision=4c9189f3600845caf007338bba792308b1a84ff9&newProject=try&newRevision=1a10cc2f41ba86e7b9c16ae849a1466eb1bc25d5&framework=4&page=1&filter=32

Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/9f61d500b30c
Part 0: Make set() method public on GC pointer wrappers r=jandem
https://hg.mozilla.org/integration/autoland/rev/0ed5698bb080
Part 1: Make FunctionFlags setters return *this r=jandem
https://hg.mozilla.org/integration/autoland/rev/b384e6621405
Part 2: Store a functions flags and argument count in a single 32-bit field r=jandem
https://hg.mozilla.org/integration/autoland/rev/720ceec410a3
Part 3: Store JSFunction flags and arg count as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/672daa49ab88
Part 4: Store JSFunction's native function / environment object field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/01dd672b7e27
Part 5: Store JSFunction's JIT data / script field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/b5229cf51aa4
Part 6: Store JSFunction's atom field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/f420e87d84c8
Part 7: Factor out JIT test for whether an object is a function r=jandem
https://hg.mozilla.org/integration/autoland/rev/70db288e80aa
Part 8: Remove some unused JSFunction methods r=jandem
https://hg.mozilla.org/integration/autoland/rev/a88d9295e473
Part 9: Add a separate JSClass for extended functions r=jandem
https://hg.mozilla.org/integration/autoland/rev/a022c9b1a62c
Part 9.5: Move JSFunction::class_ to avoid confusion r=jandem
https://hg.mozilla.org/integration/autoland/rev/933063e7ecdd
Part 10: Use fixed slots to store function data r=jandem
https://hg.mozilla.org/integration/autoland/rev/5a3ee7a0dcc4
Part 11: Fix GDB scripts to work with new function layout r=jandem

there is also a spider monkey tsan build bustage: failure log

Changing functions to use fixed slots creates a problem when the profiler
tries to get the script for on-stack functions. Unfortunately this can happen
during minor GC after the functions have been moved but before the profiler
data pointing to them has been updated.

The function data itself is mostly intact, but the object header (used for the
shape) is not valid. As far as I can see this only affects the debug assertions
around checking that slot numbers are valid. However the simplest fix is to
suppress the profiler during the intial part of minor GC, until the roots have
been traced (which will update the profiler data).

The patch moves the code to trace the roots in a minor GC to a separate method
and adds a guard to suppress the profiler.œ

What do you think? Alternatively we would have to add a load of 'unchecked'
methods to a buch of accessors on JSFunction, and to NativeObject to get fixed
slots without touching the shape.

Depends on D123094

Attachment #9237021 - Attachment description: Bug 1724031 - Part 11: Fix GDB scripts to work with new function layout r?jandem → Bug 1724031 - Part 12: Fix GDB scripts to work with new function layout r?jandem
Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/0cca6901539d
Part 0: Make set() method public on GC pointer wrappers r=jandem
https://hg.mozilla.org/integration/autoland/rev/d0fe0b0b2b84
Part 1: Make FunctionFlags setters return *this r=jandem
https://hg.mozilla.org/integration/autoland/rev/a7f3f8eb7ac0
Part 2: Store a functions flags and argument count in a single 32-bit field r=jandem
https://hg.mozilla.org/integration/autoland/rev/e4d4251e86a3
Part 3: Store JSFunction flags and arg count as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/58dd7d7a733e
Part 4: Store JSFunction's native function / environment object field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/1a4a5c11b9f1
Part 5: Store JSFunction's JIT data / script field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/bb4c2384f676
Part 6: Store JSFunction's atom field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/ae06621c5728
Part 7: Factor out JIT test for whether an object is a function r=jandem
https://hg.mozilla.org/integration/autoland/rev/3327c1d290b7
Part 8: Remove some unused JSFunction methods r=jandem
https://hg.mozilla.org/integration/autoland/rev/75f1f67429e1
Part 9: Add a separate JSClass for extended functions r=jandem
https://hg.mozilla.org/integration/autoland/rev/5673e5c4f996
Part 9.5: Move JSFunction::class_ to avoid confusion r=jandem
https://hg.mozilla.org/integration/autoland/rev/7991bfb259ae
Part 10: Use fixed slots to store function data r=jandem
https://hg.mozilla.org/integration/autoland/rev/3a79fb5a7a07
Part 11: Fix GDB scripts to work with new function layout r=jandem

This fixes an intermittent TSAN failure due to accessing JSFunction off main thread.

Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/cc120b96f315
Part 0: Make set() method public on GC pointer wrappers r=jandem
https://hg.mozilla.org/integration/autoland/rev/3875b61767f4
Part 1: Make FunctionFlags setters return *this r=jandem
https://hg.mozilla.org/integration/autoland/rev/632caa336ddc
Part 2: Store a functions flags and argument count in a single 32-bit field r=jandem
https://hg.mozilla.org/integration/autoland/rev/56cafd086270
Part 3: Store JSFunction flags and arg count as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/60a5118996fa
Part 4: Store JSFunction's native function / environment object field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/f8d97ab88f6e
Part 5: Store JSFunction's JIT data / script field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/0d15d0423ffe
Part 6: Store JSFunction's atom field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/f5fbec033eab
Part 7: Factor out JIT test for whether an object is a function r=jandem
https://hg.mozilla.org/integration/autoland/rev/f5a9492b8db5
Part 8: Remove some unused JSFunction methods r=jandem
https://hg.mozilla.org/integration/autoland/rev/00b6255dfd99
Part 9: Add a separate JSClass for extended functions r=jandem
https://hg.mozilla.org/integration/autoland/rev/731989a668e5
Part 9.5: Move JSFunction::class_ to avoid confusion r=jandem
https://hg.mozilla.org/integration/autoland/rev/5795d473a641
Part 10: Use fixed slots to store function data r=jandem
https://hg.mozilla.org/integration/autoland/rev/b956c169063f
Part 11: Prevent gecko profiler from observing moved function pointers r=jandem
https://hg.mozilla.org/integration/autoland/rev/2afd98d56716
Part 12: Fix GDB scripts to work with new function layout r=jandem
https://hg.mozilla.org/integration/autoland/rev/6e4eb9e09774
Part 13: Fix race writing recover info r=tcampbell

Backed out for assertion failures on JSFunction.h

[task 2021-08-26T16:37:42.403Z] 16:37:42     INFO - GECKO(6400) | Assertion failure: getFixedSlot(AtomSlot).isUndefined(), at /builds/worker/checkouts/gecko/js/src/vm/JSFunction.h:338
[task 2021-08-26T16:37:42.415Z] 16:37:42     INFO -  Initializing stack-fixing for the first stack frame, this may take a while...
[task 2021-08-26T16:37:48.091Z] 16:37:48     INFO - GECKO(6400) | #01: JSFunction::initAtom(JSAtom*) [js/src/vm/JSFunction.h:338]
[task 2021-08-26T16:37:48.092Z] 16:37:48     INFO - GECKO(6400) | #02: js::GlobalObject::getSelfHostedFunction(JSContext*, JS::Handle<js::GlobalObject*>, JS::Handle<js::PropertyName*>, JS::Handle<JSAtom*>, unsigned int, JS::MutableHandle<JS::Value>) [js/src/vm/GlobalObject.cpp:1003]
[task 2021-08-26T16:37:48.092Z] 16:37:48     INFO - GECKO(6400) | #03: JS::NewFunctionFromSpec(JSContext*, JSFunctionSpec const*, JS::Handle<JS::PropertyKey>) [js/src/jsapi.cpp:2220]
[task 2021-08-26T16:37:48.093Z] 16:37:48     INFO - GECKO(6400) | #04: js::DefineFunctions(JSContext*, JS::Handle<JSObject*>, JSFunctionSpec const*, js::DefineAsIntrinsic) [js/src/vm/JSObject.cpp:2535]
[task 2021-08-26T16:37:48.094Z] 16:37:48     INFO - GECKO(6400) | #05: JS_DefineFunctions(JSContext*, JS::Handle<JSObject*>, JSFunctionSpec const*) [js/src/vm/PropertyAndElement.cpp:951]
[task 2021-08-26T16:37:48.095Z] 16:37:48     INFO - GECKO(6400) | #06: js::GlobalObject::resolveConstructor(JSContext*, JS::Handle<js::GlobalObject*>, JSProtoKey, js::GlobalObject::IfClassIsDisabled) [js/src/vm/GlobalObject.cpp:351]
[task 2021-08-26T16:37:48.095Z] 16:37:48     INFO - GECKO(6400) | #07: JS_ResolveStandardClass(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::PropertyKey>, bool*) [js/src/jsapi.cpp:948]
[task 2021-08-26T16:37:48.096Z] 16:37:48     INFO - GECKO(6400) | #08: js::LookupProperty(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::PropertyKey>, JS::MutableHandle<JSObject*>, js::PropertyResult*) [js/src/vm/JSObject.cpp:1857]
[task 2021-08-26T16:37:48.096Z] 16:37:48     INFO - GECKO(6400) | #09: js::LookupName(JSContext*, JS::Handle<js::PropertyName*>, JS::Handle<JSObject*>, JS::MutableHandle<JSObject*>, JS::MutableHandle<JSObject*>, js::PropertyResult*) [js/src/vm/JSObject.cpp:1867]
[task 2021-08-26T16:37:48.097Z] 16:37:48     INFO - GECKO(6400) | #10: bool js::GetEnvironmentName<(js::GetNameMode)0>(JSContext*, JS::Handle<JSObject*>, JS::Handle<js::PropertyName*>, JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter-inl.h:182]
[task 2021-08-26T16:37:48.098Z] 16:37:48     INFO - GECKO(6400) | #11: Interpret(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp:3386]
[task 2021-08-26T16:37:48.098Z] 16:37:48     INFO - GECKO(6400) | #12: js::RunScript(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp:370]
[task 2021-08-26T16:37:48.099Z] 16:37:48     INFO - GECKO(6400) | #13: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp:520]
[task 2021-08-26T16:37:48.099Z] 16:37:48     INFO - GECKO(6400) | #14: InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp:548]
[task 2021-08-26T16:37:48.100Z] 16:37:48     INFO - GECKO(6400) | #15: js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp:565]
[task 2021-08-26T16:37:48.100Z] 16:37:48     INFO - GECKO(6400) | #16: js::SpreadCallOperation(JSContext*, JS::Handle<JSScript*>, unsigned char*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.cpp:4994]
[task 2021-08-26T16:37:48.100Z] 16:37:48     INFO - GECKO(6400) | #17: Interpret(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp:3192]
[task 2021-08-26T16:37:48.101Z] 16:37:48     INFO - GECKO(6400) | #18: js::RunScript(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp:370]
[task 2021-08-26T16:37:48.101Z] 16:37:48     INFO - GECKO(6400) | #19: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp:520]
[task 2021-08-26T16:37:48.101Z] 16:37:48     INFO - GECKO(6400) | #20: InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp:548]
[task 2021-08-26T16:37:48.102Z] 16:37:48     INFO - GECKO(6400) | #21: js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp:565]
[task 2021-08-26T16:37:48.102Z] 16:37:48     INFO - GECKO(6400) | #22: JS::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) [js/src/vm/CallAndConstruct.cpp:117]
[task 2021-08-26T16:37:48.102Z] 16:37:48     INFO - GECKO(6400) | #23: mozilla::dom::MessageListener::ReceiveMessage(mozilla::dom::BindingCallContext&, JS::Handle<JS::Value>, mozilla::dom::ReceiveMessageArgument const&, JS::MutableHandle<JS::Value>, mozilla::ErrorResult&) [s3:gecko-generated-sources:5e0870a806400d903ec078bd402348078738a9b76a8e02612e63fa33085794714a96a39abab4a7f1def6794939e411a8edd18572a818b613371d45dc6342cc5b/dom/bindings/MessageManagerBinding.cpp::6101]
[task 2021-08-26T16:37:48.103Z] 16:37:48     INFO - GECKO(6400) | #24: mozilla::dom::MessageListener::ReceiveMessage(mozilla::dom::ReceiveMessageArgument const&, JS::MutableHandle<JS::Value>, mozilla::ErrorResult&, char const*, mozilla::dom::CallbackObject::ExceptionHandling, JS::Realm*) [s3:gecko-generated-sources:4b9f933fd91b8763e1a7ae00fb950ff7d40a1ccba0acac7d1976885142e0c018aa3880cfe4c7fa0c2986616f6e7c25b07b9793b6ff5bdeb403f6b3f2c116b16a/dist/include/mozilla/dom/MessageManagerBinding.h::783]
[task 2021-08-26T16:37:48.103Z] 16:37:48     INFO - GECKO(6400) | #25: mozilla::dom::JSActor::CallReceiveMessage(JSContext*, mozilla::dom::JSActorMessageMeta const&, JS::Handle<JS::Value>, JS::MutableHandle<JS::Value>, mozilla::ErrorResult&) [dom/ipc/jsactor/JSActor.cpp:274]
[task 2021-08-26T16:37:48.104Z] 16:37:48     INFO - GECKO(6400) | #26: mozilla::dom::JSActor::ReceiveQuery(JSContext*, mozilla::dom::JSActorMessageMeta const&, JS::Handle<JS::Value>, mozilla::ErrorResult&) [dom/ipc/jsactor/JSActor.cpp:306]
[task 2021-08-26T16:37:48.105Z] 16:37:48     INFO - GECKO(6400) | #27: mozilla::dom::JSActorManager::ReceiveRawMessage(mozilla::dom::JSActorMessageMeta const&, mozilla::Maybe<mozilla::dom::ipc::StructuredCloneData>&&, mozilla::Maybe<mozilla::dom::ipc::StructuredCloneData>&&) [dom/ipc/jsactor/JSActorManager.cpp:198]
[task 2021-08-26T16:37:48.106Z] 16:37:48     INFO - GECKO(6400) | #28: mozilla::detail::RunnableFunction<mozilla::dom::JSActor::SendRawMessageInProcess(mozilla::dom::JSActorMessageMeta const&, mozilla::Maybe<mozilla::dom::ipc::StructuredCloneData>&&, mozilla::Maybe<mozilla::dom::ipc::StructuredCloneData>&&, std::function<already_AddRefed<mozilla::dom::JSActorManager> ()>&&)::$_0>::Run() [xpcom/threads/nsThreadUtils.h:532]
[task 2021-08-26T16:37:48.107Z] 16:37:48     INFO - GECKO(6400) | #29: mozilla::RunnableTask::Run() [xpcom/threads/TaskController.cpp:503]
[task 2021-08-26T16:37:48.107Z] 16:37:48     INFO - GECKO(6400) | #30: mozilla::TaskController::DoExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) [xpcom/threads/TaskController.cpp:805]
[task 2021-08-26T16:37:48.108Z] 16:37:48     INFO - GECKO(6400) | #31: mozilla::TaskController::ExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) [xpcom/threads/TaskController.cpp:641]
[task 2021-08-26T16:37:48.109Z] 16:37:48     INFO - GECKO(6400) | #32: mozilla::TaskController::ProcessPendingMTTask(bool) [xpcom/threads/TaskController.cpp:425]
[task 2021-08-26T16:37:48.110Z] 16:37:48     INFO - GECKO(6400) | #33: mozilla::detail::RunnableFunction<mozilla::TaskController::InitializeInternal()::$_0>::Run() [xpcom/threads/nsThreadUtils.h:533]
[task 2021-08-26T16:37:48.110Z] 16:37:48     INFO - GECKO(6400) | #34: nsThread::ProcessNextEvent(bool, bool*) [xpcom/threads/nsThread.cpp:1152]
[task 2021-08-26T16:37:48.111Z] 16:37:48     INFO - GECKO(6400) | #35: NS_ProcessNextEvent(nsIThread*, bool) [xpcom/threads/nsThreadUtils.cpp:466]
[task 2021-08-26T16:37:48.112Z] 16:37:48     INFO - GECKO(6400) | #36: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) [ipc/glue/MessagePump.cpp:85]
[task 2021-08-26T16:37:48.112Z] 16:37:48     INFO - GECKO(6400) | #37: MessageLoop::RunInternal() [ipc/chromium/src/base/message_loop.cc:331]
[task 2021-08-26T16:37:48.113Z] 16:37:48     INFO - GECKO(6400) | #38: MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc:307]
[task 2021-08-26T16:37:48.113Z] 16:37:48     INFO - GECKO(6400) | #39: nsBaseAppShell::Run() [widget/nsBaseAppShell.cpp:139]
[task 2021-08-26T16:37:48.114Z] 16:37:48     INFO - GECKO(6400) | #40: nsAppStartup::Run() [toolkit/components/startup/nsAppStartup.cpp:285]
[task 2021-08-26T16:37:48.114Z] 16:37:48     INFO - GECKO(6400) | #41: XREMain::XRE_mainRun() [toolkit/xre/nsAppRunner.cpp:5283]
[task 2021-08-26T16:37:48.115Z] 16:37:48     INFO - GECKO(6400) | #42: XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) [toolkit/xre/nsAppRunner.cpp:5475]
[task 2021-08-26T16:37:48.115Z] 16:37:48     INFO - GECKO(6400) | #43: XRE_main(int, char**, mozilla::BootstrapConfig const&) [toolkit/xre/nsAppRunner.cpp:5534]
[task 2021-08-26T16:37:48.116Z] 16:37:48     INFO - GECKO(6400) | #44: ??? [/builds/worker/workspace/build/application/firefox/firefox + 0x41d95]
[task 2021-08-26T16:37:48.116Z] 16:37:48     INFO - GECKO(6400) | #45: __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6 + 0x21b97]
[task 2021-08-26T16:37:48.117Z] 16:37:48     INFO - GECKO(6400) | #46: ??? [/builds/worker/workspace/build/application/firefox/firefox + 0x41979]
[task 2021-08-26T16:37:48.117Z] 16:37:48     INFO - GECKO(6400) | #47: ??? (???:???)
[task 2021-08-26T16:37:48.118Z] 16:37:48     INFO - GECKO(6400) | ExceptionHandler::GenerateDump cloned child 6494
[task 2021-08-26T16:37:48.118Z] 16:37:48     INFO - GECKO(6400) | ExceptionHandler::SendContinueSignalToChild sent continue signal to child
[task 2021-08-26T16:37:48.119Z] 16:37:48     INFO - GECKO(6400) | ExceptionHandler::WaitForContinueSignal waiting for continue signal...
[task 2021-08-26T16:37:48.119Z] 16:37:48     INFO - TEST-INFO | Main app process: exit 11
[task 2021-08-26T16:37:48.120Z] 16:37:48     INFO - Buffered messages finished
Flags: needinfo?(jcoppeard)
Flags: needinfo?(jcoppeard)
Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/7ed4db9eadf8
Part 0: Make set() method public on GC pointer wrappers r=jandem
https://hg.mozilla.org/integration/autoland/rev/8dc4e71e2a87
Part 1: Make FunctionFlags setters return *this r=jandem
https://hg.mozilla.org/integration/autoland/rev/7b1d9df0326d
Part 2: Store a functions flags and argument count in a single 32-bit field r=jandem
https://hg.mozilla.org/integration/autoland/rev/3fd30df11e67
Part 3: Store JSFunction flags and arg count as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/01975b4520f3
Part 4: Store JSFunction's native function / environment object field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/1415c1d5b485
Part 5: Store JSFunction's JIT data / script field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/a14e1a409342
Part 6: Store JSFunction's atom field as a JS::Value r=jandem
https://hg.mozilla.org/integration/autoland/rev/6f6342f5827e
Part 7: Factor out JIT test for whether an object is a function r=jandem
https://hg.mozilla.org/integration/autoland/rev/f93209b0b5cc
Part 8: Remove some unused JSFunction methods r=jandem
https://hg.mozilla.org/integration/autoland/rev/4ce1541a6d9c
Part 9: Add a separate JSClass for extended functions r=jandem
https://hg.mozilla.org/integration/autoland/rev/aae629cbe232
Part 9.5: Move JSFunction::class_ to avoid confusion r=jandem
https://hg.mozilla.org/integration/autoland/rev/ec528ee761f8
Part 10: Use fixed slots to store function data r=jandem
https://hg.mozilla.org/integration/autoland/rev/3aa2aa420e24
Part 11: Prevent gecko profiler from observing moved function pointers r=jandem
https://hg.mozilla.org/integration/autoland/rev/907f6eeb9f3b
Part 12: Fix GDB scripts to work with new function layout r=jandem
https://hg.mozilla.org/integration/autoland/rev/6f1eb9f44fd8
Part 13: Fix race writing recover info r=tcampbell
Flags: needinfo?(jcoppeard)
You need to log in before you can comment on or make changes to this bug.