Align loader to 32-bit boundary
[fw/stlink] / src / stlink-common.c
index 3a6e260d1706c194641e36daf4516d671d75037f..533e670c6969dfa130039ab9117eab2a6dfe4999 100644 (file)
@@ -481,6 +481,8 @@ static inline void write_flash_cr_bker_pnb(stlink_t *sl, uint32_t n) {
 
 void stlink_close(stlink_t *sl) {
     DLOG("*** stlink_close ***\n");
+    if (!sl)
+         return;
     sl->backend->close(sl);
     free(sl);
 }
@@ -1523,7 +1525,7 @@ int write_loader_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t* size) {
 
         0x00, 0x2a,
         0xf8, 0xd3,
-        0x00, 0xbe
+        0x00, 0xbe,
     };
 
     static const uint8_t loader_code_stm32l0[] = {
@@ -1545,7 +1547,7 @@ int write_loader_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t* size) {
 
         0x00, 0x2a,
         0xf8, 0xd3,
-        0x00, 0xbe
+        0x00, 0xbe,
     };
 
     static const uint8_t loader_code_stm32f4[] = {
@@ -1677,6 +1679,10 @@ int write_loader_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t* size) {
     }
 
     memcpy(sl->q_buf, loader_code, loader_size);
+
+    /* pad to 32-bits */
+    loader_size = (loader_size + 3) & ~3;
+
     stlink_write_mem32(sl, sl->sram_base, loader_size);
 
     *addr = sl->sram_base;