Repository: https://github.com/lersek/edk2.git
Branch:     voidptr

The UEFI / PI / Shell specifications define a number of standard types
as pointers to VOID. This is arguably a design mistake; those types
should have been pointers to distinct incomplete union or structure
types. Here's why:

Roughly paraphrasing the constraints from ISO C99 "6.5.16.1 Simple
assignment" and "6.5.4 Cast operators", any pointer-to-object type
converts implicitly to, and from, pointer-to-void, provided const /
volatile qualifications are not relaxed. Such implicit conversions
prevent compilers from catching at least the following two kinds of
coding mistakes:

- mixing up one type with another (for example, EFI_HANDLE with
  EFI_EVENT),

- getting the depth of indirection wrong (for example, mixing up
  (EFI_HANDLE*) with EFI_HANDLE).

This series first separates these standard types from each other, in the
first patch, which is *not* being proposed for merging. This unmasks a
number of warts (semantic issues, or actual bugs) in the source code, in
the form of build breakages. The rest of the series works through those
breakages, cleaning and fixing the code.

Every DSC file in the edk2 tree was built for at least one of the NOOPT,
DEBUG, RELEASE targets (NOOPT being preferred), with the GCC48 toolchain
(for IA32 / X64) and the GCC5 toolchain (for ARM / AARCH64). Of course,
the build arches were restricted to the SUPPORTED_ARCHITECTURES stated
in the individual DSC files.

There were two exceptions to the above rule: DynamicTablesPkg was only
build-tested with AARCH64 (despite its SUPPORTED_ARCHITECTURES), given
that 32-bit ARM has no ACPI bindings. StandaloneMmPkg too was only
build-tested with AARCH64; it doesn't actually support IA32/X64 yet.

Regarding boot & runtime tests, ArmVirtQemu on AARCH64 was tested with
booting to the OS (RHEL7). Furthermore, I exercised OVMF with my usual
boot and S3 tests, covering IA32, IA32X64, and X64. Finally, some other
individual tests (noted per patch) were done with OVMF.

Cc: Achin Gupta <achin.gu...@arm.com>
Cc: Andrew Fish <af...@apple.com>
Cc: Anthony Perard <anthony.per...@citrix.com>
Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
Cc: Benjamin You <benjamin....@intel.com>
Cc: Chao Zhang <chao.b.zh...@intel.com>
Cc: Dandan Bi <dandan...@intel.com>
Cc: David Woodhouse <dw...@infradead.org>
Cc: Eric Dong <eric.d...@intel.com>
Cc: Guo Dong <guo.d...@intel.com>
Cc: Hao A Wu <hao.a...@intel.com>
Cc: Jaben Carsey <jaben.car...@intel.com>
Cc: Jian J Wang <jian.j.w...@intel.com>
Cc: Jian Wang <jian.j.w...@intel.com>
Cc: Jiaxin Wu <jiaxin...@intel.com>
Cc: Jiewen Yao <jiewen....@intel.com>
Cc: Jordan Justen <jordan.l.jus...@intel.com>
Cc: Julien Grall <julien.gr...@arm.com>
Cc: Leif Lindholm <leif.lindh...@linaro.org>
Cc: Liming Gao <liming....@intel.com>
Cc: Maurice Ma <maurice...@intel.com>
Cc: Michael D Kinney <michael.d.kin...@intel.com>
Cc: Ray Ni <ray...@intel.com>
Cc: Siyuan Fu <siyuan...@intel.com>
Cc: Supreeth Venkatesh <supreeth.venkat...@arm.com>
Cc: Zhichao Gao <zhichao....@intel.com>

Thanks
Laszlo

