Status: New
Owner: ----

New issue 1859 by [email protected]: v8 is full of static initializers
http://code.google.com/p/v8/issues/detail?id=1859

On Mac, we're down to 47 files with static initializers (not counting the ones created by protobuf). 23% of these – 11 filles – are caused by v8!

Mac List:
assembler.o
code-stubs-ia32.o
frames.o
isolate.o
lithium-allocator.o
log.o
platform-macos.o
platform-posix.o
runtime-profiler.o
v8.o
logging.o


The linux output is a bit more detailed (the linux compiler is also a bit more stupid and needs static initializers for more stuff), it's v8-related output is:


assembler.cc (initializer offset 0x15705a0 size 0x24)
  v8::internal::DoubleConstant::the_hole_nan
  v8::internal::DoubleConstant::canonical_non_hole_nan
  v8::internal::OS::nan_value()
  v8::internal::kHoleNanInt64

builtins.cc (initializer offset 0x1351980 size 0x5)
  v8::internal::Builtins::InitBuiltinFunctionTable()


code_stubs_x64.cc (initializer offset 0x14f35d0 size 0x187)
  v8::internal::kAheadOfTime
  v8::internal::kAheadOfTime+0x10
  v8::internal::kAheadOfTime+0x14
  v8::internal::kAheadOfTime+0x18
  v8::internal::kAheadOfTime+0x20
  v8::internal::kAheadOfTime+0x24
  v8::internal::kAheadOfTime+0x28
  v8::internal::kAheadOfTime+0x30
  v8::internal::kAheadOfTime+0x34
  v8::internal::kAheadOfTime+0x38
  v8::internal::kAheadOfTime+0x4
  v8::internal::kAheadOfTime+0x40
  v8::internal::kAheadOfTime+0x44
  v8::internal::kAheadOfTime+0x48
  v8::internal::kAheadOfTime+0x50
  v8::internal::kAheadOfTime+0x54
  v8::internal::kAheadOfTime+0x58
  v8::internal::kAheadOfTime+0x60
  v8::internal::kAheadOfTime+0x64
  v8::internal::kAheadOfTime+0x68
  v8::internal::kAheadOfTime+0x70
  v8::internal::kAheadOfTime+0x74
  v8::internal::kAheadOfTime+0x78
  v8::internal::kAheadOfTime+0x8
  v8::internal::kAheadOfTime+0x80
  v8::internal::kAheadOfTime+0x84
  v8::internal::kAheadOfTime+0x88
  v8::internal::kAheadOfTime+0x90
  v8::internal::kAheadOfTime+0x94
  v8::internal::kAheadOfTime+0x98
  v8::internal::kAheadOfTime+0xa0
  v8::internal::kAheadOfTime+0xa4
  v8::internal::kAheadOfTime+0xa8
  v8::internal::kAheadOfTime+0xb0
  v8::internal::kAheadOfTime+0xb4
  v8::internal::kAheadOfTime+0xb8
  v8::internal::kAheadOfTime+0xc0
  v8::internal::kAheadOfTime+0xc4
  v8::internal::kAheadOfTime+0xc8

debug_agent.cc (initializer offset 0x13655f0 size 0xb)
  v8::internal::DebuggerAgentUtil::kContentLengthSize

disasm_x64.cc (initializer offset 0x15114c0 size 0x41)
  v8::internal::kSmiConstantRegister+0x4
  disasm::InstructionTable::Init()
  disasm::instruction_table
v8::internal::EmbeddedContainer<v8::internal::LOperand*, 0>::operator[](int)::t

flags.cc (initializer offset 0x137a220 size 0x2b)
  v8::internal::FLAG_js_arguments
  v8::internal::FLAG_js_arguments+0x8
  v8::internal::FLAGDEFAULT_js_arguments
  v8::internal::FLAGDEFAULT_js_arguments+0x8

frames.cc (initializer offset 0x137b240 size 0x31)
  v8::internal::kCallerSavedCodeData
  v8::internal::kCallerSavedCodeData+0x4


hashmap.cc (initializer offset 0x138e280 size 0x24)
  v8::internal::HashMap::DefaultAllocator
  vtable for v8::internal::Allocator+0x10
  operator new(unsigned long)

