summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c')
-rw-r--r--EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c b/EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c
new file mode 100644
index 0000000000..32f1c33b8c
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Tools/Source/VcCheck/VcCheck.c
@@ -0,0 +1,121 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ VcCheck.c
+
+Abstract:
+
+ We have found problems with the Visual C++ SP4 and the /O1 flag.
+ If this tests ask a question you have the wrong version of Visual C++
+ on your system
+
+ This test assumes the tools are being compiled with the same complier
+ as the Tiano code.
+
+ Please see $(EFI_SOURCE)\EFI2.0 Developer's Manual.doc to get the
+ correct version of Visual C++
+
+--*/
+
+#include <stdio.h>
+
+_int16 gGloba16;
+
+int
+CheckLostCode (
+ int Value
+ )
+/*++
+
+Routine Description:
+ This routine is used to test for compiler isseus with /O1.
+ If the /O1 compiler option, and C2.dll is got from Visual C++ SP5
+ (version: 6.00.8168.0), the assember codes after default branch will be
+ losted. (Execute "cl Visual Ccheck.c /O1 /FAsc" to get detail information)
+
+Arguments:
+ Value - Test case
+
+Returns:
+ Test to see if comiler error is present.
+
+--*/
+{
+ switch (Value) {
+ case 0:
+ break;
+
+ default:
+ _asm
+ {
+ mov bx, 1
+ mov gGloba16, bx
+ }
+
+ return 1;
+ }
+
+ _asm
+ {
+ mov bx, 0
+ mov gGloba16, bx
+ }
+
+ return 0;
+}
+
+int
+main (
+ void
+ )
+/*++
+
+Routine Description:
+ This utility is checking for a known Visual C++ compiler issues. To remove this
+ question from the build follow the steps in the developers manual.
+
+Arguments:
+ NONE
+
+Returns:
+ 0 - Compiler version is O.K.
+ 1 - Compiler version is Bad
+
+--*/
+{
+ int result;
+ char select;
+
+ gGloba16 = 0xFF;
+ result = 0;
+
+ CheckLostCode (0);
+ result += (gGloba16 == 0) ? 0 : 1;
+
+ CheckLostCode (1);
+ result += (gGloba16 == 1) ? 0 : 1;
+
+ if (result != 0) {
+ printf ("Warning: C2.dll is incorrect.\n Please see $(EFI_SOURCE)\\EFI2.0 Developer's Manual.doc for corrective action.\n");
+ printf ("Would you want to continue?(Y/N)");
+
+ scanf ("%c", &select);
+ if ((select == 'Y') || (select == 'y')) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ return 0;
+}