So is your problem now solved?

To rephrase my response:  If you are injecting code into a module, can't
you also simply inject a new import?

On Sat, May 4, 2019 at 10:33 PM Duan Bing <[email protected]> wrote:

> 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 <[email protected]>
> 于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 <[email protected]>
>> *Date: *Fri, May 3, 2019 at 8:14 AM
>> *To: * <[email protected]>
>>
>> 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 <[email protected]> 于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 <[email protected]> 于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 <[email protected]> 于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 [email protected].
>>>>>>>> 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 [email protected].
>>>>>> 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 [email protected].
>>>> 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 [email protected].
>>> 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 [email protected].
>> 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 [email protected].
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to