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.