C Development Environment Package for EDK2 and derived BIOS products.
C Development Environment Package for EDK2
The programming language C is standardized by the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO) first in 1989 and 1990. The latest publicly available version of the standard from 1999 is to be found here: C99. The original ANSI C, also known as C89 or C90 is not officially available anymore for free.
Both, the language (operators, expressions, declarations, specifiers, e.g. if
, while
,
+
, &&
, unsigned
, char
, struct
...) and the library (functions, parameters, structures, macros,
e.g. NDEBUG
, CLOCKS_PER_SEC
, raise()
, scanf()
, struct lconv
, struct tm
, errno
...) are specified in this document (chapters 6 and 7)
and are obligatory for an implementation that claims to meet the standard.
In a particular C compiler / C library implementation both are completely coordinated to each other.
The Microsoft C/C++ compiler and its library LIBCMT.lib is an implementation of this standard; it is primarily designed to create C/C++ programs and drivers for the Windows Operating System; it is surely the most frequently used C compiler of them all and continuously enhanced, updated and maintained by Microsoft.
This compiler is not a stand alone executable that simply translates C/C++ sourcecode to object modules. It is closely entwined with different build environments (WDK/DDK, SDK) consisting of libraries, headerfiles, the operating system interface and platforms (x86-64/32, ARM64/32) to meet required code safety, code optimization (size vs. speed in different shades) and maintainability (e.g. for debug and trace purpose).
The code generation and optimization aspects are not completely documented by Microsoft
but the Microsoft compiler tends to produce machine code, that relies on the presence of
C library specified functions for storage space initialization, comparison and duplication
(memset()
,strcpy()
, strcmp()
). Additionally some still undocumented function calls
are produced by the x86-32 code generator, when dealing with 64 bit integer types (long long
),
that came into the C language standard in 1999.
CdePkg, C Development Environment Package, introduces the use of Hosted Environment, as specified by ANSI C, for both UEFI POST and SHELL drivers. This is a reference implementation only, using the Microsoft C compiler, linker, library manager and IDE that comes with Visual Studio 2019 for x86 platforms.
A Hosted Environment for command line applications is standard, its introduction for drivers is a novum. This also applies for the UEFI environment. But the wealth of computing power of current UEFI machines offers the chance to translate ANSI C compatible sourcecode to run as UEFI POST driver.
With the growing complexity of firmware due to the requirements for both security and trust and the need for speed in development, use of platform-independent sourcecode allows:
- reuse of validated C sourcecode (from different origins, e.g. the open source community)1
- crossdevelopment of complex firmware code on non-UEFI platforms with superb build and debug capabilities
- use of static code analysis tools2
- appraisal of the source code quality by human professionals3
Since the UEFI "OS" interface (DXE/SHELL/SMM and PEI) can be accessed directly by the compiler-translated sourcecode and UEFI provides an independent set of functions, macros and type definitions, ANSI C and UEFI "OS" specific sourcecode can coexist seamlessly. This allows a functional ANSI C prototype to adjust successively to real world driver requirements in the UEFI environment. A UEFI SHELL application might be an intermediate step for this process if the target is a DXE or SMM driver.
CdePkg is a feasibility study on how to provide a complete Hosted Environment
(according to ANSI C Specification chapter 5.1.2) including all instrisic functions,
which the compiler requires to be a full featured C-compiler, in particular the full
set of C-language operators (specifically /
, %
, <<
, >>
for 64 bit integers) for the 32 bit code generator, needed in PEI.
Furthermore the questions has to be answered, if UEFI based products can be improved regarding
- software quality (in terms of number of required updates during a life cycle)
- development time
- feature set (complexity and quantity)
- storage space needed in a flash part (the smaller the better)
...if a standardized programming interface as ANSI C is available, in conjunction with a storage space optimization strategy, as described below, that splits wrapper libraries from worker drivers.
In the UEFI programming environment not even the smallest piece of code can be cross developed on a
different platform, since function names differ in upper/lower case letters, format specifier for
Print()
-functions differ from C's printf()
, a scanf()
counterpart is absent, wideness
of stringtypes differs from corresponding ANSI C functions.
Since in many cases the ANSI C specification allows freedom for a particular library implementation (return values, flags, structure layout) but the chosen build and debug environment is VS2019 the original Microsoft C Library functions had to be recreated, fully compatible, bug for bug (except otherwise noted). This would provide the most relieable solution for cross development, enable the use of the original Microsoft header files and prevent from documenting yet another C Library implementation.
A Hosted Environment provides the following obligatory features:
int main(int argc,char **argv)
is the driver entry point4argc
andargv
are used for parameter passing, in CdePkg also for POST drivers
https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments?view=vs-2019- full blown ANSI C library
- buffered I/O, that means that
ungetc()
works on streams, beside an improvement in speed exit()
invocation on driver termination, that implies- run
atexit()
-registered functions - free allocated memory
- remove all tempfiles (not applicable for POST drivers)
- close open files (not applicable for POST drivers)
- run
The command line parameter / load options for each CdePkgDriver shall be able to be adjusted on a final system without recompiling the BIOS and updating the BIOS chip. This e.g. allows the support engineer to change BIOS behaviour on a (partially) defect system for repair/debug mode, enabling trace messages, excluding special (non-compliant) devices from beeing enumerated.
CdePkg's functionality is composed of three components:
- the C Library CdeLib
- the service driver CdeServices
- the POST command line reference implementation CdeLoadOptions
all in 32 and 64 bit variants for DXE, SMM and PEI each.
CdeLib and CdeServices are highly optimized for space minimized appearance of ANSI C library functions in the UEFI drivers. This is achieved by implementing all-embracing worker functions
printf()
-family corescanf()
-family corerealloc()
core (malloc()
,free()
,realloc()
andcalloc()
)strcmp()
-family core (allstr
/wcs
/mem
n
i
functions)strcpy()
-family core (allstr
/wcs
/mem
n
functions)strpbrk()
/strspn()
-family core (allstr
/wcs
pbrk
- andspn
- functions)strtok()
-family core (allstr
/wcs
tok
-functions)- CRT0 startup code for DXE, SMM, PEI
- buffered I/O core (
fread()
,fwrite()
andungetc()
) - locale character tables
- interface functions to access DXE- and PEI-API
in the CdeServices driver, that resides once in DXE-, SMM- and PEI-phase each. The CdeLib just provides small wrapper functions that invoke CdeServices.
Each CdePkgDriver reports its EfiCallerIdGuid while running through CRT0 to CdeLoadOptions.
CdeLoadOptions provides a pointer to the matching "Command Line" from an simple EfiCallerIdGuid/CommandLine table
within the file CdeLoadOptions.h
,
compiled into the CdeLoadOptions driver binary.
This is just a proof of concept. In a real implementation, as mentioned above, the command line can be changed without recompilation and BIOS update.
The Boot flow sequence consists of:
- PEI CdeLoadOption (to provide the commandline to PEI drivers)
- PEI CdeServices (to provide the space optimized worker functions)
- PEI custom drivers (CdeServicesPei-based)
- DXE CdeLoadOption (to provide the commandline to DXE drivers)
- DXE CdeServices (to provide the space optimized worker functions)
- DXE custom drivers (CdeServicesDxe-based)
- BDS custom drivers
- UEFI Shell drivers (CdeServicesDxe-based, yet still Torito-C-Library-based)
The CdeLib and CdeServices are derived from their companion project Toro C Library but split into wrapper/worker architecture. (Internally Torito C Library was designed from the very beginning for that split architecture, but library and driver were merged into one executable, to run on platforms without CdeServices protocol.)
The functions below are already implemented and tested, every single one of them, except otherwise noted:
Toro C Library has passed extensive tests to verify Microsoft's C Library compatibility and is also approved in various real world applications. Therefore the CdePkg's C library will be validated by simple tests only, in the CdeValidationPkg, for DXE, SMM and PEI respectively.
- add simple UART based (COM1) CON I/O interface since consoles are not supported during POST
add SMM support- 20190714
add PEI support - move CRT0 startup code to CdeServices
- move local character tables to CdeServices
- move buffered I/O core to CdeServices
- validate functions in DXE, SMM and PEI List of available functions
- complete library implementation
- CdePkg is a submodule of the EDK2020-MinnowBoard project.
https://github.com/KilianKegel/EDK2020-MinnowBoard#howto-installbuildedit - run LAUNCH.BAT, that will
- check build tools are installed
- download NASM and OPENSSL tools
- download EDK2 and EDK2-NON-OSI from tianocore and CdeBinPkg
- setup the build environment variables
- Create and debug a new CdePkg driver
The CdeValidationPkg can be used to create and debug CdePkg-based drivers - Convert an existing, traditional MdePkg driver to a CdePkg driver
- Adjust the drivers command lines for the MinnowBoard POST drivers
- copy
LoadOption.efi
tool from the UEFIBinaries folder to the UEFI Boot device - copy
delall.nsh
,disall.nsh
,setall.nsh
andenaclock.nsh
scripts to the UEFI Boot device - run
setall.nsh
to enable the approbriate command line to eachCdeValidationPkg
driver - run
disall.nsh
to prevent each driver from being started - run
enaclock.nsh
to enable theclock.efi
and theargvc.efi
driver only - use
LoadOption.efi
to adjust each driver for your own needs
- copy
 related project | annotation |
