void _start(uintptr_t info[]) { Elf_auxv_t* auxv = nacl_startup_auxv(info); grok_auxv(auxv); DO_QUERY(NACL_IRT_BASIC_v0_1, __libnacl_irt_basic); struct nacl_irt_ppapihook ppapihook; DO_QUERY(NACL_IRT_PPAPIHOOK_v0_1, ppapihook); /* This is local as a workaround to avoid having to apply * relocations to global variables. */ struct PP_StartFunctions start_funcs = { MyPPP_InitializeModule, MyPPP_ShutdownModule, MyPPP_GetInterface, }; /* Similarly, initialise some global variables, avoiding relocations. */ struct PPP_Instance_1_0 local_ppp_instance = { DidCreate, DidDestroy, DidChangeView, DidChangeFocus, HandleDocumentLoad, }; ppp_instance = local_ppp_instance; struct PPP_Messaging_1_0 local_ppp_messaging = { HandleMessage, }; ppp_messaging = local_ppp_messaging; ppapihook.ppapi_start(&start_funcs); __libnacl_irt_basic.exit(0); }
void _start(uintptr_t info[]) { Elf_auxv_t* auxv = nacl_startup_auxv(info); grok_auxv(auxv); DO_QUERY(NACL_IRT_BASIC_v0_1, __libnacl_irt_basic); DO_QUERY(NACL_IRT_RANDOM_v0_1, __libnacl_irt_random); struct nacl_irt_ppapihook ppapihook; DO_QUERY(NACL_IRT_PPAPIHOOK_v0_1, ppapihook); /* This is local as a workaround to avoid having to apply * relocations to global variables. */ struct PP_StartFunctions start_funcs; start_funcs.PPP_InitializeModule = MyPPP_InitializeModule; start_funcs.PPP_ShutdownModule = MyPPP_ShutdownModule; start_funcs.PPP_GetInterface = MyPPP_GetInterface; /* Similarly, initialize some global variables, avoiding relocations. */ ppp_instance.DidCreate = DidCreate; ppp_instance.DidDestroy = DidDestroy; ppp_instance.DidChangeView = DidChangeView; ppp_instance.DidChangeFocus = DidChangeFocus; ppp_instance.HandleDocumentLoad = HandleDocumentLoad; ppp_messaging.HandleMessage = HandleMessage; ppapihook.ppapi_start(&start_funcs); __libnacl_irt_basic.exit(0); }
/* * Initialize all our IRT function tables using the query function. * The query function's address is passed via AT_SYSINFO in auxv. */ void __libnacl_irt_init(Elf32_auxv_t *auxv) { grok_auxv(auxv); DO_QUERY(NACL_IRT_BASIC_v0_1, ih, basic); DO_QUERY(NACL_IRT_FDIO_v0_1, ih, fdio); // DO_QUERY(NACL_IRT_FILENAME_v0_1, filename); // DO_QUERY(NACL_IRT_MEMORY_v0_1, ih, memory); // DO_QUERY(NACL_IRT_DYNCODE_v0_1, dyncode); // DO_QUERY(NACL_IRT_TLS_v0_1, tls); // DO_QUERY(NACL_IRT_BLOCKHOOK_v0_1, blockhook); }