From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (EUR02-AM5-obe.outbound.protection.outlook.com [40.92.67.45]) by mx.groups.io with SMTP id smtpd.web09.7501.1575319051743381173 for ; Mon, 02 Dec 2019 12:37:32 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@outlook.com header.s=selector1 header.b=b8F+gVqY; spf=pass (domain: outlook.com, ip: 40.92.67.45, mailfrom: kilian_kegel@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U2jW5FCGmMjSNXg/uSXW+G+3sOTYxahS6RGrfrw+S6mXq7+gNzXBebLOjEy4HzU5zzCLK7A9Q/3RDVjS8hhHmkPJc6ovUIXEklyWJAw2alwWID22mdZN6TuuKl/FF3LkoGcU6W2AqSwJIW+UMnC7KtjZdTNT+B7DdGRJ0d/nY1qIZ70+KChXx4u2cWJPeysYOibvG4+sdHoG+wmr36p0A+kkNJBcg/bCATKXABnHcD1fAuT1k7cYAc7Z09gM8tbta4kOupVLMnX1wxGv/38xXAYXnZxL+KxBNibXKSQz0x6tDh/RxI2J56B6hidYhGxWf67EUONc9/qPUqBXI/ONhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GBMI6BgS3ijeiJazsVDxQ2+Mr6kkwSngW/LZ4OQH3qc=; b=UgRTmurKBoYhIhJHZysL5tRtqWwhWYMlRjS5Q7hdwWCsekwG3RrtB/KY+Si2K70uVXlnBozg3tLbwf0Iq+lBgzIuqOgafi+HXKZH+Ki+RaRON8c/b8l2b043L3vnCSAsJ5Dhxh+CYXo6wuWQsZXeBk0pU746f5cRWVH4R3mMBAfuL2vG2lcGMXNJNDOt286cMwa0RCAjFHvkQnTfvq69m3LpwBpPffMzZiyBQlOzP/CHPml66Z5NcMGT5JqrT24H7PxBLRsUQ5bvjviMxUYp0n/iQ7K1as0uXEYr/XWAwzcz6pd0ZfqYmBlSkd0HPUsBJintxVI+q1kAI6vqnYwK5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GBMI6BgS3ijeiJazsVDxQ2+Mr6kkwSngW/LZ4OQH3qc=; b=b8F+gVqY7Wl1x5vLMvkloIeySXghhkBdcnVYOGN/06WKT/KEXNKyM2dbZp61CeSKqdrSc6oilV/jXmABL6c8Y4LVrwzGjbqT0G5HL9bAgS5PaVVGbjY8jSdSvzbnQroG4l/NvPvp9Q9BX5o7laJ+Ttr08qkox04SBLdIgJVyvahty4trDJ8cOzBrfsR/1y56l5Hd0bOcYPIJZSxo0U12c/EMXttUWu2/FwTHE5elV12K6gm1qx67GcNCEVKK+u4sIM/S7qRlD9ppOZGzuRNoUFmrvu2uLzJilFeNWYl/Q7yfb5qDKHgTtYJ47cbj3/L3xCMjC4k5ogEOvVXr5zSAFQ== Received: from AM5EUR02FT039.eop-EUR02.prod.protection.outlook.com (10.152.8.60) by AM5EUR02HT206.eop-EUR02.prod.protection.outlook.com (10.152.9.193) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.18; Mon, 2 Dec 2019 20:37:27 +0000 Received: from VI1PR0502MB3968.eurprd05.prod.outlook.com (10.152.8.59) by AM5EUR02FT039.mail.protection.outlook.com (10.152.9.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2495.18 via Frontend Transport; Mon, 2 Dec 2019 20:37:27 +0000 Received: from VI1PR0502MB3968.eurprd05.prod.outlook.com ([fe80::4408:c7c7:aaa3:2a91]) by VI1PR0502MB3968.eurprd05.prod.outlook.com ([fe80::4408:c7c7:aaa3:2a91%7]) with mapi id 15.20.2495.014; Mon, 2 Dec 2019 20:37:27 +0000 From: "Kilian Kegel" To: "devel@edk2.groups.io" CC: "Kinney, Michael D" , "Richardson, Brian" Subject: CdePkg - added unit test for ASSERT.H and LOCALE.H functions Thread-Topic: CdePkg - added unit test for ASSERT.H and LOCALE.H functions Thread-Index: AQHVqU99pnvdVIM4XUiUIO5rzISktg== Date: Mon, 2 Dec 2019 20:37:27 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:860C43B8F64669D9A8C1688FD544AAF168037EA69A7278CE854F36781EC5326A;UpperCasedChecksum:0E45FD080CE765A253FC170C28C3084CA1CE00055E447DDD15CB662F889A3A38;SizeAsReceived:6957;Count:43 x-tmn: [cUAPdQx6Zunm74zHtI/0tJ1D3N4cJ1OY] x-ms-publictraffictype: Email x-incomingheadercount: 43 x-eopattributedmessage: 0 x-ms-office365-filtering-correlation-id: ff9fb51a-ddb8-4f4f-f404-08d777677219 x-ms-traffictypediagnostic: AM5EUR02HT206: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kpSHn7P2E4h4eoc5u02sjsWJYCAqVeTLpuA521WQsjbjUIt2W3qhnIIAY35uoD3oKfhV0o/5/Ey1wL8/o7QLp/MpznbPq2CAamex10iefmTu8BYduIlOvEkiyGrGpdXYCXmr8YfS2+Y3A5YvSupm/zIhSNVG1oAw10epDDreaOidyuVBg0H6pz5wutA9t9Y7Rx+BaOqnP+l/nqVqYeehS0t+rizjRYuOYNMbrJbAIcs= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: ff9fb51a-ddb8-4f4f-f404-08d777677219 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2019 20:37:27.5225 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5EUR02HT206 X-Groupsio-MsgNum: 51562 Content-Language: en-US Content-Type: multipart/related; boundary="_004_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_"; type="multipart/alternative" --_004_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_ Content-Type: multipart/alternative; boundary="_000_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_" --_000_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi UEFI community, I=92d like to inform you about an update in the CdePkg branch of edk2-sta= ging. https://github.com/tianocore/edk2-staging/tree/CdePkg#cdepkg The goal of the CdePkg is to provide an ANSI C Interface for UEFI POST dri= vers, that enables BIOS engineers to (more) easily port standard C programs or l= ibraries (e.g. the openSSL library, already done) to POST drivers. Furthermore the ANSI C Interface is disseminated widely, also it=92s 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(), local= econv() 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/CdeVali= dationPkg/HOSTED_ENV/argcv/main.c#L57 argc/argv handling according to https://msdn.microsoft.com/en-us/library/a= 1y7w461.aspx 1. systeminterfacePEI: https://github.com/tianocore/edk2-staging/blob/C= dePkg/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/C= dePkg/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/CdePk= g/CdeValidationPkg/TIME_H/clock/main.c#L1 for PEI and DXE phase. It provides TSC based, millisecond precise, exact a= nd 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?vie= w=3Dvs-2019 1. time.h difftime(): https://docs.microsoft.com/en-us/cpp/c-runtime-l= ibrary/reference/difftime-difftime32-difftime64?view=3Dvs-2019 time.h mktime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/mktime-mktime32-mktime64?view=3Dvs-2019<%20https:/docs.microsoft.c= om/en-us/cpp/c-runtime-library/reference/mktime-mktime32-mktime64?view=3Dvs= -2019> time.h time(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/refe= rence/time-time32-time64?view=3Dvs-2019<%20https:/docs.microsoft.com/en-us/= cpp/c-runtime-library/reference/time-time32-time64?view=3Dvs-2019> time.h asctime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/asctime-wasctime?view=3Dvs-2019 time.h ctime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/ctime-ctime32-ctime64-wctime-wctime32-wctime64?view=3Dvs-2019 time.h gmtime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/gmtime-gmtime32-gmtime64?view=3Dvs-2019 time.h localtime(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/localtime-localtime32-localtime64?view=3Dvs-2019 time.h strftime(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strftime-wcsftime-strftime-l-wcsftime-l?view=3Dvs-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/m= ain.c#L52 1. STRING.H memcpy():https://docs.microsoft.com/en-us/cpp/c-runtime-lib= rary/reference/memcpy-wmemcpy?view=3Dvs-2019 STRING.H memmove():https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memmove-wmemmove?view=3Dvs-2019 STRING.H strcpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strcpy-wcscpy-mbscpy?view=3Dvs-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=3Dvs-= 2019 STRING.H strcat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strcat-wcscat-mbscat?view=3Dvs-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=3Dvs-= 2019 STRING.H memcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memcmp-wmemcmp?view=3Dvs-2019 STRING.H strcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strcmp-wcscmp-mbscmp?view=3Dvs-2019 STRING.H strncmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strncmp-wcsncmp-mbsncmp-mbsncmp-l?view=3Dvs-2019 STRING.H memchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memchr-wmemchr?view=3Dvs-2019 STRING.H strchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strchr-wcschr-mbschr-mbschr-l?view=3Dvs-2019 STRING.H strcspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strcspn-wcscspn-mbscspn-mbscspn-l?view=3Dvs-2019 STRING.H strpbrk(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l?view=3Dvs-2019 STRING.H strrchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l?view=3Dvs-2019 STRING.H strspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strspn-wcsspn-mbsspn-mbsspn-l?view=3Dvs-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=3Dvs-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=3Dvs-2019 STRING.H memset(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memset-wmemset?view=3Dvs-2019 STRING.H strerror(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/strerror-strerror-wcserror-wcserror?view=3Dvs-2019 STRING.H strlen(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l?view=3Dvs-2019 NOTE: All STRING.H functions are completely available in PEI and DXE, exce= pt strcoll() and strxftm() All functions are tested in one single driver PEI/DXE: https://github.com/= tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/STRING_H/stringhfunctio= ns/main.c#L52 1. WCHAR.H wprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-li= brary/reference/printf-printf-l-wprintf-wprintf-l?view=3Dvs-2019 WCHAR.H swprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l?view=3Dvs-2019 WCHAR.H vswprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l?view=3Dvs= -2019 WCHAR.H wcscpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strcpy-wcscpy-mbscpy?view=3Dvs-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=3Dvs-2= 019 WCHAR.H wcscat(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strcat-wcscat-mbscat?view=3Dvs-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=3Dvs-2= 019 WCHAR.H wcscmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strcmp-wcscmp-mbscmp?view=3Dvs-2019 WCHAR.H wcsncmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strncmp-wcsncmp-mbsncmp-mbsncmp-l?view=3Dvs-2019 WCHAR.H wcschr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strchr-wcschr-mbschr-mbschr-l?view=3Dvs-2019 WCHAR.H wcscspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strcspn-wcscspn-mbscspn-mbscspn-l?view=3Dvs-2019 WCHAR.H wcspbrk(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l?view=3Dvs-2019 WCHAR.H wcsrchr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l?view=3Dvs-2019 WCHAR.H wcsspn(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strspn-wcsspn-mbsspn-mbsspn-l?view=3Dvs-2019 WCHAR.H wcsstr(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strstr-wcsstr-mbsstr-mbsstr-l?view=3Dvs-2019 WCHAR.H wcstok(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strtok-strtok-l-wcstok-wcstok-l-mbstok-mbstok-l?view=3Dvs-2019 WCHAR.H wcslen(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l?view=3Dvs-2019 WCHAR.H wmemcmp(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memcmp-wmemcmp?view=3Dvs-2019 WCHAR.H wmemcpy(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memcpy-wmemcpy?view=3Dvs-2019 WCHAR.H wmemmove(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/memmove-wmemmove?view=3Dvs-2019 WCHAR.H wmemset(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/memset-wmemset?view=3Dvs-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-lib= rary/reference/tempnam-wtempnam-tmpnam-wtmpnam?view=3Dvs-2019 STDIO.H printf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/printf-printf-l-wprintf-wprintf-l?view=3Dvs-2019 STDIO.H snprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l?view=3Dvs-201= 9 STDIO.H sprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l?view=3Dvs-2019 STDIO.H vsnprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l?view=3D= vs-2019 STDIO.H vsscanf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/vsscanf-vswscanf?view=3Dvs-2019 STDIO.H sscanf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/sscanf-sscanf-l-swscanf-swscanf-l?view=3Dvs-2019 STDIO.H vprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/vprintf-vprintf-l-vwprintf-vwprintf-l?view=3Dvs-2019 STDIO.H vsprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l?view=3Dvs-= 2019 NOTE: 9 STDIO.H functions are available in PEI and DXE. 36 functions are n= ot 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-libr= ary/reference/atoi-atoi-l-wtoi-wtoi-l?view=3Dvs-2019 STDLIB.H atol(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/atol-atol-l-wtol-wtol-l?view=3Dvs-2019 STDLIB.H strtol(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/strtol-wcstol-strtol-l-wcstol-l?view=3Dvs-2019 STDLIB.H strtoul(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/strtoul-strtoul-l-wcstoul-wcstoul-l?view=3Dvs-2019 STDLIB.H rand(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/rand?view=3Dvs-2019 STDLIB.H srand(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/srand?view=3Dvs-2019 STDLIB.H calloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/calloc?view=3Dvs-2019 STDLIB.H free(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/free?view=3Dvs-2019 STDLIB.H malloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/malloc?view=3Dvs-2019 STDLIB.H realloc(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/realloc?view=3Dvs-2019 STDLIB.H atexit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/atexit?view=3Dvs-2019 STDLIB.H exit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/exit-exit-exit?view=3Dvs-2019 STDLIB.H qsort(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/r= eference/qsort?view=3Dvs-2019 STDLIB.H abs(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/ref= erence/abs-labs-llabs-abs64?view=3Dvs-2019 STDLIB.H labs(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/abs-labs-llabs-abs64?view=3Dvs-2019 STDLIB.H div(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/ref= erence/div?view=3Dvs-2019 STDLIB.H ldiv(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/re= ference/div?view=3Dvs-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/stdlibhfunctio= ns/main.c 1. CTYPE.H isalnum(): https://docs.microsoft.com/en-us/cpp/c-runtime-li= brary/reference/isalnum-iswalnum-isalnum-l-iswalnum-l?view=3Dvs-2019 CTYPE.H isalpha(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isalpha-iswalpha-isalpha-l-iswalpha-l?view=3Dvs-2019 CTYPE.H iscntrl(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/iscntrl-iswcntrl-iscntrl-l-iswcntrl-l?view=3Dvs-2019 CTYPE.H isdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isdigit-iswdigit-isdigit-l-iswdigit-l?view=3Dvs-2019 CTYPE.H isgraph(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isgraph-iswgraph-isgraph-l-iswgraph-l?view=3Dvs-2019 CTYPE.H islower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/islower-iswlower-islower-l-iswlower-l?view=3Dvs-2019 CTYPE.H isprint(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isprint-iswprint-isprint-l-iswprint-l?view=3Dvs-2019 CTYPE.H ispunct(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/ispunct-iswpunct-ispunct-l-iswpunct-l?view=3Dvs-2019 CTYPE.H isspace(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isspace-iswspace-isspace-l-iswspace-l?view=3Dvs-2019 CTYPE.H isupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/isupper-isupper-l-iswupper-iswupper-l?view=3Dvs-2019 CTYPE.H isxdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/isxdigit-iswxdigit-isxdigit-l-iswxdigit-l?view=3Dvs-2019 CTYPE.H tolower(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/tolower-tolower-towlower-tolower-l-towlower-l?view=3Dvs-2019 CTYPE.H toupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/toupper-toupper-towupper-toupper-l-towupper-l?view=3Dvs-2019 NOTE: C locale support only All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValid= ationPkg/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=3Dvs-2019 WCTYPE.H iswalpha(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isalpha-iswalpha-isalpha-l-iswalpha-l?view=3Dvs-2019 WCTYPE.H iswblank(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isblank-iswblank-isblank-l-iswblank-l?view=3Dvs-2019 WCTYPE.H iswcntrl(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/iscntrl-iswcntrl-iscntrl-l-iswcntrl-l?view=3Dvs-2019 WCTYPE.H iswdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isdigit-iswdigit-isdigit-l-iswdigit-l?view=3Dvs-2019 WCTYPE.H iswgraph(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isgraph-iswgraph-isgraph-l-iswgraph-l?view=3Dvs-2019 WCTYPE.H iswlower(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/islower-iswlower-islower-l-iswlower-l?view=3Dvs-2019 WCTYPE.H iswprint(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isprint-iswprint-isprint-l-iswprint-l?view=3Dvs-2019 WCTYPE.H iswpunct(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/ispunct-iswpunct-ispunct-l-iswpunct-l?view=3Dvs-2019 WCTYPE.H iswspace(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isspace-iswspace-isspace-l-iswspace-l?view=3Dvs-2019 WCTYPE.H iswupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isupper-isupper-l-iswupper-iswupper-l?view=3Dvs-2019 WCTYPE.H iswxdigit(): https://docs.microsoft.com/en-us/cpp/c-runtime-libra= ry/reference/isxdigit-iswxdigit-isxdigit-l-iswxdigit-l?view=3Dvs-2019 WCTYPE.H iswctype(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/isctype-iswctype-isctype-l-iswctype-l?view=3Dvs-2019 WCTYPE.H wctype(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/= reference/wctype?view=3Dvs-2019 WCTYPE.H towlower(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/tolower-tolower-towlower-tolower-l-towlower-l?view=3Dvs-2019 WCTYPE.H towupper(): https://docs.microsoft.com/en-us/cpp/c-runtime-librar= y/reference/toupper-toupper-towupper-toupper-l-towupper-l?view=3Dvs-2019 WCTYPE.H towctrans(): https://docs.microsoft.com/en-us/cpp/c-runtime-libra= ry/reference/towctrans?view=3Dvs-2019 WCTYPE.H wctrans(): https://docs.microsoft.com/en-us/cpp/c-runtime-library= /reference/wctrans?view=3Dvs-2019 NOTE: C locale support only All functions are tested in one single driver PEI/DXE: https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValid= ationPkg/WCTYPE_H/wctypehfunctions/main.c 1. NEW ASSERT.H _wassert(): https://docs.microsoft.com/en-us/cpp/c-runt= ime-library/reference/assert-macro-assert-wassert?view=3Dvs-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/CdeValid= ationPkg/ASSERT_H/asserthfunctions/main.c 1. NEW LOCALE.H localeconv(): https://docs.microsoft.com/en-us/cpp/c-ru= ntime-library/reference/localeconv?view=3Dvs-2019 NEW LOCALE.H setlocale(): https://docs.microsoft.com/en-us/cpp/c-runtime-l= ibrary/reference/setlocale-wsetlocale?view=3Dvs-2019 NOTE: locale functions are provided for compatibility. Only =93C=94 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/localehfuncti= ons/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, Bria= n Subject: [edk2-devel] [staging/branch]: CdePkg - C Development Environment= Package Hi UEFI community, I=92d 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 (=93Torito C Library=94) has been production-ready = for more than one year. The POST version of the library (=93CdeLib=94) 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/CdeVali= dationPkg/HOSTED_ENV/argcv/main.c#L57 argc/argv handling according to https://msdn.microsoft.com/en-us/library/a= 1y7w461.aspx 1. systeminterfacePEI: https://github.com/tianocore/edk2-staging/blob/C= dePkg/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/C= dePkg/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=92t force= d to keep in mind a lot of additional info (e.g. RShiftU64) 4. provide all intrisics to allow the compiler to be a =93C compiler=94 (e.g. char buffer[256] =3D { 1 };) What is CdePkg and Torito C Library? * CdePkg and Torito C Library are a one man show / after work party, t= hat is owned and written solely by myself * CdePkg is a reference implementation only for Microsoft C compiler * CdePkg is a feasibility study * CdePkg is the successor of Torito C, based on the same source code * CdePkg C Development Environment is similar to MdePkg Module Develo= pment Environment 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? * to rewrite the whole thing from scratch, without using any public so= urce code from GNU, BSD, Watcom * completeness: full blown C90 + C95 support, as lowest common denomin= ator * tailored for UEFI: small code size, for UEFI-POST-driver uses a C-Li= brary-Driver, that contains core/worker functions for realloc() =3D=3D mal= loc() and free(), entire printf()-family, entire scanf()-family. UEFI-POST-driver just uses small wrapper functions to run the C-Library-Dr= iver code. * stable, exact, chipset independent TSC based clock() with CLOCKS_PER= _SEC =3D=3D 1000 * complete set of the Microsoft C-compiler intrinsic functions * ROM-able! Runs with stack but w/o any static storage duration in .da= ta segment, e.g. for rand(), strtok(), tmpfile() This is required for early PEI before memory sizing, when PEI-images run d= irectly out of flash * Microsoft (bug) compatible (as far as possible) * use original Microsoft header files for UEFI Shell Apps created i= n VS2019 * allow expensive debugging tasks of ANSI C .EFI applications in Vi= sual Studio in its Windows NT counter part * to save my lifetime writing a documentation https://github.com/ti= anocore/edk2-staging/tree/CdePkg/implemented.md#validation-status * all the above in one single C-Library CdeLib.lib CdePkg shall be adjusted to other compilers/tool chains too, once it is fe= ature-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/CdePk= g/README.md#howto CdeValidationPkg README.md is here: https://github.com/tianocore/edk2-stag= ing/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 Vlv2TbltDevic= ePkg\PlatformPkgX64.dsc 7. update MinnowBoard with Build/Vlv2TbltDevicePkgX64\DEBUG_VS2015x86\F= V\VLV.fd Best regards, Kilian Kegel --_000_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable

Hi UEFI community,=

 

I=92d like to inform yo= u about an update in the CdePkg branch of  edk2-staging.

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

 

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

that enables BIOS engin= eers to (more) easily port standard C programs or libraries

(e.g. the openSSL libra= ry, already done) to POST drivers.

 

Furthermore the ANSI= C Interface is disseminated widely, also it=92s bugs and pitfalls are known very w= ell

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

compared to the proprietary interface that is avail= able today in Tianocore UEFI.=

 

Now 3 new ANSI C functi= ons _= wassert() from ASSERT.H and setlocale(), localeconv() from LOCALE.H

are introduced for P= EI and DXE.

 

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

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

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

  1. = systeminterfacePEI: https://github.com/= tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfa= cePEI/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/systeminterfa= ceDXE/main.c#L57

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

 

ANSI C LIBRA= RY functions:

  1. time.h clock(): https://github.com/tianocore/edk2-st= aging/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 em= ulation mode the TSC nominal frequency is supposed to be 1GHz

https://docs.microsof= t.com/en-us/cpp/c-runtime-library/reference/clock?view=3Dvs-2019

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

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

time.h ti= me(): h= ttps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/time-time32= -time64?view=3Dvs-2019

time.h as= ctime(): https= ://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/asctime-wasctim= e?view=3Dvs-2019

time.h  = ctime(): https://docs.microsoft.com/en-us/cpp/c-runtime-lib= rary/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64?view=3Dvs-201= 9

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

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

time.h  = strftime(): https://do= cs.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-st= rftime-l-wcsftime-l?view=3Dvs-2019

NOTE: All T= IME.H functions support UTC only.

All functions ar= e tested in one single driver PEI/DXE: https://github.com/tianoco= re/edk2-staging/blob/CdePkg/CdeValidationPkg/TIME_H/timehfunctions/main.c#L= 52

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

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

STRING.H strc= py(): http= s://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcpy-wcscpy-= mbscpy?view=3Dvs-2019

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

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

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

STRING.H = memcmp(): htt= ps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memcmp-wmemcm= p?view=3Dvs-2019

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

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

STRING.H = memchr(): htt= ps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memchr-wmemch= r?view=3Dvs-2019

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

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

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

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

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

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

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

STRING.H = memset(): htt= ps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/memset-wmemse= t?view=3Dvs-2019

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

STRING.H = strlen(): https://docs.microsoft.com/en-us/cpp/c-runt= ime-library/reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l?vie= w=3Dvs-2019

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

All functions ar= e tested in one single driver PEI/DXE: https://github.com/tia= nocore/edk2-staging/blob/CdePkg/CdeValidationPkg/STRING_H/stringhfunctions/= main.c#L52

  1. WCHAR.H wpr= intf(): https://docs.mi= crosoft.com/en-us/cpp/c-runtime-library/reference/printf-printf-l-wprintf-w= printf-l?view=3Dvs-2019

WCHAR.H swprintf(): https://docs.m= icrosoft.com/en-us/cpp/c-runtime-library/reference/sprintf-sprintf-l-swprin= tf-swprintf-l-swprintf-l?view=3Dvs-2019

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

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

WCHAR.H wcsncpy(): https://d= ocs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-strncpy-l-w= csncpy-wcsncpy-l-mbsncpy-mbsncpy-l?view=3Dvs-2019

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

WCHAR.H wcsncat(): https://d= ocs.microsoft.com/en-us/cpp/c-runtime-library/reference/strncat-strncat-l-w= csncat-wcsncat-l-mbsncat-mbsncat-l?view=3Dvs-2019

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

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

WCHAR.H wcschr(): https://docs.microsoft.com/en-us/= cpp/c-runtime-library/reference/strchr-wcschr-mbschr-mbschr-l?view=3Dvs-201= 9WCHAR.H wcscspn(): https://docs.microsoft.com/en= -us/cpp/c-runtime-library/reference/strcspn-wcscspn-mbscspn-mbscspn-l?view= =3Dvs-2019

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

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

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

WCHAR.H wcsstr(): https://docs.microsoft.com/en-us/= cpp/c-runtime-library/reference/strstr-wcsstr-mbsstr-mbsstr-l?view=3Dvs-201= 9WCHAR.H wcstok(): https://docs.mi= crosoft.com/en-us/cpp/c-runtime-library/reference/strtok-strtok-l-wcstok-wc= stok-l-mbstok-mbstok-l?view=3Dvs-2019

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

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

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

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

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

NOTE: 21 WC= HAR.H functions are available in PEI and DXE. 29 functions are not yet impl= emented, that are file and multi byte functions

All functions ar= e tested in one single driver PEI/DXE: https://github.com/tiano= core/edk2-staging/blob/CdePkg/CdeValidationPkg/WCHAR_H/wcharhfunctions/main= .c

  1. STDIO.H tmp= nam(): https://docs.micro= soft.com/en-us/cpp/c-runtime-library/reference/tempnam-wtempnam-tmpnam-wtmp= nam?view=3Dvs-2019

STDIO.H p= rintf(): https://docs.microso= ft.com/en-us/cpp/c-runtime-library/reference/printf-printf-l-wprintf-wprint= f-l?view=3Dvs-2019

STDIO.H s= nprintf(): https= ://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-snprin= tf-snprintf-l-snwprintf-snwprintf-l?view=3Dvs-2019

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

STDIO.H v= snprintf(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsnprin= tf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l?view=3Dvs-2019<= b>

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

STDIO.H s= scanf(): https://docs.microso= ft.com/en-us/cpp/c-runtime-library/reference/sscanf-sscanf-l-swscanf-swscan= f-l?view=3Dvs-2019

STDIO.H v= printf(): https://docs.micro= soft.com/en-us/cpp/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-v= wprintf-l?view=3Dvs-2019

STDIO.H v= sprintf(): ht= tps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-vsp= rintf-l-vswprintf-vswprintf-l-vswprintf-l?view=3Dvs-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)<= /span>

NOTE: snpri= ntf(), vsnprintf() and vsscanf() are C99 and implemented due to their usefu= lness for security related software

NOTE: print= f() and vprintf() write to ConOut that is actually not visible in PEI and D= XE, but in the Emulator.

All functions ar= e 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(): <= /span>https://docs.microsoft.com/en-u= s/cpp/c-runtime-library/reference/atoi-atoi-l-wtoi-wtoi-l?view=3Dvs-2019

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

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

STDLIB.H strtoul(): https://docs.micr= osoft.com/en-us/cpp/c-runtime-library/reference/strtoul-strtoul-l-wcstoul-w= cstoul-l?view=3Dvs-2019

STDLIB.H rand(): https://docs.microsoft.com/en-us/cpp/c-runtime-l= ibrary/reference/rand?view=3Dvs-2019

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

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

STDLIB.H free(): https://docs.microsoft.com/en-us/cpp/c-runtime-l= ibrary/reference/free?view=3Dvs-2019

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

STDLIB.H realloc(): https://docs.microsoft.com/en-us/cpp/c-runtim= e-library/reference/realloc?view=3Dvs-2019

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

STDLIB.H exit(): https://docs.microsoft.com/en-us/cpp/c= -runtime-library/reference/exit-exit-exit?view=3Dvs-2019<= span style=3D"font-family:"Miriam Fixed";color:black">=

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

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

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

STDLIB.H div(): https://docs.microsoft.com/en-us/cpp/c-runtime-li= brary/reference/div?view=3Dvs-2019

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

NOTE: missi= ng from STDLIB.H: abort(), strtod(), atof(), getenv(), system(), bsearch()<= o:p>

All functions ar= e tested in one single driver PEI/DXE: https://github.com/tianoco= re/edk2-staging/blob/CdePkg/CdeValidationPkg/STDLIB_H/stdlibhfunctions/main= .c

  1. CTYPE.H isa= lnum(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/referen= ce/isalnum-iswalnum-isalnum-l-iswalnum-l?view=3Dvs-2019

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

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

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

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

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

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

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

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

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

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

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

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

NOTE: C loc= ale support only

All functions ar= e tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidatio= nPkg/CTYPE_H/ctypehfunctions/main.c

  1. WCTYPE.H is= walnum(): https://docs.microsoft.com/en-us/cpp/c-runtime-library/referen= ce/isalnum-iswalnum-isalnum-l-iswalnum-l?view=3Dvs-2019

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

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

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

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

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

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

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

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

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

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

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

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

WCTYPE.H = wctype(): https://doc= s.microsoft.com/en-us/cpp/c-runtime-library/reference/wctype?view=3Dvs-2019=

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

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

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

WCTYPE.H = wctrans(): https://do= cs.microsoft.com/en-us/cpp/c-runtime-library/reference/wctrans?view=3Dvs-20= 19

NOTE: C loc= ale support only

All functions ar= e tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeValidat= ionPkg/WCTYPE_H/wctypehfunctions/main.c

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

NOTE: asser= t() does NOT run into dead loop.

All functions ar= e tested in one single driver PEI/DXE:  https://github.com/tianocore/edk2-staging/blob/CdePkg/CdeVal= idationPkg/ASSERT_H/asserthfunctions/main.c

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

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

NOTE: local= e functions are provided for compatibility. Only =93C=94 locale is supporte= d only.

All functions ar= e tested in one single driver PEI/DXE:  https://github.c= om/tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/LOCALE_H/localehfunc= tions/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 Envi= ronment Package

 

Hi UEFI community,=

 

I=92d like to introduce= the CdePkg to edk2-staging.

 

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

 

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

The POST version of th= e library (=93CdeLib=94) is not yet fully tested.

 

I will be demonstratin= g my verification procedure in the upcoming weeks on EDK2 STAGING  h= ttps://github.com/tianocore/edk2-staging/tree/CdePkg

 

Currently there are 3 examples implemented:

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

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

  1. = systeminterfacePEI: https://github.com/= tianocore/edk2-staging/blob/CdePkg/CdeValidationPkg/SYSTEM_IF/systeminterfa= cePEI/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/systeminterfa= ceDXE/main.c#L57

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

 

Upcoming next demonstr= ation will be the clock() function end of this week

 

The idea is to bring t= he ANSI C Library interface into POST drivers.

This will:<= /span>

  1. eas= e porting tasks
  2. allow cross development
  3. allow develo= pers to focus on their aims, because they aren=92t forced to keep in mind a lo= t of additional info (e.g. RShiftU64)
  4. provide all intrisics to allow the compiler to be a =93C compiler=94

(e.g. char b= uffer[256] =3D { 1 };)

 

What is CdePkg and Tor= ito C Library?

  • Cde= Pkg and Torito C Library are a one man show / after work party, that is owned and written solely b= y myself
  • CdePkg is a reference implementation only for Microsoft= C compiler
  • CdePkg is a feasibility study
  • CdePkg is t= he successor of Torito C, based on the same source code
  • CdePkg C= Development Environment is similar to  MdePkg Module Development Envi= ronment

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

 

What are the design go= als?

  • to rewrite the whole thing from scratch, without using any public source c= ode from GNU, BSD, Watcom
  • completeness: full blown C90 + C95 support, as lowest common denominat= or
  • tailored for UEFI: small code size, for UEFI-POST-driver uses a C-Library-= Driver, that contains core/worker functions for realloc() =3D=3D  mal= loc() and free()<= /b>,

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

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

  • sta= ble, exact, chipset independent TSC based clock()= with CLOCKS_PER_SEC =3D=3D 1000
  • complete set of the M= icrosoft C-compiler intrinsic functions
  • ROM-able! Runs with stack but w/o any static sto= rage duration in .data segment, e.g. for r= and(), strtok(), tmpfile()

This is require= d for early PEI before memory sizing, when PEI-images run directly out of f= lash

  • Microsoft (bug) compatible (as far as possible)
    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 Stud= io in its Windows NT counter part
    3. to save my lifetime writing a documentation https://github.com/tianocore/edk2-staging/tree/CdePkg/implemented.md#valid= ation-status
  • all the above in one single C-Library CdeLib.lib

 

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 f= or Microsoft VS2019 only.

 

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

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

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

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

 

HOWTO:

  1. clo= ne the edk2-staging repository
  2. checkout CdePkg
  3. run LAUNCH.BAT
  4. run build -p EmulatorPkg\Emul= atorPkg.dsc -t VS2015x86 -a IA32=
  5. run DBGEMU.BAT to start emulation (EmulatorPkg)
  6. <= li class=3D"xmsonormal" style=3D"mso-list:l1 level1 lfo5">run build -a IA32 -a X64 -n 5 -t VS2015x86 -b DEB= UG -p Vlv2TbltDevicePkg\PlatformPkgX64.dsc=
  7. update MinnowBoard with= Build/Vlv2TbltDevicePkgX64\DEBUG_VS2015x86\FV\VLV.fd

&nb= sp;

Best regard= s,

Kilian Kege= l

 

 

 

 

 

 

--_000_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_-- --_004_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_ Content-Type: image/png; name="8066803E632A4A21BCEF6753C23EADA5.png" Content-Description: 8066803E632A4A21BCEF6753C23EADA5.png Content-Disposition: inline; filename="8066803E632A4A21BCEF6753C23EADA5.png"; size=135; creation-date="Mon, 02 Dec 2019 20:37:26 GMT"; modification-date="Mon, 02 Dec 2019 20:37:26 GMT" Content-ID: Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAsAAAAABCAYAAADQBBjXAAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAcSURBVEhL7cMBDQAADAIg+5f29jhsZKqqqj+m Bw+ivV+AUDF3AAAAAElFTkSuQmCC --_004_VI1PR0502MB396840C8731FEA0745523CD9EB430VI1PR0502MB3968_--