| Index: src/native_client/src/trusted/service_runtime/sel_ldr.c
|
| diff --git a/src/native_client/src/trusted/service_runtime/sel_ldr.c b/src/native_client/src/trusted/service_runtime/sel_ldr.c
|
| index 1bc46bbc0707a5997ac0cfc182fe95b8b5f6c672..bbb0a2d03a3ab11eb7c40e339ba77a8562a549aa 100644
|
| --- a/src/native_client/src/trusted/service_runtime/sel_ldr.c
|
| +++ b/src/native_client/src/trusted/service_runtime/sel_ldr.c
|
| @@ -45,7 +45,6 @@ int NaClAppCtor(struct NaClApp *nap) {
|
| nap->stack_size = NACL_DEFAULT_STACK_MAX;
|
|
|
| nap->mem_start = 0;
|
| - nap->guard_pages_initialized = 0;
|
| nap->static_text_end = 0;
|
| nap->dynamic_text_start = 0;
|
| nap->dynamic_text_end = 0;
|
| @@ -142,117 +141,6 @@ cleanup_none:
|
| return 0;
|
| }
|
|
|
| -void NaClAppDtor(struct NaClApp *nap) {
|
| - size_t i;
|
| - struct NaClDesc *ndp;
|
| - struct NaClAppThread *natp;
|
| -
|
| -#if NACL_WINDOWS && !defined(NACL_STANDALONE)
|
| - NaClHandlePassLdrDtor();
|
| -#endif
|
| -
|
| - NaClLog(2,
|
| - ("NaClAppDtor: there are %d threads alive;"
|
| - " thread table size %"NACL_PRIuS"\n"),
|
| - nap->num_threads,
|
| - nap->threads.num_entries);
|
| - for (i = 0; i < nap->threads.num_entries; ++i) {
|
| - int refcount;
|
| - enum NaClThreadState state;
|
| -
|
| - NaClLog(2, "Checking thread %"NACL_PRIuS"\n", i);
|
| - if (NULL == (natp = NaClGetThreadMu(nap, (int) i))) {
|
| - continue;
|
| - }
|
| - NaClLog(2, "Extracting state for thread %"NACL_PRIuS"\n", i);
|
| - NaClXMutexLock(&natp->mu);
|
| - state = natp->state;
|
| - NaClLog(2, "state %d\n", state);
|
| - NaClXMutexUnlock(&natp->mu);
|
| -
|
| - NaClRemoveThreadMu(nap, (int) i);
|
| - refcount = NaClAppThreadDecRef(natp);
|
| -
|
| - if (state != NACL_APP_THREAD_DEAD) {
|
| - NaClLog(LOG_WARNING,
|
| - ("NaClAppDtor: thread %"NACL_PRIuS" still running when NaCl app"
|
| - " is being destroyed?!?\n"),
|
| - i);
|
| - }
|
| - if (refcount != 0) {
|
| - NaClLog(LOG_WARNING,
|
| - ("NaClAppDtor: thread %"NACL_PRIuS" refcount not 0 when NaCl app"
|
| - " is being destroyed?!?\n"),
|
| - i);
|
| - }
|
| - }
|
| -
|
| - NaClLog(4, "There are %"NACL_PRIuS" descriptor entries\n",
|
| - nap->desc_tbl.num_entries);
|
| -
|
| - for (i = 0; i < nap->desc_tbl.num_entries; ++i) {
|
| - ndp = (struct NaClDesc *) DynArrayGet(&nap->desc_tbl, i);
|
| - NaClDescSafeUnref(ndp);
|
| - }
|
| -
|
| - NaClLog(4,
|
| - "Deallocating synchronization variables for"
|
| - " desc, thread, work_queue\n");
|
| -
|
| - NaClMutexDtor(&nap->desc_mu);
|
| - NaClMutexDtor(&nap->threads_mu);
|
| - NaClCondVarDtor(&nap->threads_cv);
|
| - NaClSyncQueueDtor(&nap->work_queue);
|
| -
|
| - NaClLog(4, "Freeing NaCl module origin\n");
|
| -
|
| - free(nap->origin);
|
| - nap->origin = (char *) NULL;
|
| -
|
| - NaClLog(4, "Freeing text_shm\n");
|
| -
|
| - NaClMutexDtor(&nap->dynamic_load_mutex);
|
| - NaClDescSafeUnref(nap->text_shm);
|
| - nap->text_shm = NULL;
|
| -
|
| - NaClLog(4, "Freeing service_port\n");
|
| -
|
| - NaClDescSafeUnref(nap->service_port);
|
| - nap->service_port = NULL;
|
| -
|
| - NaClLog(4, "Freeing service_address\n");
|
| -
|
| - NaClDescSafeUnref(nap->service_address);
|
| - nap->service_address = NULL;
|
| -
|
| - NaClLog(4, "Freeing secure channel\n");
|
| -
|
| - NaClDescSafeUnref(nap->secure_channel);
|
| - nap->secure_channel = NULL;
|
| -
|
| - NaClLog(4, "Freeing synchronization variables for the NaClApp\n");
|
| -
|
| - NaClCondVarDtor(&nap->cv);
|
| - NaClMutexDtor(&nap->mu);
|
| -
|
| - NaClLog(4, "Freeing memory\n");
|
| -
|
| - NaClAppFreeAllMemory(nap);
|
| -
|
| - NaClLog(4, "Freeing vmmap\n");
|
| -
|
| - NaClVmmapDtor(&nap->mem_map);
|
| -
|
| - NaClLog(4, "Freeing desc_tbl, threads\n");
|
| -
|
| - DynArrayDtor(&nap->desc_tbl);
|
| - DynArrayDtor(&nap->threads);
|
| -
|
| - NaClLog(4, "NaClAppDtor: Done\n");
|
| -
|
| - return;
|
| -}
|
| -
|
| size_t NaClAlignPad(size_t val, size_t align) {
|
| /* align is always a power of 2, but we do not depend on it */
|
| if (!align) {
|
| @@ -1149,102 +1037,6 @@ void NaClDumpServiceAddressTo(struct NaClApp *nap,
|
| }
|
| }
|
|
|
| -struct NaClFreeState {
|
| - struct NaClApp *nap;
|
| - struct NaClDescEffector *effp;
|
| - uintptr_t partial;
|
| - size_t pbytes;
|
| -};
|
| -
|
| -static void NaClAppFreeWalker(void *state,
|
| - struct NaClVmmapEntry *entry) {
|
| - struct NaClFreeState *p = (struct NaClFreeState *) state;
|
| - uintptr_t sysaddr;
|
| - size_t nbytes;
|
| -
|
| - NaClLog(3,
|
| - ("NaClAppFreeWalker: p->partial = 0x%08"NACL_PRIxPTR","
|
| - " p->pbytes = 0x%08"NACL_PRIxS"\n"),
|
| - p->partial, p->pbytes);
|
| - NaClLog(3,
|
| - (" entry->page_num = 0x%"NACL_PRIxPTR", entry->npages = 0x%"
|
| - NACL_PRIxS","
|
| - " entry->nmop = 0x%08"NACL_PRIxPTR"\n"),
|
| - entry->page_num, entry->npages, (uintptr_t) entry->nmop);
|
| - sysaddr = NaClUserToSysAddrNullOkay(p->nap,
|
| - entry->page_num << NACL_PAGESHIFT);
|
| - nbytes = entry->npages << NACL_PAGESHIFT;
|
| - if (NULL == entry->nmop) {
|
| - if (0 != p->pbytes) {
|
| - /* partial exists, accumulate and try to free */
|
| - if (p->partial + p->pbytes != sysaddr) {
|
| - NaClLog(LOG_FATAL,
|
| - ("Partial allocation pages not contiguous?!?"
|
| - " Partial start 0x%08"NACL_PRIxPTR", length 0x%"NACL_PRIxS";"
|
| - " next start 0x%08"NACL_PRIxPTR"\n"),
|
| - p->partial, p->pbytes, sysaddr);
|
| - }
|
| - p->pbytes += nbytes;
|
| - if (NaClRoundHostAllocPage(p->pbytes) == p->pbytes) {
|
| - NaCl_page_free((void *) p->partial, p->pbytes);
|
| - p->partial = 0;
|
| - p->pbytes = 0;
|
| - } else {
|
| - NaClLog(3, "Partial accummulated 0x%08"NACL_PRIxPTR", 0x%"
|
| - NACL_PRIxS"\n",
|
| - p->partial, p->pbytes);
|
| - }
|
| - } else {
|
| - /* free if we can; else accumulate */
|
| - if (NaClRoundHostAllocPage(nbytes) == nbytes) {
|
| - NaCl_page_free((void *) sysaddr, nbytes);
|
| - } else {
|
| - p->partial = sysaddr;
|
| - p->pbytes = nbytes;
|
| - }
|
| - }
|
| - } else {
|
| - uintptr_t user_address = entry->page_num << NACL_PAGESHIFT;
|
| - if (NaClRoundAllocPage(user_address) != user_address) {
|
| - NaClLog(LOG_FATAL,
|
| - ("descriptor backed memory does not start"
|
| - " at allocation boundary, addr: 0x%08"NACL_PRIxPTR"\n"),
|
| - user_address);
|
| - }
|
| - if (NaClRoundHostAllocPage(nbytes) != nbytes) {
|
| - NaClLog(LOG_FATAL,
|
| - ("descriptor backed memory size not allocation granularity:"
|
| - " 0x%"NACL_PRIxS"\n"),
|
| - nbytes);
|
| - }
|
| - if (0 != (*entry->nmop->ndp->vtbl->UnmapUnsafe)(entry->nmop->ndp,
|
| - p->effp,
|
| - (void *) sysaddr,
|
| - nbytes)) {
|
| - NaClLog(LOG_FATAL,
|
| - "NaClAppFreeWalker could not unmap memory\n");
|
| - }
|
| - }
|
| -}
|
| -
|
| -void NaClAppFreeAllMemory(struct NaClApp *nap) {
|
| - struct NaClFreeState state;
|
| - struct NaClDescEffectorCleanup eff;
|
| -
|
| - NaClLog(4, "NaClAppFreeAllMemory: invoking TeardownMprotectGuards\n");
|
| - NaClTeardownMprotectGuards(nap);
|
| - NaClLog(4, "NaClAppFreeAllMemory: TeardownMprotectGuards done\n");
|
| -
|
| - state.nap = nap;
|
| - state.effp = (struct NaClDescEffector *) &eff;
|
| - state.partial = 0;
|
| - state.pbytes = 0;
|
| -
|
| - NaClDescEffectorCleanupCtor(&eff);
|
| - NaClVmmapVisit(&nap->mem_map, NaClAppFreeWalker, &state);
|
| - (*eff.base.vtbl->Dtor)(&eff.base);
|
| -}
|
| -
|
|
|
| #ifdef __GNUC__
|
|
|
|
|