title: What does ovly_debug_event do in chrome?
body: <p>I was looking at chrome's thread stacks when I noticed that a lot of threads have a trace similar to this:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>The chromium source has the following code in <code>sel_ldr.c</code> which seems to declare <code>ovly_debug_event</code> as an almost empty function:</p>
  
  <pre><code>void _ovly_debug_event (void) {
  #ifdef __GNUC__
    /*
     * The asm volatile is here as instructed by the GCC docs.
     * It's not enough to declare a function noinline.
     * GCC will still look inside the function to see if it's worth calling.
     */
    __asm__ volatile ("");
  #elif NACL_WINDOWS
    /*
     * Visual Studio inlines empty functions even with noinline attribute,
     * so we need a compile memory barrier to make this function not to be
     * inlined. Also, it guarantees that nacl_global_xlate_base initialization
     * is not reordered. This is important for gdb since it sets breakpoint on
     * this function and reads nacl_global_xlate_base value.
     */
    _ReadWriteBarrier();
  #endif
  }
  
  static void StopForDebuggerInit (uintptr_t mem_start) {
    /* Put xlate_base in a place where gdb can find it.  */
    nacl_global_xlate_base = mem_start;
  
    NaClSandboxMemoryStartForValgrind(mem_start);
  
    _ovly_debug_event();
  }
  </code></pre>
  
  <p>This raises the question: Why does chrome seem to spend so much time in a function that is only for debugging and is almost empty in chromium?</p>