> On Mar 16, 2016, at 7:37 PM, Andrew Fish <[email protected]> wrote:
> 
>> 
>> On Mar 16, 2016, at 7:18 PM, Zeng, Star <[email protected]> wrote:
>> 
>> On 2016/3/17 10:02, Andrew Fish wrote:
>>> 
>>>> On Mar 16, 2016, at 6:59 PM, Zeng, Star <[email protected]> wrote:
>>>> 
>>>> On 2016/3/17 7:12, Andrew Fish wrote:
>>>>> I was trying to move over to DxeDebugPrintErrorLevelLib, but I can't get 
>>>>> it to build
>>>>> 
>>>>> For example I made DXE use 
>>>>> DebugPrintErrorLevelLib|MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorLevelLib.inf
>>>>>  in the EmulatorPkg and I get this error:
>>>>> 
>>>>> /Users/andrewfish/work/src/edk2/EmulatorPkg/EmulatorPkg.dsc(...): error 
>>>>> F002: Library 
>>>>> [/Users/andrewfish/work/src/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf]
>>>>>  with constructors has a cycle
>>>>>           consumed by 
>>>>> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiLib/UefiLib.inf
>>>>> 
>>>>> The error message is not very helpful on root causing the issue....
>>>>> 
>>>>> But a circular constructor issue does not seem that strange in the 
>>>>> DebugLib stack as everything uses that! If I go into 
>>>>> DxeDebugPrintErrorLevelLib.inf  and remove the HobLib I don't get the 
>>>>> Constructor error, but I do get a link error.
>>>>> 
>>>>> So it looks like the DxeDebugPrintErrorLevelLib depends on the Hob lib 
>>>>> that depends on the DebugLib that depends on the 
>>>>> DxeDebugPrintErrorLevelLib. How did this every work? The only place I see 
>>>>> it used is the Nt32Pkg, and I don't have a system to test that on????
>>>> 
>>>> Just tried NT32 with VS2015, and it builds and works well.
>>>> 
>>>> Liming & Yonghong, any idea on this?
>>>> 
>>> 
>>> I was wondering if it had to do with the lower level libraries having a 
>>> constructor? So maybe library implementation matters?
>> 
>> If this circular constructor issue could be reproduced with only one module 
>> linked with DxeDebugPrintErrorLevelLib (I mean other modules to link with 
>> BaseDebugPrintErrorLevelLib, only the module links to 
>> DxeDebugPrintErrorLevelLib), then that may be helpful to scrub all the 
>> library instances the module links to find out what is the matter. :)
>> 
> 
> OK in the EmulatorPkg the DXE Core compiles, but 
> MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
>  will error out.
> 

I think it is as simple as you can't have a library with a constructor required 
by the DebugLib (and child libraries) for a library that depends on the 
DebugLib. So the chain to get the DebugLib started depends on the DebugLib.

That kind of makes DxeDebugPrintErrorLevelLib hard to use I guess?

Thanks,

Andrew Fish

> Library
> ------------------------------------------------------------------------------------------------------------------------
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> {PcdLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseLib/BaseLib.inf
> {BaseLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
> {BaseMemoryLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
> {DxeCoreEntryPoint}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
> {HobLib}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorLevelLib.inf
> {DebugPrintErrorLevelLib:  C = DxeDebugPrintErrorLevelLibConstructor D = 
> DxeDebugPrintErrorLevelLibDestructor}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeEmuStdErrSerialPortLib/DxeEmuStdErrSerialPortLib.inf
> {SerialPortLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
> {PrintLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
> {DebugLib:  C = BaseDebugLibSerialPortConstructor}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeEmuLib/DxeEmuLib.inf
> {EmuThunkLib:  C = DxeEmuLibConstructor}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
> {MemoryAllocationLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
> {UefiBootServicesTableLib:  C = UefiBootServicesTableLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
> {UefiRuntimeServicesTableLib:  C = UefiRuntimeServicesTableLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> {DevicePathLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
> {ExtractGuidedSectionLib:  C = DxeExtractGuidedSectionLibConstructor}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeEmuPeCoffExtraActionLib/DxeEmuPeCoffExtraActionLib.inf
> {PeCoffExtraActionLib:  C = DxeEmuPeCoffLibExtraActionConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiLib/UefiLib.inf
> {UefiLib:  C = UefiLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
> {CacheMaintenanceLib}
> /Users/andrewfish/work/src/edk2/IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib
> /BaseUefiTianoCustomDecompressLib.inf
> {UefiDecompressLib:  C = TianoDecompressLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> {PerformanceLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
> {PeCoffLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
> {PeCoffGetEntryPointLib}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
> {ReportStatusCodeLib}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.inf
> {TimerLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> {DxeServicesLib}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
> {DebugAgentLib}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLibNull.inf
> {CpuExceptionHandlerLib}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
> {NULL:  C = DxeCrc32GuidedSectionExtractLibConstructor}
> /Users/andrewfish/work/src/edk2/IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
> {NULL:  C = LzmaDecompressLibConstructor}
> <---------------------------------------------------------------------------------------------------------------------->
> 
> MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
>  
> 
> Library
> ------------------------------------------------------------------------------------------------------------------------
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseLib/BaseLib.inf
> {BaseLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
> {BaseMemoryLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxePcdLib/DxePcdLib.inf
> {PcdLib:  Depex = gEfiPcdProtocolGuid }
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
> {DebugPrintErrorLevelLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
> {PrintLib}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeEmuStdErrSerialPortLib/DxeEmuStdErrSerialPortLib.inf
> {SerialPortLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
> {DebugLib:  C = BaseDebugLibSerialPortConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> {MemoryAllocationLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
> {UefiRuntimeServicesTableLib:  C = UefiRuntimeServicesTableLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> {DevicePathLib}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
> {UefiBootServicesTableLib:  C = UefiBootServicesTableLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiLib/UefiLib.inf
> {UefiLib:  C = UefiLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/DxeHobLib/DxeHobLib.inf
> {HobLib:  C = HobLibConstructor}
> /Users/andrewfish/work/src/edk2/EmulatorPkg/Library/DxeEmuLib/DxeEmuLib.inf
> {EmuThunkLib:  C = DxeEmuLibConstructor}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
> {UefiRuntimeLib:  C = RuntimeDriverLibConstruct D = 
> RuntimeDriverLibDeconstruct}
> /Users/andrewfish/work/src/edk2/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
> {UefiDriverEntryPoint}
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
> {ReportStatusCodeLib}
> <---------------------------------------------------------------------------------------------------------------------->
> 
> It looks like a HOB lib with the constructor is what triggers the issue?
> 
> Thanks,
> 
> Andrew Fish
> 
>> Thanks,
>> Star
>>> 
>>> Thanks,
>>> 
>>> Andrew Fish
>>> 
>>>> Thanks,
>>>> Star
>>>>> 
>>>>> Any ideas?
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> Andrew Fish
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> edk2-devel mailing list
>>>> [email protected]
>>>> https://lists.01.org/mailman/listinfo/edk2-devel
>> 
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to