Changes in kernel/generic/src/udebug/udebug_ops.c [44a7ee5:a53ed3a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/udebug/udebug_ops.c
r44a7ee5 ra53ed3a 46 46 #include <errno.h> 47 47 #include <print.h> 48 #include <stdbool.h> 48 49 #include <str.h> 49 50 #include <syscall/copy.h> … … 78 79 * 79 80 */ 80 static int _thread_op_begin(thread_t *thread, bool being_go)81 static errno_t _thread_op_begin(thread_t *thread, bool being_go) 81 82 { 82 83 mutex_lock(&TASK->udebug.lock); … … 157 158 * 158 159 * Initiates a debugging session for the current task (and its threads). 159 * When the debugging session has started a reply willbe sent to the160 * When the debugging session has started a reply should be sent to the 160 161 * UDEBUG_BEGIN call. This may happen immediately in this function if 161 162 * all the threads in this task are stoppable at the moment and in this 162 * case the function returns 1. 163 * 164 * Otherwise the function returns 0 and the reply will be sent as soon as 165 * all the threads become stoppable (i.e. they can be considered stopped). 163 * case the function sets @a *active to @c true. 164 * 165 * Otherwise the function sets @a *active to false and the resonse should 166 * be sent as soon as all the threads become stoppable (i.e. they can be 167 * considered stopped). 166 168 * 167 169 * @param call The BEGIN call we are servicing. 168 * 169 * @return 0 (OK, but not done yet), 1 (done) or negative error code. 170 * 171 */ 172 int udebug_begin(call_t *call) 170 * @param active Place to store @c true iff we went directly to active state, 171 * @c false if we only went to beginning state 172 * 173 * @return EOK on success, EBUSY if the task is already has an active 174 * debugging session. 175 */ 176 errno_t udebug_begin(call_t *call, bool *active) 173 177 { 174 178 LOG("Debugging task %" PRIu64, TASK->taskid); … … 185 189 TASK->udebug.debugger = call->sender; 186 190 187 int reply;188 189 191 if (TASK->udebug.not_stoppable_count == 0) { 190 192 TASK->udebug.dt_state = UDEBUG_TS_ACTIVE; 191 193 TASK->udebug.begin_call = NULL; 192 reply = 1; /* immediate reply*/194 *active = true; /* directly to active state */ 193 195 } else 194 reply = 0; /* no reply*/196 *active = false; /* only in beginning state */ 195 197 196 198 /* Set udebug.active on all of the task's userspace threads. */ … … 207 209 208 210 mutex_unlock(&TASK->udebug.lock); 209 return reply;211 return EOK; 210 212 } 211 213 … … 214 216 * Closes the debugging session for the current task. 215 217 * 216 * @return Zero on success or negativeerror code.217 * 218 */ 219 int udebug_end(void)218 * @return Zero on success or an error code. 219 * 220 */ 221 errno_t udebug_end(void) 220 222 { 221 223 LOG("Task %" PRIu64, TASK->taskid); 222 224 223 225 mutex_lock(&TASK->udebug.lock); 224 int rc = udebug_task_cleanup(TASK);226 errno_t rc = udebug_task_cleanup(TASK); 225 227 mutex_unlock(&TASK->udebug.lock); 226 228 … … 234 236 * @param mask Or combination of events that should be enabled. 235 237 * 236 * @return Zero on success or negativeerror code.237 * 238 */ 239 int udebug_set_evmask(udebug_evmask_t mask)238 * @return Zero on success or an error code. 239 * 240 */ 241 errno_t udebug_set_evmask(udebug_evmask_t mask) 240 242 { 241 243 LOG("mask = 0x%x", mask); … … 251 253 mutex_unlock(&TASK->udebug.lock); 252 254 253 return 0;255 return EOK; 254 256 } 255 257 … … 264 266 * 265 267 */ 266 int udebug_go(thread_t *thread, call_t *call)268 errno_t udebug_go(thread_t *thread, call_t *call) 267 269 { 268 270 /* On success, this will lock thread->udebug.lock. */ 269 int rc = _thread_op_begin(thread, false);271 errno_t rc = _thread_op_begin(thread, false); 270 272 if (rc != EOK) 271 273 return rc; … … 283 285 _thread_op_end(thread); 284 286 285 return 0;287 return EOK; 286 288 } 287 289 … … 295 297 * 296 298 */ 297 int udebug_stop(thread_t *thread, call_t *call)299 errno_t udebug_stop(thread_t *thread, call_t *call) 298 300 { 299 301 LOG("udebug_stop()"); … … 304 306 * 305 307 */ 306 int rc = _thread_op_begin(thread, true);308 errno_t rc = _thread_op_begin(thread, true); 307 309 if (rc != EOK) 308 310 return rc; … … 314 316 /* Answer will be sent when the thread becomes stoppable. */ 315 317 _thread_op_end(thread); 316 return 0;318 return EOK; 317 319 } 318 320 … … 337 339 mutex_unlock(&TASK->udebug.lock); 338 340 339 return 0;341 return EOK; 340 342 } 341 343 … … 362 364 * 363 365 */ 364 int udebug_thread_read(void **buffer, size_t buf_size, size_t *stored,366 errno_t udebug_thread_read(void **buffer, size_t buf_size, size_t *stored, 365 367 size_t *needed) 366 368 { … … 412 414 *needed = (copied_ids + extra_ids) * sizeof(sysarg_t); 413 415 414 return 0;416 return EOK; 415 417 } 416 418 … … 426 428 * 427 429 */ 428 int udebug_name_read(char **data, size_t *data_size)430 errno_t udebug_name_read(char **data, size_t *data_size) 429 431 { 430 432 size_t name_size = str_size(TASK->name) + 1; … … 435 437 memcpy(*data, TASK->name, name_size); 436 438 437 return 0;439 return EOK; 438 440 } 439 441 … … 455 457 * 456 458 */ 457 int udebug_args_read(thread_t *thread, void **buffer)459 errno_t udebug_args_read(thread_t *thread, void **buffer) 458 460 { 459 461 /* On success, this will lock t->udebug.lock. */ 460 int rc = _thread_op_begin(thread, false);462 errno_t rc = _thread_op_begin(thread, false); 461 463 if (rc != EOK) 462 464 return rc; … … 478 480 479 481 *buffer = arg_buffer; 480 return 0;482 return EOK; 481 483 } 482 484 … … 498 500 * 499 501 */ 500 int udebug_regs_read(thread_t *thread, void **buffer)502 errno_t udebug_regs_read(thread_t *thread, void **buffer) 501 503 { 502 504 /* On success, this will lock t->udebug.lock */ 503 int rc = _thread_op_begin(thread, false);505 errno_t rc = _thread_op_begin(thread, false); 504 506 if (rc != EOK) 505 507 return rc; … … 520 522 521 523 *buffer = (void *) state_buf; 522 return 0;524 return EOK; 523 525 } 524 526 … … 534 536 * 535 537 */ 536 int udebug_mem_read(sysarg_t uspace_addr, size_t n, void **buffer)538 errno_t udebug_mem_read(sysarg_t uspace_addr, size_t n, void **buffer) 537 539 { 538 540 /* Verify task state */ … … 551 553 * 552 554 */ 553 int rc = copy_from_uspace(data_buffer, (void *) uspace_addr, n);554 mutex_unlock(&TASK->udebug.lock); 555 556 if (rc != 0)555 errno_t rc = copy_from_uspace(data_buffer, (void *) uspace_addr, n); 556 mutex_unlock(&TASK->udebug.lock); 557 558 if (rc != EOK) 557 559 return rc; 558 560 559 561 *buffer = data_buffer; 560 return 0;562 return EOK; 561 563 } 562 564
Note:
See TracChangeset
for help on using the changeset viewer.