Use fallback linker allocator in trace_handler.
There is more than one function that can allocate in the fallback path. Therefore, make sure that all functions that can allocate have switched to the fallback linker allocator before allocating. This is mostly a problem for the trace_handler function call, which iterates over all known threads and gets backtraces for them. Add a ScopedUseFallbackAllocator class to do the switching to make it easier to have the same code everywhere. Add two tests to verify that no allocations are occuring during a tombstone or backtrace on the fallback path. These tests are not comprehensive since they can't verify that the linker allocator is using the fallback allocator, but they are better than nothing. Remove the debuggerd_fallback_tombstone() function since it only enables the linker callback and then calls engrave_tombstone_ucontext(). The enabling is now done with the ScopedUseLinkerAllocator. Restructure the case where sending the signal to a thread fails so that the fallback allocator can be enabled properly. Bug: 359692763 Test: Ran debuggerd -b <PID> and debuggerd <PID> on a process that Test: goes throught the fallback path. Test: Unit tests pass along with two new tests. Test: Forced a fallback process to crash and verified tombstone generated. Test: Instrumented the linker allocator and verified that the trace_handler Test: function never calls the normal linker allocator as it runs. Change-Id: I2710921076634eac97f41bec8c3a29c1d75ae5ec
Loading
Please register or sign in to comment