/** @file\r
Root include file to support building OpenSSL Crypto Library.\r
\r
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/DebugLib.h>\r
\r
+#define OPENSSLDIR ""\r
+#define ENGINESDIR ""\r
+\r
+#define MAX_STRING_SIZE 0x1000\r
+\r
+//\r
+// OpenSSL relies on explicit configuration for word size in crypto/bn,\r
+// but we want it to be automatically inferred from the target. So we\r
+// bypass what's in <openssl/opensslconf.h> for OPENSSL_SYS_UEFI, and\r
+// define our own here.\r
+//\r
+#ifdef CONFIG_HEADER_BN_H\r
+#error CONFIG_HEADER_BN_H already defined\r
+#endif\r
+\r
+#define CONFIG_HEADER_BN_H\r
+\r
+#if defined(MDE_CPU_X64) || defined(MDE_CPU_AARCH64) || defined(MDE_CPU_IA64)\r
+//\r
+// With GCC we would normally use SIXTY_FOUR_BIT_LONG, but MSVC needs\r
+// SIXTY_FOUR_BIT, because 'long' is 32-bit and only 'long long' is\r
+// 64-bit. Since using 'long long' works fine on GCC too, just do that.\r
+//\r
+#define SIXTY_FOUR_BIT\r
+#elif defined(MDE_CPU_IA32) || defined(MDE_CPU_ARM) || defined(MDE_CPU_EBC)\r
+#define THIRTY_TWO_BIT\r
+#else\r
+#error Unknown target architecture\r
+#endif\r
+\r
//\r
// File operations are not required for building Open SSL, \r
// so FILE is mapped to VOID * to pass build\r
//\r
// Map all va_xxxx elements to VA_xxx defined in MdePkg/Include/Base.h\r
//\r
+#if !defined(__CC_ARM) // if va_list is not already defined\r
#define va_list VA_LIST\r
#define va_arg VA_ARG\r
#define va_start VA_START\r
#define va_end VA_END\r
+#else // __CC_ARM\r
+#define va_start(Marker, Parameter) __va_start(Marker, Parameter)\r
+#define va_arg(Marker, TYPE) __va_arg(Marker, TYPE)\r
+#define va_end(Marker) ((void)0)\r
+#endif\r
\r
//\r
-// #defines from EFI Application Toolkit required to buiild Open SSL\r
+// #defines from EFI Application Toolkit required to build Open SSL\r
//\r
#define ENOMEM 12 /* Cannot allocate memory */\r
#define EINVAL 22 /* Invalid argument */\r
#define LOG_DEBUG 7 /* debug-level messages */\r
#define LOG_PID 0x01 /* log the pid with each message */\r
#define LOG_CONS 0x02 /* log on the console if errors in sending */\r
+#define CHAR_BIT 8 /* Number of bits in a char */\r
\r
//\r
-// Macros from EFI Application Toolkit required to buiild Open SSL\r
+// Macros from EFI Application Toolkit required to build Open SSL\r
//\r
/* The offsetof() macro calculates the offset of a structure member\r
in its structure. Unfortunately this cannot be written down\r
portably, hence it is provided by a Standard C header file.\r
For pre-Standard C compilers, here is a version that usually works\r
(but watch out!): */\r
-#define offsetof(type, member) ( (int) & ((type*)0) -> member )\r
+#define offsetof(type, member) OFFSET_OF (type, member)\r
\r
//\r
-// Basic types from EFI Application Toolkit required to buiild Open SSL\r
+// Basic types from EFI Application Toolkit required to build Open SSL\r
//\r
typedef UINTN size_t;\r
typedef INTN ssize_t;\r
typedef int pid_t;\r
typedef void *DIR;\r
typedef void __sighandler_t (int);\r
+typedef UINT8 __uint8_t;\r
+typedef UINT8 sa_family_t;\r
\r
//\r
-// Structures from EFI Application Toolkit required to buiild Open SSL\r
+// Structures from EFI Application Toolkit required to build Open SSL\r
//\r
struct tm {\r
int tm_sec; /* seconds after the minute [0-60] */\r
char *tm_zone; /* timezone abbreviation */\r
};\r
\r
+struct timeval {\r
+ long tv_sec; /* time value, in seconds */\r
+ long tv_usec; /* time value, in microseconds */\r
+};\r
+\r
struct dirent {\r
UINT32 d_fileno; /* file number of entry */\r
UINT16 d_reclen; /* length of this record */\r
INT64 st_qspare[2];\r
};\r
\r
+struct sockaddr {\r
+ __uint8_t sa_len; /* total length */\r
+ sa_family_t sa_family; /* address family */\r
+ char sa_data[14]; /* actually longer; address value */\r
+};\r
+\r
//\r
-// Externs from EFI Application Toolkit required to buiild Open SSL\r
+// Externs from EFI Application Toolkit required to build Open SSL\r
//\r
extern int errno;\r
\r
//\r
-// Function prototypes from EFI Application Toolkit required to buiild Open SSL\r
+// Function prototypes from EFI Application Toolkit required to build Open SSL\r
//\r
void *malloc (size_t);\r
void *realloc (void *, size_t);\r
char *strrchr (const char *, int);\r
unsigned long strtoul (const char *, char **, int);\r
long strtol (const char *, char **, int);\r
+char *strerror (int);\r
+size_t strspn (const char *, const char *);\r
+size_t strcspn (const char *, const char *);\r
int printf (const char *, ...);\r
int sscanf (const char *, const char *, ...);\r
int open (const char *, int, ...);\r
__sighandler_t *signal (int, __sighandler_t *);\r
\r
//\r
-// Global variables from EFI Application Toolkit required to buiild Open SSL\r
+// Global variables from EFI Application Toolkit required to build Open SSL\r
//\r
-FILE *stderr;\r
-FILE *stdin;\r
-FILE *stdout;\r
+extern FILE *stderr;\r
+extern FILE *stdin;\r
+extern FILE *stdout;\r
\r
//\r
// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions\r
#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)\r
#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))\r
#define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count))\r
-#define strcmp AsciiStrCmp\r
#define strncmp(string1,string2,count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count)))\r
-#define strcpy(strDest,strSource) AsciiStrCpy(strDest,strSource)\r
-#define strncpy(strDest,strSource,count) AsciiStrnCpy(strDest,strSource,(UINTN)count)\r
-#define strlen(str) (size_t)(AsciiStrLen(str))\r
-#define strcat(strDest,strSource) AsciiStrCat(strDest,strSource)\r
+#define strcpy(strDest,strSource) AsciiStrCpyS(strDest,MAX_STRING_SIZE,strSource)\r
+#define strncpy(strDest,strSource,count) AsciiStrnCpyS(strDest,MAX_STRING_SIZE,strSource,(UINTN)count)\r
+#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE))\r
+#define strcat(strDest,strSource) AsciiStrCatS(strDest,MAX_STRING_SIZE,strSource)\r
#define strchr(str,ch) ScanMem8((VOID *)(str),AsciiStrSize(str),(UINT8)ch)\r
#define abort() ASSERT (FALSE)\r
#define assert(expression)\r
#define localtime(timer) NULL\r
-#define gmtime(timer) NULL\r
#define gmtime_r(timer,result) (result = NULL)\r
+#define atoi(nptr) AsciiStrDecimalToUintn(nptr)\r
+#define gettimeofday(tvp,tz) do { (tvp)->tv_sec = time(NULL); (tvp)->tv_usec = 0; } while (0)\r
\r
#endif\r