Hi Matt, I think the following section in the new TimerLib instance INF is redundant and can be removed . This setting is already in UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc and applies to all components when building a host based unit test app.
[BuildOptions] GCC:*_*_*_CC_FLAGS = -fno-pie Mike > -----Original Message----- > From: [email protected] <[email protected]> On > Behalf Of [email protected] > Sent: Tuesday, July 7, 2020 6:31 PM > To: [email protected] > Cc: Matthew Carlson <[email protected]> > Subject: [edk2-devel] [PATCH v1 1/3] > UnitTestFrameworkPkg : BaseTimerLib: Adds a host-based > timer Lib > > From: Matthew Carlson <[email protected]> > > This adds a host based BaseTimerLib that won't assert. > > Signed-off-by: Matthew Carlson > <[email protected]> > --- > > UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Timer > LibHost.c | 137 ++++++++++++++++++++ > > UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/BaseT > imerLibHost.inf | 40 ++++++ > > UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/BaseT > imerLibHost.uni | 19 +++ > UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > | 1 + > 4 files changed, 197 insertions(+) > > diff --git > a/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Tim > erLibHost.c > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Tim > erLibHost.c > new file mode 100644 > index 000000000000..61304e66f54f > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Tim > erLibHost.c > @@ -0,0 +1,137 @@ > +/** @file > > + A non-functional instance of the Timer Library. > > + > > + Copyright (c) 2007 - 2011, Intel Corporation. All > rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Base.h> > > +#include <Library/TimerLib.h> > > +#include <Library/DebugLib.h> > > +#include <stdio.h> > > +#include <stdlib.h> > > +#include <time.h> > > + > > +/** > > + Stalls the CPU for at least the given number of > microseconds. > > + > > + Stalls the CPU for the number of microseconds > specified by MicroSeconds. > > + > > + @param MicroSeconds The minimum number of > microseconds to delay. > > + > > + @return The value of MicroSeconds inputted. > > + > > +**/ > > +UINTN > > +EFIAPI > > +MicroSecondDelay ( > > + IN UINTN MicroSeconds > > + ) > > +{ > > + return NanoSecondDelay(MicroSeconds * 1000000) / > 1000000; > > +} > > + > > +/** > > + Stalls the CPU for at least the given number of > nanoseconds. > > + > > + Stalls the CPU for the number of nanoseconds > specified by NanoSeconds. > > + > > + @param NanoSeconds The minimum number of nanoseconds > to delay. > > + > > + @return The value of NanoSeconds inputted. > > + > > +**/ > > +UINTN > > +EFIAPI > > +NanoSecondDelay ( > > + IN UINTN NanoSeconds > > + ) > > +{ > > + /*UINT64 start = GetPerformanceCounter(); > > + UINT64 goal = start + NanoSeconds; > > + DEBUG(( DEBUG_ERROR, "Delaying for %d ns. Start: %d > to %d\n", NanoSeconds, start, goal)); > > + // check if we need to wait for the counter to roll > over > > + if (start > goal) { > > + DEBUG(( DEBUG_ERROR, "Start is more than goal\n")); > > + while (GetPerformanceCounter() > goal); > > + } > > + while (GetPerformanceCounter() < goal); > > + return NanoSeconds;*/ > > + return 0; > > +} > > + > > +/** > > + Retrieves the current value of a 64-bit free running > performance counter. > > + > > + The counter can either count up by 1 or count down by > 1. If the physical > > + performance counter counts by a larger increment, > then the counter values > > + must be translated. The properties of the counter can > be retrieved from > > + GetPerformanceCounterProperties(). > > + > > + @return The current value of the free running > performance counter. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetPerformanceCounter ( > > + VOID > > + ) > > +{ > > + struct timespec ts; > > + timespec_get(&ts, TIME_UTC); > > + return ts.tv_nsec; > > +} > > + > > +/** > > + Retrieves the 64-bit frequency in Hz and the range of > performance counter > > + values. > > + > > + If StartValue is not NULL, then the value that the > performance counter starts > > + with immediately after is it rolls over is returned > in StartValue. If > > + EndValue is not NULL, then the value that the > performance counter end with > > + immediately before it rolls over is returned in > EndValue. The 64-bit > > + frequency of the performance counter in Hz is always > returned. If StartValue > > + is less than EndValue, then the performance counter > counts up. If StartValue > > + is greater than EndValue, then the performance > counter counts down. For > > + example, a 64-bit free running counter that counts up > would have a StartValue > > + of 0 and an EndValue of 0xFFFFFFFFFFFFFFFF. A 24-bit > free running counter > > + that counts down would have a StartValue of 0xFFFFFF > and an EndValue of 0. > > + > > + @param StartValue The value the performance counter > starts with when it > > + rolls over. > > + @param EndValue The value that the performance > counter ends with before > > + it rolls over. > > + > > + @return The frequency in Hz. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetPerformanceCounterProperties ( > > + OUT UINT64 *StartValue, > OPTIONAL > > + OUT UINT64 *EndValue > OPTIONAL > > + ) > > +{ > > + return (UINT64)(-1); > > +} > > + > > +/** > > + Converts elapsed ticks of performance counter to time > in nanoseconds. > > + > > + This function converts the elapsed ticks of running > performance counter to > > + time value in unit of nanoseconds. > > + > > + @param Ticks The number of elapsed ticks of > running performance counter. > > + > > + @return The elapsed time in nanoseconds. > > + > > +**/ > > +UINT64 > > +EFIAPI > > +GetTimeInNanoSecond ( > > + IN UINT64 Ticks > > + ) > > +{ > > + return Ticks; > > +} > > diff --git > a/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.inf > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.inf > new file mode 100644 > index 000000000000..ac091cd10af1 > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.inf > @@ -0,0 +1,40 @@ > +## @file > > +# NULL instance of Timer Library as a template. > > +# > > +# A non-functional instance of the Timer Library that > can be used as a template > > +# for the implementation of a functional timer library > instance. This library instance can > > +# also be used to test build DXE, Runtime, DXE SAL, > and DXE SMM modules that require timer > > +# services as well as EBC modules that require timer > services. > > +# > > +# Copyright (c) 2007 - 2018, Intel Corporation. All > rights reserved.<BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = BaseTimerLibHost > > + MODULE_UNI_FILE = BaseTimerLibHost.uni > > + FILE_GUID = a2a413b8-43c3-40cc- > a298-be7a214d3564 > > + MODULE_TYPE = BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = TimerLib > > + > > + > > +# > > +# VALID_ARCHITECTURES = IA32 X64 EBC AARCH > > +# > > + > > +[Sources] > > + TimerLibHost.c > > + > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > + > > +[LibraryClasses] > > + DebugLib > > + > > diff --git > a/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.uni > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.uni > new file mode 100644 > index 000000000000..6e100bd383d2 > --- /dev/null > +++ > b/UnitTestFrameworkPkg/Library/Host/BaseTimerLibHost/Bas > eTimerLibHost.uni > @@ -0,0 +1,19 @@ > +// /** @file > > +// NULL instance of Timer Library as a template. > > +// > > +// A non-functional instance of the Timer Library that > can be used as a template > > +// for the implementation of a functional timer library > instance. This library instance can > > +// also be used to test build DXE, Runtime, DXE SAL, > and DXE SMM modules that require timer > > +// services as well as EBC modules that require timer > services. > > +// > > +// Copyright (c) 2007 - 2014, Intel Corporation. All > rights reserved.<BR> > > +// > > +// SPDX-License-Identifier: BSD-2-Clause-Patent > > +// > > +// **/ > > + > > + > > +#string STR_MODULE_ABSTRACT #language en-US > "Host instance of Timer Library" > > + > > +#string STR_MODULE_DESCRIPTION #language en-US > "An instance of the Timer Library that can be used for > host based unit tests." > > + > > diff --git > a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > index e954968efc52..bc7b7afa1729 100644 > --- > a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > +++ > b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc > @@ -13,6 +13,7 @@ > > UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/Uni > tTestLibCmocka.inf > > > DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosi > x/DebugLibPosix.inf > > > MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/M > emoryAllocationLibPosix/MemoryAllocationLibPosix.inf > > + > TimerLib|UnitTestFrameworkPkg/Library/Host/BaseTimerLibH > ost/BaseTimerLibHost.inf > > > > [BuildOptions] > > GCC:*_*_*_CC_FLAGS = -fno-pie > > -- > 2.25.1.vfs.1.1 > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this > group. > > View/Reply Online (#62247): > https://edk2.groups.io/g/devel/message/62247 > Mute This Topic: https://groups.io/mt/75379678/1643496 > Group Owner: [email protected] > Unsubscribe: https://edk2.groups.io/g/devel/unsub > [[email protected]] > -=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62255): https://edk2.groups.io/g/devel/message/62255 Mute This Topic: https://groups.io/mt/75379678/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