---|---|
Torito C Library | C Library for UEFI Shell only. All projects below are built on or derived from Torito C Library |
Visual ANSI C for UEFI Shell | Getting started with Visual Studio for UEFI Shell and ANSI C cross-development. |
Visual DOS Tools for UEFI Shell | more, find command implementation |
Visual HWTools for UEFI Shell | HWTools: PCI- and GPIOSpy for Baytrail. MemSpy for all. |
- introduce intrinsic math function (
_allXYZ()
,_aullXYZ()
and__ltod3()
) extraction from Microsoft **LIBCMT.LIB
- remove disassembled
__allXYZ()
and__aullXYZ()
fromtoroCLibrary
- remove disassembled
- fixed
stat()
running on WINDOWS reports wrong time stamp - fixed
stat()
running on UEFI reports from erronous time stamp by exacly one month - fixed
stat()
running on UEFI to support MSDOS drive name (A:, B:, C: ...) - fixed
system()
running on UEFI with output redirection emits additional garbage characters
- improve C++ support for
CDE.H
- enable mixed C/C++ applications based toro C Library using
CDE.H
- enable mixed C/C++ applications based toro C Library using
- fixe SMM issues:
- fix
CdePkg
-based SMM drivers hangs on startup. - fix
CdeServicesSmm.c
failed to build
NOTE: The improvement above doesn't change ANSI-C related behaviour of previous library versions
- fix
- fixed EDK2
DEBUG
trace macro won't crash anymore with UEFI specific (non-ANSI-C) format specifiers:
- %g
- %t
- %r
- improve EMULATOR support
- enable
EfiStatusCode
support for EMULATOR DXE - fix div by 0 crash due to non-initialize Clocks-Per-Second in
- enable
- include static code analysis configuration
toroCLibrary.ruleset
- fix minor static code analysis warnings
- add timeout detection for disabled COM1/UART at I/O 3F8h used for debug traces.
NOTE: Disabled I/O devices usually do not respond to I/O cycles.
Internally this is done by ignoring the chipselect for that particular I/O address range, e.g. 3F8h .. 3FFh for COM1.
FFh is driven to the data bus when reading registers of those disabled devices.
On special implementations hardware designers chose a different approach to disabled devices:
- address decoding is kept enabled
- internal clock line is stopped or decoupled from internal circuitry
The disadvantage of this aproach is, that status registers are still visible but not updated anymore.
- add semantic versioning + build enumeration
- optimize source code
- reduce number of suppressed warnings (4200;4324;4100 only)
- enable static code analysis (
toroCLibrary.ruleset
, suppress warning 28251 only )
- update copyright date
- add ACPI timer based synchronization for toro C Library Shell programs.
NOTE: On recent Intel platforms the previously used legacy timer's (i8254) input clock frequency is
clocked down to an unspecified frequency with setup default
Enable 8254 Clock Gate
. Additionally the I/O latency to access i8254 ports is increased with setup defaultLegacy IO Low Latency
that lowers i8254 based timing precision.
So i8254 gets unusable for UEFI Shell programs on new platforms. - improve synchronization error correction for i8254 based POST drivers (with
Enable 8254 Clock Gate := disable
,Legacy IO Low Latency := enable
)
- fixed: libxlsxwriter based UEFI and Windows applications create .XLSX that can't be opened with Microsoft Excel 2016. Office 365 online (https://www.microsoft365.com) and offline didn't fail.
- fixed:
_strefieerror()
to return error correct string when running in pre-memory PEI
- fix
CdePkg\Include\CDE.h
for debug trace purpose in conjunction with original Microsoft header files
- improve debug trace CDETRACE() configuration switches
#define CDEDBG STDOUT
– traces directed to stdout#define CDEDBG STDERR
– traces directed to stderr#define CDEDBG STDDBG
– traces directed to CDE debug channel, normally COM1, I/O 0x3F8 115200,8,n,1CDEDBG
undefined – UEFI Shell/post DRIVERS: STDDBG, Windows NT: STDOUT
- update to TORO C Library 20230909
- modify
CdePkg
(CdeServicesPei.c
,CdeServicesDxe.c
,CdeServicesSmm.c
) for WDK 7.1.0 tool chain and old EDK2 (2017) versions- C99-style structure initialization (designator) changed to C90-style (initializer-list)
- remove warning suppression for
CdeLib.mak
andCdeLibNull.mak
that breaks build with WDK 7.1.0 tool chain - add EntryPoints to all
[LibraryClasses]
- add signal handling demonstration to WELCOME.C using signal() and raise()
- provide
CDE_SHELL_PROTOCOL_GUID
for future/upcoming code size reduced shell application type - minor improvements
- add Standard C95 Library functions:
- add Microsoft C Library functions from
mbctype.h
: - fixed:
printf()
/wprintf()
-family handling of wide characters > value 255 - adjust internal
invalid_parameter_handler()
to suppress additional debug/file information - fixed:
wcsxfrm()
/strxfrm()
addinvalid_parameter_handler()
support as original Microsoft C Library
- fixed: in the pre-Memory-Discovered PEI (Pre Efi Initialization) POST x86-32
Standard C function
localeconv()
crashed the platform.
NOTE: All x86-64 operation modes (UEFI Shell, UEFI SMM, UEFI DXE, Windows NT) and post-Memory-Discovered PEI (Pre Efi Initialization) x86-32 was not affected by that bug.
- update to TORO C Library 20230409
- add CdeServicesPEI/DXE/SMM driver source code representation
- remove CdeServicesPEI/DXE/SMM driver binary representation
- modify CdeLib and CdeLibNull build strategy
- script-based removal of superfluous .OBJ from toro-C-library
- update to TORO C Library 20230304
- improve
CDETRACE()
macro,CdePkg-based DEBUG
macro in a mixed/heterogeneous UEFI BIOS build and POST environment
-
introduce
CDEABI
, an additional application binary interface ABI to ease coexistance ofCdePkg
based BIOS drivers with incomplete tianocore EDK2C Library
fragmentsNOTE:
CDEABI
uses the Microsoft DLL interface__declspec(dllimport)
for EDK2-built drivers . Technically this uses indirect function calls on machine code level. -
promote
CDETRACE()
, remove former, alternate trace method (CDEMOFINE()
) completely
- fixed
strftime()
parameter:%I
,%m
,%x
-
fixed CdeLibNull.mak: remove all EntryPoint--.OBJ from to avoid build conflicts with default UEFI libraries
-
add CDE specific helper macros:
__CDEWCSFILE__
-- wide character pendant of Standart C__FILE__
__CDEWCSFUNCTION__
-- wide character pendant of Standart C__FUNCTION__
CDEELC(array)
-- element count to get numbers of elements in an arrayCDENUMTOSTR(num)
-- get narrow string representation of decimalnum
CDENUMTOWCS(num)
-- get wide string representation of decimalnum
-
add Microsoft/POSIX C Library functions:
_isatty()
-
imitate funny/buggy Microsoft behaviour for
fopen()
withfmode
parameterw+
ora
:
function terminates successfully witherrno
set to 22,Invalid argument
-
imitate funny/buggy Microsoft behaviour for
_fileno()
with invalid filepointer:
MSFT:_fileno(-1)
just crashes by an invalid memory access
This behaviour is imitated by anexit(3)
invocation -
fixed application crash at termination when a redirected I/O stream
STDERR
is reopened withreopen()
-
improve existing invalidate parameter handling; enable file name string, function name string, line number string and expression string at RELEASE runtime
NOTE: Microsoft enables this feature only when using DEBUG version of LIBCMT.LIB. -
internal: add toro C Library specific library extentions
wchar_t* _wcsefierror(EFI_STATUS Status)
, according to Standard Cchar* strerror(int errnum)
char* _strefierror(EFI_STATUS Status)
, according to Standard Cchar* strerror(int errnum)
- add O_TEMPORARY support to Microsoft/POSIX _open()
- fixed "fall time bug" (autumn). Broken time calculation on two digit month number (Oct, Nov, Dec).
- fixed str/wcs--pbrk/spn()-family malfunction on characters with highest bit set (sign extention error)
- add Standard C90 Library functions:
wcstoul()
wcstol()
- add Standard C99 Library functions:
strtoull()
strtoll()
strtoimax()
strtoumax()
wcstoull()
wcstoll()
wcstoimax()
wcstoumax()
- add Microsoft/POSIX C Library functions:
_ultow()
_ultoa()
_ui64tow()
_ui64toa()
_ltow()
_ltoa()
_itow()
_itoa()
_i64tow()
_i64toa()
- implement full
__chkstk()
for Windows 32Bit: https://docs.microsoft.com/en-us/windows/win32/devnotes/-win32-chkstk - fixed stdout/stderr redirection
>
and>>
didn't work anymore (since20220501
) - fixed
"a"
/O_APPEND
append file open attribute didn't work anymore (since20220501
) - fixed
ftell()
/fgetpos()
reports wrong offset after writing to"a"
/O_APPEND
opened files
- fixed:
free()
and C++ operatordelete()
crash to freeNULL
pointer
- add C++ minimum support
void* operator new(size_t size)
void* operator new[](size_t size)
void operator delete[](void* ptr)
void operator delete(void* ptr, unsigned __int64 size)
- simplify
CDETRACE()
implemantation, improve portability of thatCdePkg
specific debug macro - add Tor-C-Library version 20220501
- update header files
- add
fcntl.h
,sys\stat.h
- introduce
CDETRACE()
debug/trace macro that is parameter checked at build time - improve
wmain()
support; now selected at build time by choosing the CRT0 entry point name_cdeCRT0UefiShellW()
_cdeCRT0WinNTW()
NOTE: The*env
pointer is not passed towmain()
- add missing prototypes in headerfiles
wchar.h
:typedef unsigned short wint_t;
wchar.h
:int vfwprintf( FILE * stream, const wchar_t * format, va_list arg );
wchar.h
:int wctob( wint_t c );
stdlib.h
:size_t mbstowcs( wchar_t * pwcs, const char * s, size_t n );
stdlib.h
:size_t wcstombs( char * s, const wchar_t * pwcs, size_t n );
- add Microsoft specific
fopen()
mode string modifier"t"
for text mode- NOTE:
"t"
modifier is not defined by ANSI/ISO C, because binary/text mode differentiation is done by"w"
modifier only.
- NOTE:
- fix
fclose()
bug in UEFI shell returns an error, when closing a read only file
-
add Microsoft C Library functions for UEFIShell 64Bit applications only
_mkdir()
_stat64i32()
that is the Microsoft version of POSIXstat()
add POSIX C Library functions
strnlen()
,wcsnlen()
- initial version of TORO C LIBRARY (
toroC64.lib
andtoroC32.lib
) - TORITO C LIBRARY is discontinued from now on
- add Microsoft C Library functions for UEFIShell applications only
getc()
_findfirst()
_findnext()
_findclose()
- rename library file to
toroC32.lib
andtoroC64.lib
- add SMM support
- introduce
CdeWelcome
component that runs native ANSI C only on PEI (pre/post memory), DXE and SMM ShellAPP (Windows and Linux too, compiled externally) - remove components
CdeDiag...()
,CdeWelcomeDxe
,CdeWelcomePei
,CdeWelcomePre
- simplify CdeLib.lib build, introduce
CdeLibNull
component - currently don't use
CdeValidationPkg
- add dedicated FATAL ERROR message to DXE+PEI CRT0 if CdeServices protocol fails to be located, due to DEPEX or APRIORI issue
- enable Tianocore DEBUG macro for CDE-based/injected drivers to allow usage of DEBUG traces with RELEASE BIOS versions
- add support for BIOS vendor
- adjust include path
- provide component description and configuration files
- remove .xdata and .pdata sections (
$unwind$ and$pdata$ symbols) from .OBJ before binding the library
- source tree redesign
- torito C library redesign to coexist with / replace EDK2 driver functions
- configure CdePkg to support original tianocore DEBUG traces
- extend Microsft intrinsic __acrt_iob_func() to support variable length I/O buffer count
- improve EDK2 emulator support:
- check privileg level before _enable() and _disable()
- provide BREAKPOINT entries __cdeImageEntryPointPeiINT3(), __cdeImageEntryPointDxeINT3()
- remove dependancy from 'LoadOptions' CdePkg based drivers can start w/o LoadOptions and just get argv[0], argc == 1, if the LoadfOptions driver is not present in the system
- add missing UEFI SHELL Emulation support
- minor face lifts
- move forward to better module naming scheme with prefix '__cde'
- add native UEFI
Print
format flags compatibility- %g - guid
- %r- status
- %t - time This is switched internally for traditional UEFI POST trace emulation. But not for the CDEMOFINE trace engine
- created
__CDEC_HOSTED__
according to__STDC_HOSTED__
inCDE.H
for runtime test, whether full `CdeLib library support available or not (NOTE: Microsoft STDC_HOSTED is forced to 1 and can not be changed) - changed
CDE_APP_IF* _GetCdeAppIf()
tovoid* _CdeGetAppIf()
to publish it in CDE.H
- add diagnostic driver CdeDiagTSCSync, that demonstrates synchronous timing of RTC and TSC-based <time.h> functions
- remove diagnostic driver CdeDiagPCI (PCI is available in BDS phase only)
- improved build configurations for all solution projects
- update all UEFI shell batch files to configure POST LoadOptions/command lines
setall.nsh
, to set command line defaults for all CdePkg driversenaclock.nsh
, to set command line defaults for CdeDiagTSCDiag and clock onlydisall.nsh
, to prevent known CdePkg drivers from beeing starteddelall.nsh
, to delete all CdePkg related command lines from flash- NOTE:
- run
setall.nsh
first disall.nsh
to prevent CdePkg drivers from beeing started if you don't want run all drivers- adjust
enaclock.nsh
to your needs
- run
- NOTE: This release is focused on real HW (MinnowBoard). Emulation mode doesn't allow hardware access (GPIO, RTC)
For Emulation Build the command lines are still stored in the
CdeLoadOptions.h
- add diagnostic drivers (CdeDiagGPIO, CdeDiagRTC, CdeDiagPCI, CdeDiagEFIVAR(iable)) for demonstration purpose (CdeDiagPCI under construction)
- implement command line support based on NVRAM variables for the MinnowBoard
- create/provide
LoadOption
tool to CdePkg (UEFIBinaries\LoadOption.efi) to create command lines stored in NVRAM variables (see Howto)
- update CdeServicesPei.efi: restart memory allocation if switched from Pre-Memory-PEI to Post-Memory-PEI Confirmed, that CdeServicesPei.efi has full functionality before and after PEI memory detection.
- cloned all PEI validation programs to it's PRE (pre-mem) conterparts and add to
CdeLoadOptions.h
- implement new CdePkg POST driver command line model:
- each CdePkg driver listed in
CdeLoadOptions.h
gets the command line parameters passed - each CdePkg driver listed in
CdeLoadOptions.h
can be suppressed from beeing started by (rejectStart=1
) - each CdePkg driver NOT listed in
CdeLoadOptions.h
is started withargv[0] == "unknownCdeDriverDxe"
- each CdePkg driver listed in
- add MdePkg to CdePkg convertion sample
- move from tianocore to my private account
- add ASSERT.H and LOCALE.H function validation for EmulationMode and MinnowBoard for PEI and DXE POST drivers
- assert(), setlocale(), localeconv()
- add CTYPE.H and WCTYPE.H function validation for EmulationMode and MinnowBoard for PEI and DXE POST drivers
- isalnum(),isalpha(),iscntrl(),isdigit(),isgraph(),islower(),isprint(),ispunct(),isspace(),isupper(),isxdigit(),tolower(),toupper()
- iswalnum(),iswalpha(),iswblank(),iswcntrl(),iswdigit(),iswgraph(),iswlower(),iswprint(),iswpunct(),iswspace(),iswupper(),iswxdigit(),iswctype(),wctype(),towlower(),towupper(),towctrans(),wctrans()
- add STDLIB.H function validation for EmulationMode and MinnowBoard for PEI and DXE POST drivers
- atoi(), atol(), strtol(), strtoul(), rand(), srand(), calloc(), free(), malloc(), realloc(), atexit(), exit(), qsort(), abs(), labs(), div(), ldiv()
- not available for POST drivers: abort(), strtod(), atof(), getenv(), system(), bsearch()
- add STDIO.H function validation for EmulationMode and MinnowBoard for PEI and DXE POST drivers
- tmpnam(), printf(), snprintf(), sprintf(), vsnprintf(), vsscanf(), sscanf(), vprintf(), vsprintf()
- NOTE: file access and locale dependent functions are not available for POST drivers.
- add WCHAR.H function validation for EmulationMode and MinnowBoard for PEI and DXE POST drivers
- wprintf(), swprintf(), vswprintf(), wcscpy(), wcsncpy(), wcscat(), wcsncat(), wcscmp(), wcsncmp(), wcschr(), wcscspn(), wcspbrk(), wcsrchr(), wcsspn(), wcsstr(), wcstok(), wcslen(), wmemcmp(), wmemcpy(), wmemmove(), wmemset()
- NOTE: file access and "locale" dependent functions are not available for POST drivers.
- add STRING.H function validation for EmulationMode and MinnowBoard
memcpy(), memmove(), strcpy(), strncpy(), strcat(), strncat(), memcmp(), strcmp() strncmp(), memchr(), strchr(), strcspn(), strpbrk(), strrchr(), strspn(), strstr() strtok(), memset(), strerror() and strlen() - not implemented are strcoll() and strxfrm() that are locale dependant that is not yet supported
- add all remaining TIME.H function validation for EmulationMode and MinnowBoard
difftime(), mktime(), time(), asctime(), ctime(), gmtime(), localetime(), strftime() - TIME.H functions are fully available for UEFI POST (PEI and DXE)
- add TIME_H\clock() function validation for EmulationMode and MinnowBoard
- add Torito C Library sourcecode selection to build CdePkg driver and libraries
- update to meet offical EDK2-STAGING requirements
- remove binary driver
- remove binary library
- simplify PACKAGE_PATH related components
- initial revision