Add ASSERT() for BitField operations to make sure the input value is valid.
Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Kinney, Michael D <Michael.D.Kinney@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14019 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
Bit field functions of BaseLib.
|
||||
|
||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
@@ -49,6 +49,8 @@ InternalBaseLibBitFieldReadUint (
|
||||
in Operand and the value specified by AndData. All other bits in Operand are
|
||||
preserved. The new value is returned.
|
||||
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@param EndBit The ordinal of the most significant bit in the bit field.
|
||||
@@ -66,6 +68,11 @@ InternalBaseLibBitFieldOrUint (
|
||||
IN UINTN OrData
|
||||
)
|
||||
{
|
||||
//
|
||||
// Higher bits in OrData those are not used must be zero.
|
||||
//
|
||||
ASSERT ((OrData >> (EndBit - StartBit + 1)) == 0);
|
||||
|
||||
//
|
||||
// ~((UINTN)-2 << EndBit) is a mask in which bit[0] thru bit[EndBit]
|
||||
// are 1's while bit[EndBit + 1] thru the most significant bit are 0's.
|
||||
@@ -81,6 +88,8 @@ InternalBaseLibBitFieldOrUint (
|
||||
in Operand and the value specified by AndData. All other bits in Operand are
|
||||
preserved. The new value is returned.
|
||||
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@param EndBit The ordinal of the most significant bit in the bit field.
|
||||
@@ -98,6 +107,11 @@ InternalBaseLibBitFieldAndUint (
|
||||
IN UINTN AndData
|
||||
)
|
||||
{
|
||||
//
|
||||
// Higher bits in AndData those are not used must be zero.
|
||||
//
|
||||
ASSERT ((AndData >> (EndBit - StartBit + 1)) == 0);
|
||||
|
||||
//
|
||||
// ~((UINTN)-2 << EndBit) is a mask in which bit[0] thru bit[EndBit]
|
||||
// are 1's while bit[EndBit + 1] thru the most significant bit are 0's.
|
||||
@@ -148,6 +162,7 @@ BitFieldRead8 (
|
||||
If StartBit is greater than 7, then ASSERT().
|
||||
If EndBit is greater than 7, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -185,6 +200,7 @@ BitFieldWrite8 (
|
||||
If StartBit is greater than 7, then ASSERT().
|
||||
If EndBit is greater than 7, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -222,6 +238,7 @@ BitFieldOr8 (
|
||||
If StartBit is greater than 7, then ASSERT().
|
||||
If EndBit is greater than 7, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -260,6 +277,8 @@ BitFieldAnd8 (
|
||||
If StartBit is greater than 7, then ASSERT().
|
||||
If EndBit is greater than 7, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -335,6 +354,7 @@ BitFieldRead16 (
|
||||
If StartBit is greater than 15, then ASSERT().
|
||||
If EndBit is greater than 15, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -372,6 +392,7 @@ BitFieldWrite16 (
|
||||
If StartBit is greater than 15, then ASSERT().
|
||||
If EndBit is greater than 15, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -409,6 +430,7 @@ BitFieldOr16 (
|
||||
If StartBit is greater than 15, then ASSERT().
|
||||
If EndBit is greater than 15, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -447,6 +469,8 @@ BitFieldAnd16 (
|
||||
If StartBit is greater than 15, then ASSERT().
|
||||
If EndBit is greater than 15, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -522,6 +546,7 @@ BitFieldRead32 (
|
||||
If StartBit is greater than 31, then ASSERT().
|
||||
If EndBit is greater than 31, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -559,6 +584,7 @@ BitFieldWrite32 (
|
||||
If StartBit is greater than 31, then ASSERT().
|
||||
If EndBit is greater than 31, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -596,6 +622,7 @@ BitFieldOr32 (
|
||||
If StartBit is greater than 31, then ASSERT().
|
||||
If EndBit is greater than 31, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -634,6 +661,8 @@ BitFieldAnd32 (
|
||||
If StartBit is greater than 31, then ASSERT().
|
||||
If EndBit is greater than 31, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -709,6 +738,7 @@ BitFieldRead64 (
|
||||
If StartBit is greater than 63, then ASSERT().
|
||||
If EndBit is greater than 63, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -746,6 +776,7 @@ BitFieldWrite64 (
|
||||
If StartBit is greater than 63, then ASSERT().
|
||||
If EndBit is greater than 63, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -771,6 +802,7 @@ BitFieldOr64 (
|
||||
|
||||
ASSERT (EndBit < 64);
|
||||
ASSERT (StartBit <= EndBit);
|
||||
ASSERT (RShiftU64 (OrData, EndBit - StartBit + 1) == 0);
|
||||
|
||||
Value1 = LShiftU64 (OrData, StartBit);
|
||||
Value2 = LShiftU64 ((UINT64) - 2, EndBit);
|
||||
@@ -790,6 +822,7 @@ BitFieldOr64 (
|
||||
If StartBit is greater than 63, then ASSERT().
|
||||
If EndBit is greater than 63, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
@@ -815,6 +848,7 @@ BitFieldAnd64 (
|
||||
|
||||
ASSERT (EndBit < 64);
|
||||
ASSERT (StartBit <= EndBit);
|
||||
ASSERT (RShiftU64 (AndData, EndBit - StartBit + 1) == 0);
|
||||
|
||||
Value1 = LShiftU64 (~AndData, StartBit);
|
||||
Value2 = LShiftU64 ((UINT64)-2, EndBit);
|
||||
@@ -835,6 +869,8 @@ BitFieldAnd64 (
|
||||
If StartBit is greater than 63, then ASSERT().
|
||||
If EndBit is greater than 63, then ASSERT().
|
||||
If EndBit is less than StartBit, then ASSERT().
|
||||
If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
|
||||
|
||||
@param Operand Operand on which to perform the bitfield operation.
|
||||
@param StartBit The ordinal of the least significant bit in the bit field.
|
||||
|
Reference in New Issue
Block a user