Hi,  Sam:
    Yes,  I have an implementation based on WAVM,  design doc :
https://github.com/duanbing/WAVM/blob/master/Gas.md .

'Sam Clegg' via emscripten-discuss <emscripten-discuss@googlegroups.com>
于2019年5月4日周六 下午3:14写道:

> One way to achieve this might be to use binaryen tools to inject your wasm
> code into the module.  One of the simplest ways would be use wasm-dis to
> turn the module into text, when wasm-as to re-assembly it after adding your
> new imports and code.
>
> *From: *Duan Bing <hibd...@gmail.com>
> *Date: *Fri, May 3, 2019 at 8:14 AM
> *To: * <emscripten-discuss@googlegroups.com>
>
> Thanks, Floh.
>>  I didn't compile it into a library, so visibility attribute seems not
>> take effect.
>> As we can see from emscripth.h
>> #define EMSCRIPTEN_KEEPALIVE __attribute__((used)) __attribute__
>> ((visibility ("default"))) actually, this macro affects the function
>> with definition, but not for declaration only from my trials.
>>
>>
>> Floh <flo...@gmail.com> 于2019年5月3日周五 上午1:12写道:
>>
>>> PS: I've been looking around a bit, and maybe this is the better
>>> solution (via __attribute__(...)):
>>>
>>> __attribute__((visibility("default"))) void foo(void);
>>>
>>> This should be the clang equivalent to __declspec(dllimport) in the
>>> Visual Studio compiler, see here:
>>>
>>> https://webassembly.org/docs/dynamic-linking/
>>>
>>> On Thursday, 2 May 2019 17:06:27 UTC+2, Duan Bing wrote:
>>>>
>>>> Thanks, your new idea works for me.   the motivation of doing this is
>>>> that I will call this imported function while I will insert some wasm code
>>>> to the original wasm file later,  similar to this project had done
>>>> https://github.com/ewasm/wasm-metering , but by a different PL. so I
>>>> don't want the original wasm developer to use this function(I will insert
>>>> foo dynamically with a mangling name ), and I also occupy the import index
>>>> space by doing this in advance.
>>>>
>>>> Floh <flo...@gmail.com> 于2019年5月2日周四 下午10:56写道:
>>>>
>>>>> Ah ok, I misunderstood your question, apologies. I don't know how one
>>>>> would add a function declaration to the WASM imports table like this.
>>>>> EMSCRIPTEN_KEEPALIVE and the "-s EXPORTED_FUNCTIONS" linker option would
>>>>> work for the "other side" (some WASM module exporting functions to the
>>>>> outside).
>>>>>
>>>>> Complete guess, but maybe you need some "dummy code" that's guaranteed
>>>>> to stay in the importing WASM module, even though this is never called? So
>>>>> that the linker would recognize the function as an "import".
>>>>>
>>>>> Something like this:
>>>>>
>>>>> extern "C" void foo();
>>>>> // dummy_imports() is never called, but will not be removed because of
>>>>> EMSCRIPTEN_KEEPALIVE
>>>>> EMSCRIPTEN_KEEPALIVE void dummy_imports(void) {
>>>>>    foo();
>>>>> }
>>>>>
>>>>> But as I said, this is complete guess.
>>>>>
>>>>> On Thursday, 2 May 2019 16:22:28 UTC+2, Duan Bing wrote:
>>>>>>
>>>>>> Thanks, Floh.  it works when the function is defined.
>>>>>> Actually, my function is an external function declaration, like
>>>>>> extern "C" void foo();
>>>>>>
>>>>>> It doesn't work even I declare like this:
>>>>>> extern "C" void EMSCRIPTEN_KEEPALIVE foo().
>>>>>>
>>>>>> Do you have any idea for this situation?
>>>>>>
>>>>>> Floh <flo...@gmail.com> 于2019年5月2日周四 下午10:13写道:
>>>>>>
>>>>>>> Have a look at EMSCRIPTEN_KEEPALIVE:
>>>>>>> https://emscripten.org/docs/api_reference/emscripten.h.html#c.EMSCRIPTEN_KEEPALIVE,
>>>>>>> this prevents a C/C++ function from being removed even when it isn't
>>>>>>> referenced by other C/C++ code (normally this is used to call C 
>>>>>>> functions
>>>>>>> from the JS side).
>>>>>>>
>>>>>>> On Thursday, 2 May 2019 08:16:43 UTC+2, Duan Bing wrote:
>>>>>>>>
>>>>>>>> I declare an external function in C source file, but never used by
>>>>>>>> the code, then compile it to wasm by EMCC.   there is no doubt the 
>>>>>>>> external
>>>>>>>> function will be eliminated by the compiler.
>>>>>>>>
>>>>>>>> Is there any approach to keep this external function and then be
>>>>>>>> compiled to an import function in wasm?
>>>>>>>>
>>>>>>>> The motivation to remain the external function is that I want to
>>>>>>>> insert some wasm code in the wasm file after it's generated.
>>>>>>>>
>>>>>>>> Thanks all!
>>>>>>>>
>>>>>>> --
>>>>>>> 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.
>>>>>>>
>>>>>> --
>>>>> 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.
>>>>>
>>>> --
>>> 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.
>>>
>> --
>> 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.
>>
> --
> 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.
>

-- 
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