Laszlo Ersek (35):
  DO NOT APPLY: edk2: turn standard handle types into pointers to
    non-VOID
  EmbeddedPkg: add missing EFIAPI calling convention specifiers
  EmbeddedPkg/AndroidFastbootTransportTcpDxe: fix DestroyChild() call
  EmbeddedPkg/Universal/MmcDxe: "fix" CloseProtocol() call in
    BindingStop()
  EmulatorPkg/DxeTimerLib: drop superfluous cast
  EmulatorPkg: stop abusing EFI_HANDLE for keystroke notify registration
  MdeModulePkg: fix cast in GetModuleInfoFromHandle() calls
  MdeModulePkg/UefiHiiLib: stop using EFI_HANDLE in place of
    EFI_HII_HANDLE
  MdeModulePkg: stop abusing EFI_EVENT for protocol notify registration
  MdeModulePkg/PlatformVarCleanupLib: fix HiiConstructConfigHdr() call
  MdeModulePkg: document workaround for EFI_RUNTIME_EVENT_ENTRY PI spec
    bug
  MdeModulePkg: stop abusing EFI_HANDLE for keystroke notify
    registration
  MdeModulePkg: PEI Core: clean up "AprioriFile" handling in
    FindFileEx()
  MdeModulePkg: fix UninstallMultipleProtocolInterfaces() calls
  MdeModulePkg/PiSmmCore: make type punning consistent
  MdeModulePkg/S3SaveState: cast Position for S3BootScriptLib explicitly
  MdePkg/DxeServicesLib: remove bogus cast
  NetworkPkg/DxeNetLib: fix type typo in NetLibGetMacAddress()
  NetworkPkg: fix CloseProtocol & UninstallMultipleProtocolInterfaces
    calls
  NetworkPkg/Ip4Dxe: fix NetLibDestroyServiceChild() call
  NetworkPkg/TcpDxe: fix SockFreeFoo() parameter list
  OvmfPkg/XenBusDxe: fix UninstallMultipleProtocolInterfaces() call
  OvmfPkg/VirtioNetDxe: fix SignalEvent() call
  OvmfPkg/PlatformDxe: fix EFI_HII_HANDLE parameters of internal
    functions
  OvmfPkg/VideoDxe: document EFI_EDID_OVERRIDE_PROTOCOL.GetEdid() call
  SecurityPkg: fix UninstallMultipleProtocolInterfaces() calls
  SecurityPkg: stop abusing EFI_EVENT for protocol notify registration
  ShellPkg/UefiShellDriver1CommandsLib: fix parameter list typo
  ShellPkg: stop using EFI_HANDLE in place of EFI_HII_HANDLE
  ShellPkg: stop taking EFI_HANDLE in place of SHELL_FILE_HANDLE
  ShellPkg/UefiShellDebug1CommandsLib: fix ShellCloseFile() call
  ShellPkg/UefiShellLib: clarify workaround for unfixable EdkShell bug
  StandaloneMmPkg/Core: stop abusing EFI_HANDLE for FwVolHeader tracking
  UefiPayloadPkg/BlSupportPei: fix MMCONFIG assignment from XSDT
  UefiPayloadPkg/BlSupportDxe: fix ReserveResourceInGcd() calls

 EmbeddedPkg/Drivers/AndroidFastbootTransportTcpDxe/FastbootTransportTcp.c      
|  2 +-
 EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.c                            
|  1 +
 EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.c                                    
|  1 +
 EmbeddedPkg/Drivers/SataSiI3132Dxe/SataSiI3132.h                               
| 32 ++++++--
 EmbeddedPkg/Drivers/SataSiI3132Dxe/SiI3132AtaPassThru.c                        
|  8 ++
 EmbeddedPkg/GdbStub/GdbStubInternal.h                                          
|  9 +++
 EmbeddedPkg/MetronomeDxe/Metronome.c                                           
|  1 +
 EmbeddedPkg/Universal/MmcDxe/Mmc.c                                             
|  5 +-
 EmulatorPkg/EmuGopDxe/GopInput.c                                               
|  4 +-
 EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c                                  
|  2 +-
 MdeModulePkg/Bus/I2c/I2cDxe/I2cBus.c                                           
|  2 +-
 MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c                                
|  2 +-
 MdeModulePkg/Bus/Pci/PciBusDxe/PciDeviceSupport.c                              
|  6 +-
 MdeModulePkg/Bus/Pci/PciSioSerialDxe/Serial.c                                  
|  2 +-
 MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c                                          
|  2 +-
 MdeModulePkg/Bus/Usb/UsbBusDxe/UsbEnumer.c                                     
|  2 +-
 MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassImpl.c                           
|  2 +-
 MdeModulePkg/Core/Dxe/Event/Event.c                                            
|  8 ++
 MdeModulePkg/Core/Dxe/Event/Event.h                                            
|  2 +-
 MdeModulePkg/Core/Dxe/Hand/Handle.h                                            
|  2 +-
 MdeModulePkg/Core/Pei/FwVol/FwVol.c                                            
|  2 +-
 MdeModulePkg/Core/Pei/FwVol/FwVol.h                                            
|  2 +-
 MdeModulePkg/Core/PiSmmCore/PiSmmCore.h                                        
|  2 +-
 MdeModulePkg/Core/PiSmmCore/Smi.c                                              
|  8 +-
 MdeModulePkg/Core/RuntimeDxe/Runtime.c                                         
| 10 ++-
 MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c             
| 12 +--
 MdeModulePkg/Library/PlatformVarCleanupLib/PlatVarCleanupLib.c                 
|  6 +-
 MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c             
|  8 +-
 MdeModulePkg/Library/UefiHiiLib/HiiString.c                                    
|  4 +-
 MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiSdt.h                             
|  2 +-
 MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveState.c                       
|  4 +-
 MdeModulePkg/Universal/Acpi/SmmS3SaveState/SmmS3SaveState.c                    
