Changeset 3e828ea in mainline for kernel/generic/src
- Timestamp:
- 2019-09-23T12:49:29Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9be2358
- Parents:
- 9259d20 (diff), 1a4ec93f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - git-author:
- Jiri Svoboda <jiri@…> (2019-09-22 12:49:07)
- git-committer:
- Jiri Svoboda <jiri@…> (2019-09-23 12:49:29)
- Location:
- kernel/generic/src
- Files:
-
- 1 added
- 26 edited
-
cap/cap.c (modified) (1 diff)
-
console/console.c (modified) (1 diff)
-
ddi/ddi.c (modified) (12 diffs)
-
ipc/irq.c (modified) (4 diffs)
-
ipc/ops/dataread.c (modified) (3 diffs)
-
ipc/ops/datawrite.c (modified) (3 diffs)
-
ipc/ops/debug.c (modified) (1 diff)
-
ipc/ops/shareout.c (modified) (1 diff)
-
ipc/sysipc.c (modified) (8 diffs)
-
lib/elf.c (modified) (9 diffs)
-
lib/str.c (modified) (1 diff)
-
lib/strtol.c (added)
-
log/log.c (modified) (1 diff)
-
main/kinit.c (modified) (1 diff)
-
main/uinit.c (modified) (2 diffs)
-
main/version.c (modified) (1 diff)
-
mm/as.c (modified) (4 diffs)
-
mm/page.c (modified) (1 diff)
-
proc/program.c (modified) (8 diffs)
-
proc/task.c (modified) (3 diffs)
-
proc/thread.c (modified) (3 diffs)
-
security/perm.c (modified) (2 diffs)
-
synch/syswaitq.c (modified) (1 diff)
-
syscall/copy.c (modified) (6 diffs)
-
sysinfo/sysinfo.c (modified) (8 diffs)
-
udebug/udebug_ipc.c (modified) (10 diffs)
-
udebug/udebug_ops.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/cap/cap.c
r9259d20 r3e828ea 88 88 #include <stdlib.h> 89 89 90 #define CAPS_START ( CAP_NIL + 1)91 #define CAPS_SIZE (INT_MAX - CAPS_START)90 #define CAPS_START ((intptr_t) CAP_NIL + 1) 91 #define CAPS_SIZE (INT_MAX - (int) CAPS_START) 92 92 #define CAPS_LAST (CAPS_SIZE - 1) 93 93 -
kernel/generic/src/console/console.c
r9259d20 r3e828ea 395 395 * 396 396 */ 397 sys_errno_t sys_kio(int cmd, const void *buf, size_t size)397 sys_errno_t sys_kio(int cmd, uspace_addr_t buf, size_t size) 398 398 { 399 399 char *data; -
kernel/generic/src/ddi/ddi.c
r9259d20 r3e828ea 46 46 #include <mm/frame.h> 47 47 #include <mm/as.h> 48 #include <mm/km.h> 48 49 #include <mm/page.h> 49 50 #include <synch/mutex.h> … … 56 57 #include <trace.h> 57 58 #include <bitops.h> 59 #include <arch/asm.h> 58 60 59 61 /** This lock protects the @c pareas ordered dictionary. */ … … 246 248 */ 247 249 sys_errno_t sys_physmem_map(uintptr_t phys, size_t pages, unsigned int flags, 248 void *virt_ptr, uintptr_t bound)250 uspace_ptr_uintptr_t virt_ptr, uintptr_t bound) 249 251 { 250 252 uintptr_t virt; … … 260 262 rc = copy_to_uspace(virt_ptr, &virt, sizeof(virt)); 261 263 if (rc != EOK) { 262 physmem_unmap( (uintptr_t)virt);264 physmem_unmap(virt); 263 265 return rc; 264 266 } … … 391 393 * 392 394 */ 393 sys_errno_t sys_iospace_enable( ddi_ioarg_t *uspace_io_arg)395 sys_errno_t sys_iospace_enable(uspace_ptr_ddi_ioarg_t uspace_io_arg) 394 396 { 395 397 ddi_ioarg_t arg; … … 402 404 } 403 405 404 sys_errno_t sys_iospace_disable( ddi_ioarg_t *uspace_io_arg)406 sys_errno_t sys_iospace_disable(uspace_ptr_ddi_ioarg_t uspace_io_arg) 405 407 { 406 408 ddi_ioarg_t arg; … … 463 465 464 466 sys_errno_t sys_dmamem_map(size_t size, unsigned int map_flags, unsigned int flags, 465 void *phys_ptr, void *virt_ptr, uintptr_t bound)467 uspace_ptr_uintptr_t phys_ptr, uspace_ptr_uintptr_t virt_ptr, uintptr_t bound) 466 468 { 467 469 if ((flags & DMAMEM_FLAGS_ANONYMOUS) == 0) { … … 471 473 472 474 uintptr_t phys; 473 errno_t rc = dmamem_map( (uintptr_t)virt_ptr, size, map_flags,475 errno_t rc = dmamem_map(virt_ptr, size, map_flags, 474 476 flags, &phys); 475 477 … … 479 481 rc = copy_to_uspace(phys_ptr, &phys, sizeof(phys)); 480 482 if (rc != EOK) { 481 dmamem_unmap( (uintptr_t)virt_ptr, size);483 dmamem_unmap(virt_ptr, size); 482 484 return rc; 483 485 } … … 506 508 rc = copy_to_uspace(phys_ptr, &phys, sizeof(phys)); 507 509 if (rc != EOK) { 508 dmamem_unmap_anonymous( (uintptr_t)virt);510 dmamem_unmap_anonymous(virt); 509 511 return rc; 510 512 } … … 512 514 rc = copy_to_uspace(virt_ptr, &virt, sizeof(virt)); 513 515 if (rc != EOK) { 514 dmamem_unmap_anonymous( (uintptr_t)virt);516 dmamem_unmap_anonymous(virt); 515 517 return rc; 516 518 } … … 527 529 return dmamem_unmap_anonymous(virt); 528 530 } 531 void *pio_map(void *phys, size_t size) 532 { 533 #ifdef IO_SPACE_BOUNDARY 534 if (phys < IO_SPACE_BOUNDARY) 535 return phys; 536 #endif 537 return (void *) km_map((uintptr_t) phys, size, KM_NATURAL_ALIGNMENT, 538 PAGE_READ | PAGE_WRITE | PAGE_NOT_CACHEABLE); 539 } 540 541 void pio_unmap(void *phys, void *virt, size_t size) 542 { 543 #ifdef IO_SPACE_BOUNDARY 544 if (phys < IO_SPACE_BOUNDARY) 545 return; 546 #endif 547 km_unmap((uintptr_t) virt, size); 548 } 529 549 530 550 /** @} -
kernel/generic/src/ipc/irq.c
r9259d20 r3e828ea 223 223 * 224 224 */ 225 static irq_code_t *code_from_uspace( irq_code_t *ucode)225 static irq_code_t *code_from_uspace(uspace_ptr_irq_code_t ucode) 226 226 { 227 227 irq_pio_range_t *ranges = NULL; … … 242 242 if (!ranges) 243 243 goto error; 244 rc = copy_from_uspace(ranges, code->ranges,244 rc = copy_from_uspace(ranges, (uintptr_t) code->ranges, 245 245 sizeof(code->ranges[0]) * code->rangecount); 246 246 if (rc != EOK) … … 250 250 if (!cmds) 251 251 goto error; 252 rc = copy_from_uspace(cmds, code->cmds,252 rc = copy_from_uspace(cmds, (uintptr_t) code->cmds, 253 253 sizeof(code->cmds[0]) * code->cmdcount); 254 254 if (rc != EOK) … … 323 323 */ 324 324 errno_t ipc_irq_subscribe(answerbox_t *box, inr_t inr, sysarg_t imethod, 325 irq_code_t *ucode, cap_irq_handle_t *uspace_handle)325 uspace_ptr_irq_code_t ucode, uspace_ptr_cap_irq_handle_t uspace_handle) 326 326 { 327 327 if ((inr < 0) || (inr > last_inr)) -
kernel/generic/src/ipc/ops/dataread.c
r9259d20 r3e828ea 63 63 if (!ipc_get_retval(&answer->data)) { 64 64 /* The recipient agreed to send data. */ 65 u intptr_t src = ipc_get_arg1(&answer->data);66 u intptr_t dst = ipc_get_arg1(olddata);65 uspace_addr_t src = ipc_get_arg1(&answer->data); 66 uspace_addr_t dst = ipc_get_arg1(olddata); 67 67 size_t max_size = ipc_get_arg2(olddata); 68 68 size_t size = ipc_get_arg2(&answer->data); … … 81 81 } 82 82 errno_t rc = copy_from_uspace(answer->buffer, 83 (void *)src, size);83 src, size); 84 84 if (rc) { 85 85 ipc_set_retval(&answer->data, rc); … … 103 103 { 104 104 if (answer->buffer) { 105 u intptr_t dst = ipc_get_arg1(&answer->data);105 uspace_addr_t dst = ipc_get_arg1(&answer->data); 106 106 size_t size = ipc_get_arg2(&answer->data); 107 107 errno_t rc; 108 108 109 rc = copy_to_uspace( (void *)dst, answer->buffer, size);109 rc = copy_to_uspace(dst, answer->buffer, size); 110 110 if (rc) 111 111 ipc_set_retval(&answer->data, rc); -
kernel/generic/src/ipc/ops/datawrite.c
r9259d20 r3e828ea 43 43 static errno_t request_preprocess(call_t *call, phone_t *phone) 44 44 { 45 u intptr_t src = ipc_get_arg1(&call->data);45 uspace_addr_t src = ipc_get_arg1(&call->data); 46 46 size_t size = ipc_get_arg2(&call->data); 47 47 … … 59 59 if (!call->buffer) 60 60 return ENOMEM; 61 errno_t rc = copy_from_uspace(call->buffer, (void *)src, size);61 errno_t rc = copy_from_uspace(call->buffer, src, size); 62 62 if (rc != EOK) { 63 63 /* … … 77 77 if (!ipc_get_retval(&answer->data)) { 78 78 /* The recipient agreed to receive data. */ 79 u intptr_t dst = (uintptr_t)ipc_get_arg1(&answer->data);80 size_t size = (size_t)ipc_get_arg2(&answer->data);81 size_t max_size = (size_t)ipc_get_arg2(olddata);79 uspace_addr_t dst = ipc_get_arg1(&answer->data); 80 size_t size = ipc_get_arg2(&answer->data); 81 size_t max_size = ipc_get_arg2(olddata); 82 82 83 83 if (size <= max_size) { 84 errno_t rc = copy_to_uspace( (void *)dst,84 errno_t rc = copy_to_uspace(dst, 85 85 answer->buffer, size); 86 86 if (rc) -
kernel/generic/src/ipc/ops/debug.c
r9259d20 r3e828ea 47 47 { 48 48 if (answer->buffer) { 49 u intptr_t dst = ipc_get_arg1(&answer->data);49 uspace_addr_t dst = ipc_get_arg1(&answer->data); 50 50 size_t size = ipc_get_arg2(&answer->data); 51 51 errno_t rc; 52 52 53 rc = copy_to_uspace( (void *)dst, answer->buffer, size);53 rc = copy_to_uspace(dst, answer->buffer, size); 54 54 if (rc) 55 55 ipc_set_retval(&answer->data, rc); -
kernel/generic/src/ipc/ops/shareout.c
r9259d20 r3e828ea 70 70 71 71 if (rc == EOK) { 72 rc = copy_to_uspace( (void *)ipc_get_arg2(&answer->data),72 rc = copy_to_uspace(ipc_get_arg2(&answer->data), 73 73 &dst_base, sizeof(dst_base)); 74 74 } -
kernel/generic/src/ipc/sysipc.c
r9259d20 r3e828ea 419 419 * 420 420 */ 421 sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t handle, ipc_data_t *data,421 sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t handle, uspace_ptr_ipc_data_t data, 422 422 sysarg_t label) 423 423 { … … 437 437 } 438 438 439 errno_t rc = copy_from_uspace(&call->data.args, &data->args,439 errno_t rc = copy_from_uspace(&call->data.args, data + offsetof(ipc_data_t, args), 440 440 sizeof(call->data.args)); 441 441 if (rc != EOK) { … … 623 623 */ 624 624 sys_errno_t sys_ipc_forward_slow(cap_call_handle_t chandle, 625 cap_phone_handle_t phandle, ipc_data_t *data, unsigned int mode)625 cap_phone_handle_t phandle, uspace_ptr_ipc_data_t data, unsigned int mode) 626 626 { 627 627 ipc_data_t newdata; 628 errno_t rc = copy_from_uspace(&newdata.args, &data->args,628 errno_t rc = copy_from_uspace(&newdata.args, data + offsetof(ipc_data_t, args), 629 629 sizeof(newdata.args)); 630 630 if (rc != EOK) … … 700 700 * 701 701 */ 702 sys_errno_t sys_ipc_answer_slow(cap_call_handle_t chandle, ipc_data_t *data)702 sys_errno_t sys_ipc_answer_slow(cap_call_handle_t chandle, uspace_ptr_ipc_data_t data) 703 703 { 704 704 kobject_t *kobj = cap_unpublish(TASK, chandle, KOBJECT_TYPE_CALL); … … 718 718 saved = false; 719 719 720 errno_t rc = copy_from_uspace(&call->data.args, &data->args,720 errno_t rc = copy_from_uspace(&call->data.args, data + offsetof(ipc_data_t, args), 721 721 sizeof(call->data.args)); 722 722 if (rc != EOK) { … … 766 766 * @return An error code on error. 767 767 */ 768 sys_errno_t sys_ipc_wait_for_call( ipc_data_t *calldata, uint32_t usec,768 sys_errno_t sys_ipc_wait_for_call(uspace_ptr_ipc_data_t calldata, uint32_t usec, 769 769 unsigned int flags) 770 770 { … … 888 888 */ 889 889 sys_errno_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod, 890 irq_code_t *ucode, cap_irq_handle_t *uspace_handle)890 uspace_ptr_irq_code_t ucode, uspace_ptr_cap_irq_handle_t uspace_handle) 891 891 { 892 892 if (!(perm_get(TASK) & PERM_IRQ_REG)) … … 918 918 * 919 919 */ 920 sys_errno_t sys_ipc_connect_kbox( task_id_t *uspace_taskid,921 cap_phone_handle_t *uspace_phone)920 sys_errno_t sys_ipc_connect_kbox(uspace_ptr_task_id_t uspace_taskid, 921 uspace_ptr_cap_phone_handle_t uspace_phone) 922 922 { 923 923 #ifdef CONFIG_UDEBUG -
kernel/generic/src/lib/elf.c
r9259d20 r3e828ea 50 50 #include <lib/elf_load.h> 51 51 52 static const char *error_codes[] = { 53 "no error", 54 "invalid image", 55 "address space error", 56 "incompatible image", 57 "unsupported image type", 58 "irrecoverable error" 59 }; 60 61 static int load_segment(elf_segment_header_t *, elf_header_t *, as_t *); 52 static errno_t load_segment(elf_segment_header_t *, elf_header_t *, as_t *); 62 53 63 54 /** ELF loader … … 67 58 * @param flags A combination of ELD_F_* 68 59 * 69 * @return E E_OK on success60 * @return EOK on success 70 61 * 71 62 */ 72 unsigned int elf_load(elf_header_t *header, as_t *as)63 errno_t elf_load(elf_header_t *header, as_t *as) 73 64 { 74 65 /* Identify ELF */ … … 77 68 (header->e_ident[EI_MAG2] != ELFMAG2) || 78 69 (header->e_ident[EI_MAG3] != ELFMAG3)) 79 return E E_INVALID;70 return EINVAL; 80 71 81 72 /* Identify ELF compatibility */ … … 85 76 (header->e_version != EV_CURRENT) || 86 77 (header->e_ident[EI_CLASS] != ELF_CLASS)) 87 return E E_INCOMPATIBLE;78 return EINVAL; 88 79 89 80 if (header->e_phentsize != sizeof(elf_segment_header_t)) 90 return E E_INCOMPATIBLE;81 return EINVAL; 91 82 92 83 /* Check if the object type is supported. */ 93 84 if (header->e_type != ET_EXEC) 94 return E E_UNSUPPORTED;85 return ENOTSUP; 95 86 96 87 /* Check if the ELF image starts on a page boundary */ 97 88 if (ALIGN_UP((uintptr_t) header, PAGE_SIZE) != (uintptr_t) header) 98 return E E_UNSUPPORTED;89 return ENOTSUP; 99 90 100 91 /* Walk through all segment headers and process them. */ … … 108 99 continue; 109 100 110 int rc = load_segment(seghdr, header, as);111 if (rc != E E_OK)101 errno_t rc = load_segment(seghdr, header, as); 102 if (rc != EOK) 112 103 return rc; 113 104 } 114 105 115 return EE_OK; 116 } 117 118 /** Print error message according to error code. 119 * 120 * @param rc Return code returned by elf_load(). 121 * 122 * @return NULL terminated description of error. 123 * 124 */ 125 const char *elf_error(unsigned int rc) 126 { 127 assert(rc < sizeof(error_codes) / sizeof(char *)); 128 129 return error_codes[rc]; 106 return EOK; 130 107 } 131 108 … … 136 113 * @param as Address space into wich the ELF is being loaded. 137 114 * 138 * @return E E_OK on success, error code otherwise.115 * @return EOK on success, error code otherwise. 139 116 * 140 117 */ 141 int load_segment(elf_segment_header_t *entry, elf_header_t *elf, as_t *as)118 errno_t load_segment(elf_segment_header_t *entry, elf_header_t *elf, as_t *as) 142 119 { 143 120 mem_backend_data_t backend_data; … … 146 123 if ((entry->p_offset % entry->p_align) != 147 124 (entry->p_vaddr % entry->p_align)) 148 return E E_INVALID;125 return EINVAL; 149 126 } 150 127 … … 177 154 AS_AREA_ATTR_NONE, &elf_backend, &backend_data, &base, 0); 178 155 if (!area) 179 return E E_MEMORY;156 return ENOMEM; 180 157 181 158 /* … … 184 161 */ 185 162 186 return E E_OK;163 return EOK; 187 164 } 188 165 -
kernel/generic/src/lib/str.c
r9259d20 r3e828ea 789 789 str_ncpy(dest, size + 1, src, size); 790 790 return dest; 791 }792 793 /** Convert string to uint64_t (internal variant).794 *795 * @param nptr Pointer to string.796 * @param endptr Pointer to the first invalid character is stored here.797 * @param base Zero or number between 2 and 36 inclusive.798 * @param neg Indication of unary minus is stored here.799 * @apram result Result of the conversion.800 *801 * @return EOK if conversion was successful.802 *803 */804 static errno_t str_uint(const char *nptr, char **endptr, unsigned int base,805 bool *neg, uint64_t *result)806 {807 assert(endptr != NULL);808 assert(neg != NULL);809 assert(result != NULL);810 811 *neg = false;812 const char *str = nptr;813 814 /* Ignore leading whitespace */815 while (isspace(*str))816 str++;817 818 if (*str == '-') {819 *neg = true;820 str++;821 } else if (*str == '+')822 str++;823 824 if (base == 0) {825 /* Decode base if not specified */826 base = 10;827 828 if (*str == '0') {829 base = 8;830 str++;831 832 switch (*str) {833 case 'b':834 case 'B':835 base = 2;836 str++;837 break;838 case 'o':839 case 'O':840 base = 8;841 str++;842 break;843 case 'd':844 case 'D':845 case 't':846 case 'T':847 base = 10;848 str++;849 break;850 case 'x':851 case 'X':852 base = 16;853 str++;854 break;855 default:856 str--;857 }858 }859 } else {860 /* Check base range */861 if ((base < 2) || (base > 36)) {862 *endptr = (char *) str;863 return EINVAL;864 }865 }866 867 *result = 0;868 const char *startstr = str;869 870 while (*str != 0) {871 unsigned int digit;872 873 if ((*str >= 'a') && (*str <= 'z'))874 digit = *str - 'a' + 10;875 else if ((*str >= 'A') && (*str <= 'Z'))876 digit = *str - 'A' + 10;877 else if ((*str >= '0') && (*str <= '9'))878 digit = *str - '0';879 else880 break;881 882 if (digit >= base)883 break;884 885 uint64_t prev = *result;886 *result = (*result) * base + digit;887 888 if (*result < prev) {889 /* Overflow */890 *endptr = (char *) str;891 return EOVERFLOW;892 }893 894 str++;895 }896 897 if (str == startstr) {898 /*899 * No digits were decoded => first invalid character is900 * the first character of the string.901 */902 str = nptr;903 }904 905 *endptr = (char *) str;906 907 if (str == nptr)908 return EINVAL;909 910 return EOK;911 }912 913 /** Convert string to uint64_t.914 *915 * @param nptr Pointer to string.916 * @param endptr If not NULL, pointer to the first invalid character917 * is stored here.918 * @param base Zero or number between 2 and 36 inclusive.919 * @param strict Do not allow any trailing characters.920 * @param result Result of the conversion.921 *922 * @return EOK if conversion was successful.923 *924 */925 errno_t str_uint64_t(const char *nptr, char **endptr, unsigned int base,926 bool strict, uint64_t *result)927 {928 assert(result != NULL);929 930 bool neg;931 char *lendptr;932 errno_t ret = str_uint(nptr, &lendptr, base, &neg, result);933 934 if (endptr != NULL)935 *endptr = (char *) lendptr;936 937 if (ret != EOK)938 return ret;939 940 /* Do not allow negative values */941 if (neg)942 return EINVAL;943 944 /*945 * Check whether we are at the end of946 * the string in strict mode947 */948 if ((strict) && (*lendptr != 0))949 return EINVAL;950 951 return EOK;952 791 } 953 792 -
kernel/generic/src/log/log.c
r9259d20 r3e828ea 295 295 * 296 296 */ 297 sys_errno_t sys_klog(sysarg_t operation, void *buf, size_t size,298 sysarg_t level, size_t *uspace_nread)297 sys_errno_t sys_klog(sysarg_t operation, uspace_addr_t buf, size_t size, 298 sysarg_t level, uspace_ptr_size_t uspace_nread) 299 299 { 300 300 char *data; -
kernel/generic/src/main/kinit.c
r9259d20 r3e828ea 291 291 log(LF_OTHER, LVL_ERROR, 292 292 "init[%zu]: Init binary load failed " 293 "(error %s, loader status % u)", i,294 str_error_name(rc), programs[i].loader_status);293 "(error %s, loader status %s)", i, 294 str_error_name(rc), str_error_name(programs[i].loader_status)); 295 295 } 296 296 } -
kernel/generic/src/main/uinit.c
r9259d20 r3e828ea 70 70 #endif 71 71 72 uspace_arg_t *uarg = (uspace_arg_t *)arg;72 uspace_arg_t *uarg = arg; 73 73 uspace_arg_t local_uarg; 74 74 … … 77 77 local_uarg.uspace_stack_size = uarg->uspace_stack_size; 78 78 local_uarg.uspace_uarg = uarg->uspace_uarg; 79 local_uarg.uspace_thread_function = NULL;80 local_uarg.uspace_thread_arg = NULL;79 local_uarg.uspace_thread_function = USPACE_NULL; 80 local_uarg.uspace_thread_arg = USPACE_NULL; 81 81 82 82 free(uarg); -
kernel/generic/src/main/version.c
r9259d20 r3e828ea 38 38 39 39 static const char *project = "SPARTAN kernel"; 40 static const char *copyright = STRING( COPYRIGHT);41 static const char *release = STRING( RELEASE);42 static const char *name = STRING( NAME);40 static const char *copyright = STRING(HELENOS_COPYRIGHT); 41 static const char *release = STRING(HELENOS_RELEASE); 42 static const char *name = STRING(HELENOS_CODENAME); 43 43 static const char *arch = STRING(KARCH); 44 44 -
kernel/generic/src/mm/as.c
r9259d20 r3e828ea 2092 2092 2093 2093 sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags, 2094 uintptr_t bound, as_area_pager_info_t *pager_info)2094 uintptr_t bound, uspace_ptr_as_area_pager_info_t pager_info) 2095 2095 { 2096 2096 uintptr_t virt = base; … … 2098 2098 mem_backend_data_t backend_data; 2099 2099 2100 if ( pager_info == AS_AREA_UNPAGED)2100 if (!pager_info) 2101 2101 backend = &anon_backend; 2102 2102 else { … … 2125 2125 } 2126 2126 2127 sys_errno_t sys_as_area_get_info(uintptr_t address, as_area_info_t *dest)2127 sys_errno_t sys_as_area_get_info(uintptr_t address, uspace_ptr_as_area_info_t dest) 2128 2128 { 2129 2129 as_area_t *area; 2130 as_area_info_t info; 2131 2132 /* Prevent leaking stack bytes via structure padding. */ 2133 memset(&info, 0, sizeof(info)); 2130 2134 2131 2135 mutex_lock(&AS->lock); … … 2136 2140 } 2137 2141 2138 dest->start_addr = area->base;2139 dest->size = P2SZ(area->pages);2140 dest->flags = area->flags;2142 info.start_addr = area->base; 2143 info.size = P2SZ(area->pages); 2144 info.flags = area->flags; 2141 2145 2142 2146 mutex_unlock(&area->lock); 2143 2147 mutex_unlock(&AS->lock); 2148 2149 copy_to_uspace(dest, &info, sizeof(info)); 2144 2150 return EOK; 2145 2151 } -
kernel/generic/src/mm/page.c
r9259d20 r3e828ea 215 215 * 216 216 */ 217 sys_errno_t sys_page_find_mapping(uintptr_t virt, u intptr_t *phys_ptr)217 sys_errno_t sys_page_find_mapping(uintptr_t virt, uspace_ptr_uintptr_t phys_ptr) 218 218 { 219 219 uintptr_t phys; -
kernel/generic/src/proc/program.c
r9259d20 r3e828ea 48 48 #include <security/perm.h> 49 49 #include <lib/elf_load.h> 50 #include < errno.h>50 #include <str.h> 51 51 #include <log.h> 52 52 #include <syscall/copy.h> … … 69 69 * 70 70 */ 71 errno_t program_create(as_t *as, u intptr_t entry_addr, char *name, program_t *prg)71 errno_t program_create(as_t *as, uspace_addr_t entry_addr, char *name, program_t *prg) 72 72 { 73 73 uspace_arg_t *kernel_uarg = (uspace_arg_t *) … … 76 76 return ENOMEM; 77 77 78 prg->loader_status = E E_OK;78 prg->loader_status = EOK; 79 79 prg->task = task_create(as, name); 80 80 if (!prg->task) { … … 86 86 * Create the stack address space area. 87 87 */ 88 uintptr_t virt = (uintptr_t) -1;88 uintptr_t virt = (uintptr_t) AS_AREA_ANY; 89 89 uintptr_t bound = USER_ADDRESS_SPACE_END - (STACK_SIZE_USER - 1); 90 90 … … 103 103 } 104 104 105 kernel_uarg->uspace_entry = (void *)entry_addr;106 kernel_uarg->uspace_stack = (void *)virt;105 kernel_uarg->uspace_entry = entry_addr; 106 kernel_uarg->uspace_stack = virt; 107 107 kernel_uarg->uspace_stack_size = STACK_SIZE_USER; 108 kernel_uarg->uspace_thread_function = NULL;109 kernel_uarg->uspace_thread_arg = NULL;110 kernel_uarg->uspace_uarg = NULL;108 kernel_uarg->uspace_thread_function = USPACE_NULL; 109 kernel_uarg->uspace_thread_arg = USPACE_NULL; 110 kernel_uarg->uspace_uarg = USPACE_NULL; 111 111 112 112 /* … … 149 149 150 150 prg->loader_status = elf_load((elf_header_t *) image_addr, as); 151 if (prg->loader_status != E E_OK) {151 if (prg->loader_status != EOK) { 152 152 as_release(as); 153 153 prg->task = NULL; … … 183 183 184 184 prg->loader_status = elf_load((elf_header_t *) program_loader, as); 185 if (prg->loader_status != E E_OK) {185 if (prg->loader_status != EOK) { 186 186 as_release(as); 187 187 log(LF_OTHER, LVL_ERROR, "Cannot spawn loader (%s)", 188 elf_error(prg->loader_status));188 str_error(prg->loader_status)); 189 189 return ENOENT; 190 190 } … … 218 218 * 219 219 */ 220 sys_errno_t sys_program_spawn_loader( char *uspace_name, size_t name_len)220 sys_errno_t sys_program_spawn_loader(uspace_ptr_char uspace_name, size_t name_len) 221 221 { 222 222 /* Cap length of name and copy it from userspace. */ -
kernel/generic/src/proc/task.c
r9259d20 r3e828ea 323 323 * 324 324 */ 325 sys_errno_t sys_task_get_id( sysarg64_t *uspace_taskid)325 sys_errno_t sys_task_get_id(uspace_ptr_sysarg64_t uspace_taskid) 326 326 { 327 327 /* … … 363 363 * 364 364 */ 365 sys_errno_t sys_task_set_name(const char *uspace_name, size_t name_len)365 sys_errno_t sys_task_set_name(const uspace_ptr_char uspace_name, size_t name_len) 366 366 { 367 367 char namebuf[TASK_NAME_BUFLEN]; … … 404 404 * 405 405 */ 406 sys_errno_t sys_task_kill( task_id_t *uspace_taskid)406 sys_errno_t sys_task_kill(uspace_ptr_task_id_t uspace_taskid) 407 407 { 408 408 task_id_t taskid; -
kernel/generic/src/proc/thread.c
r9259d20 r3e828ea 998 998 * 999 999 */ 1000 sys_errno_t sys_thread_create(uspace_ arg_t *uspace_uarg, char *uspace_name,1001 size_t name_len, thread_id_t *uspace_thread_id)1000 sys_errno_t sys_thread_create(uspace_ptr_uspace_arg_t uspace_uarg, uspace_ptr_char uspace_name, 1001 size_t name_len, uspace_ptr_thread_id_t uspace_thread_id) 1002 1002 { 1003 1003 if (name_len > THREAD_NAME_BUFLEN - 1) … … 1029 1029 THREAD_FLAG_USPACE | THREAD_FLAG_NOATTACH, namebuf); 1030 1030 if (thread) { 1031 if (uspace_thread_id != NULL) {1031 if (uspace_thread_id) { 1032 1032 rc = copy_to_uspace(uspace_thread_id, &thread->tid, 1033 1033 sizeof(thread->tid)); … … 1088 1088 * 1089 1089 */ 1090 sys_errno_t sys_thread_get_id( thread_id_t *uspace_thread_id)1090 sys_errno_t sys_thread_get_id(uspace_ptr_thread_id_t uspace_thread_id) 1091 1091 { 1092 1092 /* -
kernel/generic/src/security/perm.c
r9259d20 r3e828ea 158 158 * 159 159 */ 160 sys_errno_t sys_perm_grant( sysarg64_t *uspace_taskid, perm_t perms)160 sys_errno_t sys_perm_grant(uspace_ptr_sysarg64_t uspace_taskid, perm_t perms) 161 161 { 162 162 sysarg64_t taskid; … … 179 179 * 180 180 */ 181 sys_errno_t sys_perm_revoke( sysarg64_t *uspace_taskid, perm_t perms)181 sys_errno_t sys_perm_revoke(uspace_ptr_sysarg64_t uspace_taskid, perm_t perms) 182 182 { 183 183 sysarg64_t taskid; -
kernel/generic/src/synch/syswaitq.c
r9259d20 r3e828ea 88 88 * @return Error code. 89 89 */ 90 sys_errno_t sys_waitq_create( cap_waitq_handle_t *whandle)90 sys_errno_t sys_waitq_create(uspace_ptr_cap_waitq_handle_t whandle) 91 91 { 92 92 waitq_t *wq = slab_alloc(waitq_cache, FRAME_ATOMIC); -
kernel/generic/src/syscall/copy.c
r9259d20 r3e828ea 59 59 * @return EOK on success or an error code from @ref errno.h. 60 60 */ 61 errno_t copy_from_uspace(void *dst, const void *uspace_src, size_t size)61 errno_t copy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size) 62 62 { 63 63 ipl_t ipl; … … 68 68 69 69 if (!KERNEL_ADDRESS_SPACE_SHADOWED) { 70 if (overlaps( (uintptr_t)uspace_src, size,70 if (overlaps(uspace_src, size, 71 71 KERNEL_ADDRESS_SPACE_START, 72 72 KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) { … … 82 82 * Check whether the address is outside the address space hole. 83 83 */ 84 if (overlaps( (uintptr_t)uspace_src, size, ADDRESS_SPACE_HOLE_START,84 if (overlaps(uspace_src, size, ADDRESS_SPACE_HOLE_START, 85 85 ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START)) 86 86 return EPERM; … … 110 110 * @return 0 on success or an error code from @ref errno.h. 111 111 */ 112 errno_t copy_to_uspace( void *uspace_dst, const void *src, size_t size)112 errno_t copy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size) 113 113 { 114 114 ipl_t ipl; … … 119 119 120 120 if (!KERNEL_ADDRESS_SPACE_SHADOWED) { 121 if (overlaps( (uintptr_t)uspace_dst, size,121 if (overlaps(uspace_dst, size, 122 122 KERNEL_ADDRESS_SPACE_START, 123 123 KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) { … … 133 133 * Check whether the address is outside the address space hole. 134 134 */ 135 if (overlaps( (uintptr_t)uspace_dst, size, ADDRESS_SPACE_HOLE_START,135 if (overlaps(uspace_dst, size, ADDRESS_SPACE_HOLE_START, 136 136 ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START)) 137 137 return EPERM; -
kernel/generic/src/sysinfo/sysinfo.c
r9259d20 r3e828ea 677 677 * 678 678 */ 679 _NO_TRACE static sysinfo_return_t sysinfo_get_item_uspace( void *ptr, size_t size,679 _NO_TRACE static sysinfo_return_t sysinfo_get_item_uspace(uspace_addr_t ptr, size_t size, 680 680 bool dry_run) 681 681 { … … 786 786 * 787 787 */ 788 _NO_TRACE static sysinfo_return_t sysinfo_get_keys_uspace( void *ptr, size_t size,788 _NO_TRACE static sysinfo_return_t sysinfo_get_keys_uspace(uspace_addr_t ptr, size_t size, 789 789 bool dry_run) 790 790 { … … 831 831 * 832 832 */ 833 sys_errno_t sys_sysinfo_get_keys_size( void *path_ptr, size_t path_size,834 void *size_ptr)833 sys_errno_t sys_sysinfo_get_keys_size(uspace_addr_t path_ptr, size_t path_size, 834 uspace_addr_t size_ptr) 835 835 { 836 836 errno_t rc; … … 879 879 * 880 880 */ 881 sys_errno_t sys_sysinfo_get_keys( void *path_ptr, size_t path_size,882 void *buffer_ptr, size_t buffer_size, size_t *size_ptr)881 sys_errno_t sys_sysinfo_get_keys(uspace_addr_t path_ptr, size_t path_size, 882 uspace_addr_t buffer_ptr, size_t buffer_size, uspace_ptr_size_t size_ptr) 883 883 { 884 884 errno_t rc; … … 914 914 * 915 915 */ 916 sysarg_t sys_sysinfo_get_val_type( void *path_ptr, size_t path_size)916 sysarg_t sys_sysinfo_get_val_type(uspace_addr_t path_ptr, size_t path_size) 917 917 { 918 918 /* … … 950 950 * 951 951 */ 952 sys_errno_t sys_sysinfo_get_value( void *path_ptr, size_t path_size,953 void *value_ptr)952 sys_errno_t sys_sysinfo_get_value(uspace_addr_t path_ptr, size_t path_size, 953 uspace_addr_t value_ptr) 954 954 { 955 955 errno_t rc; … … 986 986 * 987 987 */ 988 sys_errno_t sys_sysinfo_get_data_size( void *path_ptr, size_t path_size,989 void *size_ptr)988 sys_errno_t sys_sysinfo_get_data_size(uspace_addr_t path_ptr, size_t path_size, 989 uspace_addr_t size_ptr) 990 990 { 991 991 errno_t rc; … … 1036 1036 * 1037 1037 */ 1038 sys_errno_t sys_sysinfo_get_data( void *path_ptr, size_t path_size,1039 void *buffer_ptr, size_t buffer_size, size_t *size_ptr)1038 sys_errno_t sys_sysinfo_get_data(uspace_addr_t path_ptr, size_t path_size, 1039 uspace_addr_t buffer_ptr, size_t buffer_size, uspace_ptr_size_t size_ptr) 1040 1040 { 1041 1041 errno_t rc; -
kernel/generic/src/udebug/udebug_ipc.c
r9259d20 r3e828ea 59 59 } 60 60 61 return 0;61 return EOK; 62 62 } 63 63 … … 191 191 */ 192 192 193 ipc_set_retval(&call->data, 0);193 ipc_set_retval(&call->data, EOK); 194 194 /* 195 195 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that … … 218 218 size_t buf_size; 219 219 void *data; 220 errno_t rc; 220 221 221 222 uspace_addr = ipc_get_arg2(&call->data); /* Destination address */ … … 225 226 * Read task name. 226 227 */ 227 udebug_name_read((char **) &data, &data_size); 228 rc = udebug_name_read((char **) &data, &data_size); 229 if (rc != EOK) { 230 ipc_set_retval(&call->data, rc); 231 ipc_answer(&TASK->kb.box, call); 232 return; 233 } 228 234 229 235 /* Copy MAX(buf_size, data_size) bytes */ … … 238 244 */ 239 245 240 ipc_set_retval(&call->data, 0);246 ipc_set_retval(&call->data, EOK); 241 247 /* 242 248 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that … … 292 298 */ 293 299 294 ipc_set_retval(&call->data, 0);300 ipc_set_retval(&call->data, EOK); 295 301 /* 296 302 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that … … 334 340 uspace_addr = ipc_get_arg3(&call->data); 335 341 336 ipc_set_retval(&call->data, 0);342 ipc_set_retval(&call->data, EOK); 337 343 /* 338 344 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that … … 377 383 to_copy = sizeof(istate_t); 378 384 379 ipc_set_retval(&call->data, 0);385 ipc_set_retval(&call->data, EOK); 380 386 /* 381 387 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that … … 398 404 static void udebug_receive_mem_read(call_t *call) 399 405 { 400 sysarg_t uspace_dst;401 sysarg_t uspace_src;406 uspace_addr_t uspace_dst; 407 uspace_addr_t uspace_src; 402 408 unsigned size; 403 409 void *buffer = NULL; … … 417 423 assert(buffer != NULL); 418 424 419 ipc_set_retval(&call->data, 0);425 ipc_set_retval(&call->data, EOK); 420 426 /* 421 427 * ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that -
kernel/generic/src/udebug/udebug_ops.c
r9259d20 r3e828ea 427 427 * @param data_size Place to store size of the data. 428 428 * 429 * @return EOK .429 * @return EOK on success, ENOMEM if memory allocation failed. 430 430 * 431 431 */ … … 548 548 * 549 549 */ 550 errno_t udebug_mem_read( sysarg_t uspace_addr, size_t n, void **buffer)550 errno_t udebug_mem_read(uspace_addr_t uspace_addr, size_t n, void **buffer) 551 551 { 552 552 /* Verify task state */ … … 569 569 * 570 570 */ 571 errno_t rc = copy_from_uspace(data_buffer, (void *)uspace_addr, n);571 errno_t rc = copy_from_uspace(data_buffer, uspace_addr, n); 572 572 mutex_unlock(&TASK->udebug.lock); 573 573
Note:
See TracChangeset
for help on using the changeset viewer.
