OLD | NEW |
1 #include <string.h> | 1 #include <string.h> |
2 #include <sys/stat.h> | 2 #include <sys/stat.h> |
3 #include <time.h> | 3 #include <time.h> |
4 #include <nacl_stat.h> | 4 #include <nacl_stat.h> |
5 #include <nacl_syscalls.h> | 5 #include <nacl_syscalls.h> |
6 #define stat nacl_abi_stat | 6 #define stat nacl_abi_stat |
7 #include <irt.h> | 7 #include <irt.h> |
8 #undef stat | 8 #undef stat |
9 #include <irt_syscalls.h> | 9 #include <irt_syscalls.h> |
10 #ifdef IS_IN_rtld | 10 #ifdef IS_IN_rtld |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 if ((uint32_t) rv > 0xffff0000u) | 138 if ((uint32_t) rv > 0xffff0000u) |
139 return -(int32_t) rv; | 139 return -(int32_t) rv; |
140 *addr = (void *) (uintptr_t) rv; | 140 *addr = (void *) (uintptr_t) rv; |
141 return 0; | 141 return 0; |
142 } | 142 } |
143 | 143 |
144 static int nacl_irt_munmap (void *addr, size_t len) { | 144 static int nacl_irt_munmap (void *addr, size_t len) { |
145 return -NACL_SYSCALL (munmap) (addr, len); | 145 return -NACL_SYSCALL (munmap) (addr, len); |
146 } | 146 } |
147 | 147 |
| 148 static int nacl_irt_mprotect (void *addr, size_t len, int prot) { |
| 149 return -NACL_SYSCALL (mprotect) (addr, len, prot); |
| 150 } |
| 151 |
148 static int nacl_irt_dyncode_create(void *dest, const void *src, size_t size) { | 152 static int nacl_irt_dyncode_create(void *dest, const void *src, size_t size) { |
149 return -NACL_SYSCALL(dyncode_create)(dest, src, size); | 153 return -NACL_SYSCALL(dyncode_create)(dest, src, size); |
150 } | 154 } |
151 | 155 |
152 static int nacl_irt_dyncode_modify(void *dest, const void *src, size_t size) { | 156 static int nacl_irt_dyncode_modify(void *dest, const void *src, size_t size) { |
153 return -NACL_SYSCALL(dyncode_modify)(dest, src, size); | 157 return -NACL_SYSCALL(dyncode_modify)(dest, src, size); |
154 } | 158 } |
155 | 159 |
156 static int nacl_irt_dyncode_delete(void *dest, size_t size) { | 160 static int nacl_irt_dyncode_delete(void *dest, size_t size) { |
157 return -NACL_SYSCALL(dyncode_delete)(dest, size); | 161 return -NACL_SYSCALL(dyncode_delete)(dest, size); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 int (*__nacl_irt_setsockopt) (int sockfd, int level, int optname, | 357 int (*__nacl_irt_setsockopt) (int sockfd, int level, int optname, |
354 const void *optval, socklen_t optlen); | 358 const void *optval, socklen_t optlen); |
355 int (*__nacl_irt_socketpair) (int domain, int type, int protocol, int sv[2]); | 359 int (*__nacl_irt_socketpair) (int domain, int type, int protocol, int sv[2]); |
356 int (*__nacl_irt_shutdown) (int sockfd, int how); | 360 int (*__nacl_irt_shutdown) (int sockfd, int how); |
357 | 361 |
358 | 362 |
359 int (*__nacl_irt_sysbrk) (void **newbrk); | 363 int (*__nacl_irt_sysbrk) (void **newbrk); |
360 int (*__nacl_irt_mmap) (void **addr, size_t len, int prot, int flags, | 364 int (*__nacl_irt_mmap) (void **addr, size_t len, int prot, int flags, |
361 int fd, off_t off); | 365 int fd, off_t off); |
362 int (*__nacl_irt_munmap) (void *addr, size_t len); | 366 int (*__nacl_irt_munmap) (void *addr, size_t len); |
| 367 int (*__nacl_irt_mprotect) (void *addr, size_t len, int prot); |
363 | 368 |
364 int (*__nacl_irt_dyncode_create) (void *dest, const void *src, size_t size); | 369 int (*__nacl_irt_dyncode_create) (void *dest, const void *src, size_t size); |
365 int (*__nacl_irt_dyncode_modify) (void *dest, const void *src, size_t size); | 370 int (*__nacl_irt_dyncode_modify) (void *dest, const void *src, size_t size); |
366 int (*__nacl_irt_dyncode_delete) (void *dest, size_t size); | 371 int (*__nacl_irt_dyncode_delete) (void *dest, size_t size); |
367 | 372 |
368 int (*__nacl_irt_thread_create) (void *start_user_address, void *stack, | 373 int (*__nacl_irt_thread_create) (void *start_user_address, void *stack, |
369 void *thread_ptr); | 374 void *thread_ptr); |
370 void (*__nacl_irt_thread_exit) (int32_t *stack_flag); | 375 void (*__nacl_irt_thread_exit) (int32_t *stack_flag); |
371 int (*__nacl_irt_thread_nice) (const int nice); | 376 int (*__nacl_irt_thread_nice) (const int nice); |
372 | 377 |
(...skipping 19 matching lines...) Expand all Loading... |
392 int (*__nacl_irt_clock_getres) (clockid_t clk_id, struct timespec *res); | 397 int (*__nacl_irt_clock_getres) (clockid_t clk_id, struct timespec *res); |
393 int (*__nacl_irt_clock_gettime) (clockid_t clk_id, struct timespec *tp); | 398 int (*__nacl_irt_clock_gettime) (clockid_t clk_id, struct timespec *tp); |
394 | 399 |
395 void | 400 void |
396 init_irt_table (void) | 401 init_irt_table (void) |
397 { | 402 { |
398 union { | 403 union { |
399 struct nacl_irt_basic nacl_irt_basic; | 404 struct nacl_irt_basic nacl_irt_basic; |
400 struct nacl_irt_fdio nacl_irt_fdio; | 405 struct nacl_irt_fdio nacl_irt_fdio; |
401 struct nacl_irt_filename nacl_irt_filename; | 406 struct nacl_irt_filename nacl_irt_filename; |
402 struct nacl_irt_memory nacl_irt_memory; | 407 struct nacl_irt_memory_v0_2 nacl_irt_memory; |
403 struct nacl_irt_dyncode nacl_irt_dyncode; | 408 struct nacl_irt_dyncode nacl_irt_dyncode; |
404 struct nacl_irt_thread nacl_irt_thread; | 409 struct nacl_irt_thread nacl_irt_thread; |
405 struct nacl_irt_mutex nacl_irt_mutex; | 410 struct nacl_irt_mutex nacl_irt_mutex; |
406 struct nacl_irt_cond nacl_irt_cond; | 411 struct nacl_irt_cond nacl_irt_cond; |
407 struct nacl_irt_tls nacl_irt_tls; | 412 struct nacl_irt_tls nacl_irt_tls; |
408 struct nacl_irt_resource_open nacl_irt_resource_open; | 413 struct nacl_irt_resource_open nacl_irt_resource_open; |
409 struct nacl_irt_clock nacl_irt_clock; | 414 struct nacl_irt_clock nacl_irt_clock; |
410 } u; | 415 } u; |
411 | 416 |
412 if (__nacl_irt_query && | 417 if (__nacl_irt_query && |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 __nacl_irt_open = u.nacl_irt_filename.open; | 467 __nacl_irt_open = u.nacl_irt_filename.open; |
463 __nacl_irt_stat = u.nacl_irt_filename.nacl_abi_stat; | 468 __nacl_irt_stat = u.nacl_irt_filename.nacl_abi_stat; |
464 } | 469 } |
465 else | 470 else |
466 { | 471 { |
467 __nacl_irt_open = nacl_irt_open; | 472 __nacl_irt_open = nacl_irt_open; |
468 __nacl_irt_stat = nacl_irt_stat; | 473 __nacl_irt_stat = nacl_irt_stat; |
469 } | 474 } |
470 | 475 |
471 if (__nacl_irt_query && | 476 if (__nacl_irt_query && |
472 __nacl_irt_query (NACL_IRT_MEMORY_v0_1, &u.nacl_irt_memory, | 477 __nacl_irt_query (NACL_IRT_MEMORY_v0_2, &u.nacl_irt_memory, |
473 sizeof(u.nacl_irt_memory)) == sizeof(u.nacl_irt_memory)) | 478 sizeof(u.nacl_irt_memory)) == sizeof(u.nacl_irt_memory)) |
474 { | 479 { |
475 __nacl_irt_sysbrk = u.nacl_irt_memory.sysbrk; | 480 __nacl_irt_sysbrk = u.nacl_irt_memory.sysbrk; |
476 __nacl_irt_mmap = u.nacl_irt_memory.mmap; | 481 __nacl_irt_mmap = u.nacl_irt_memory.mmap; |
477 __nacl_irt_munmap = u.nacl_irt_memory.munmap; | 482 __nacl_irt_munmap = u.nacl_irt_memory.munmap; |
| 483 __nacl_irt_mprotect = u.nacl_irt_memory.mprotect; |
| 484 } |
| 485 else if (__nacl_irt_query && |
| 486 __nacl_irt_query (NACL_IRT_MEMORY_v0_1, &u.nacl_irt_memory, |
| 487 sizeof(struct nacl_irt_memory_v0_1)) == |
| 488 sizeof(struct nacl_irt_memory_v0_1)) |
| 489 { |
| 490 __nacl_irt_sysbrk = u.nacl_irt_memory.sysbrk; |
| 491 __nacl_irt_mmap = u.nacl_irt_memory.mmap; |
| 492 __nacl_irt_munmap = u.nacl_irt_memory.munmap; |
| 493 __nacl_irt_mprotect = not_implemented; |
478 } | 494 } |
479 else | 495 else |
480 { | 496 { |
481 __nacl_irt_sysbrk = nacl_irt_sysbrk; | 497 __nacl_irt_sysbrk = nacl_irt_sysbrk; |
482 __nacl_irt_mmap = nacl_irt_mmap; | 498 __nacl_irt_mmap = nacl_irt_mmap; |
483 __nacl_irt_munmap = nacl_irt_munmap; | 499 __nacl_irt_munmap = nacl_irt_munmap; |
| 500 __nacl_irt_mprotect = nacl_irt_mprotect; |
484 } | 501 } |
485 | 502 |
486 if (__nacl_irt_query && | 503 if (__nacl_irt_query && |
487 __nacl_irt_query (NACL_IRT_DYNCODE_v0_1, &u.nacl_irt_dyncode, | 504 __nacl_irt_query (NACL_IRT_DYNCODE_v0_1, &u.nacl_irt_dyncode, |
488 sizeof(u.nacl_irt_dyncode)) == sizeof(u.nacl_irt_dyncode)) | 505 sizeof(u.nacl_irt_dyncode)) == sizeof(u.nacl_irt_dyncode)) |
489 { | 506 { |
490 __nacl_irt_dyncode_create = u.nacl_irt_dyncode.dyncode_create; | 507 __nacl_irt_dyncode_create = u.nacl_irt_dyncode.dyncode_create; |
491 __nacl_irt_dyncode_modify = u.nacl_irt_dyncode.dyncode_modify; | 508 __nacl_irt_dyncode_modify = u.nacl_irt_dyncode.dyncode_modify; |
492 __nacl_irt_dyncode_delete = u.nacl_irt_dyncode.dyncode_delete; | 509 __nacl_irt_dyncode_delete = u.nacl_irt_dyncode.dyncode_delete; |
493 } | 510 } |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 __nacl_irt_getsockopt = not_implemented; | 652 __nacl_irt_getsockopt = not_implemented; |
636 __nacl_irt_setsockopt = not_implemented; | 653 __nacl_irt_setsockopt = not_implemented; |
637 __nacl_irt_socketpair = not_implemented; | 654 __nacl_irt_socketpair = not_implemented; |
638 __nacl_irt_shutdown = not_implemented; | 655 __nacl_irt_shutdown = not_implemented; |
639 } | 656 } |
640 | 657 |
641 size_t nacl_interface_query(const char *interface_ident, | 658 size_t nacl_interface_query(const char *interface_ident, |
642 void *table, size_t tablesize) { | 659 void *table, size_t tablesize) { |
643 return (*__nacl_irt_query)(interface_ident, table, tablesize); | 660 return (*__nacl_irt_query)(interface_ident, table, tablesize); |
644 } | 661 } |
OLD | NEW |