platform: Fix compile error caused by standard includes

Avoid using standard includes namely stdint.h, string.h, stdlib.h, etc.

All standard include except stddef.h give compilation error due
to differences in RISC-V toolchain configuration. Typically, the
compilation error is related to "gnu-stubs-lp64.h".

This patch fixes compile error caused by standard includes by
providing substitutes of definetions provided by standard includes
wherever required.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
Anup Patel
2019-01-18 10:28:58 +05:30
committed by Anup Patel
parent e0686ca844
commit ebfe231256
5 changed files with 60 additions and 15 deletions

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2018 Western Digital Corporation or its affiliates.
*
* Authors:
* Atish Patra <atish.patra@wdc.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#ifndef __STRING_H__
#define __STRING_H__
#include <sbi/sbi_types.h>
int strcmp(const char *a, const char *b);
size_t strlen(const char *str);
size_t strnlen(const char *str, size_t count);
char *strcpy(char *dest,const char *src);
char *strncpy(char *dest, const char *src, size_t count);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
void *memset(void *s,int c,size_t count);
void *memcpy(void *dest, const void *src, size_t count);
void *memmove(void *dest,const void *src, size_t count);
int memcmp(const void *s1,const void *s2, size_t count);
void *memchr(const void *s, int c, size_t count);
#endif

View File

@@ -10,9 +10,9 @@
#include <sbi/riscv_io.h> #include <sbi/riscv_io.h>
#include <sbi/riscv_encoding.h> #include <sbi/riscv_encoding.h>
#include <sbi/sbi_console.h> #include <sbi/sbi_console.h>
#include <plat/string.h>
#include <plat/tinyfdt.h> #include <plat/tinyfdt.h>
#include <plat/irqchip/plic.h> #include <plat/irqchip/plic.h>
#include <string.h>
#define PLIC_PRIORITY_BASE 0x0 #define PLIC_PRIORITY_BASE 0x0
#define PLIC_PENDING_BASE 0x1000 #define PLIC_PENDING_BASE 0x1000

View File

@@ -12,12 +12,13 @@
* bugs as well. Use any optimized routines from newlib or glibc if required. * bugs as well. Use any optimized routines from newlib or glibc if required.
*/ */
#include <string.h> #include <plat/string.h>
int strcmp(const char *a, const char *b) int strcmp(const char *a, const char *b)
{ {
/* search first diff or end of string */ /* search first diff or end of string */
for (; *a == *b && *a != '\0'; a++, b++); for (; *a == *b && *a != '\0'; a++, b++);
return *a - *b; return *a - *b;
} }
@@ -46,7 +47,7 @@ size_t strnlen(const char *str, size_t count)
return ret; return ret;
} }
char * strcpy(char * dest,const char *src) char *strcpy(char *dest, const char *src)
{ {
char *ret = dest; char *ret = dest;
@@ -57,7 +58,7 @@ char * strcpy(char * dest,const char *src)
return ret; return ret;
} }
char * strncpy(char * dest,const char *src,size_t count) char *strncpy(char *dest, const char *src, size_t count)
{ {
char *ret = dest; char *ret = dest;
@@ -68,7 +69,7 @@ char * strncpy(char * dest,const char *src,size_t count)
return ret; return ret;
} }
char * strchr(const char * s, int c) char *strchr(const char *s, int c)
{ {
while(*s != '\0' && *s != (char)c) while(*s != '\0' && *s != (char)c)
s++; s++;
@@ -79,7 +80,7 @@ char * strchr(const char * s, int c)
return (char *)s; return (char *)s;
} }
char * strrchr(const char * s, int c) char *strrchr(const char *s, int c)
{ {
const char *last = s + strlen(s); const char *last = s + strlen(s);
@@ -91,7 +92,7 @@ char * strrchr(const char * s, int c)
else else
return (char *)last; return (char *)last;
} }
void * memset(void * s,int c,size_t count) void *memset(void *s, int c, size_t count)
{ {
char *temp = s; char *temp = s;
@@ -103,7 +104,7 @@ void * memset(void * s,int c,size_t count)
return s; return s;
} }
void * memcpy(void *dest, const void *src, size_t count) void *memcpy(void *dest, const void *src, size_t count)
{ {
char *temp1 = dest; char *temp1 = dest;
const char *temp2 = src; const char *temp2 = src;
@@ -116,7 +117,7 @@ void * memcpy(void *dest, const void *src, size_t count)
return dest; return dest;
} }
void * memmove(void * dest,const void *src,size_t count) void *memmove(void *dest, const void *src, size_t count)
{ {
char *temp1 = (char *)dest; char *temp1 = (char *)dest;
const char *temp2 = (char *)src; const char *temp2 = (char *)src;
@@ -138,13 +139,15 @@ void * memmove(void * dest,const void *src,size_t count)
count--; count--;
} }
} }
return dest; return dest;
} }
int memcmp(const void * s1,const void * s2,size_t count) int memcmp(const void *s1, const void *s2, size_t count)
{ {
const char *temp1 = s1; const char *temp1 = s1;
const char *temp2 = s2; const char *temp2 = s2;
for (; count > 0 && (*temp1 == *temp2); count--) { for (; count > 0 && (*temp1 == *temp2); count--) {
temp1++; temp1++;
temp2++; temp2++;
@@ -166,5 +169,6 @@ void *memchr(const void *s, int c, size_t count)
} }
count--; count--;
} }
return NULL; return NULL;
} }

View File

@@ -52,11 +52,13 @@
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <sbi/sbi_types.h>
#include <plat/string.h>
#define INT_MAX ((int)(~0U >> 1))
#define UINT_MAX ((unsigned int)~0U)
#include <stddef.h> #include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#ifdef __CHECKER__ #ifdef __CHECKER__
#define FDT_FORCE __attribute__((force)) #define FDT_FORCE __attribute__((force))

View File

@@ -7,8 +7,8 @@
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
#include <plat/string.h>
#include <plat/tinyfdt.h> #include <plat/tinyfdt.h>
#include <string.h>
#define FDT_MAGIC 0xd00dfeed #define FDT_MAGIC 0xd00dfeed
#define FDT_VERSION 17 #define FDT_VERSION 17