Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/trusted/service_runtime/arch/mips/sel_addrspace_mips.c

Issue 10919162: [MIPS] Implementation of sel_ldr for MIPS architecture. (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Rebase (Saturday morning). Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can
4 * found in the LICENSE file. 4 * be found in the LICENSE file.
5 */ 5 */
6 6
7 #include "native_client/src/include/nacl_platform.h" 7 #include "native_client/src/include/nacl_platform.h"
8 #include "native_client/src/shared/platform/nacl_check.h" 8 #include "native_client/src/shared/platform/nacl_check.h"
9 #include "native_client/src/trusted/service_runtime/arch/sel_ldr_arch.h" 9 #include "native_client/src/trusted/service_runtime/arch/sel_ldr_arch.h"
10 #include "native_client/src/trusted/service_runtime/nacl_error_code.h" 10 #include "native_client/src/trusted/service_runtime/nacl_error_code.h"
11 #include "native_client/src/trusted/service_runtime/sel_addrspace.h" 11 #include "native_client/src/trusted/service_runtime/sel_addrspace.h"
12 #include "native_client/src/trusted/service_runtime/sel_ldr.h" 12 #include "native_client/src/trusted/service_runtime/sel_ldr.h"
13 #include "native_client/src/trusted/service_runtime/sel_memory.h" 13 #include "native_client/src/trusted/service_runtime/sel_memory.h"
14 14
15 15
16 /* NOTE: This routine is almost identical to the x86_32 version. 16 /* NOTE: This routine is almost identical to the x86_32 version.
17 */ 17 */
18 NaClErrorCode NaClAllocateSpace(void **mem, size_t addrsp_size) { 18 NaClErrorCode NaClAllocateSpace(void **mem, size_t addrsp_size) {
19 int result; 19 int result;
20 void *tmp_mem = (void *) NACL_TRAMPOLINE_START; 20 void *tmp_mem = (void *) NACL_TRAMPOLINE_START;
21 21
22 CHECK(NULL != mem); 22 CHECK(NULL != mem);
23 23
24 /* 24 /*
25 * On ARM, we cheat slightly: we add two pages to the requested 25 * On Mips, we also cheat slightly: we add two pages to the requested
26 * allocation! This accomodates the guard region we require at the 26 * allocation! This accomodates the guard region we require at the
27 * top end of untrusted memory. 27 * top end of untrusted memory.
28 */ 28 */
29 addrsp_size += NACL_ADDRSPACE_UPPER_GUARD_SIZE; 29 addrsp_size += NACL_ADDRSPACE_UPPER_GUARD_SIZE;
30 30
31 NaClAddrSpaceBeforeAlloc(addrsp_size); 31 NaClAddrSpaceBeforeAlloc(addrsp_size);
32 32
33 /* 33 /*
34 * On 32 bit Linux, a 1 gigabyte block of address space may be reserved at 34 * On 32 bit Linux, a 1 gigabyte block of address space may be reserved at
35 * the zero-end of the address space during process creation, to address 35 * the zero-end of the address space during process creation, to address
36 * sandbox layout requirements on ARM and performance issues on Intel ATOM. 36 * sandbox layout requirements on Mips and performance issues on Intel ATOM.
37 * Look for this prereserved block and if found, pass its address to the 37 * Look for this pre-reserved block and if found, pass its address to the
38 * page allocation function. 38 * page allocation function.
39 */ 39 */
40 if (!NaClFindPrereservedSandboxMemory(mem, addrsp_size)) { 40 if (!NaClFindPrereservedSandboxMemory(mem, addrsp_size)) {
41 /* On ARM, we should always have prereserved sandbox memory. */ 41 /* On Mips, we should always have prereserved sandbox memory. */
42 NaClLog(LOG_ERROR, "NaClAllocateSpace:" 42 NaClLog(LOG_ERROR, "NaClAllocateSpace:"
43 " Could not find correct amount of prereserved memory" 43 " Could not find correct amount of prereserved memory"
44 " (looked for 0x%016"NACL_PRIxS" bytes).\n", 44 " (looked for 0x%016"NACL_PRIxS" bytes).\n",
45 addrsp_size); 45 addrsp_size);
46 return LOAD_NO_MEMORY; 46 return LOAD_NO_MEMORY;
47 } 47 }
48
48 /* 49 /*
49 * When creating a zero-based sandbox, we do not allocate the first 64K of 50 * When creating a zero-based sandbox, we do not allocate the first 64K of
50 * pages beneath the trampolines, because -- on Linux at least -- we cannot. 51 * pages beneath the trampolines, because -- on Linux at least -- we cannot.
51 * Instead, we allocate starting at the trampolines, and then coerce the 52 * Instead, we allocate starting at the trampolines, and then coerce the
52 * "mem" out parameter. 53 * "mem" out parameter.
53 */ 54 */
54 CHECK(*mem == NULL); 55 CHECK(*mem == NULL);
55 addrsp_size -= NACL_TRAMPOLINE_START; 56 addrsp_size -= NACL_TRAMPOLINE_START;
56 result = NaCl_page_alloc_at_addr(&tmp_mem, addrsp_size); 57 result = NaCl_page_alloc_at_addr(&tmp_mem, addrsp_size);
57 58
58 if (0 != result) { 59 if (0 != result) {
59 NaClLog(2, 60 NaClLog(2,
60 "NaClAllocateSpace: NaCl_page_alloc_at_addr 0x%08"NACL_PRIxPTR 61 "NaClAllocateSpace: NaCl_page_alloc_at_addr 0x%08"NACL_PRIxPTR
61 " failed\n", 62 " failed\n",
62 (uintptr_t) tmp_mem); 63 (uintptr_t) tmp_mem);
63 return LOAD_NO_MEMORY; 64 return LOAD_NO_MEMORY;
64 } 65 }
65 NaClLog(4, "NaClAllocateSpace: %"NACL_PRIxPTR", %"NACL_PRIxS"\n", 66 NaClLog(4, "NaClAllocateSpace: %"NACL_PRIxPTR", %"NACL_PRIxS"\n",
66 (uintptr_t) *mem, 67 (uintptr_t) *mem,
67 addrsp_size); 68 addrsp_size);
68 69
69 return LOAD_OK; 70 return LOAD_OK;
70 } 71 }
71 72
OLDNEW
« no previous file with comments | « src/trusted/service_runtime/arch/mips/nacl_tls.c ('k') | src/trusted/service_runtime/arch/mips/sel_ldr_mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698