Make code compatible with newlib-nano and use it for stlink

With gcc-arm-none-eabi-4_7-2013q1-20130313 and -O2 I get
   text    data     bss     dec     hex filename
  45744     304    2376   48424    bd28 blackmagic

With -Os the results are even more impressive:
   text    data     bss     dec     hex filename
  37900     304    2376   40580    9e84 blackmagic

Since -Os might lower the debugging speed, do not enable it yet in the
absence of real measurements.

Signed-off-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
Paul Fertser 2013-04-14 21:56:17 +04:00 committed by Gareth McMullin
parent 91b481731d
commit 9c95f039cf
2 changed files with 10 additions and 10 deletions

View File

@ -94,7 +94,7 @@ gdb_main(void)
case 'm': { /* 'm addr,len': Read len bytes from addr */ case 'm': { /* 'm addr,len': Read len bytes from addr */
uint32_t addr, len; uint32_t addr, len;
ERROR_IF_NO_TARGET(); ERROR_IF_NO_TARGET();
sscanf(pbuf, "m%08lX,%08lX", &addr, &len); sscanf(pbuf, "m%08lx,%08lx", &addr, &len);
DEBUG("m packet: addr = %08lX, len = %08lX\n", addr, len); DEBUG("m packet: addr = %08lX, len = %08lX\n", addr, len);
uint8_t mem[len]; uint8_t mem[len];
if(((addr & 3) == 0) && ((len & 3) == 0)) if(((addr & 3) == 0) && ((len & 3) == 0))
@ -119,7 +119,7 @@ gdb_main(void)
uint32_t addr, len; uint32_t addr, len;
int hex; int hex;
ERROR_IF_NO_TARGET(); ERROR_IF_NO_TARGET();
sscanf(pbuf, "M%08lX,%08lX:%n", &addr, &len, &hex); sscanf(pbuf, "M%08lx,%08lx:%n", &addr, &len, &hex);
DEBUG("M packet: addr = %08lX, len = %08lX\n", addr, len); DEBUG("M packet: addr = %08lX, len = %08lX\n", addr, len);
uint8_t mem[len]; uint8_t mem[len];
unhexify(mem, pbuf + hex, len); unhexify(mem, pbuf + hex, len);
@ -218,7 +218,7 @@ gdb_main(void)
uint32_t addr, len; uint32_t addr, len;
int bin; int bin;
ERROR_IF_NO_TARGET(); ERROR_IF_NO_TARGET();
sscanf(pbuf, "X%08lX,%08lX:%n", &addr, &len, &bin); sscanf(pbuf, "X%08lx,%08lx:%n", &addr, &len, &bin);
DEBUG("X packet: addr = %08lX, len = %08lX\n", addr, len); DEBUG("X packet: addr = %08lX, len = %08lX\n", addr, len);
if(((addr & 3) == 0) && ((len & 3) == 0)) if(((addr & 3) == 0) && ((len & 3) == 0))
target_mem_write_words(cur_target, addr, (void*)pbuf+bin, len); target_mem_write_words(cur_target, addr, (void*)pbuf+bin, len);
@ -258,7 +258,7 @@ handle_q_string_reply(const char *str, const char *param)
{ {
unsigned long addr, len; unsigned long addr, len;
if (sscanf(param, "%08lX,%08lX", &addr, &len) != 2) { if (sscanf(param, "%08lx,%08lx", &addr, &len) != 2) {
gdb_putpacketz("E01"); gdb_putpacketz("E01");
return; return;
} }
@ -328,7 +328,7 @@ handle_q_packet(char *packet, int len)
return; return;
} }
handle_q_string_reply(cur_target->tdesc, packet + 31); handle_q_string_reply(cur_target->tdesc, packet + 31);
} else if (sscanf(packet, "qCRC:%08lX,%08lX", &addr, &alen) == 2) { } else if (sscanf(packet, "qCRC:%08lx,%08lx", &addr, &alen) == 2) {
if(!cur_target) { if(!cur_target) {
gdb_putpacketz("E01"); gdb_putpacketz("E01");
return; return;
@ -348,7 +348,7 @@ handle_v_packet(char *packet, int plen)
int bin; int bin;
static uint8_t flash_mode = 0; static uint8_t flash_mode = 0;
if (sscanf(packet, "vAttach;%08lX", &addr) == 1) { if (sscanf(packet, "vAttach;%08lx", &addr) == 1) {
/* Attach to remote target processor */ /* Attach to remote target processor */
target *t; target *t;
uint32_t i; uint32_t i;
@ -375,7 +375,7 @@ handle_v_packet(char *packet, int plen)
gdb_putpacketz("T05"); gdb_putpacketz("T05");
} else gdb_putpacketz("E01"); } else gdb_putpacketz("E01");
} else if (sscanf(packet, "vFlashErase:%08lX,%08lX", &addr, &len) == 2) { } else if (sscanf(packet, "vFlashErase:%08lx,%08lx", &addr, &len) == 2) {
/* Erase Flash Memory */ /* Erase Flash Memory */
DEBUG("Flash Erase %08lX %08lX\n", addr, len); DEBUG("Flash Erase %08lX %08lX\n", addr, len);
if(!cur_target) { gdb_putpacketz("EFF"); return; } if(!cur_target) { gdb_putpacketz("EFF"); return; }
@ -391,7 +391,7 @@ handle_v_packet(char *packet, int plen)
else else
gdb_putpacketz("EFF"); gdb_putpacketz("EFF");
} else if (sscanf(packet, "vFlashWrite:%08lX:%n", &addr, &bin) == 1) { } else if (sscanf(packet, "vFlashWrite:%08lx:%n", &addr, &bin) == 1) {
/* Write Flash Memory */ /* Write Flash Memory */
len = plen - bin; len = plen - bin;
DEBUG("Flash Write %08lX %08lX\n", addr, len); DEBUG("Flash Write %08lX %08lX\n", addr, len);
@ -425,7 +425,7 @@ handle_z_packet(char *packet, int plen)
* with real sscanf() though... */ * with real sscanf() though... */
//sscanf(packet, "%*[zZ]%hhd,%08lX,%hhd", &type, &addr, &len); //sscanf(packet, "%*[zZ]%hhd,%08lX,%hhd", &type, &addr, &len);
type = packet[1] - '0'; type = packet[1] - '0';
sscanf(packet + 2, ",%08lX,%d", &addr, &len); sscanf(packet + 2, ",%08lx,%d", &addr, &len);
switch(type) { switch(type) {
case 1: /* Hardware breakpoint */ case 1: /* Hardware breakpoint */
if(!cur_target->set_hw_bp) { /* Not supported */ if(!cur_target->set_hw_bp) { /* Not supported */

View File

@ -5,7 +5,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy
CFLAGS += -mcpu=cortex-m3 -mthumb \ CFLAGS += -mcpu=cortex-m3 -mthumb \
-DSTM32F1 -DDISCOVERY_STLINK -I../libopencm3/include \ -DSTM32F1 -DDISCOVERY_STLINK -I../libopencm3/include \
-I platforms/stm32 -I platforms/stm32
LDFLAGS_BOOT = -lopencm3_stm32f1 -Wl,--defsym,_stack=0x20005000 \ LDFLAGS_BOOT = --specs=nano.specs -lopencm3_stm32f1 -Wl,--defsym,_stack=0x20005000 \
-Wl,-T,platforms/stm32/stlink.ld -nostartfiles -lc -lnosys \ -Wl,-T,platforms/stm32/stlink.ld -nostartfiles -lc -lnosys \
-Wl,-Map=mapfile -mthumb -mcpu=cortex-m3 -Wl,-gc-sections \ -Wl,-Map=mapfile -mthumb -mcpu=cortex-m3 -Wl,-gc-sections \
-L../libopencm3/lib -L../libopencm3/lib