Thanks much for the comment, Alon! 
We did some more experiments and found that ASM.JS and WASM seem to have 
different behaviors:
1. asm.js "managed to remove 1 ctors" with command "emcc -Oz Source.cpp 
-std=c++14 -stdlib=libc++ -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 
--proxy-to-worker --bind -s NO_EXIT_RUNTIME=1 -s TOTAL_MEMORY=369098752 *-s 
DISABLE_EXCEPTION_CATCHING=0* -s INLINING_LIMIT=1"

2. while WASM can only "remove 1 ctors" without emterpreter enabled. 
so does the limitation you mentioned below only exist for WASM?

Thanks,
Yu

On Saturday, August 5, 2017 at 1:40:28 AM UTC+8, Alon Zakai wrote:
>
> It looks like the global it complains about is "eb", the emterpreter base 
> (where the emterpreted code is placed in linear memory). That isn't known 
> at compile time, so the ctor evaller can't precompute it away. In other 
> words, this is a limitation of combining the emterpreter, which allocates 
> some memory dynamically, and the ctor evaller.
>
> In theory it could be worth looking into making that allocation a static 
> one, but I don't know offhand how easy that would be. If someone wants to 
> take a look, it is currently generated as something like "var 
> eb=getMemory(256736);"
>
> Another option might be to tell the emterpreter to not emterpret the 
> method it is trying to use "eb" in (since only emterpreted methods will use 
> that global).
>
> On Thu, Aug 3, 2017 at 8:04 PM, liyu <coldf...@gmail.com <javascript:>> 
> wrote:
>
>> Hi, we are trying the emscripten/incoming branch. the wasm-ctor-eval 
>> always returns us "ctor_evaller: not successful". It fails even with the 
>> simple test prog (attachment) using this command:
>> "emcc -Oz source.cpp -std=c++14 -stdlib=libc++ -s EMTERPRETIFY=1 -s 
>> EMTERPRETIFY_ASYNC=1 --proxy-to-worker --bind -s NO_EXIT_RUNTIME=1 -s 
>> TOTAL_MEMORY=369098752 -s DISABLE_EXCEPTION_CATCHING=0 -s INLINING_LIMIT=1 
>> -s WASM=1 -s DETERMINISTIC=1 -s BINARYEN_TRAP_MODE='js'
>>
>> the debug output looks like below:
>>
>> *DEBUG:root:ctor_evaller: 3 ctors, from |__ATINIT__.push({ func: 
>> function() { __GLOBAL__I_000101() } }, { func: function() { 
>> __GLOBAL__sub_I_source_cpp() } }, { func: function() { 
>> __GLOBAL__sub_I_iostream_cpp() } });*
>>
>> *DEBUG:root:ctor_evaller (wasm): trying to eval 3 global constructors*
>> *DEBUG:root:wasm ctor cmd: 
>> ['D:/Emscripten/binaryen/master_vs2015_64bit_binaryen\\bin\\wasm-ctor-eval', 
>> 'a.out.wasm', '-o', 'a.out.wasm', 
>> '--ctors=__GLOBAL__I_000101,__GLOBAL__sub_I_source_cpp,__GLOBAL__sub_I_iostream_cpp']*
>> *DEBUG:root:trying to eval __GLOBAL__I_000101*
>> *  ...stopping since could not eval: tried to access a dangerous 
>> (import-initialized) global: global$3*
>> *DEBUG:root:ctor_evaller: not successful*
>>
>> is this an unknown issue? or did we miss anything? 
>> Thanks in advance
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to emscripten-discuss+unsubscr...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to emscripten-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to