|  4 +-
 MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c                    
|  2 +-
 MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c                          
|  4 +-
 MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.c           
|  2 +-
 MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c           
|  2 +-
 MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h                            
|  2 +-
 MdeModulePkg/Universal/LoadFileOnFv2/LoadFileOnFv2.c                           
|  2 +-
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c                       
|  2 +-
 MdePkg/Include/Pi/PiPeiCis.h                                                   
|  6 +-
 MdePkg/Include/Protocol/AcpiSystemDescriptionTable.h                           
|  3 +-
 MdePkg/Include/Protocol/Bis.h                                                  
|  3 +-
 MdePkg/Include/Protocol/Eap.h                                                  
|  3 +-
 MdePkg/Include/Protocol/HiiFont.h                                              
|  3 +-
 MdePkg/Include/Protocol/MmMp.h                                                 
|  3 +-
 MdePkg/Include/Protocol/S3SaveState.h                                          
|  2 +-
 MdePkg/Include/Protocol/Shell.h                                                
|  3 +-
 MdePkg/Include/Protocol/UserManager.h                                          
|  9 ++-
 MdePkg/Include/Uefi/UefiBaseType.h                                             
|  6 +-
 MdePkg/Include/Uefi/UefiInternalFormRepresentation.h                           
|  3 +-
 MdePkg/Library/DxeServicesLib/DxeServicesLib.c                                 
|  2 +-
 NetworkPkg/DnsDxe/DnsDriver.c                                                  
|  4 +-
 NetworkPkg/IScsiDxe/IScsiConfig.c                                              
|  2 +-
 NetworkPkg/Ip4Dxe/Ip4Driver.c                                                  
|  2 +-
 NetworkPkg/Ip4Dxe/Ip4If.c                                                      
|  4 +-
 NetworkPkg/Ip6Dxe/Ip6Driver.c                                                  
|  2 +-
 NetworkPkg/Library/DxeNetLib/DxeNetLib.c                                       
|  2 +-
 NetworkPkg/Mtftp4Dxe/Mtftp4Driver.c                                            
|  2 +-
 NetworkPkg/TcpDxe/SockImpl.c                                                   
|  4 +-
 NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.c                                 
|  2 +-
 OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c                                     
|  6 +-
 OvmfPkg/PlatformDxe/Platform.c                                                 
|  4 +-
 OvmfPkg/VirtioNetDxe/Events.c                                                  
|  2 +-
 OvmfPkg/XenBusDxe/XenBus.c                                                     
|  2 +-
 SecurityPkg/HddPassword/HddPasswordDxe.c                                       
|  2 +-
 SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDriver.c                                  
|  2 +-
 SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDriver.c                                 
|  2 +-
 SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDriver.c 
|  2 +-
 ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c                                  
|  6 +-
 ShellPkg/DynamicCommand/DpDynamicCommand/Dp.h                                  
|  4 +-
 ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c                              
|  6 +-
 ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.h                              
|  4 +-
 ShellPkg/Include/Library/ShellCommandLib.h                                     
|  2 +-
 ShellPkg/Include/Library/ShellLib.h                                            
|  4 +-
 ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c                   
|  2 +-
 ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c             
|  2 +-
 ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c                     
|  2 +-
 ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.h                     
|  2 +-
 ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c                  
|  2 +-
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.c       
|  2 +-
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h       
|  2 +-
 ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c                         
|  4 +-
 ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.c     
|  2 +-
 ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h     
|  2 +-
 ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.c       
|  2 +-
 ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.h       
|  2 +-
 ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c                               
|  2 +-
 ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c       
|  2 +-
 ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.h       
|  2 +-
 ShellPkg/Library/UefiShellLevel3CommandsLib/Touch.c                            
|  2 +-
 ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.c       
|  2 +-
 ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.h       
|  2 +-
 ShellPkg/Library/UefiShellLib/UefiShellLib.c                                   
| 26 ++++++-
 ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.c   
|  2 +-
 ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.h   
|  2 +-
 ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.c   
|  2 +-
 ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.h   
|  2 +-
 StandaloneMmPkg/Core/Dispatcher.c                                              
| 80 +++++++++++---------
 StandaloneMmPkg/Core/FwVol.c                                                   
| 16 ++--
 StandaloneMmPkg/Core/StandaloneMmCore.h                                        
|  4 +-
 UefiPayloadPkg/BlSupportDxe/BlSupportDxe.c                                     
|  4 +-
 UefiPayloadPkg/BlSupportPei/BlSupportPei.c                                     
| 19 +++--
 102 files changed, 294 insertions(+), 194 deletions(-)

-- 
2.19.1.3.g30247aa5d201


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#47387): https://edk2.groups.io/g/devel/message/47387
Mute This Topic: https://groups.io/mt/34180197/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to