> 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