audk/MdePkg/Library
Ard Biesheuvel b331b99fae MdePkg/BaseLib: do not rely on undefined behavior in arithmetic shift
The runtime test whether the compiler supports arithmetic shift of
negative signed numbers currently relies on undefined behavior in C,
which means that all bets are off regarding whether the condition
that follows passes or fails, regardless of whether the compiler in
fact supports arithmetic shift or not.

Relevant quote from ISO C99 (6.5.7/4)

  The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits
  are filled with zeros. If E1 has an unsigned type, the value of the result
  is E1 × 2^E2, reduced modulo one more than the maximum value representable
  in the result type. If E1 has a signed type and nonnegative value, and
  E1 × 2^E2 is representable in the result type, then that is the resulting
  value; otherwise, the behavior is undefined.

For historic purposes, let's keep the test in place (although it is doubtful
we actually need it) but rewrite it in a way that prevents compilers from
this century from doing whacky things with it.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19580 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-31 10:47:22 +00:00
..
BaseCacheMaintenanceLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseCpuLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseDebugLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseDebugLibSerialPort MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseDebugPrintErrorLevelLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseExtractGuidedSectionLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseIoLibIntrinsic MdePkg: Convert IoLibEbc.c source file to DOS format 2015-12-17 08:30:58 +00:00
BaseLib MdePkg/BaseLib: do not rely on undefined behavior in arithmetic shift 2015-12-31 10:47:22 +00:00
BaseMemoryLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseMemoryLibMmx MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseMemoryLibOptDxe MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseMemoryLibOptPei MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseMemoryLibRepStr MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseMemoryLibSse2 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseOrderedCollectionRedBlackTreeLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePalLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePcdLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePciCf8Lib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePciExpressLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePciLibCf8 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePciLibPciExpress MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePeCoffExtraActionLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePeCoffGetEntryPointLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePeCoffLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePerformanceLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePostCodeLibDebug MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePostCodeLibPort80 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BasePrintLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseReportStatusCodeLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseRngLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseS3BootScriptLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseS3IoLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseS3PciLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseS3SmbusLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseS3StallLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseSerialPortLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseSmbusLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseStackCheckLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseSynchronizationLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseTimerLibNullTemplate MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
BaseUefiDecompressLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeCoreEntryPoint MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeCoreHobLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeExtendedSalLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeExtractGuidedSectionLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeHobLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeHstiLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeIoLibCpuIo2 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeIoLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxePalLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxePcdLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxePciLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxePciSegmentLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeRuntimeExtendedSalLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeRuntimePciExpressLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeSalLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeServicesLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeServicesTableLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeSmbusLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
DxeTimerLibEsal MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiCoreEntryPoint MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiDxePostCodeLibReportStatusCode MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiExtractGuidedSectionLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiHobLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiIoLibCpuIo MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiMemoryAllocationLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiMemoryLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiPalLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiPcdLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiPciLibPciCfg2 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiPciSegmentLibPciCfg2 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiResourcePublicationLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiServicesLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiServicesTablePointerLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiServicesTablePointerLibIdt MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiServicesTablePointerLibKr7 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeiSmbusLibSmbus2Ppi MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
PeimEntryPoint MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SecPeiDxeTimerLibCpu MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmIoLibSmmCpuIo2 MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmLibNull MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmMemLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmMemoryAllocationLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmPciLibPciRootBridgeIo MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmPeriodicSmiLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
SmmServicesTableLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiApplicationEntryPoint MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiBootServicesTableLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDebugLibConOut MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDebugLibDebugPortProtocol MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDebugLibStdErr MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDevicePathLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDevicePathLibDevicePathProtocol MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiDriverEntryPoint MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiFileHandleLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiMemoryAllocationLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiMemoryLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiPalLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiPciLibPciRootBridgeIo MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiPciSegmentLibPciRootBridgeIo MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiRuntimeLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiRuntimeServicesTableLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiSalLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00
UefiScsiLib MdePkg UefiScsiLib: Raise the Tpl of async IO callback to TPL_NOTIFY 2015-12-22 13:58:09 +00:00
UefiUsbLib MdePkg: Convert all .uni files to utf-8 2015-12-15 04:53:50 +00:00