Mercurial > ecos
diff packages/hal/common/current/src/generic-stub.c @ 132:0ae0bc38e387 ecos-sw-2000-10-31
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
| author | jlarmour |
|---|---|
| date | Tue, 31 Oct 2000 20:53:09 +0000 |
| parents | eb9fd8c04db3 |
| children | a9ac27ec7abc |
line wrap: on
line diff
--- a/packages/hal/common/current/src/generic-stub.c +++ b/packages/hal/common/current/src/generic-stub.c @@ -992,8 +992,11 @@ int __process_packet (char *packet) { int is_binary = 0; +#if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE) + int is_Z = 0; +#endif + remcomOutBuffer[0] = 0; - switch (packet[0]) { case '?': @@ -1008,6 +1011,7 @@ int #ifdef __ECOS__ #if !defined(CYG_HAL_STARTUP_RAM) // Only for ROM based stubs +#if 0 // Disable to avoid conflict with stub-breakpoint z/Z-packets case 'z': /* report IO buffer sizes so download can achieve optimal download speed */ @@ -1017,6 +1021,7 @@ int remcomOutBuffer[i] = 0; break; } +#endif case 'd': /* toggle debug flag */ strcpy(remcomOutBuffer, "eCos GDB stubs" @@ -1304,6 +1309,79 @@ int __set_baud_rate (baudrate); break; } + +#if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE) && (CYGNUM_HAL_BREAKPOINT_LIST_SIZE > 0) + case 'Z': + is_Z = 1; + case 'z': + { + char *ptr = &packet[1]; + target_register_t ztype, addr, length; + int err; + + if (__hexToInt (&ptr, &ztype) && *(ptr++) == ',') + { + if (__hexToInt (&ptr, &addr)) + { + if (*(ptr++) == ',') + { + /* When there is a comma, there must be a length */ + if (!__hexToInt (&ptr, &length)) + { + strcpy (remcomOutBuffer, "E02"); + break; + } + } + else + length = 0; + + switch (ztype) + { + case 0: + /* sw breakpoint */ + if (is_Z) + err = __set_breakpoint(addr); + else + err = __remove_breakpoint(addr); + if (!err) + strcpy (remcomOutBuffer, "OK"); + else + strcpy (remcomOutBuffer, "E02"); + break; +#ifdef HAL_STUB_HW_BREAKPOINT + case 1: + /* hw breakpoint */ + if (!HAL_STUB_HW_BREAKPOINT(is_Z, (void *)addr, length)) + strcpy (remcomOutBuffer, "OK"); + else + strcpy (remcomOutBuffer, "E02"); + break; +#endif +#ifdef HAL_STUB_HW_WATCHPOINT + case 2: + case 3: + case 4: + { + /* hw watchpoint */ + if (!HAL_STUB_HW_WATCHPOINT(is_Z, (void *)addr, length, ztype)) + strcpy (remcomOutBuffer, "OK"); + else + strcpy (remcomOutBuffer, "E02"); + } + break; + + // FIXME !!Test only!! + case 5: + addr = (target_register_t)HAL_STUB_HW_STOPPED_DATA_ADDRESS(); + __mem2hex ((char *)&addr, remcomOutBuffer, sizeof(target_register_t), 0); + break; +#endif + } + } + } + break; + } +#endif // Z packet support default: __process_target_packet (packet, remcomOutBuffer, 300); break;
