Hi UEFI community,

 

I’d like to inform you about an update in the CdePkg branch of  edk2-staging.

https://github.com/tianocore/edk2-staging/tree/CdePkg#cdepkg

 

The goal of the CdePkg is to provide an ANSI C Interface for UEFI POST drivers,

that enables BIOS engineers to (more) easily port standard C programs or libraries

(e.g. the openSSL library, already done) to POST drivers.

 

Furthermore the ANSI C Interface is disseminated widely, also it’s bugs and pitfalls are known very well

by a broad range of IT professionals and may help to be better supportable by the open source initiative

compared to the proprietary interface that is available today in Tianocore UEFI.

 

Now 3 new ANSI C functions _wassert() from ASSERT.H and setlocale(), localeconv() from LOCALE.H

are introduced for PEI and DXE.

 

Currently there are 13 examples implemented, demonstrating all in all  110 functions defined by ANSI C:

  1. argvc: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/HOSTED_ENV/argcv/main.c#L57

argc/argv handling according to https://msdn.microsoft.com/en-us/library/a1y7w461.aspx

  1. systeminterfacePEI: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfacePEI/main.c#L57

demonstration, how PeiServices and FileHandle are passed into main()

  1. systeminterfaceDXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfaceDXE/main.c#L57

demonstration, how SystemTable and ImageHandle are passed into main()

 

ANSI C LIBRARY functions:

  1. time.h clock(): https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/TIME_H/clock/main.c#L1

for PEI and DXE phase. It provides TSC based, millisecond precise, exact and chipset independent clock() function.

NOTE: in emulation mode the TSC nominal frequency is supposed to be 1GHz

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/clock?view=vs-2019

  1. time.h  difftime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/difftime-difftime32-difftime64?view=vs-2019

time.h  mktime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/mktime-mktime32-mktime64?view=vs-2019

