Fix gcc 10 link issues
authorpwpiwi <micki.held@gmx.de>
Thu, 28 Jan 2021 08:00:08 +0000 (09:00 +0100)
committerpwpiwi <micki.held@gmx.de>
Thu, 28 Jan 2021 08:00:08 +0000 (09:00 +0100)
- avoid linker error by providing string.[ch] in bootrom

armsrc/i2c.c
armsrc/mifaresim.c
armsrc/string.h
bootrom/Makefile
bootrom/string.c [new file with mode: 0644]
bootrom/string.h [new file with mode: 0644]

index 3d16b42cea10783cfc27fb7b9b646ffdf58f0a70..a17dd162e5287f45704b43846c04c42123a818aa 100644 (file)
@@ -19,6 +19,8 @@
 #include "BigBuf.h"
 #include "apps.h"
 #include "usb_cdc.h"
+#include "util.h"
+
 
 #ifdef WITH_SMARTCARD
 #include "smartcard.h"
index b63160c945c3211265fcd7120e93753236894d5e..abf800ce30ec0cf6563c8d79fb0a86d0d2b0f49b 100644 (file)
@@ -22,6 +22,8 @@
 #include "usb_cdc.h"
 #include "protocols.h"
 #include "apps.h"
+#include "util.h"
+
 
 //mifare emulator states
 #define MFEMUL_NOFIELD           0
index dd90c7bc5f6c7c8da3470e06cdd9db0aa6717513..87058391f579f8dca8ffc96467cb2b8bf17c8b6c 100644 (file)
 #ifndef __STRING_H
 #define __STRING_H
 
-#include <stdint.h>
-#include "util.h"
+#include <stddef.h>
 
-RAMFUNC void *memcpy(void *dest, const void *src, size_t len);
+void *memcpy(void *dest, const void *src, size_t len);
 void *memset(void *dest, int c, size_t len);
 void *memmove(void *dest, const void *src, size_t len);
-RAMFUNC int memcmp(const void *av, const void *bv, size_t len);
+int memcmp(const void *av, const void *bv, size_t len);
 size_t strlen(const char *str);
 char *strncat(char *dest, const char *src, size_t n);
 char *strcat(char *dest, const char *src);
index b1e2e6cd14a7b00125777156c4ec0deb59c514d4..a2cd1b404225ca676eb9d4ea6fb6b322b1416690 100644 (file)
@@ -7,7 +7,7 @@
 #-----------------------------------------------------------------------------
 
 # DO NOT use thumb mode in the phase 1 bootloader since that generates a section with glue code
-ARMSRC = 
+ARMSRC = string.c
 THUMBSRC = usb_cdc.c bootrom.c
 ASMSRC = ram-reset.s flash-reset.s
 VERSIONSRC = version.c
@@ -19,7 +19,6 @@ VERSIONSRC = version.c
 # ARMSRC := $(ARMSRC) $(THUMBSRC)
 # THUMBSRC := 
 
-# stdint.h provided locally until GCC 4.5 becomes C99 compliant
 APP_CFLAGS = -I.
 
 # version.c should be remade on every compilation
diff --git a/bootrom/string.c b/bootrom/string.c
new file mode 100644 (file)
index 0000000..b2710d0
--- /dev/null
@@ -0,0 +1,104 @@
+//-----------------------------------------------------------------------------
+// Jonathan Westhues, Sept 2005
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Common string.h functions
+//-----------------------------------------------------------------------------
+
+#include "string.h"
+#include <stdint.h>
+
+void *memcpy(void *dest, const void *src, size_t len) {
+       uint8_t *d = dest;
+       const uint8_t *s = src;
+       while((len--) > 0) {
+               *d = *s;
+               d++;
+               s++;
+       }
+       return dest;
+}
+
+
+void *memset(void *dest, int c, size_t len) {
+       uint8_t *d = dest;
+       while((len--) > 0) {
+               *d = c;
+               d++;
+       }
+       return dest;
+}
+
+
+void *memmove(void *dest, const void *src, size_t len) {
+       uint8_t *d = dest;
+       const uint8_t *s = src;
+       if (dest <= src) {
+               while((len--) > 0) {
+                       *d = *s;
+                       d++;
+                       s++;
+               } 
+       } else {
+               d = d + len - 1;
+               s = s + len - 1;
+               while((len--) > 0) {
+                       *d = *s;
+                       d--;
+                       s--;
+               }
+       }
+       return dest;
+}
+
+
+int memcmp(const void *av, const void *bv, size_t len) {
+       const uint8_t *a = av;
+       const uint8_t *b = bv;
+
+       while((len--) > 0) {
+               if(*a != *b) {
+                       return *a - *b;
+               }
+               a++;
+               b++;
+       }
+       return 0;
+}
+
+
+size_t strlen(const char *str) {
+       int l = 0;
+       while(*str) {
+               l++;
+               str++;
+       }
+       return l;
+}
+
+
+char* strncat(char *dest, const char *src, size_t n) {
+       unsigned int dest_len = strlen(dest);
+       unsigned int i;
+
+       for (i = 0 ; i < n && src[i] != '\0' ; i++)
+               dest[dest_len + i] = src[i];
+       dest[dest_len + i] = '\0';
+
+       return dest;
+}
+
+
+char* strcat(char *dest, const char *src) {
+       unsigned int dest_len = strlen(dest);
+       unsigned int i;
+
+       for (i = 0 ; src[i] != '\0' ; i++)
+               dest[dest_len + i] = src[i];
+       dest[dest_len + i] = '\0';
+
+       return dest;
+}
diff --git a/bootrom/string.h b/bootrom/string.h
new file mode 100644 (file)
index 0000000..8705839
--- /dev/null
@@ -0,0 +1,25 @@
+//-----------------------------------------------------------------------------
+// Jonathan Westhues, Aug 2005
+// Copyright (C) 2010 Hector Martin "marcan" <marcan@marcansoft.com>
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Common string.h functions
+//-----------------------------------------------------------------------------
+
+#ifndef __STRING_H
+#define __STRING_H
+
+#include <stddef.h>
+
+void *memcpy(void *dest, const void *src, size_t len);
+void *memset(void *dest, int c, size_t len);
+void *memmove(void *dest, const void *src, size_t len);
+int memcmp(const void *av, const void *bv, size_t len);
+size_t strlen(const char *str);
+char *strncat(char *dest, const char *src, size_t n);
+char *strcat(char *dest, const char *src);
+
+#endif /* __STRING_H */
Impressum, Datenschutz