Subversion Repositories HelenOS

Rev

Rev 2924 | Rev 2936 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2924 Rev 2935
Line 43... Line 43...
43
#include <async.h>
43
#include <async.h>
44
#include <string.h>
44
#include <string.h>
45
 
45
 
46
#include "cmd.h"
46
#include "cmd.h"
47
#include "include/arch.h"
47
#include "include/arch.h"
-
 
48
#include "fib_synch.h"
48
#include "main.h"
49
#include "main.h"
49
 
50
 
50
void thread_debug_start(unsigned thread_hash);
51
void thread_debug_start(unsigned thread_hash);
51
 
52
 
52
#define INBUF_SIZE 64
53
#define INBUF_SIZE 64
Line 69... Line 70...
69
volatile int paused;
70
volatile int paused;
70
 
71
 
71
breakpoint_t brk_list[MAX_BRKPTS];
72
breakpoint_t brk_list[MAX_BRKPTS];
72
int lifted_brkpt;
73
int lifted_brkpt;
73
 
74
 
-
 
75
fcv_t go_cv;
-
 
76
 
74
void read_line(char *buffer, int n)
77
void read_line(char *buffer, int n)
75
{
78
{
76
    char c;
79
    char c;
77
    int i;
80
    int i;
78
 
81
 
Line 159... Line 162...
159
    }
162
    }
160
 
163
 
161
    (*cmd_table[idx_found].proc)(cmd_argc, cmd_argv);
164
    (*cmd_table[idx_found].proc)(cmd_argc, cmd_argv);
162
}
165
}
163
 
166
 
-
 
167
/*
-
 
168
 * Called by a fibril (from arch code) when a breakpoint is hit.
-
 
169
 */
-
 
170
void breakpoint_hit(void)
-
 
171
{
-
 
172
    fcv_wait(&go_cv);
-
 
173
}
164
 
174
 
165
int task_connect(int taskid)
175
int task_connect(int taskid)
166
{
176
{
167
    int rc;
177
    int rc;
168
    unsigned evmask;
178
    unsigned evmask;
Line 267... Line 277...
267
 
277
 
268
    printf("debug_loop(%d)\n", thread_id); 
278
    printf("debug_loop(%d)\n", thread_id); 
269
 
279
 
270
    while (!abort_debug) {
280
    while (!abort_debug) {
271
 
281
 
272
        printf("go\n");
282
        printf("[t%d] go...\n", thread_id);
273
        /* Run thread until an event occurs */
283
        /* Run thread until an event occurs */
274
        rc = udebug_go(app_phone, thread_hash,
284
        rc = udebug_go(app_phone, thread_hash,
275
            &ev_type, &val0, &val1);
285
            &ev_type, &val0, &val1);
-
 
286
        printf("[t%d] stopped\n", thread_id);
276
 
287
 
277
        if (ev_type == UDEBUG_EVENT_FINISHED) {
288
        if (ev_type == UDEBUG_EVENT_FINISHED) {
278
            printf("thread %u debugging finished\n", thread_id);
289
            printf("thread %u debugging finished\n", thread_id);
279
            break;
290
            break;
280
        }
291
        }
281
 
-
 
282
        if (rc >= 0) debug_event(thread_hash, ev_type, val0);
292
        if (rc >= 0) debug_event(thread_hash, ev_type, val0);
283
    }
293
    }
284
 
294
 
285
    printf("debug_loop(%d) exiting\n", thread_id);
295
    printf("debug_loop(%d) exiting\n", thread_id);
286
}
296
}
Line 308... Line 318...
308
    printf("Breakpoint Debugger\n");
318
    printf("Breakpoint Debugger\n");
309
    printf("Press 'c' to connect\n");
319
    printf("Press 'c' to connect\n");
310
    while ((i = getchar()) != 'c')
320
    while ((i = getchar()) != 'c')
311
        putchar(i);
321
        putchar(i);
312
 
322
 
313
    taskid = 13;
323
    taskid = 14;
314
    rc = task_connect(taskid);
324
    rc = task_connect(taskid);
315
    if (rc < 0) {
325
    if (rc < 0) {
316
        printf("Failed to connect to task %d\n", taskid);
326
        printf("Failed to connect to task %d\n", taskid);
317
        return;
327
        return;
318
    }
328
    }
Line 351... Line 361...
351
 
361
 
352
static void main_init(void)
362
static void main_init(void)
353
{
363
{
354
    next_thread_id = 1;
364
    next_thread_id = 1;
355
    paused = 0;
365
    paused = 0;
-
 
366
 
-
 
367
    fcv_init(&go_cv);
356
}
368
}
357
 
369
 
358
int main(void)
370
int main(void)
359
{
371
{
360
    main_init();
372
    main_init();