本文整理汇总了C++中NaClLog函数的典型用法代码示例。如果您正苦于以下问题:C++ NaClLog函数的具体用法?C++ NaClLog怎么用?C++ NaClLog使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NaClLog函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NaClAllocateSpaceAslr
NaClErrorCode NaClAllocateSpaceAslr(void **mem, size_t addrsp_size,
enum NaClAslrMode aslr_mode) {
/* 40G guard on each side */
size_t mem_sz = (NACL_ADDRSPACE_LOWER_GUARD_SIZE + FOURGIG +
NACL_ADDRSPACE_UPPER_GUARD_SIZE);
size_t log_align = ALIGN_BITS;
void *mem_ptr;
#if NACL_LINUX
struct rlimit rlim;
#endif
NaClLog(4, "NaClAllocateSpace(*, 0x%016"NACL_PRIxS" bytes).\n",
addrsp_size);
CHECK(addrsp_size == FOURGIG);
if (NACL_X86_64_ZERO_BASED_SANDBOX) {
mem_sz = 11 * FOURGIG;
if (getenv("NACL_ENABLE_INSECURE_ZERO_BASED_SANDBOX") != NULL) {
/*
* For the zero-based 64-bit sandbox, we want to reserve 44GB of address
* space: 4GB for the program plus 40GB of guard pages. Due to a binutils
* bug (see http://sourceware.org/bugzilla/show_bug.cgi?id=13400), the
* amount of address space that the linker can pre-reserve is capped
* at 4GB. For proper reservation, GNU ld version 2.22 or higher
* needs to be used.
*
* Without the bug fix, trying to reserve 44GB will result in
* pre-reserving the entire capped space of 4GB. This tricks the run-time
* into thinking that we can mmap up to 44GB. This is unsafe as it can
* overwrite the run-time program itself and/or other programs.
*
* For now, we allow a 4GB address space as a proof-of-concept insecure
* sandboxing model.
*
* TODO(arbenson): remove this if block once the binutils bug is fixed
*/
mem_sz = FOURGIG;
}
NaClAddrSpaceBeforeAlloc(mem_sz);
if (NaClFindPrereservedSandboxMemory(mem, mem_sz)) {
int result;
void *tmp_mem = (void *) NACL_TRAMPOLINE_START;
CHECK(*mem == 0);
mem_sz -= NACL_TRAMPOLINE_START;
result = NaClPageAllocAtAddr(&tmp_mem, mem_sz);
if (0 != result) {
NaClLog(2,
"NaClAllocateSpace: NaClPageAlloc 0x%08"NACL_PRIxPTR
" failed\n",
(uintptr_t) *mem);
return LOAD_NO_MEMORY;
}
NaClLog(4, "NaClAllocateSpace: %"NACL_PRIxPTR", %"NACL_PRIxS"\n",
(uintptr_t) *mem,
mem_sz);
return LOAD_OK;
}
NaClLog(LOG_ERROR, "Failed to find prereserved memory\n");
return LOAD_NO_MEMORY;
}
NaClAddrSpaceBeforeAlloc(mem_sz);
errno = 0;
mem_ptr = NaClAllocatePow2AlignedMemory(mem_sz, log_align, aslr_mode);
if (NULL == mem_ptr) {
if (0 != errno) {
perror("NaClAllocatePow2AlignedMemory");
}
NaClLog(LOG_WARNING, "Memory allocation failed\n");
#if NACL_LINUX
/*
* Check with getrlimit whether RLIMIT_AS was likely to be the
* problem with an allocation failure. If so, generate a log
* message. Since this is a debugging aid and we don't know about
* the memory requirement of the code that is embedding native
* client, there is some slop.
*/
if (0 != getrlimit(RLIMIT_AS, &rlim)) {
perror("NaClAllocatePow2AlignedMemory::getrlimit");
} else {
if (rlim.rlim_cur < mem_sz) {
/*
* Developer hint/warning; this will show up in the crash log
* and must be brief.
*/
NaClLog(LOG_INFO,
"Please run \"ulimit -v unlimited\" (bash)"
" or \"limit vmemoryuse unlimited\" (tcsh)\n");
NaClLog(LOG_INFO,
"and restart the app. NaCl requires at least %"NACL_PRIdS""
" kilobytes of virtual\n",
mem_sz / 1024);
NaClLog(LOG_INFO,
"address space. NB: Raising the hard limit requires"
" root access.\n");
}
}
//.........这里部分代码省略.........
示例2: NaClDescDtorNotImplemented
void NaClDescDtorNotImplemented(struct NaClDesc *vself) {
UNREFERENCED_PARAMETER(vself);
NaClLog(LOG_FATAL, "Must implement a destructor!\n");
}
示例3: NaClXMutexCtor
void NaClXMutexCtor(struct NaClMutex *mp) {
if (!NaClMutexCtor(mp)) {
NaClLog(LOG_FATAL, "NaClXMutexCtor failed\n");
}
}
示例4: NaClLogAddressSpaceLayout
void NaClLogAddressSpaceLayout(struct NaClApp *nap) {
NaClLog(2, "NaClApp addr space layout:\n");
NaClLog(2, "nap->static_text_end = 0x%016"NACL_PRIxPTR"\n",
nap->static_text_end);
NaClLog(2, "nap->dynamic_text_start = 0x%016"NACL_PRIxPTR"\n",
nap->dynamic_text_start);
NaClLog(2, "nap->dynamic_text_end = 0x%016"NACL_PRIxPTR"\n",
nap->dynamic_text_end);
NaClLog(2, "nap->rodata_start = 0x%016"NACL_PRIxPTR"\n",
nap->rodata_start);
NaClLog(2, "nap->data_start = 0x%016"NACL_PRIxPTR"\n",
nap->data_start);
NaClLog(2, "nap->data_end = 0x%016"NACL_PRIxPTR"\n",
nap->data_end);
NaClLog(2, "nap->break_addr = 0x%016"NACL_PRIxPTR"\n",
nap->break_addr);
NaClLog(2, "nap->initial_entry_pt = 0x%016"NACL_PRIxPTR"\n",
nap->initial_entry_pt);
NaClLog(2, "nap->user_entry_pt = 0x%016"NACL_PRIxPTR"\n",
nap->user_entry_pt);
NaClLog(2, "nap->bundle_size = 0x%x\n", nap->bundle_size);
}
示例5: NaClAppLaunchServiceThreads
int NaClAppLaunchServiceThreads(struct NaClApp *nap) {
struct NaClManifestProxy *manifest_proxy = NULL;
struct NaClKernelService *kernel_service = NULL;
int rv = 0;
enum NaClReverseChannelInitializationState init_state;
NaClNameServiceLaunch(nap->name_service);
kernel_service = (struct NaClKernelService *) malloc(sizeof *kernel_service);
if (NULL == kernel_service) {
NaClLog(LOG_ERROR,
"NaClAppLaunchServiceThreads: No memory for kern service\n");
goto done;
}
if (!NaClKernelServiceCtor(kernel_service,
NaClAddrSpSquattingThreadIfFactoryFunction,
(void *) nap,
nap)) {
NaClLog(LOG_ERROR,
"NaClAppLaunchServiceThreads: KernServiceCtor failed\n");
free(kernel_service);
kernel_service = NULL;
goto done;
}
if (!NaClSimpleServiceStartServiceThread((struct NaClSimpleService *)
kernel_service)) {
NaClLog(LOG_ERROR,
"NaClAppLaunchServiceThreads: KernService start service failed\n");
goto done;
}
/*
* NB: StartServiceThread grabbed another reference to kernel_service,
* used by the service thread. Closing the connection capability
* should cause the service thread to shut down and in turn release
* that reference.
*/
/*
* The locking here isn't really needed. Here is why:
* reverse_channel_initialized is written in reverse_setup RPC
* handler of the secure command channel RPC handler thread. and
* the RPC order requires that the plugin invoke reverse_setup prior
* to invoking start_module, so there will have been plenty of other
* synchronization operations to force cache coherency
* (module_may_start, for example, is set in the cache of the secure
* channel RPC handler (in start_module) and read by the main
* thread, and the synchronization operations needed to propagate
* its value properly suffices to propagate
* reverse_channel_initialized as well). However, reading it while
* holding a lock is more obviously correct for tools like tsan.
* Due to the RPC order, it is impossible for
* reverse_channel_initialized to get set after the unlock and
* before the if test.
*/
NaClXMutexLock(&nap->mu);
/*
* If no reverse_setup RPC was made, then we do not set up a
* manifest proxy. Otherwise, we make sure that the reverse channel
* setup is done, so that the application can actually use
* reverse-channel-based services such as the manifest proxy.
*/
if (NACL_REVERSE_CHANNEL_UNINITIALIZED !=
(init_state = nap->reverse_channel_initialization_state)) {
while (NACL_REVERSE_CHANNEL_INITIALIZED !=
(init_state = nap->reverse_channel_initialization_state)) {
NaClXCondVarWait(&nap->cv, &nap->mu);
}
}
NaClXMutexUnlock(&nap->mu);
if (NACL_REVERSE_CHANNEL_INITIALIZED != init_state) {
NaClLog(3,
("NaClAppLaunchServiceThreads: no reverse channel;"
" launched kernel services.\n"));
NaClLog(3,
("NaClAppLaunchServiceThreads: no reverse channel;"
" NOT launching manifest proxy.\n"));
nap->kernel_service = kernel_service;
kernel_service = NULL;
rv = 1;
goto done;
}
/*
* Allocate/construct the manifest proxy without grabbing global
* locks.
*/
NaClLog(3, "NaClAppLaunchServiceThreads: launching manifest proxy\n");
/*
* ReverseClientSetup RPC should be done via the command channel
* prior to the load_module / start_module RPCs, and
* occurs after that, so checking
* nap->reverse_client suffices for determining whether the proxy is
* exporting reverse services.
*/
manifest_proxy = (struct NaClManifestProxy *) malloc(sizeof *manifest_proxy);
if (NULL == manifest_proxy) {
//.........这里部分代码省略.........
示例6: nacl_flip_buffers
static void nacl_flip_buffers() {
NaClLog(LOG_INFO, "nacl_flip_buffers\n");
VideoBuffers.current_buffer ^= 1;
}
示例7: nacl_getsize
static void nacl_getsize(int* w, int* h) {
NaClLog(LOG_INFO, "nacl_getsize %d %d\n", GetWidth(), GetHeight());
*w = GetWidth();
*h = GetHeight();
}
示例8: main
int main(int ac, char **av) {
int opt;
char const *message = NULL;
char *conn_addr = NULL;
ssize_t rv;
struct NaClDesc *channel;
struct NaClNrdXferEffector eff;
struct NaClDescEffector *effp;
struct NaClDesc *pair[2];
struct NaClSocketAddress nsa;
struct NaClDescConnCap ndcc;
struct NaClImcTypedMsgHdr msg_hdr;
struct NaClImcMsgIoVec iov[1];
struct NaClDesc *desc_buffer[NACL_ABI_IMC_USER_DESC_MAX];
char data_buffer[4096];
size_t i;
char *transfer_file = NULL;
printf("Hello world\n");
NaClNrdAllModulesInit();
printf("Learning to walk... (parsing command line)\n");
while (EOF != (opt = getopt(ac, av, "c:m:st:v"))) {
switch (opt) {
case 'c':
conn_addr = optarg;
break;
case 'm':
message = optarg;
break;
case 's':
server = 1;
break;
case 't':
transfer_file = optarg;
break;
case 'v':
NaClLogIncrVerbosity();
break;
default:
fprintf(stderr,
"Usage: nrd_xfer_test [-sv] [-c connect-addr] [-m message]\n"
" [-t transfer_file_name]\n"
"\n");
fprintf(stderr,
" -s run in server mode (prints NaCl sock addr)\n"
" -v increases verbosity in the NRD xfer library\n"
" -c run in client mode, with server NaCl sock addr as\n"
" parameter\n"
" -m message to be sent to peer (client sends message\n"
" as payload data in IMC datagram; and if -t was\n"
" specifed in the client to transfer a file\n"
" descriptor to the server, the server will write its\n"
" message into the file via the transferred\n"
" descriptor\n");
return 1;
}
}
printf("Learning to talk... (setting up channels)\n");
if (NULL == message) {
if (server) {
message = "\"Hello world!\", from server\n";
} else {
message = "\"Goodbye cruel world!\", from client\n";
}
}
if (0 != (rv = NaClCommonDescMakeBoundSock(pair))) {
fprintf(stderr, "make bound sock returned %"NACL_PRIdS"\n", rv);
return 2;
}
if (!NaClNrdXferEffectorCtor(&eff, pair[0])) {
fprintf(stderr, "EffectorCtor failed\n");
return 3;
}
effp = (struct NaClDescEffector *) &eff;
memset(desc_buffer, 0, sizeof desc_buffer);
memset(data_buffer, 0, sizeof data_buffer);
if (server) {
/*
* print out our sockaddr, accept a connection, then receive a message,
* and print it out
*/
/* not opaque type */
printf("Server socket address:\n%.*s\n",
NACL_PATH_MAX,
((struct NaClDescConnCap *) pair[1])->cap.path);
fflush(stdout);
if (0 != (rv = (*pair[0]->vtbl->AcceptConn)(pair[0], effp))) {
fprintf(stderr, "AcceptConn returned %"NACL_PRIdS"\n", rv);
return 4;
}
//.........这里部分代码省略.........
示例9: hello_world
void hello_world(void) {
NaClLog(LOG_INFO, "Hello, World!\n");
}
示例10: NaClDescIoInternalize
/* set *out_desc to struct NaClDescIo * output */
int NaClDescIoInternalize(struct NaClDesc **out_desc,
struct NaClDescXferState *xfer,
struct NaClDescQuotaInterface *quota_interface) {
int rv;
NaClHandle h;
int d;
int flags;
struct NaClHostDesc *nhdp;
struct NaClDescIoDesc *ndidp;
UNREFERENCED_PARAMETER(quota_interface);
rv = -NACL_ABI_EIO; /* catch-all */
h = NACL_INVALID_HANDLE;
nhdp = NULL;
ndidp = NULL;
nhdp = malloc(sizeof *nhdp);
if (NULL == nhdp) {
rv = -NACL_ABI_ENOMEM;
goto cleanup;
}
ndidp = malloc(sizeof *ndidp);
if (!ndidp) {
rv = -NACL_ABI_ENOMEM;
goto cleanup;
}
if (!NaClDescInternalizeCtor((struct NaClDesc *) ndidp, xfer)) {
rv = -NACL_ABI_ENOMEM;
goto cleanup;
}
if (xfer->next_handle == xfer->handle_buffer_end ||
xfer->next_byte + sizeof ndidp->hd->flags > xfer->byte_buffer_end) {
rv = -NACL_ABI_EIO;
goto cleanup_ndidp_dtor;
}
NACL_COMPILE_TIME_ASSERT(sizeof flags == sizeof(ndidp->hd->flags));
memcpy(&flags, xfer->next_byte, sizeof flags);
xfer->next_byte += sizeof flags;
h = *xfer->next_handle;
*xfer->next_handle++ = NACL_INVALID_HANDLE;
#if NACL_WINDOWS
if (-1 == (d = _open_osfhandle((intptr_t) h, _O_RDWR | _O_BINARY))) {
rv = -NACL_ABI_EIO;
goto cleanup_ndidp_dtor;
}
#else
d = h;
#endif
/*
* We mark it as read/write, but don't really know for sure until we
* try to make those syscalls (in which case we'd get EBADF).
*/
if ((rv = NaClHostDescPosixTake(nhdp, d, flags)) < 0) {
goto cleanup_ndidp_dtor;
}
h = NACL_INVALID_HANDLE; /* nhdp took ownership of h */
if (!NaClDescIoDescSubclassCtor(ndidp, nhdp)) {
rv = -NACL_ABI_ENOMEM;
goto cleanup_nhdp_dtor;
}
/*
* ndidp took ownership of nhdp, now give ownership of ndidp to caller.
*/
*out_desc = (struct NaClDesc *) ndidp;
rv = 0;
cleanup_nhdp_dtor:
if (rv < 0) {
if (0 != NaClHostDescClose(nhdp)) {
NaClLog(LOG_FATAL, "NaClDescIoInternalize: NaClHostDescClose failed\n");
}
}
cleanup_ndidp_dtor:
if (rv < 0) {
NaClDescSafeUnref((struct NaClDesc *) ndidp);
ndidp = NULL;
}
cleanup:
if (rv < 0) {
free(nhdp);
free(ndidp);
if (NACL_INVALID_HANDLE != h) {
(void) NaClClose(h);
}
}
return rv;
}
示例11: EmitObsoleteValidatorWarning
static INLINE void EmitObsoleteValidatorWarning(void) {
NaClLog(LOG_WARNING, "USING OBSOLETE NON-DFA-BASED VALIDATOR!\n");
}
示例12: LoadApp
static int LoadApp(struct NaClApp *nap, struct NaClChromeMainArgs *args) {
NaClErrorCode errcode = LOAD_OK;
int has_bootstrap_channel = args->imc_bootstrap_handle != NACL_INVALID_HANDLE;
CHECK(g_initialized);
/* Allow or disallow dyncode API based on args. */
nap->enable_dyncode_syscalls = args->enable_dyncode_syscalls;
nap->initial_nexe_max_code_bytes = args->initial_nexe_max_code_bytes;
nap->pnacl_mode = args->pnacl_mode;
#if NACL_LINUX
g_prereserved_sandbox_size = args->prereserved_sandbox_size;
#endif
#if NACL_LINUX || NACL_OSX
/*
* Overwrite value of sc_nprocessors_onln set in NaClAppCtor. In
* the Chrome embedding, the outer sandbox was already enabled when
* the NaClApp Ctor was invoked, so a bogus value was written in
* sc_nprocessors_onln.
*/
if (-1 != args->number_of_cores) {
nap->sc_nprocessors_onln = args->number_of_cores;
}
#endif
if (args->create_memory_object_func != NULL)
NaClSetCreateMemoryObjectFunc(args->create_memory_object_func);
/* Inject the validation caching interface, if it exists. */
nap->validation_cache = args->validation_cache;
#if NACL_WINDOWS
if (args->broker_duplicate_handle_func != NULL)
NaClSetBrokerDuplicateHandleFunc(args->broker_duplicate_handle_func);
#endif
NaClAppInitialDescriptorHookup(nap);
/*
* NACL_SERVICE_PORT_DESCRIPTOR and NACL_SERVICE_ADDRESS_DESCRIPTOR
* are 3 and 4.
*/
/*
* in order to report load error to the browser plugin through the
* secure command channel, we do not immediate jump to cleanup code
* on error. rather, we continue processing (assuming earlier
* errors do not make it inappropriate) until the secure command
* channel is set up, and then bail out.
*/
/*
* Ensure this operating system platform is supported.
*/
if (args->skip_qualification) {
fprintf(stderr, "PLATFORM QUALIFICATION DISABLED - "
"Native Client's sandbox will be unreliable!\n");
} else {
errcode = NACL_FI_VAL("pq", NaClErrorCode,
NaClRunSelQualificationTests());
if (LOAD_OK != errcode) {
nap->module_load_status = errcode;
fprintf(stderr, "Error while loading in SelMain: %s\n",
NaClErrorString(errcode));
}
}
/*
* Patch the Windows exception dispatcher to be safe in the case
* of faults inside x86-64 sandboxed code. The sandbox is not
* secure on 64-bit Windows without this.
*/
#if (NACL_WINDOWS && NACL_ARCH(NACL_BUILD_ARCH) == NACL_x86 && \
NACL_BUILD_SUBARCH == 64)
NaClPatchWindowsExceptionDispatcher();
#endif
NaClSignalTestCrashOnStartup();
nap->enable_exception_handling = args->enable_exception_handling;
if (args->enable_exception_handling || args->enable_debug_stub) {
#if NACL_LINUX
/* NaCl's signal handler is always enabled on Linux. */
#elif NACL_OSX
if (!NaClInterceptMachExceptions()) {
NaClLog(LOG_FATAL, "LoadApp: Failed to set up Mach exception handler\n");
}
#elif NACL_WINDOWS
nap->attach_debug_exception_handler_func =
args->attach_debug_exception_handler_func;
#else
# error Unknown host OS
#endif
}
#if NACL_LINUX
NaClSignalHandlerInit();
#endif
/* Give debuggers a well known point at which xlate_base is known. */
//.........这里部分代码省略.........
示例13: NaClDescEffLdrUnmapMemory
static void NaClDescEffLdrUnmapMemory(struct NaClDescEffector *vself,
uintptr_t sysaddr,
size_t nbytes) {
struct NaClDescEffectorLdr *self = (struct NaClDescEffectorLdr *) vself;
uintptr_t addr;
uintptr_t endaddr;
uintptr_t usraddr;
struct NaClVmmapEntry const *map_region;
NaClLog(4,
("NaClDescEffLdrUnmapMemory(0x%08"NACL_PRIxPTR", 0x%08"NACL_PRIxPTR
", 0x%"NACL_PRIxS")\n"),
(uintptr_t) vself, (uintptr_t) sysaddr, nbytes);
for (addr = sysaddr, endaddr = sysaddr + nbytes;
addr < endaddr;
addr += NACL_MAP_PAGESIZE) {
usraddr = NaClSysToUser(self->nap, addr);
map_region = NaClVmmapFindPage(&self->nap->mem_map,
usraddr >> NACL_PAGESHIFT);
/*
* When mapping beyond the end of file, the mapping will be rounded to
* the 64k page boundary and the remaining space will be marked as
* inaccessible by marking the pages as MEM_RESERVE.
*
* When unmapping the memory region, we use the file size, recorded in
* the VmmapEntry to prevent a race condition when file size changes
* after it was mmapped, together with the page num and offset to check
* whether the page is the one backed by the file, in which case we
* need to unmap it, or whether it's one of the tail pages backed by the
* virtual memory in which case we need to release it.
*/
if (NULL != map_region &&
NULL != map_region->desc &&
(map_region->offset + (usraddr -
(map_region->page_num << NACL_PAGESHIFT))
< (uintptr_t) map_region->file_size)) {
if (!UnmapViewOfFile((void *) addr)) {
NaClLog(LOG_FATAL,
("NaClDescEffLdrUnmapMemory: UnmapViewOfFile failed at"
" user addr 0x%08"NACL_PRIxPTR" (sys 0x%08"NACL_PRIxPTR")"
" error %d\n"),
usraddr, addr, GetLastError());
}
} else {
/*
* No memory in address space, and we have only MEM_RESERVE'd
* the address space; or memory is in address space, but not
* backed by a file.
*/
if (!VirtualFree((void *) addr, 0, MEM_RELEASE)) {
NaClLog(LOG_FATAL,
("NaClDescEffLdrUnmapMemory: VirtualFree at user addr"
" 0x%08"NACL_PRIxPTR" (sys 0x%08"NACL_PRIxPTR") failed:"
" error %d\n"),
usraddr, addr, GetLastError());
}
}
}
}
示例14: NaClLog
/*
* NaClAllocatePow2AlignedMemory is for allocating a large amount of
* memory of mem_sz bytes that must be address aligned, so that
* log_alignment low-order address bits must be zero.
*
* Returns the aligned region on success, or NULL on failure.
*/
static void *NaClAllocatePow2AlignedMemory(size_t mem_sz,
size_t log_alignment,
enum NaClAslrMode aslr_mode) {
uintptr_t pow2align;
size_t request_size;
uintptr_t unrounded_addr;
uintptr_t rounded_addr;
size_t extra;
int found_memory;
pow2align = ((uintptr_t) 1) << log_alignment;
request_size = mem_sz + pow2align;
NaClLog(4,
"%"MSGWIDTH"s %016"NACL_PRIxS"\n",
" Ask:",
request_size);
if (NACL_ENABLE_ASLR == aslr_mode) {
found_memory = NaClFindAddressSpaceRandomized(
&unrounded_addr,
request_size,
MAX_ADDRESS_RANDOMIZATION_ATTEMPTS);
} else {
found_memory = NaClFindAddressSpace(&unrounded_addr, request_size);
}
if (!found_memory) {
NaClLog(LOG_FATAL,
"NaClAllocatePow2AlignedMemory: Failed to reserve %"NACL_PRIxS
" bytes of address space\n",
request_size);
}
NaClLog(4,
"%"MSGWIDTH"s %016"NACL_PRIxPTR"\n",
"orig memory at",
unrounded_addr);
rounded_addr = (unrounded_addr + (pow2align - 1)) & ~(pow2align - 1);
extra = rounded_addr - unrounded_addr;
if (0 != extra) {
NaClLog(4,
"%"MSGWIDTH"s %016"NACL_PRIxPTR", %016"NACL_PRIxS"\n",
"Freeing front:",
unrounded_addr,
extra);
if (-1 == munmap((void *) unrounded_addr, extra)) {
perror("munmap (front)");
NaClLog(LOG_FATAL,
"NaClAllocatePow2AlignedMemory: munmap front failed\n");
}
}
extra = pow2align - extra;
if (0 != extra) {
NaClLog(4,
"%"MSGWIDTH"s %016"NACL_PRIxPTR", %016"NACL_PRIxS"\n",
"Freeing tail:",
rounded_addr + mem_sz,
extra);
if (-1 == munmap((void *) (rounded_addr + mem_sz),
extra)) {
perror("munmap (end)");
NaClLog(LOG_FATAL,
"NaClAllocatePow2AlignedMemory: munmap tail failed\n");
}
}
NaClLog(4,
"%"MSGWIDTH"s %016"NACL_PRIxPTR"\n",
"Aligned memory:",
rounded_addr);
/*
* we could also mmap again at rounded_addr w/o MAP_NORESERVE etc to
* ensure that we have the memory, but that's better done in another
* utility function. the semantics here is no paging space
* reserved, as in Windows MEM_RESERVE without MEM_COMMIT.
*/
return (void *) rounded_addr;
}
示例15: nacl_print
static void nacl_print(int x, int y, CONST char* text) {
if (text[0]) {
NaClLog(LOG_INFO, "nacl_print [%s]\n", text);
}
}