Subversion Repositories HelenOS

Rev

Rev 2921 | Rev 3431 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2921 Rev 3424
Line 105... Line 105...
105
int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused)))
105
int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused)))
106
{
106
{
107
    unsigned int i;
107
    unsigned int i;
108
    char *symbol;
108
    char *symbol;
109
   
109
 
110
    if (sizeof(void *) == 4) {
110
#ifdef __32_BITS__  
111
        printf("#  Count Address    In symbol\n");
111
    printf("#  Count Address    In symbol\n");
112
        printf("-- ----- ---------- ---------\n");
112
    printf("-- ----- ---------- ---------\n");
113
    } else {
113
#endif
-
 
114
 
-
 
115
#ifdef __64_BITS__
114
        printf("#  Count Address            In symbol\n");
116
    printf("#  Count Address            In symbol\n");
115
        printf("-- ----- ------------------ ---------\n");
117
    printf("-- ----- ------------------ ---------\n");
116
    }
118
#endif
117
   
119
   
118
    for (i = 0; i < BKPOINTS_MAX; i++)
120
    for (i = 0; i < BKPOINTS_MAX; i++)
119
        if (breakpoints[i].address) {
121
        if (breakpoints[i].address) {
120
            symbol = get_symtab_entry(breakpoints[i].address);
122
            symbol = get_symtab_entry(breakpoints[i].address);
121
           
123
 
122
            if (sizeof(void *) == 4)
124
#ifdef __32_BITS__
123
                printf("%-2u %-5d %#10zx %s\n", i, breakpoints[i].counter,
125
            printf("%-2u %-5d %#10zx %s\n", i,
124
                    breakpoints[i].address, symbol);
126
                breakpoints[i].counter, breakpoints[i].address,
-
 
127
                symbol);
125
            else
128
#endif
-
 
129
 
-
 
130
#ifdef __64_BITS__
126
                printf("%-2u %-5d %#18zx %s\n", i, breakpoints[i].counter,
131
            printf("%-2u %-5d %#18zx %s\n", i,
127
                    breakpoints[i].address, symbol);
132
                breakpoints[i].counter, breakpoints[i].address,
-
 
133
                symbol);
-
 
134
#endif
-
 
135
 
128
        }
136
        }
129
    return 1;
137
    return 1;
130
}
138
}
131
 
139
 
132
/* Setup DR register according to table */
140
/* Setup DR register according to table */
Line 160... Line 168...
160
        dr7 &= ~ (0x3 << (16 + 4*curidx));
168
        dr7 &= ~ (0x3 << (16 + 4*curidx));
161
        dr7 &= ~ (0x3 << (18 + 4*curidx));
169
        dr7 &= ~ (0x3 << (18 + 4*curidx));
162
        if ((flags & BKPOINT_INSTR)) {
170
        if ((flags & BKPOINT_INSTR)) {
163
            ;
171
            ;
164
        } else {
172
        } else {
-
 
173
       
165
            if (sizeof(int) == 4)
174
#ifdef __32_BITS__
166
                dr7 |= ((unative_t) 0x3) << (18 + 4*curidx);
175
            dr7 |= ((unative_t) 0x3) << (18 + 4 * curidx);
-
 
176
#endif
-
 
177
 
167
            else /* 8 */
178
#ifdef __64_BITS__
168
                dr7 |= ((unative_t) 0x2) << (18 + 4*curidx);
179
            dr7 |= ((unative_t) 0x2) << (18 + 4 * curidx);
-
 
180
#endif
169
           
181
           
170
            if ((flags & BKPOINT_WRITE))
182
            if ((flags & BKPOINT_WRITE))
171
                dr7 |= ((unative_t) 0x1) << (16 + 4*curidx);
183
                dr7 |= ((unative_t) 0x1) << (16 + 4 * curidx);
172
            else if ((flags & BKPOINT_READ_WRITE))
184
            else if ((flags & BKPOINT_READ_WRITE))
173
                dr7 |= ((unative_t) 0x3) << (16 + 4*curidx);
185
                dr7 |= ((unative_t) 0x3) << (16 + 4 * curidx);
Line 244... Line 256...
244
    /* Handle zero checker */
256
    /* Handle zero checker */
245
    if (! (breakpoints[slot].flags & BKPOINT_INSTR)) {
257
    if (! (breakpoints[slot].flags & BKPOINT_INSTR)) {
246
        if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) {
258
        if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) {
247
            if (*((unative_t *) breakpoints[slot].address) != 0)
259
            if (*((unative_t *) breakpoints[slot].address) != 0)
248
                return;
260
                return;
249
            printf("**** Found ZERO on address %lx (slot %d) ****\n",
261
            printf("*** Found ZERO on address %lx (slot %d) ***\n",
250
                breakpoints[slot].address, slot);
262
                breakpoints[slot].address, slot);
251
        } else {
263
        } else {
252
            printf("Data watchpoint - new data: %lx\n",
264
            printf("Data watchpoint - new data: %lx\n",
253
                   *((unative_t *) breakpoints[slot].address));
265
                *((unative_t *) breakpoints[slot].address));
254
        }
266
        }
Line 357... Line 369...
357
        }
369
        }
358
    }
370
    }
359
}
371
}
360
 
372
 
361
#ifdef CONFIG_SMP
373
#ifdef CONFIG_SMP
-
 
374
static void
-
 
375
debug_ipi(int n __attribute__((unused)),
362
static void debug_ipi(int n __attribute__((unused)), istate_t *istate __attribute__((unused)))
376
    istate_t *istate __attribute__((unused)))
363
{
377
{
364
    int i;
378
    int i;
365
 
379
 
366
    spinlock_lock(&bkpoint_lock);
380
    spinlock_lock(&bkpoint_lock);
367
    for (i = 0; i < BKPOINTS_MAX; i++)
381
    for (i = 0; i < BKPOINTS_MAX; i++)
Line 394... Line 408...
394
    cmd_initialize(&addwatchp_info);
408
    cmd_initialize(&addwatchp_info);
395
    if (!cmd_register(&addwatchp_info))
409
    if (!cmd_register(&addwatchp_info))
396
        panic("could not register command %s\n", addwatchp_info.name);
410
        panic("could not register command %s\n", addwatchp_info.name);
397
#endif
411
#endif
398
   
412
   
399
    exc_register(VECTOR_DEBUG, "debugger",
413
    exc_register(VECTOR_DEBUG, "debugger", debug_exception);
400
             debug_exception);
-
 
401
#ifdef CONFIG_SMP
414
#ifdef CONFIG_SMP
402
    exc_register(VECTOR_DEBUG_IPI, "debugger_smp",
415
    exc_register(VECTOR_DEBUG_IPI, "debugger_smp", debug_ipi);
403
             debug_ipi);
-
 
404
#endif
416
#endif
405
}
417
}
406
 
418
 
407
/** @}
419
/** @}
408
 */
420
 */