浏览代码

Move memcpy/memset definition to global init.c

Following up on previous patch, I think we should move
memcpy/memset definitions to the global init.c, since MSVC does
also inserts calls to memset/memcpy for the x86_32 platform,
even when disabling standard libraries and intrinsics.

All in all, it looks like, for all platforms, we should assume
that a compiler may still insert these calls regardless.

Signed-off-by: Pete Batard <pete@akeo.ie>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
Nigel Croxon 7 年之前
父节点
当前提交
b1d426ce67
共有 4 个文件被更改,包括 40 次插入94 次删除
  1. 0 29
      lib/aarch64/initplat.c
  2. 2 31
      lib/arm/initplat.c
  3. 38 9
      lib/init.c
  4. 0 25
      lib/mips64el/initplat.c

+ 0 - 29
lib/aarch64/initplat.c

@@ -24,32 +24,3 @@ InitializeLibPlatform (
     )
 {
 }
-
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ UINTN
-#endif
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
-    unsigned char *p = s;
-
-    while (n--)
-        *p++ = c;
-
-    return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
-    const unsigned char *q = src;
-    unsigned char *p = dest;
-
-    while (n--)
-        *p++ = *q++;
-
-    return dest;
-}

+ 2 - 31
lib/arm/initplat.c

@@ -25,39 +25,10 @@ InitializeLibPlatform (
 {
 }
 
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ UINTN
-#endif
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
-    unsigned char *p = s;
-
-    while (n--)
-        *p++ = c;
-
-    return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
-    unsigned char *p = dest;
-    unsigned char const *q = src;
-
-    while (n--)
-        *p++ = *q++;
-
-    return dest;
-}
-
 #ifdef __GNUC__
 void __div0(void)
 {
-	// TODO handle divide by zero fault
-	while (1);
+    // TODO handle divide by zero fault
+    while (1);
 }
 #endif

+ 38 - 9
lib/init.c

@@ -49,7 +49,7 @@ Returns:
     if (!LibInitialized) {
         LibInitialized = TRUE;
         LibFwInstance = FALSE;
-	LibImageHandle = ImageHandle;
+        LibImageHandle = ImageHandle;
 
 
         //
@@ -71,17 +71,16 @@ Returns:
 
         if (ImageHandle) {
             Status = uefi_call_wrapper(
-			    BS->HandleProtocol,
-				3,
-                            ImageHandle, 
-                            &LoadedImageProtocol,
-                            (VOID*)&LoadedImage
-                            );
+                BS->HandleProtocol,
+                3,
+                ImageHandle, 
+                &LoadedImageProtocol,
+                (VOID*)&LoadedImage
+            );
 
             if (!EFI_ERROR(Status)) {
                 PoolAllocationType = LoadedImage->ImageDataType;
             }
-            
             EFIDebugVariable ();
         }
 
@@ -181,5 +180,35 @@ EFIDebugVariable (
     Status = uefi_call_wrapper(RT->GetVariable, 5, L"EFIDebug", &EfiGlobalVariable, &Attributes, &DataSize, &NewEFIDebug);
     if (!EFI_ERROR(Status)) {
         EFIDebug = NewEFIDebug;
-    } 
+    }
+}
+
+/*
+ * Calls to memset/memcpy may be emitted implicitly by GCC or MSVC
+ * even when -ffreestanding or /NODEFAULTLIB are in effect.
+ */
+
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ UINTN
+#endif
+
+void *memset(void *s, int c, __SIZE_TYPE__ n)
+{
+    unsigned char *p = s;
+
+    while (n--)
+        *p++ = c;
+
+    return s;
+}
+
+void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
+{
+    const unsigned char *q = src;
+    unsigned char *p = dest;
+
+    while (n--)
+        *p++ = *q++;
+
+    return dest;
 }

+ 0 - 25
lib/mips64el/initplat.c

@@ -24,28 +24,3 @@ InitializeLibPlatform (
     )
 {
 }
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
-    unsigned char *p = s;
-
-    while (n--)
-        *p++ = c;
-
-    return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
-    const unsigned char *q = src;
-    unsigned char *p = dest;
-
-    while (n--)
-        *p++ = *q++;
-
-    return dest;
-}