On Fri, Apr 27, 2018 at 9:02 PM Vivek Pradhan <[email protected]>
wrote:
> Hey Thanks for your reply Charles. The .mem file contains the entire
> contents of the c file?
>
Just statically allocated data such as string literals, constant arrays,
etc. This is roughly equivalent to a data section in a native executable.
Note this will include data for the C runtime library as well as your own
code.
I was going through the code and it seems like the heap is created from a
> typed array in an initializeMemoryBlock. Am I correct in my thinking?
>
In asm.js mode the initial data may be in a separate .mem file, or it may
be in a literal array or a data URI in the .js file, depending on command
line options and version. This data then gets put into the heap typed array.
In wasm mode, the initial data is stored directly in the .wasm file and is
initialized as part of instantiation and compilation.
-- brion
>
> On Friday, April 27, 2018 at 5:05:32 PM UTC-7, Charles Vaughn wrote:
>>
>> Look for a .mem file in chrome network tools or look for a long array in
>> the javascript file that initializes the memory. Offset 434 contains the
>> string "%s\0", Offset 384 contains "Hello World!\n....."
>>
>> On Friday, April 27, 2018 at 11:13:15 AM UTC-7, Vivek Pradhan wrote:
>>>
>>> Hey guys!
>>>
>>> I am trying to educate myself on emscripten and I definitely feel that
>>> the idea of transpiling to JS is amazing! I was trying the basic
>>> `hello_world.c` program. The c code was:
>>>
>>> #include <stdio.h>
>>>
>>> int main() {
>>>
>>> // declare and initialize string
>>> char str[50] = "Hello World!\n";
>>>
>>> // print string
>>> printf("%s",str);
>>> return 0;
>>> }
>>>
>>> The compiled `a.out.js` has the main function which looks like:
>>>
>>> function _main() {
>>> var $0 = 0, $1 = 0, $vararg_buffer = 0, dest = 0, label = 0, sp = 0,
>>> src = 0, stop = 0;
>>> sp = STACKTOP;
>>> STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0))
>>> abortStackOverflow(64|0);
>>> $vararg_buffer = sp;
>>> $1 = sp + 8|0;
>>> $0 = 0;
>>> dest=$1; src=384; stop=dest+50|0; do { HEAP8[dest>>0]=HEAP8[src>>0]|0;
>>> dest=dest+1|0; src=src+1|0; } while ((dest|0) < (stop|0));
>>> HEAP32[$vararg_buffer>>2] = $1;
>>> (_printf(434,$vararg_buffer)|0);
>>> STACKTOP = sp;return 0;
>>> }
>>>
>>> I am assuming that the first argument to _printf contains the string
>>> representation somehow, may be as an offset into the HEAP8. I have however,
>>> not been able to figure out where exactly in JS code is the HEAP8 populated
>>> with characters from the string "Hello World!\n". There has to be a place
>>> where memory is allocated and corresponding character values are saved at
>>> those memory locations right? Tried going through the `run` function to see
>>> if it happens in `preMain` function but I have no clue at this point.
>>>
>>> It will be a great help if someone can point at what point are variables
>>> initialized in the JS file (especially strings because numbers are
>>> initialized directly in _main I gathered) so that I can study that and
>>> move forward from there.
>>>
>>> I really appreciate the support!
>>>
>>> Thanks
>>>
>> --
> 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.