time.h time(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/time-time32-time64?view=vs-2019

time.h asctime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/asctime-wasctime?view=vs-2019

time.h  ctime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64?view=vs-2019

time.h  gmtime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/gmtime-gmtime32-gmtime64?view=vs-2019

time.h  localtime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/localtime-localtime32-localtime64?view=vs-2019

time.h  strftime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?view=vs-2019

NOTE: All TIME.H functions support UTC only.

All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/TIME_H/timehfunctions/main.c#L52

  1. STRING.H memcpy():https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memcpy-wmemcpy?view=vs-2019

STRING.H memmove():https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memmove-wmemmove?view=vs-2019

STRING.H strcpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcpy-wcscpy-mbscpy?view=vs-2019

STRING.H strncpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l?view=vs-2019

STRING.H strcat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-wcscat-mbscat?view=vs-2019

STRING.H strncat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l?view=vs-2019

STRING.H memcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memcmp-wmemcmp?view=vs-2019

STRING.H strcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcmp-wcscmp-mbscmp?view=vs-2019

STRING.H strncmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncmp-wcsncmp-mbsncmp-mbsncmp-l?view=vs-2019

STRING.H memchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memchr-wmemchr?view=vs-2019

STRING.H strchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strchr-wcschr-mbschr-mbschr-l?view=vs-2019

STRING.H strcspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcspn-wcscspn-mbscspn-mbscspn-l?view=vs-2019

STRING.H strpbrk(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l?view=vs-2019

STRING.H strrchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l?view=vs-2019

STRING.H strspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strspn-wcsspn-mbsspn-mbsspn-l?view=vs-2019

STRING.H strstr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtok-strtok-l-wcstok-wcstok-l-mbstok-mbstok-l?view=vs-2019

STRING.H strtok(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtok-strtok-l-wcstok-wcstok-l-mbstok-mbstok-l?view=vs-2019

STRING.H memset(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memset-wmemset?view=vs-2019

STRING.H strerror(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strerror-strerror-wcserror-wcserror?view=vs-2019

STRING.H strlen(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l?view=vs-2019

NOTE: All STRING.H functions are completely available in PEI and DXE, except strcoll() and strxftm()

All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/STRING_H/stringhfunctions/main.c#L52

  1. WCHAR.H wprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/printf-printf-l-wprintf-wprintf-l?view=vs-2019

WCHAR.H swprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l?view=vs-2019

WCHAR.H vswprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l?view=vs-2019

WCHAR.H wcscpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcpy-wcscpy-mbscpy?view=vs-2019

WCHAR.H wcsncpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l?view=vs-2019

WCHAR.H wcscat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-wcscat-mbscat?view=vs-2019

WCHAR.H wcsncat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l?view=vs-2019

WCHAR.H wcscmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcmp-wcscmp-mbscmp?view=vs-2019

WCHAR.H wcsncmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncmp-wcsncmp-mbsncmp-mbsncmp-l?view=vs-2019

WCHAR.H wcschr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strchr-wcschr-mbschr-mbschr-l?view=vs-2019

WCHAR.H wcscspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcspn-wcscspn-mbscspn-mbscspn-l?view=vs-2019

WCHAR.H wcspbrk(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l?view=vs-2019

WCHAR.H wcsrchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l?view=vs-2019

WCHAR.H wcsspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strspn-wcsspn-mbsspn-mbsspn-l?view=vs-2019

WCHAR.H wcsstr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strstr-wcsstr-mbsstr-mbsstr-l?view=vs-2019

WCHAR.H wcstok(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtok-strtok-l-wcstok-wcstok-l-mbstok-mbstok-l?view=vs-2019

WCHAR.H wcslen(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l?view=vs-2019

WCHAR.H wmemcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memcmp-wmemcmp?view=vs-2019

WCHAR.H wmemcpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memcpy-wmemcpy?view=vs-2019

WCHAR.H wmemmove(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memmove-wmemmove?view=vs-2019

WCHAR.H wmemset(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memset-wmemset?view=vs-2019

NOTE: 21 WCHAR.H functions are available in PEI and DXE. 29 functions are not yet implemented, that are file and multi byte functions

All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/WCHAR_H/wcharhfunctions/main.c

  1. STDIO.H tmpnam(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tempnam-wtempnam-tmpnam-wtmpnam?view=vs-2019

STDIO.H printf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/printf-printf-l-wprintf-wprintf-l?view=vs-2019

STDIO.H snprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l?view=vs-2019

STDIO.H sprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l?view=vs-2019

STDIO.H vsnprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l?view=vs-2019

STDIO.H vsscanf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsscanf-vswscanf?view=vs-2019

STDIO.H sscanf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/sscanf-sscanf-l-swscanf-swscanf-l?view=vs-2019

STDIO.H vprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l?view=vs-2019

STDIO.H vsprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l?view=vs-2019

NOTE: 9 STDIO.H functions are available in PEI and DXE. 36 functions are not implemented for POST drivers because of file I/O (it is standard IO dot h)

NOTE: snprintf(), vsnprintf() and vsscanf() are C99 and implemented due to their usefulness for security related software

NOTE: printf() and vprintf() write to ConOut that is actually not visible in PEI and DXE, but in the Emulator.

All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/STDIO_H/stdiohfunctions/main.c

  1. STDLIB.H atoi(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/atoi-atoi-l-wtoi-wtoi-l?view=vs-2019

STDLIB.H atol(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/atol-atol-l-wtol-wtol-l?view=vs-2019

STDLIB.H strtol(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtol-wcstol-strtol-l-wcstol-l?view=vs-2019

STDLIB.H strtoul(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtoul-strtoul-l-wcstoul-wcstoul-l?view=vs-2019

STDLIB.H rand(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/rand?view=vs-2019

STDLIB.H srand(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/srand?view=vs-2019

STDLIB.H calloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/calloc?view=vs-2019

STDLIB.H free(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/free?view=vs-2019

STDLIB.H malloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/malloc?view=vs-2019

STDLIB.H realloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/realloc?view=vs-2019

STDLIB.H atexit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/atexit?view=vs-2019

STDLIB.H exit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/exit-exit-exit?view=vs-2019

STDLIB.H qsort(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/qsort?view=vs-2019

STDLIB.H abs(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abs-labs-llabs-abs64?view=vs-2019

STDLIB.H labs(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abs-labs-llabs-abs64?view=vs-2019

STDLIB.H div(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/div?view=vs-2019

STDLIB.H ldiv(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/div?view=vs-2019

NOTE: missing from STDLIB.H: abort(), strtod(), atof(), getenv(), system(), bsearch()

All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/STDLIB_H/stdlibhfunctions/main.c

  1. CTYPE.H isalnum(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isalnum-iswalnum-isalnum-l-iswalnum-l?view=vs-2019

CTYPE.H isalpha(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isalpha-iswalpha-isalpha-l-iswalpha-l?view=vs-2019

CTYPE.H iscntrl(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/iscntrl-iswcntrl-iscntrl-l-iswcntrl-l?view=vs-2019

CTYPE.H isdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isdigit-iswdigit-isdigit-l-iswdigit-l?view=vs-2019

CTYPE.H isgraph(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isgraph-iswgraph-isgraph-l-iswgraph-l?view=vs-2019

CTYPE.H islower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l?view=vs-2019

CTYPE.H isprint(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isprint-iswprint-isprint-l-iswprint-l?view=vs-2019

CTYPE.H ispunct(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/ispunct-iswpunct-ispunct-l-iswpunct-l?view=vs-2019

CTYPE.H isspace(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isspace-iswspace-isspace-l-iswspace-l?view=vs-2019

CTYPE.H isupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isupper-isupper-l-iswupper-iswupper-l?view=vs-2019

CTYPE.H isxdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isxdigit-iswxdigit-isxdigit-l-iswxdigit-l?view=vs-2019

CTYPE.H tolower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tolower-tolower-towlower-tolower-l-towlower-l?view=vs-2019

CTYPE.H toupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l?view=vs-2019

NOTE: C locale support only

All functions are tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/CTYPE_H/ctypehfunctions/main.c

  1. WCTYPE.H iswalnum(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isalnum-iswalnum-isalnum-l-iswalnum-l?view=vs-2019

WCTYPE.H iswalpha(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isalpha-iswalpha-isalpha-l-iswalpha-l?view=vs-2019

WCTYPE.H iswblank(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isblank-iswblank-isblank-l-iswblank-l?view=vs-2019

WCTYPE.H iswcntrl(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/iscntrl-iswcntrl-iscntrl-l-iswcntrl-l?view=vs-2019

WCTYPE.H iswdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isdigit-iswdigit-isdigit-l-iswdigit-l?view=vs-2019

WCTYPE.H iswgraph(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isgraph-iswgraph-isgraph-l-iswgraph-l?view=vs-2019

WCTYPE.H iswlower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l?view=vs-2019

WCTYPE.H iswprint(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isprint-iswprint-isprint-l-iswprint-l?view=vs-2019

WCTYPE.H iswpunct(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/ispunct-iswpunct-ispunct-l-iswpunct-l?view=vs-2019

WCTYPE.H iswspace(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isspace-iswspace-isspace-l-iswspace-l?view=vs-2019

WCTYPE.H iswupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isupper-isupper-l-iswupper-iswupper-l?view=vs-2019

WCTYPE.H iswxdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isxdigit-iswxdigit-isxdigit-l-iswxdigit-l?view=vs-2019

WCTYPE.H iswctype(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/isctype-iswctype-isctype-l-iswctype-l?view=vs-2019

WCTYPE.H wctype(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/wctype?view=vs-2019

WCTYPE.H towlower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tolower-tolower-towlower-tolower-l-towlower-l?view=vs-2019

WCTYPE.H towupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l?view=vs-2019

WCTYPE.H towctrans(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/towctrans?view=vs-2019

WCTYPE.H wctrans(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/wctrans?view=vs-2019

NOTE: C locale support only

All functions are tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/WCTYPE_H/wctypehfunctions/main.c

  1. NEW ASSERT.H _wassert(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/assert-macro-assert-wassert?view=vs-2019

NOTE: assert() does NOT run into dead loop.

All functions are tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/ASSERT_H/asserthfunctions/main.c

  1. NEW LOCALE.H localeconv(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/localeconv?view=vs-2019

NEW LOCALE.H setlocale(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=vs-2019

NOTE: locale functions are provided for compatibility. Only “C” locale is supported only.

All functions are tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/LOCALE_H/localehfunctions/main.c

 

Best Regards,

Kilian

 

From: Kilian Kegel
Sent: Wednesday, October 23, 2019 10:03 PM
To: devel@edk2.groups.io
Cc: Kinney, Michael D; Richardson, Brian
Subject: [edk2-devel] [staging/branch]: CdePkg - C Development Environment Package

 

Hi UEFI community,

 

I’d like to introduce the CdePkg to edk2-staging.

 

Some time ago I decided to write my own ANSI C Library for UEFI Shell and POST.

 

The UEFI Shell library (“Torito C Library”) has been production-ready for more than one year.

The POST version of the library (“CdeLib”) is not yet fully tested.

 

I will be demonstrating my verification procedure in the upcoming weeks on EDK2 STAGING  https://github.com/tianocore/edk2-staging/tree/CdePkg

 

Currently there are 3 examples implemented:

  1. argvc: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/HOSTED_ENV/argcv/main.c#L57

argc/argv handling according to https://msdn.microsoft.com/en-us/library/a1y7w461.aspx

  1. systeminterfacePEI: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfacePEI/main.c#L57

demonstration, how PeiServices and FileHandle are passed into main()

  1. systeminterfaceDXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfaceDXE/main.c#L57

demonstration, how SystemTable and ImageHandle are passed into main()

 

Upcoming next demonstration will be the clock() function end of this week

 

The idea is to bring the ANSI C Library interface into POST drivers.

This will:

  1. ease porting tasks
  2. allow cross development
  3. allow developers to focus on their aims, because they aren’t forced to keep in mind a lot of additional info (e.g. RShiftU64)
  4. provide all intrisics to allow the compiler to be a “C compiler”

(e.g. char buffer[256] = { 1 };)

 

What is CdePkg and Torito C Library?

but guarantees  that the C compiler is always fully usable (all intrinsics available) and the C90/C95 standard library is always available

 

What are the design goals?

entire printf()-family, entire scanf()-family.

UEFI-POST-driver just uses small wrapper functions to run the C-Library-Driver code.

This is required for early PEI before memory sizing, when PEI-images run directly out of flash

    1. use original Microsoft header files for UEFI Shell Apps created in VS2019
    2. allow expensive debugging tasks of ANSI C .EFI applications in Visual Studio in its Windows NT counter part
    3. to save my lifetime writing a documentation https://github.com/tianocore/edk2-staging/tree/CdePkg/implemented.md#validation-status

 

CdePkg shall be adjusted to other compilers/tool chains too, once it is feature-complete and accepted by the UEFI community.

As long as it is for Microsoft VS2019 only.

 

CdePkg README.md is here:   https://github.com/tianocore/edk2-staging/tree/CdePkg#cdepkg

CdePkg HOWTO is here: https://github.com/tianocore/edk2-staging/blob/CdePkg/README.md#howto

CdeValidationPkg README.md is here: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/README.md

CdeValidationPkg HOWTO is here: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/README.md

 

HOWTO:

  1. clone the edk2-staging repository
  2. checkout CdePkg
  3. run LAUNCH.BAT
  4. run build -p EmulatorPkg\EmulatorPkg.dsc -t VS2015x86 -a IA32
  5. run DBGEMU.BAT to start emulation (EmulatorPkg)
  6. run build -a IA32 -a X64 -n 5 -t VS2015x86 -b DEBUG -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc
  7. update MinnowBoard with Build/Vlv2TbltDevicePkgX64\DEBUG_VS2015x86\FV\VLV.fd

 

Best regards,

Kilian Kegel