I looked at chrome stacks when I noticed that many threads have a trace similar to this:
0, wow64cpu.dll!TurboDispatchJumpAddressEnd+0x6c0 1, wow64cpu.dll!TurboDispatchJumpAddressEnd+0x4a8 2, wow64.dll!Wow64SystemServiceEx+0x1ce 3, wow64.dll!Wow64LdrpInitialize+0x429 4, ntdll.dll!RtlIsDosDeviceName_U+0x24c87 5, ntdll.dll!LdrInitializeThunk+0xe 6, ntdll.dll!ZwWaitForSingleObject+0x15 7, kernel32.dll!WaitForSingleObjectEx+0x43 8, kernel32.dll!WaitForSingleObject+0x12 9, chrome.dll!ovly_debug_event+0x16574 10, chrome.dll!ovly_debug_event+0x14904 11, chrome.dll!ovly_debug_event+0x14826 12, chrome.dll!ovly_debug_event+0x16d19 13, chrome.dll!ovly_debug_event+0x1bea1b 14, chrome.dll!ovly_debug_event+0xe8ff4 15, chrome.dll!ovly_debug_event+0x16b50 16, chrome.dll!ovly_debug_event+0x16ab2 17, kernel32.dll!BaseThreadInitThunk+0x12 18, ntdll.dll!RtlInitializeExceptionChain+0x63 19, ntdll.dll!RtlInitializeExceptionChain+0x36
The chrome source has the following code in sel_ldr.c , which appears to declare ovly_debug_event as an almost empty function:
void _ovly_debug_event (void) { #ifdef __GNUC__ __asm__ volatile (""); #elif NACL_WINDOWS _ReadWriteBarrier(); #endif } static void StopForDebuggerInit (uintptr_t mem_start) { nacl_global_xlate_base = mem_start; NaClSandboxMemoryStartForValgrind(mem_start); _ovly_debug_event(); }
The question is: why does chrome seem to spend so much time on a function that is only for debugging and is almost empty in chrome?
source share