audk/IntelFrameworkModulePkg/Csm/LegacyBiosDxe
Hao Wu aa5f60ae41 IntelFrameworkModulePkg: Refine casting expression result to bigger size
There are cases that the operands of an expression are all with rank less
than UINT64/INT64 and the result of the expression is explicitly cast to
UINT64/INT64 to fit the target size.

An example will be:
UINT32 a,b;
// a and b can be any unsigned int type with rank less than UINT64, like
// UINT8, UINT16, etc.
UINT64 c;
c = (UINT64) (a + b);

Some static code checkers may warn that the expression result might
overflow within the rank of "int" (integer promotions) and the result is
then cast to a bigger size.

The commit refines codes by the following rules:
1). When the expression is possible to overflow the range of unsigned int/
int:
c = (UINT64)a + b;

2). When the expression will not overflow within the rank of "int", remove
the explicit type casts:
c = a + b;

3). When the expression will be cast to pointer of possible greater size:
UINT32 a,b;
VOID *c;
c = (VOID *)(UINTN)(a + b); --> c = (VOID *)((UINTN)a + b);

4). When one side of a comparison expression contains only operands with
rank less than UINT32:
UINT8 a;
UINT16 b;
UINTN c;
if ((UINTN)(a + b) > c) {...} --> if (((UINT32)a + b) > c) {...}

For rule 4), if we remove the 'UINTN' type cast like:
if (a + b > c) {...}
The VS compiler will complain with warning C4018 (signed/unsigned
mismatch, level 3 warning) due to promoting 'a + b' to type 'int'.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Jeff Fan <jeff.fan@intel.com>
2017-03-06 14:33:22 +08:00
..
IA32 IntelFrameworkModulePkg LegacyBiosDxe: Convert Ia32/InterruptTable.asm to NASM 2016-06-28 09:52:20 +08:00
Ipf IntelFrameworkModulePkg: Fix typos in comments 2016-10-24 09:09:06 +08:00
X64 IntelFrameworkModulePkg LegacyBiosDxe: Convert X64/InterruptTable.asm to NASM 2016-06-28 09:52:20 +08:00
LegacyBbs.c When CSM uses EFI_SEGMENT and EFI_OFFSET to call CSM16 function, some CSM16 use es:[offset + 0xabcd] to get data passed from CSM32, offset + 0xabcd could exceed 0xFFFF which is invalid in real mode. So added NORMALIZE_EFI_SEGMENT and NORMALIZE_EFI_OFFSET to keep offset as small as possible to avoid this issue during CSM16 function call. 2012-03-01 11:16:42 +00:00
LegacyBda.c IntelFrameworkModulePkg: Add Compatibility Support Module (CSM) drivers 2011-06-27 23:32:56 +00:00
LegacyBios.c IntelFrameworkModulePkg: Refine casting expression result to bigger size 2017-03-06 14:33:22 +08:00
LegacyBiosDxe.inf IntelFrameworkModulePkg LegacyBiosDxe: Add nasm source file into INF file 2016-06-28 09:52:21 +08:00
LegacyBiosDxe.uni IntelFrameworkModulePkg: Convert all .uni files to utf-8 2015-12-15 04:52:33 +00:00
LegacyBiosDxeExtra.uni IntelFrameworkModulePkg: Convert all .uni files to utf-8 2015-12-15 04:52:33 +00:00
LegacyBiosInterface.h IntelFrameworkModulePkg: Fix typos in comments 2016-10-24 09:09:06 +08:00
LegacyBootSupport.c IntelFrameworkModulePkg: Refine casting expression result to bigger size 2017-03-06 14:33:22 +08:00
LegacyCmos.c IntelFrameworkModulePkg: Add Compatibility Support Module (CSM) drivers 2011-06-27 23:32:56 +00:00
LegacyIde.c Fix GCC44 build failure. 2012-11-21 03:03:32 +00:00
LegacyPci.c IntelFrameworkModulePkg: Refine type cast for pointer subtraction 2017-03-06 14:14:46 +08:00
LegacySio.c IntelFrameworkModulePkg/LegacyBios: Fix legacy serial redirection bug 2016-11-10 10:19:54 +08:00
Thunk.c CSM should firstly set timer to enable state at first, then RestoreTpl is called. 2011-10-21 08:45:07 +00:00