Hi Sam:
    Yes, solved even not that good.   Injecting a new import in text format
wasm file is ok too.  In most of standalone wasm vm implementation, index
space of the imported objects occupied the first part of the index range,
and the defs use the rest, this feature is also part of the wasm spec.  So
if I inject,  I have to shift all the index of defs objects.

'Sam Clegg' via emscripten-discuss <[email protected]>
于2019年5月7日周二 上午6:08写道:

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

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