heap.cc (initializer offset 0x138f160 size 0x15)
  v8::internal::OS::CreateMutex()
  v8::internal::gc_initializer_mutex

isolate.cc (initializer offset 0x13ee2c0 size 0x38)
guard variable for v8::internal::EnsureDefaultIsolateAllocated()::static_initializer
  v8::internal::OS::CreateMutex()
  v8::internal::Isolate::process_wide_mutex_
  v8::internal::Isolate::EnsureDefaultIsolate()
  v8::internal::static_initializer
  v8::internal::EnsureDefaultIsolateAllocated()::static_initializer

lithium_allocator.cc (initializer offset 0x13f3120 size 0x240)
  v8::internal::LStackSlot::cache
  v8::internal::LDoubleRegister::cache
  v8::internal::LDoubleRegister::cache+0x10
  v8::internal::LDoubleRegister::cache+0x14
  v8::internal::LDoubleRegister::cache+0x18
  v8::internal::LDoubleRegister::cache+0x1c
  v8::internal::LDoubleRegister::cache+0x20
  v8::internal::LDoubleRegister::cache+0x24
  v8::internal::LDoubleRegister::cache+0x28
  v8::internal::LDoubleRegister::cache+0x2c
  v8::internal::LDoubleRegister::cache+0x30
  v8::internal::LDoubleRegister::cache+0x34
  v8::internal::LDoubleRegister::cache+0x38
  v8::internal::LDoubleRegister::cache+0x3c
  v8::internal::LDoubleRegister::cache+0x4
  v8::internal::LDoubleRegister::cache+0x8
  v8::internal::LDoubleRegister::cache+0xc
  v8::internal::LConstantOperand::cache
  v8::internal::LDoubleStackSlot::cache
  v8::internal::LRegister::cache
  v8::internal::LRegister::cache+0x10
  v8::internal::LRegister::cache+0x14
  v8::internal::LRegister::cache+0x18
  v8::internal::LRegister::cache+0x1c
  v8::internal::LRegister::cache+0x20
  v8::internal::LRegister::cache+0x24
  v8::internal::LRegister::cache+0x28
  v8::internal::LRegister::cache+0x2c
  v8::internal::LRegister::cache+0x30
  v8::internal::LRegister::cache+0x34
  v8::internal::LRegister::cache+0x38
  v8::internal::LRegister::cache+0x3c
  v8::internal::LRegister::cache+0x4
  v8::internal::LRegister::cache+0x8
  v8::internal::LRegister::cache+0xc
  v8::internal::LRegister_cache_initialized
  v8::internal::LStackSlot_cache_initialized
  v8::internal::LDoubleRegister_cache_initialized
  v8::internal::LConstantOperand_cache_initialized
  v8::internal::LDoubleStackSlot_cache_initialized

log.cc (initializer offset 0x1400c10 size 0x15)
  v8::internal::SamplerRegistry::mutex_
  v8::internal::OS::CreateMutex()

macro_assembler_x64.cc (initializer offset 0x154cfc0 size 0x6f)
  v8::internal::saved_regs
  v8::internal::saved_regs+0x10
  v8::internal::saved_regs+0x14
  v8::internal::saved_regs+0x18
  v8::internal::saved_regs+0x1c
  v8::internal::saved_regs+0x20
  v8::internal::saved_regs+0x24
  v8::internal::saved_regs+0x28
  v8::internal::saved_regs+0x4
  v8::internal::saved_regs+0x8
  v8::internal::saved_regs+0xc

runtime_profiler.cc (initializer offset 0x14b6660 size 0x17)
  v8::internal::RuntimeProfiler::semaphore_
  v8::internal::OS::CreateSemaphore(int)

scopes.cc (initializer offset 0x14bf810 size 0x24)
  v8::internal::LocalsMapAllocator
  vtable for v8::internal::ZoneAllocator+0x10
  operator new(unsigned long)

v8.cc (initializer offset 0x14dfd10 size 0x21)
  v8::internal::OS::CreateMutex()
  v8::internal::entropy_mutex
  v8::internal::init_once_mutex

Please fix :-) Static initialization delays startup by up to 500ms on some platforms.

In chrome land, we had success with base/lazy_instance.h (make them leaky, so that they don't require exit time shutdown).

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to