浏览代码

package/gnu-efi: fix build due to short-wchar

The gnu-efi code base is so far built with -fshort-wchar:

‘-fshort-wchar’
     Override the underlying type for ‘wchar_t’ to be ‘short unsigned
     int’ instead of the default for the target.  This option is useful
     for building programs to run under WINE.

     *Warning:* the ‘-fshort-wchar’ switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Use it to conform to a non-default application binary
     interface.

However, this is highly incompatible with the definitions of wchar_t
by musl, causing build issues:

/workdir/instance-0/output-1/build/gnu-efi-3.0.18//lib/console.c:84:68: error: passing argument 2 of 'ConOut->OutputString' from incompatible pointer type [-Werror=incompatible-pointer-types]
[...]
/workdir/instance-0/output-1/build/gnu-efi-3.0.18//lib/console.c:84:68: note: expected 'CHAR16 *' {aka 'int *'} but argument is of type 'short unsigned int *'

These have been addressed upstream by simply not using -fshort-wchar
anymore, so we backport the relevant patches.

The patch 0003-Use-char16_t-literals.patch was directly backported, it
was "redone" (it's a very mechanical patch) as backporting the patch
and fixing the conflicts was more effort than redoing the patch from
scratch. But in essence, it is the same patch as what is upstream.

Fixes:

  http://autobuild.buildroot.net/results/8b2f5b38284e70dde8c5619e5050e7f201a0bcc3/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[Julien: fix patch 0003 EOL modified by the mailing list]
Signed-off-by: Julien Olivain <ju.o@free.fr>
Thomas Petazzoni 6 月之前
父节点
当前提交
d4fa17f441
共有 2 个文件被更改,包括 2267 次插入0 次删除
  1. 164 0
      package/gnu-efi/0002-Make-CHAR16-use-uint16_t.patch
  2. 2103 0
      package/gnu-efi/0003-Use-char16_t-literals.patch

+ 164 - 0
package/gnu-efi/0002-Make-CHAR16-use-uint16_t.patch

@@ -0,0 +1,164 @@
+From f65e5db5666529abb18fe24f5c45331404a1ce99 Mon Sep 17 00:00:00 2001
+From: Callum Farmer <gmbr3@opensuse.org>
+Date: Wed, 29 May 2024 16:22:50 +0100
+Subject: [PATCH] Make CHAR16 use uint16_t
+
+musl-libc doesn't like fshort-wchar so remove wchar_t usage
+Use uint16_t as char16_t can be up to 32bits
+Fixes ncroxon/gnu-efi#16
+
+Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
+Upstream: https://github.com/ncroxon/gnu-efi/commit/edfda7c396134c7109444b230ce4b0da1e61d524
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+---
+ Make.defaults             | 4 ++--
+ inc/aarch64/efibind.h     | 2 +-
+ inc/arm/efibind.h         | 2 +-
+ inc/ia32/efibind.h        | 2 +-
+ inc/ia64/efibind.h        | 2 +-
+ inc/loongarch64/efibind.h | 2 +-
+ inc/mips64el/efibind.h    | 2 +-
+ inc/riscv64/efibind.h     | 5 ++---
+ inc/x86_64/efibind.h      | 2 +-
+ 9 files changed, 11 insertions(+), 12 deletions(-)
+
+diff --git a/Make.defaults b/Make.defaults
+index c9f9b4f..83204a6 100755
+--- a/Make.defaults
++++ b/Make.defaults
+@@ -187,11 +187,11 @@ endif
+ 
+ ifeq (FreeBSD, $(findstring FreeBSD, $(OS)))
+ CFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
+-           -funsigned-char -fshort-wchar -fno-strict-aliasing \
++           -funsigned-char -fno-strict-aliasing \
+            -ffreestanding -fno-stack-protector
+ else
+ CFLAGS  += $(ARCH3264) -g -O2 -Wall -Wextra -Wno-pointer-sign -Werror \
+-           -funsigned-char -fshort-wchar -fno-strict-aliasing \
++           -funsigned-char -fno-strict-aliasing \
+ 	   -ffreestanding -fno-stack-protector -fno-stack-check \
+            $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)
+ endif
+diff --git a/inc/aarch64/efibind.h b/inc/aarch64/efibind.h
+index d6b5d0f..1a1fb79 100644
+--- a/inc/aarch64/efibind.h
++++ b/inc/aarch64/efibind.h
+@@ -40,7 +40,7 @@ typedef int64_t             intptr_t;
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+diff --git a/inc/arm/efibind.h b/inc/arm/efibind.h
+index 8c578df..bc43931 100644
+--- a/inc/arm/efibind.h
++++ b/inc/arm/efibind.h
+@@ -48,7 +48,7 @@ typedef int32_t             intptr_t;
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+diff --git a/inc/ia32/efibind.h b/inc/ia32/efibind.h
+index 718e8d1..1b33f2f 100644
+--- a/inc/ia32/efibind.h
++++ b/inc/ia32/efibind.h
+@@ -87,7 +87,7 @@ Revision History
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ 
+diff --git a/inc/ia64/efibind.h b/inc/ia64/efibind.h
+index 1d2745b..1ad41f8 100644
+--- a/inc/ia64/efibind.h
++++ b/inc/ia64/efibind.h
+@@ -74,7 +74,7 @@ Revision History
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+diff --git a/inc/loongarch64/efibind.h b/inc/loongarch64/efibind.h
+index 8ed83a5..806209d 100644
+--- a/inc/loongarch64/efibind.h
++++ b/inc/loongarch64/efibind.h
+@@ -44,7 +44,7 @@ typedef int64_t             intptr_t;
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+diff --git a/inc/mips64el/efibind.h b/inc/mips64el/efibind.h
+index cf77ddc..9b396cc 100644
+--- a/inc/mips64el/efibind.h
++++ b/inc/mips64el/efibind.h
+@@ -42,7 +42,7 @@ typedef int64_t             intptr_t;
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+diff --git a/inc/riscv64/efibind.h b/inc/riscv64/efibind.h
+index d8b4f39..b6d418c 100644
+--- a/inc/riscv64/efibind.h
++++ b/inc/riscv64/efibind.h
+@@ -17,13 +17,12 @@
+  */
+ 
+ #include <stdint.h>
++#include <stddef.h>
+ 
+ //
+ // Basic EFI types of various widths
+ //
+ 
+-#include <stddef.h>
+-
+ typedef uint64_t                UINT64;
+ typedef int64_t                 INT64;
+ typedef uint32_t                UINT32;
+@@ -33,7 +32,7 @@ typedef int16_t                 INT16;
+ typedef uint8_t                 UINT8;
+ typedef int8_t                  INT8;
+ typedef char                    CHAR8;
+-typedef wchar_t                 CHAR16;
++typedef uint16_t                 CHAR16;
+ #define WCHAR                   CHAR16
+ #undef VOID
+ typedef void                    VOID;
+diff --git a/inc/x86_64/efibind.h b/inc/x86_64/efibind.h
+index e454ed2..8f431cb 100644
+--- a/inc/x86_64/efibind.h
++++ b/inc/x86_64/efibind.h
+@@ -98,7 +98,7 @@ Revision History
+ 
+ #include <stddef.h>
+ 
+-typedef wchar_t CHAR16;
++typedef uint16_t CHAR16;
+ #define WCHAR CHAR16
+ 
+ typedef uint64_t   UINT64;
+-- 
+2.47.1
+

+ 2103 - 0
package/gnu-efi/0003-Use-char16_t-literals.patch

@@ -0,0 +1,2103 @@
+From 5a4c02a43e36db71398c5a2f38d6cd9f0d54ebb6 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Date: Sun, 12 Jan 2025 18:08:50 +0100
+Subject: [PATCH] Use char16_t literals
+
+Add char16_t('u') literals
+Remove wchar_t('L') literals
+
+Upstream: https://github.com/ncroxon/gnu-efi/commit/f8ebcfc077665013aba6f26f98404e246093bdd6
+[Thomas: Originally authored by Callum Farmer <gmbr3@opensuse.org>,
+but redone from scratch to be applicable to 3.0.18.]
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+---
+ apps/AllocPages.c                |  34 +++---
+ apps/FreePages.c                 |  26 ++---
+ apps/bltgrid.c                   |  18 +--
+ apps/ctors_dtors_priority_test.c |  10 +-
+ apps/ctors_fns.c                 |   8 +-
+ apps/ctors_test.c                |   2 +-
+ apps/debughook.c                 |  10 +-
+ apps/drv0.c                      |  10 +-
+ apps/drv0_use.c                  |  16 +--
+ apps/lfbgrid.c                   |  24 ++--
+ apps/modelist.c                  |  30 ++---
+ apps/printenv.c                  |   6 +-
+ apps/route80h.c                  |  12 +-
+ apps/setdbg.c                    |   8 +-
+ apps/setjmp.c                    |   6 +-
+ apps/t.c                         |   2 +-
+ apps/t2.c                        |   2 +-
+ apps/t3.c                        |  38 +++----
+ apps/t4.c                        |   4 +-
+ apps/t5.c                        |   6 +-
+ apps/t6.c                        |  14 +--
+ apps/t7.c                        |   8 +-
+ apps/t8.c                        |   6 +-
+ apps/tcc.c                       |  64 +++++------
+ apps/tpause.c                    |   2 +-
+ apps/unsetdbg.c                  |   8 +-
+ inc/efi.h                        |   2 +-
+ inc/efilib.h                     |  30 ++---
+ lib/cmdline.c                    |   6 +-
+ lib/console.c                    |   2 +-
+ lib/dpath.c                      | 190 +++++++++++++++----------------
+ lib/error.c                      |  84 +++++++-------
+ lib/guid.c                       | 102 ++++++++---------
+ lib/init.c                       |   2 +-
+ lib/print.c                      |  14 +--
+ 35 files changed, 403 insertions(+), 403 deletions(-)
+
+diff --git a/apps/AllocPages.c b/apps/AllocPages.c
+index bb81849..790adba 100644
+--- a/apps/AllocPages.c
++++ b/apps/AllocPages.c
+@@ -120,29 +120,29 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 
+ 	InitializeLib(image, systab);
+ 
+-	Print(L"AllocatePage: __AllocType__ __MemType__ __NumPages__ [__Addr__]\n");
+-	Print(L"__AllocType__ {0,1,2} -- Any, MaxAddr, Addr\n"); 
+-	Print(L"__MemType__   {0..13}, Reserved ==0, LCode==1, LData==2, BSCode==3, BSData==4, ...\n");
+-	Print(L"__NumPages__  {0..%x}\n", MAX_NUM_PAGES);
+-	Print(L"[__Addr__]     0... %llx\n", MAX_ADDR);
+-	Print(L"All numbers in hex no leading 0x\n");
+-	Print(L"\n");
++	Print(u"AllocatePage: __AllocType__ __MemType__ __NumPages__ [__Addr__]\n");
++	Print(u"__AllocType__ {0,1,2} -- Any, MaxAddr, Addr\n"); 
++	Print(u"__MemType__   {0..13}, Reserved ==0, LCode==1, LData==2, BSCode==3, BSData==4, ...\n");
++	Print(u"__NumPages__  {0..%x}\n", MAX_NUM_PAGES);
++	Print(u"[__Addr__]     0... %llx\n", MAX_ADDR);
++	Print(u"All numbers in hex no leading 0x\n");
++	Print(u"\n");
+ 
+ #if DEBUG
+-	Print(L"Now get argc/argv\n");
++	Print(u"Now get argc/argv\n");
+ #endif
+ 	argc = GetShellArgcArgv(image, &argv);
+ #if DEBUG
+-	Print(L"argc = %d\n", argc);
++	Print(u"argc = %d\n", argc);
+ #endif
+ 
+ #if DEBUG
+ 	for (c = 0;  c < argc;  c++ ) {
+-		Print(L"argv[%d] = <%s>\n", c, argv[c]);
++		Print(u"argv[%d] = <%s>\n", c, argv[c]);
+ 	}
+ #endif
+ 	if ( (argc < 4) || (argc > 5) ) {
+-		Print(L"Wrong argument count\n");
++		Print(u"Wrong argument count\n");
+ 		return EFI_SUCCESS;
+ 	}
+ 
+@@ -152,31 +152,31 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 	if ( argc == 5 ) Addr = xtoi(argv[4]);
+ 
+ 	if ( (AllocType < 0) || (AllocType > 2)) {
+-		Print(L"Invalid AllocType\n");
++		Print(u"Invalid AllocType\n");
+ 		err++;
+ 	}
+ 	if ( (MemType < 0) || (MemType > 13) ) {
+-		Print(L"Invalid MemType\n");
++		Print(u"Invalid MemType\n");
+ 		err++;
+ 	}
+ 	if ( (NumPages < 0) || (NumPages > MAX_NUM_PAGES) ) {
+-		Print(L"Inavlid NumPages\n");
++		Print(u"Inavlid NumPages\n");
+ 		err++;
+ 	}
+ 	if ( Addr > MAX_ADDR ) {
+-		Print(L"Inavlid Address\n");
++		Print(u"Inavlid Address\n");
+ 		err++;
+ 	}
+ 	if ( err ) {
+ 		return EFI_INVALID_PARAMETER;
+ 	}
+ 
+-	Print(L"AllocatPage(%d,%d,%d,%lx)\n", AllocType, MemType, NumPages, Addr);
++	Print(u"AllocatPage(%d,%d,%d,%lx)\n", AllocType, MemType, NumPages, Addr);
+ 
+ 	efi_status = uefi_call_wrapper(BS->AllocatePages, 4, AllocType, MemType, NumPages, &Addr);
+ 
+ 	if ( EFI_ERROR(efi_status) ) {
+-		Print(L"Allocate Pages Failed: %d\n", efi_status);
++		Print(u"Allocate Pages Failed: %d\n", efi_status);
+ 		return efi_status;
+ 	}
+ 
+diff --git a/apps/FreePages.c b/apps/FreePages.c
+index 247c75d..27da7a7 100644
+--- a/apps/FreePages.c
++++ b/apps/FreePages.c
+@@ -93,27 +93,27 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 
+ 	InitializeLib(image, systab);
+ 
+-	Print(L"FreePages: __PhysAddr__ __PgCnt__\n");
+-	Print(L"__PhysAddr__   0... %llx\n", MAX_ADDR);
+-	Print(L"__PgCnt__     [0..%lx]\n", MAX_NUM_PAGES);
+-	Print(L"All numbers hex w/ no leading 0x\n");
+-	Print(L"\n");
++	Print(u"FreePages: __PhysAddr__ __PgCnt__\n");
++	Print(u"__PhysAddr__   0... %llx\n", MAX_ADDR);
++	Print(u"__PgCnt__     [0..%lx]\n", MAX_NUM_PAGES);
++	Print(u"All numbers hex w/ no leading 0x\n");
++	Print(u"\n");
+ 
+ #if DEBUG
+-	Print(L"Now parse argc/argv\n");
++	Print(u"Now parse argc/argv\n");
+ #endif
+ 	argc = GetShellArgcArgv(image, &argv);
+ #if DEBUG
+-	Print(L"argc = %d\n", argc);
++	Print(u"argc = %d\n", argc);
+ #endif
+ 
+ #if DEBUG
+ 	for (c = 0;  c < argc;  c++ ) {
+-		Print(L"argv[%d] = <%s>\n", c, argv[c]);
++		Print(u"argv[%d] = <%s>\n", c, argv[c]);
+ 	}
+ #endif
+ 	if (argc != 3) {
+-		Print(L"Invalid argument count\n");
++		Print(u"Invalid argument count\n");
+ 		return EFI_SUCCESS;
+ 	}
+ 
+@@ -121,23 +121,23 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 	PgCnt	 = xtoi(argv[2]);
+ 
+ 	if ( (PgCnt < 0) || (PgCnt > MAX_NUM_PAGES) ) {
+-		Print(L"Inavlid PgCnt\n");
++		Print(u"Inavlid PgCnt\n");
+ 		err++;
+ 	}
+ 	if ( PhysAddr > MAX_ADDR ) {
+-		Print(L"Inavlid Address\n");
++		Print(u"Inavlid Address\n");
+ 		err++;
+ 	}
+ 	if ( err ) {
+ 		return EFI_SUCCESS;
+ 	}
+ 
+-	Print(L"FreePages(%lx,%d)\n", PhysAddr, PgCnt);
++	Print(u"FreePages(%lx,%d)\n", PhysAddr, PgCnt);
+ 
+ 	efi_status = uefi_call_wrapper(BS->FreePages, 2, PhysAddr, PgCnt);
+ 
+ 	if ( EFI_ERROR(efi_status) ) {
+-		Print(L"Free Pages Failed: %d\n", efi_status);
++		Print(u"Free Pages Failed: %d\n", efi_status);
+ 		return efi_status;
+ 	}
+ 
+diff --git a/apps/bltgrid.c b/apps/bltgrid.c
+index ff69753..85a60ab 100644
+--- a/apps/bltgrid.c
++++ b/apps/bltgrid.c
+@@ -38,7 +38,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 	if (gop->Mode) {
+ 		imax = gop->Mode->MaxMode;
+ 	} else {
+-		Print(L"gop->Mode is NULL\n");
++		Print(u"gop->Mode is NULL\n");
+ 		return;
+ 	}
+ 
+@@ -47,8 +47,8 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
+ 					&info);
+ 		if (rc == EFI_NOT_STARTED) {
+-			Print(L"gop->QueryMode() returned %r\n", rc);
+-			Print(L"Trying to start GOP with SetMode().\n");
++			Print(u"gop->QueryMode() returned %r\n", rc);
++			Print(u"Trying to start GOP with SetMode().\n");
+ 			rc = uefi_call_wrapper(gop->SetMode, 2, gop,
+ 				gop->Mode ? gop->Mode->Mode : 0);
+ 			rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
+@@ -56,7 +56,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		}
+ 
+ 		if (EFI_ERROR(rc)) {
+-			Print(L"%d: Bad response from QueryMode: %r (%d)\n",
++			Print(u"%d: Bad response from QueryMode: %r (%d)\n",
+ 			      i, rc, rc);
+ 			continue;
+ 		}
+@@ -70,7 +70,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 
+ 		PixelBuffer = AllocatePool(BufferSize);
+ 		if (!PixelBuffer) {
+-			Print(L"Allocation of 0x%08lx bytes failed.\n",
++			Print(u"Allocation of 0x%08lx bytes failed.\n",
+ 			      sizeof(UINT32) * NumPixels);
+ 			return;
+ 		}
+@@ -88,7 +88,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		FreePool(PixelBuffer);
+ 		return;
+ 	}
+-	Print(L"Never found the active video mode?\n");
++	Print(u"Never found the active video mode?\n");
+ }
+ 
+ static EFI_STATUS
+@@ -100,7 +100,7 @@ SetWatchdog(UINTN seconds)
+ 	if (EFI_ERROR(rc)) {
+ 		CHAR16 Buffer[64];
+ 		StatusToString(Buffer, rc);
+-		Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
++		Print(u"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
+ 	}
+ 	return rc;
+ }
+@@ -117,12 +117,12 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 
+ 	rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
+ 	if (EFI_ERROR(rc)) {
+-		Print(L"Could not locate GOP: %r\n", rc);
++		Print(u"Could not locate GOP: %r\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	if (!gop) {
+-		Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
++		Print(u"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ 		return EFI_UNSUPPORTED;
+ 	}
+ 
+diff --git a/apps/ctors_dtors_priority_test.c b/apps/ctors_dtors_priority_test.c
+index 49e3239..04aa1ba 100644
+--- a/apps/ctors_dtors_priority_test.c
++++ b/apps/ctors_dtors_priority_test.c
+@@ -3,27 +3,27 @@
+ 
+ // 101 in init_array, 65434 in ctors
+ static void __attribute__((constructor(101))) EFI_NO_TAIL_CALL ctors101() {
+-    Print(L"1) ctor with lower numbered priority \r\n");
++    Print(u"1) ctor with lower numbered priority \r\n");
+ }
+ 
+ // 65434 in init_array, 101 in ctors
+ static void __attribute__((constructor(65434))) EFI_NO_TAIL_CALL ctors65434() {
+-    Print(L"2) ctor with higher numbered priority \r\n");
++    Print(u"2) ctor with higher numbered priority \r\n");
+ }
+ 
+ // 101 in fini_array, 65434 in dtors
+ static void __attribute__((destructor(101))) EFI_NO_TAIL_CALL dtors101() {
+-    Print(L"4) dtor with lower numbered priority \r\n");
++    Print(u"4) dtor with lower numbered priority \r\n");
+ }
+ 
+ // 65434 in fini_array, 101 in dtors
+ static void __attribute__((destructor(65434))) EFI_NO_TAIL_CALL dtors65434() {
+-    Print(L"3) dtor with higher numbered priority \r\n");
++    Print(u"3) dtor with higher numbered priority \r\n");
+ }
+ 
+ EFI_STATUS
+ efi_main (EFI_HANDLE image EFI_UNUSED, EFI_SYSTEM_TABLE *systab EFI_UNUSED)
+ {
+-    Print(L"Main function \r\n");
++    Print(u"Main function \r\n");
+     return EFI_SUCCESS;
+ }
+\ No newline at end of file
+diff --git a/apps/ctors_fns.c b/apps/ctors_fns.c
+index 7027447..51cdcd3 100644
+--- a/apps/ctors_fns.c
++++ b/apps/ctors_fns.c
+@@ -11,16 +11,16 @@ int constructed_value = 0;
+ 
+ static void __attribute__((__constructor__)) EFI_NO_TAIL_CALL ctor(void)
+ {
+-	Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
++	Print(u"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
+ 	constructed_value = 1;
+-	Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
++	Print(u"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
+ }
+ 
+ static void __attribute__((__destructor__)) EFI_NO_TAIL_CALL dtor(void)
+ {
+-	Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
++	Print(u"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
+ 	constructed_value = 0;
+-	Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
++	Print(u"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
+ }
+ 
+ // vim:fenc=utf-8:tw=75:noet
+diff --git a/apps/ctors_test.c b/apps/ctors_test.c
+index 7e48da8..a50d02e 100644
+--- a/apps/ctors_test.c
++++ b/apps/ctors_test.c
+@@ -12,7 +12,7 @@ extern int constructed_value;
+ EFI_STATUS
+ efi_main (EFI_HANDLE image EFI_UNUSED, EFI_SYSTEM_TABLE *systab EFI_UNUSED)
+ {
+-	Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
++	Print(u"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
+ 
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/debughook.c b/apps/debughook.c
+index c862f0f..1d9f9d0 100644
+--- a/apps/debughook.c
++++ b/apps/debughook.c
+@@ -50,16 +50,16 @@ DebugHook(void)
+ 	if (x)
+ 		return;
+ 
+-	efi_status = GetVariable(L"DUMMY_DEBUG", &data, &dataSize, guid);
++	efi_status = GetVariable(u"DUMMY_DEBUG", &data, &dataSize, guid);
+ 	if (EFI_ERROR(efi_status)) {
+ 		return;
+ 	}
+ 
+-	Print(L"add-symbol-file /usr/lib/debug/boot/efi/debughook.debug "
+-	      L"0x%08x -s .data 0x%08x\n", &_text, &_data);
++	Print(u"add-symbol-file /usr/lib/debug/boot/efi/debughook.debug "
++	      u"0x%08x -s .data 0x%08x\n", &_text, &_data);
+ 
+-	Print(L"Pausing for debugger attachment.\n");
+-	Print(L"To disable this, remove the EFI variable DUMMY_DEBUG-%g .\n",
++	Print(u"Pausing for debugger attachment.\n");
++	Print(u"To disable this, remove the EFI variable DUMMY_DEBUG-%g .\n",
+ 	      &guid);
+ 	x = 1;
+ 	while (x++) {
+diff --git a/apps/drv0.c b/apps/drv0.c
+index 1d0c06f..cfe584b 100644
+--- a/apps/drv0.c
++++ b/apps/drv0.c
+@@ -111,7 +111,7 @@ Drv0SayHello(
+   if (! HelloWho)
+     return EFI_INVALID_PARAMETER;
+ 
+-  Print(L"Hello %s!\n", HelloWho);
++  Print(u"Hello %s!\n", HelloWho);
+   InternalGnuEfiAppsDrv0ProtocolData.Counter ++;
+   return EFI_SUCCESS;
+ }
+@@ -141,7 +141,7 @@ Drv0Unload(IN EFI_HANDLE ImageHandle)
+                                  &GnuEfiAppsDrv0ProtocolGuid,
+                                  &InternalGnuEfiAppsDrv0ProtocolData.Proto,
+                                  NULL);
+-  Print(L"Driver instance unloaded.\n", ImageHandle);
++  Print(u"Driver instance unloaded.\n", ImageHandle);
+   return EFI_SUCCESS;
+ }
+ 
+@@ -167,7 +167,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SysTab)
+                              (void**)&LoadedImage, ImageHandle,
+                              NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+   if (EFI_ERROR(Status)) {
+-    Print(L"Could not open loaded image protocol: %d\n", Status);
++    Print(u"Could not open loaded image protocol: %d\n", Status);
+     return Status;
+   }
+ 
+@@ -176,7 +176,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SysTab)
+       &ImageHandle, &GnuEfiAppsDrv0ProtocolGuid,
+       &InternalGnuEfiAppsDrv0ProtocolData.Proto, NULL);
+   if (EFI_ERROR(Status)) {
+-    Print(L"Error registering driver instance: %d\n", Status);
++    Print(u"Error registering driver instance: %d\n", Status);
+     return Status;
+   }
+ 
+@@ -184,7 +184,7 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SysTab)
+    * instance from system */
+   LoadedImage->Unload = (EFI_IMAGE_UNLOAD)Drv0Unload;
+ 
+-  Print(L"Driver instance loaded successfully.\n");
++  Print(u"Driver instance loaded successfully.\n");
+   return EFI_SUCCESS;  /* at this point, this instance stays resident
+                         * until image is unloaded, eg. with shell's unload,
+                         * ExitBootServices() */
+diff --git a/apps/drv0_use.c b/apps/drv0_use.c
+index d8688cf..5bed2ed 100644
+--- a/apps/drv0_use.c
++++ b/apps/drv0_use.c
+@@ -28,20 +28,20 @@ PlayWithGnuEfiAppsDrv0Protocol(IN EFI_HANDLE DrvHandle) {
+                              NULL,
+                              EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+   if (EFI_ERROR(Status)) {
+-    Print(L"Cannot open proto: %d\n", Status);
++    Print(u"Cannot open proto: %d\n", Status);
+     return Status;
+   }
+ 
+-  Status = uefi_call_wrapper(drv->SayHello, 2, L"Sample UEFI Driver");
++  Status = uefi_call_wrapper(drv->SayHello, 2, u"Sample UEFI Driver");
+   if (EFI_ERROR(Status)) {
+-    Print(L"Cannot call SayHello: %d\n", Status);
++    Print(u"Cannot call SayHello: %d\n", Status);
+   }
+ 
+   Status = uefi_call_wrapper(drv->GetNumberOfHello, 2, &NumberOfHello);
+   if (EFI_ERROR(Status)) {
+-    Print(L"Cannot call GetNumberOfHello: %d\n", Status);
++    Print(u"Cannot call GetNumberOfHello: %d\n", Status);
+   } else {
+-    Print(L"Hello was called %d time(s).\n", NumberOfHello);
++    Print(u"Hello was called %d time(s).\n", NumberOfHello);
+   }
+ 
+   return EFI_SUCCESS;
+@@ -60,16 +60,16 @@ efi_main (EFI_HANDLE Image, EFI_SYSTEM_TABLE *SysTab)
+   Status = LibLocateHandle(ByProtocol, &GnuEfiAppsDrv0ProtocolGuid,
+                            NULL, &NoHandles, &Handles);
+   if (EFI_ERROR(Status)) {
+-    Print(L"Error looking up handles for proto: %d\n", Status);
++    Print(u"Error looking up handles for proto: %d\n", Status);
+     return Status;
+   }
+ 
+   for (i = 0 ; i < NoHandles ; ++i)
+   {
+-    Print(L"Playing with driver instance %d...\n", i);
++    Print(u"Playing with driver instance %d...\n", i);
+     Status = PlayWithGnuEfiAppsDrv0Protocol(Handles[i]);
+     if (EFI_ERROR(Status))
+-      Print(L"Error playing with instance %d, skipping\n", i);
++      Print(u"Error playing with instance %d, skipping\n", i);
+   }
+ 
+   if (Handles)
+diff --git a/apps/lfbgrid.c b/apps/lfbgrid.c
+index 3914313..d444087 100644
+--- a/apps/lfbgrid.c
++++ b/apps/lfbgrid.c
+@@ -28,7 +28,7 @@ fill_boxes(UINT32 *PixelBuffer, UINT32 Width, UINT32 Height, UINT32 Pitch,
+ 	case PixelBltOnly:
+ 		return;
+ 	default:
+-		Print(L"Invalid pixel format\n");
++		Print(u"Invalid pixel format\n");
+ 		return;
+ 	}
+ 
+@@ -62,7 +62,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 	if (gop->Mode) {
+ 		imax = gop->Mode->MaxMode;
+ 	} else {
+-		Print(L"gop->Mode is NULL\n");
++		Print(u"gop->Mode is NULL\n");
+ 		return;
+ 	}
+ 
+@@ -71,8 +71,8 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
+ 					&info);
+ 		if (rc == EFI_NOT_STARTED) {
+-			Print(L"gop->QueryMode() returned %r\n", rc);
+-			Print(L"Trying to start GOP with SetMode().\n");
++			Print(u"gop->QueryMode() returned %r\n", rc);
++			Print(u"Trying to start GOP with SetMode().\n");
+ 			rc = uefi_call_wrapper(gop->SetMode, 2, gop,
+ 				gop->Mode ? gop->Mode->Mode : 0);
+ 			rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
+@@ -80,7 +80,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		}
+ 
+ 		if (EFI_ERROR(rc)) {
+-			Print(L"%d: Bad response from QueryMode: %r (%d)\n",
++			Print(u"%d: Bad response from QueryMode: %r (%d)\n",
+ 			      i, rc, rc);
+ 			continue;
+ 		}
+@@ -96,13 +96,13 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		} else {
+ 			CopySize = BufferSize < gop->Mode->FrameBufferSize ?
+ 				BufferSize : gop->Mode->FrameBufferSize;
+-			Print(L"height * pitch * pixelsize = %lu buf fb size is %lu; using %lu\n",
++			Print(u"height * pitch * pixelsize = %lu buf fb size is %lu; using %lu\n",
+ 			      BufferSize, gop->Mode->FrameBufferSize, CopySize);
+ 		}
+ 
+ 		PixelBuffer = AllocatePool(BufferSize);
+ 		if (!PixelBuffer) {
+-			Print(L"Allocation of 0x%08lx bytes failed.\n",
++			Print(u"Allocation of 0x%08lx bytes failed.\n",
+ 			      sizeof(UINT32) * NumPixels);
+ 			return;
+ 		}
+@@ -112,7 +112,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 			   info->PixelFormat, info->PixelInformation);
+ 
+ 		if (info->PixelFormat == PixelBltOnly) {
+-			Print(L"No linear framebuffer on this device.\n");
++			Print(u"No linear framebuffer on this device.\n");
+ 			return;
+ 		}
+ #if __SIZEOF_POINTER__ == 8
+@@ -126,7 +126,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		CopyMem((VOID *)FrameBufferAddr, PixelBuffer, CopySize);
+ 		return;
+ 	}
+-	Print(L"Never found the active video mode?\n");
++	Print(u"Never found the active video mode?\n");
+ }
+ 
+ static EFI_STATUS
+@@ -138,7 +138,7 @@ SetWatchdog(UINTN seconds)
+ 	if (EFI_ERROR(rc)) {
+ 		CHAR16 Buffer[64];
+ 		StatusToString(Buffer, rc);
+-		Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
++		Print(u"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
+ 	}
+ 	return rc;
+ }
+@@ -155,12 +155,12 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 
+ 	rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
+ 	if (EFI_ERROR(rc)) {
+-		Print(L"Could not locate GOP: %r\n", rc);
++		Print(u"Could not locate GOP: %r\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	if (!gop) {
+-		Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
++		Print(u"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ 		return EFI_UNSUPPORTED;
+ 	}
+ 
+diff --git a/apps/modelist.c b/apps/modelist.c
+index 13219b7..5154962 100644
+--- a/apps/modelist.c
++++ b/apps/modelist.c
+@@ -11,9 +11,9 @@ print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 
+ 	if (gop->Mode) {
+ 		imax = gop->Mode->MaxMode;
+-		Print(L"GOP reports MaxMode %d\n", imax);
++		Print(u"GOP reports MaxMode %d\n", imax);
+ 	} else {
+-		Print(L"gop->Mode is NULL\n");
++		Print(u"gop->Mode is NULL\n");
+ 		imax = 1;
+ 	}
+ 
+@@ -23,8 +23,8 @@ print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
+ 					&info);
+ 		if (rc == EFI_NOT_STARTED) {
+-			Print(L"gop->QueryMode() returned %r\n", rc);
+-			Print(L"Trying to start GOP with SetMode().\n");
++			Print(u"gop->QueryMode() returned %r\n", rc);
++			Print(u"Trying to start GOP with SetMode().\n");
+ 			rc = uefi_call_wrapper(gop->SetMode, 2, gop,
+ 				gop->Mode ? gop->Mode->Mode : 0);
+ 			rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
+@@ -32,37 +32,37 @@ print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+ 		}
+ 
+ 		if (EFI_ERROR(rc)) {
+-			Print(L"%d: Bad response from QueryMode: %r (%d)\n",
++			Print(u"%d: Bad response from QueryMode: %r (%d)\n",
+ 			      i, rc, rc);
+ 			continue;
+ 		}
+-		Print(L"%c%d: %dx%d ",
++		Print(u"%c%d: %dx%d ",
+ 		      (gop->Mode &&
+ 		       CompareMem(info,gop->Mode->Info,sizeof(*info)) == 0
+ 		       ) ? '*' : ' ',
+ 		      i, info->HorizontalResolution, info->VerticalResolution);
+ 		switch(info->PixelFormat) {
+ 			case PixelRedGreenBlueReserved8BitPerColor:
+-				Print(L"RGBR");
++				Print(u"RGBR");
+ 				break;
+ 			case PixelBlueGreenRedReserved8BitPerColor:
+-				Print(L"BGRR");
++				Print(u"BGRR");
+ 				break;
+ 			case PixelBitMask:
+-				Print(L"R:%08x G:%08x B:%08x X:%08x",
++				Print(u"R:%08x G:%08x B:%08x X:%08x",
+ 					info->PixelInformation.RedMask,
+ 					info->PixelInformation.GreenMask,
+ 					info->PixelInformation.BlueMask,
+ 					info->PixelInformation.ReservedMask);
+ 				break;
+ 			case PixelBltOnly:
+-				Print(L"(blt only)");
++				Print(u"(blt only)");
+ 				break;
+ 			default:
+-				Print(L"(Invalid pixel format)");
++				Print(u"(Invalid pixel format)");
+ 				break;
+ 		}
+-		Print(L" pitch %d\n", info->PixelsPerScanLine);
++		Print(u" pitch %d\n", info->PixelsPerScanLine);
+ 	}
+ }
+ 
+@@ -75,7 +75,7 @@ SetWatchdog(UINTN seconds)
+ 	if (EFI_ERROR(rc)) {
+ 		CHAR16 Buffer[64];
+ 		StatusToString(Buffer, rc);
+-		Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
++		Print(u"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
+ 	}
+ 	return rc;
+ }
+@@ -92,12 +92,12 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 
+ 	rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
+ 	if (EFI_ERROR(rc)) {
+-		Print(L"Could not locate GOP: %r\n", rc);
++		Print(u"Could not locate GOP: %r\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	if (!gop) {
+-		Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
++		Print(u"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ 		return EFI_UNSUPPORTED;
+ 	}
+ 
+diff --git a/apps/printenv.c b/apps/printenv.c
+index 6341e40..efa7cd6 100644
+--- a/apps/printenv.c
++++ b/apps/printenv.c
+@@ -14,10 +14,10 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 	name[0] = 0;
+ 	vendor = NullGuid;
+ 
+-	Print(L"GUID                                Variable Name        Value\n");
+-	Print(L"=================================== ==================== ========\n");
++	Print(u"GUID                                Variable Name        Value\n");
++	Print(u"=================================== ==================== ========\n");
+ 
+-	StrCpy(fmt, L"%.-35g %.-20s %s\n");
++	StrCpy(fmt, u"%.-35g %.-20s %s\n");
+ 	while (1) {
+ 		size = sizeof(name);
+ 		status = uefi_call_wrapper(RT->GetNextVariableName, 3, &size, name, &vendor);
+diff --git a/apps/route80h.c b/apps/route80h.c
+index 5272dd3..a07d9cf 100644
+--- a/apps/route80h.c
++++ b/apps/route80h.c
+@@ -27,17 +27,17 @@ typedef struct {
+ static inline void set_bit(volatile uint32_t *flag, int bit, int value)
+ {
+ 	uint32_t val = *flag;
+-	Print(L"current value is 0x%2x\n", val);
++	Print(u"current value is 0x%2x\n", val);
+ 
+ 	if (value) {
+ 		val |= (1 << bit);
+ 	} else {
+ 		val &= ~(1 << bit);
+ 	}
+-	Print(L"setting value to 0x%2x\n", val);
++	Print(u"setting value to 0x%2x\n", val);
+ 	*flag = val;
+ 	val = *flag;
+-	Print(L"new value is 0x%2x\n", val);
++	Print(u"new value is 0x%2x\n", val);
+ }
+ 
+ static int is_device(EFI_PCI_IO *pciio, uint16_t vendor_id, uint16_t device_id)
+@@ -112,7 +112,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 	}
+ 
+ 	if (rc == EFI_NOT_FOUND) {
+-		Print(L"Device not found.\n");
++		Print(u"Device not found.\n");
+ 		return rc;
+ 	} else if (EFI_ERROR(rc)) {
+ 		return rc;
+@@ -123,12 +123,12 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 	if (EFI_ERROR(rc))
+ 		return rc;
+ 	if (!(lpcif.rcba & 1)) {
+-		Print(L"rcrb is not mapped, cannot route port 80h\n");
++		Print(u"rcrb is not mapped, cannot route port 80h\n");
+ 		return EFI_UNSUPPORTED;
+ 	}
+ 	lpcif.rcba &= ~1UL;
+ 
+-	Print(L"rcba: 0x%8x\n", lpcif.rcba, lpcif.rcba);
++	Print(u"rcba: 0x%8x\n", lpcif.rcba, lpcif.rcba);
+ 	set_bit((uint32_t *)(intptr_t)(lpcif.rcba + GCS_OFFSET_ADDR),
+ 		     GCS_RPR_SHIFT, GCS_RPR_PCI);
+ 
+diff --git a/apps/setdbg.c b/apps/setdbg.c
+index 897140e..7617bf9 100644
+--- a/apps/setdbg.c
++++ b/apps/setdbg.c
+@@ -16,22 +16,22 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ #if 0
+ 	UINT8 data = 1;
+ 
+-	status = RT->SetVariable(L"SHIM_DEBUG", &SHIM_GUID,
++	status = RT->SetVariable(u"SHIM_DEBUG", &SHIM_GUID,
+ 				 EFI_VARIABLE_NON_VOLATILE |
+ 				 EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ 				 EFI_VARIABLE_RUNTIME_ACCESS,
+ 				 sizeof(data), &data);
+ 	if (EFI_ERROR(status))
+-		Print(L"SetVariable failed: %r\n", status);
++		Print(u"SetVariable failed: %r\n", status);
+ #endif
+ 
+-	status = RT->SetVariable(L"GRUB_ENV", &SHIM_GUID,
++	status = RT->SetVariable(u"GRUB_ENV", &SHIM_GUID,
+ 				 EFI_VARIABLE_NON_VOLATILE |
+ 				 EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ 				 EFI_VARIABLE_RUNTIME_ACCESS,
+ 				 sizeof(grubenv)-1, grubenv);
+ 	if (EFI_ERROR(status))
+-		Print(L"SetVariable(GRUB_ENV) failed: %r\n", status);
++		Print(u"SetVariable(GRUB_ENV) failed: %r\n", status);
+ 
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/setjmp.c b/apps/setjmp.c
+index d9e0f29..52c163b 100644
+--- a/apps/setjmp.c
++++ b/apps/setjmp.c
+@@ -14,16 +14,16 @@ efi_main(
+ 
+ 	InitializeLib(image_handle, systab);
+ 	rc = setjmp(env);
+-	Print(L"setjmp() = %d\n", rc);
++	Print(u"setjmp() = %d\n", rc);
+ 
+ 	if (rc == 3) {
+-		Print(L"3 worked\n");
++		Print(u"3 worked\n");
+ 		longjmp(env, 0);
+ 		return 0;
+ 	}
+ 
+ 	if (rc == 1) {
+-		Print(L"0 got to be one yay\n");
++		Print(u"0 got to be one yay\n");
+ 		return 0;
+ 	}
+ 
+diff --git a/apps/t.c b/apps/t.c
+index c7e3d57..287c1c7 100644
+--- a/apps/t.c
++++ b/apps/t.c
+@@ -20,7 +20,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+ 
+ 	InitializeLib(image_handle, systab);
+ 	conout = systab->ConOut;
+-	uefi_call_wrapper(conout->OutputString, 2, conout, (CHAR16 *)L"Hello World!\n\r");
++	uefi_call_wrapper(conout->OutputString, 2, conout, (CHAR16 *)u"Hello World!\n\r");
+ 	uefi_call_wrapper(conout->OutputString, 2, conout, a2u("Hello World!\n\r"));
+ 
+ 	return EFI_SUCCESS;
+diff --git a/apps/t2.c b/apps/t2.c
+index 6a09c42..66ca814 100644
+--- a/apps/t2.c
++++ b/apps/t2.c
+@@ -8,7 +8,7 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 
+         InitializeLib(image, systab);
+ 	conout = systab->ConOut;
+-	uefi_call_wrapper(conout->OutputString, 2, conout, L"Hello World!\n\r");
++	uefi_call_wrapper(conout->OutputString, 2, conout, u"Hello World!\n\r");
+ 
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/t3.c b/apps/t3.c
+index 623830a..09db598 100644
+--- a/apps/t3.c
++++ b/apps/t3.c
+@@ -16,19 +16,19 @@ efi_main(
+ 	InitializeLib(image_handle, systab);
+ 	PoolAllocationType = 2; /* klooj */
+ 
+-	Print(L"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13);
++	Print(u"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13);
+ 
+-	Print(L"before InitializeLib(): PoolAllocationType=%d\n",
++	Print(u"before InitializeLib(): PoolAllocationType=%d\n",
+ 		pat);
+ 
+-	Print(L" after InitializeLib(): PoolAllocationType=%d\n",
++	Print(u" after InitializeLib(): PoolAllocationType=%d\n",
+ 		PoolAllocationType);
+ 
+ 	/*
+ 	 * Locate loaded_image_handle instance.
+ 	 */
+ 
+-	Print(L"BS->HandleProtocol()  ");
++	Print(u"BS->HandleProtocol()  ");
+ 
+ 	efi_status = uefi_call_wrapper(
+ 		BS->HandleProtocol,
+@@ -38,31 +38,31 @@ efi_main(
+ 		&void_li_p);
+ 	li = void_li_p;
+ 
+-	Print(L"%xh (%r)\n", efi_status, efi_status);
++	Print(u"%xh (%r)\n", efi_status, efi_status);
+ 
+ 	if (efi_status != EFI_SUCCESS) {
+ 		return efi_status;
+ 	}
+ 
+-	Print(L"  li: %xh\n", li);
++	Print(u"  li: %xh\n", li);
+ 
+ 	if (!li) {
+ 		return EFI_UNSUPPORTED;
+ 	}
+ 
+-	Print(L"  li->Revision:        %xh\n", li->Revision);
+-	Print(L"  li->ParentHandle:    %xh\n", li->ParentHandle);
+-	Print(L"  li->SystemTable:     %xh\n", li->SystemTable);
+-	Print(L"  li->DeviceHandle:    %xh\n", li->DeviceHandle);
+-	Print(L"  li->FilePath:        %xh\n", li->FilePath);
+-	Print(L"  li->Reserved:        %xh\n", li->Reserved);
+-	Print(L"  li->LoadOptionsSize: %xh\n", li->LoadOptionsSize);
+-	Print(L"  li->LoadOptions:     %xh\n", li->LoadOptions);
+-	Print(L"  li->ImageBase:       %xh\n", li->ImageBase);
+-	Print(L"  li->ImageSize:       %xh\n", li->ImageSize);
+-	Print(L"  li->ImageCodeType:   %xh\n", li->ImageCodeType);
+-	Print(L"  li->ImageDataType:   %xh\n", li->ImageDataType);
+-	Print(L"  li->Unload:          %xh\n", li->Unload);
++	Print(u"  li->Revision:        %xh\n", li->Revision);
++	Print(u"  li->ParentHandle:    %xh\n", li->ParentHandle);
++	Print(u"  li->SystemTable:     %xh\n", li->SystemTable);
++	Print(u"  li->DeviceHandle:    %xh\n", li->DeviceHandle);
++	Print(u"  li->FilePath:        %xh\n", li->FilePath);
++	Print(u"  li->Reserved:        %xh\n", li->Reserved);
++	Print(u"  li->LoadOptionsSize: %xh\n", li->LoadOptionsSize);
++	Print(u"  li->LoadOptions:     %xh\n", li->LoadOptions);
++	Print(u"  li->ImageBase:       %xh\n", li->ImageBase);
++	Print(u"  li->ImageSize:       %xh\n", li->ImageSize);
++	Print(u"  li->ImageCodeType:   %xh\n", li->ImageCodeType);
++	Print(u"  li->ImageDataType:   %xh\n", li->ImageDataType);
++	Print(u"  li->Unload:          %xh\n", li->Unload);
+ 
+ #if 0
+ typedef struct {
+diff --git a/apps/t4.c b/apps/t4.c
+index b8487ec..1215121 100644
+--- a/apps/t4.c
++++ b/apps/t4.c
+@@ -7,8 +7,8 @@ efi_main (EFI_HANDLE *image, EFI_SYSTEM_TABLE *systab)
+ 	UINTN index;
+ 
+         InitializeLib(image, systab);
+-	uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, L"Hello application started\r\n");
+-	uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, L"\r\n\r\n\r\nHit any key to exit\r\n");
++	uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, u"Hello application started\r\n");
++	uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut, u"\r\n\r\n\r\nHit any key to exit\r\n");
+ 	uefi_call_wrapper(systab->BootServices->WaitForEvent, 3, 1, &systab->ConIn->WaitForKey, &index);
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/t5.c b/apps/t5.c
+index 7c868d2..e01a8e3 100644
+--- a/apps/t5.c
++++ b/apps/t5.c
+@@ -5,9 +5,9 @@ EFI_STATUS
+ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ {
+ 	InitializeLib(image, systab);
+-	Print(L"HelloLib application started\n");
+-	Print(L"\n\n\nHit any key to exit this image\n");
++	Print(u"HelloLib application started\n");
++	Print(u"\n\n\nHit any key to exit this image\n");
+ 	WaitForSingleEvent(ST->ConIn->WaitForKey, 0);
+-	uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"\n\n");
++	uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, u"\n\n");
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/t6.c b/apps/t6.c
+index f95ea66..a3893e5 100644
+--- a/apps/t6.c
++++ b/apps/t6.c
+@@ -25,19 +25,19 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 				&LoadedImageProtocol, 
+ 				(void **) &loaded_image);
+ 	if (EFI_ERROR(status)) {
+-		Print(L"handleprotocol: %r\n", status);
++		Print(u"handleprotocol: %r\n", status);
+ 	}
+ 
+ #if 0
+ 	BS->HandleProtocol(loaded_image->DeviceHandle, &DevicePathProtocol, (void **) &dev_path);
+ 
+-	Print(L"Image device      : %s\n", DevicePathToStr(dev_path));
+-	Print(L"Image file        : %s\n", DevicePathToStr(loaded_image->FilePath));
++	Print(u"Image device      : %s\n", DevicePathToStr(dev_path));
++	Print(u"Image file        : %s\n", DevicePathToStr(loaded_image->FilePath));
+ #endif
+-	Print(L"Image base        : %lx\n", loaded_image->ImageBase);
+-	Print(L"Image size        : %lx\n", loaded_image->ImageSize);
+-	Print(L"Load options size : %lx\n", loaded_image->LoadOptionsSize);
+-	Print(L"Load options      : %s\n", loaded_image->LoadOptions);
++	Print(u"Image base        : %lx\n", loaded_image->ImageBase);
++	Print(u"Image size        : %lx\n", loaded_image->ImageSize);
++	Print(u"Load options size : %lx\n", loaded_image->LoadOptionsSize);
++	Print(u"Load options      : %s\n", loaded_image->LoadOptions);
+ 
+ 	return EFI_SUCCESS;
+ }
+diff --git a/apps/t7.c b/apps/t7.c
+index f02aaee..86e279e 100644
+--- a/apps/t7.c
++++ b/apps/t7.c
+@@ -9,16 +9,16 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 
+ 	InitializeLib(image, systab);
+ 
+-	Print(L"HelloLib application started\n");
++	Print(u"HelloLib application started\n");
+ 
+-	Print(L"\n\n\nHit any key to exit this image\n");
++	Print(u"\n\n\nHit any key to exit this image\n");
+ 	WaitForSingleEvent(ST->ConIn->WaitForKey, 0);
+ 
+-	uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"\n\n");
++	uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, u"\n\n");
+ 
+ 	efi_status = uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, &efi_input_key);
+ 
+-	Print(L"ScanCode: %xh  UnicodeChar: %xh CallRtStatus: %x\n",
++	Print(u"ScanCode: %xh  UnicodeChar: %xh CallRtStatus: %x\n",
+ 		efi_input_key.ScanCode, efi_input_key.UnicodeChar, efi_status);
+ 
+ 	return EFI_SUCCESS;
+diff --git a/apps/t8.c b/apps/t8.c
+index 10f8811..e8b0dbb 100644
+--- a/apps/t8.c
++++ b/apps/t8.c
+@@ -10,10 +10,10 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
+   InitializeLib(ImageHandle, SystemTable);
+   Argc = GetShellArgcArgv(ImageHandle, &Argv);
+ 
+-  Print(L"Hello World, started with Argc=%d\n", Argc);
++  Print(u"Hello World, started with Argc=%d\n", Argc);
+   for (i = 0 ; i < Argc ; ++i)
+-    Print(L"  Argv[%d] = '%s'\n", i, Argv[i]);
++    Print(u"  Argv[%d] = '%s'\n", i, Argv[i]);
+ 
+-  Print(L"Bye.\n");
++  Print(u"Bye.\n");
+   return EFI_SUCCESS;
+ }
+diff --git a/apps/tcc.c b/apps/tcc.c
+index 09ad98b..05368ad 100644
+--- a/apps/tcc.c
++++ b/apps/tcc.c
+@@ -18,15 +18,15 @@ void dump_stack_helper(uint64_t rsp_val)
+ 	uint64_t *rsp = (uint64_t *)rsp_val;
+ 	int x;
+ 
+-	Print(L"%%rsp: 0x%08x%08x stack:\r\n",
++	Print(u"%%rsp: 0x%08x%08x stack:\r\n",
+ 					(rsp_val & 0xffffffff00000000) >>32,
+ 					 rsp_val & 0xffffffff);
+ 	for (x = 0; x < 8; x++) {
+-		Print(L"%08x: ", ((uint64_t)rsp) & 0xffffffff);
+-		Print(L"%016x ", *rsp++);
+-		Print(L"%016x ", *rsp++);
+-		Print(L"%016x ", *rsp++);
+-		Print(L"%016x\r\n", *rsp++);
++		Print(u"%08x: ", ((uint64_t)rsp) & 0xffffffff);
++		Print(u"%016x ", *rsp++);
++		Print(u"%016x ", *rsp++);
++		Print(u"%016x ", *rsp++);
++		Print(u"%016x\r\n", *rsp++);
+ 	}
+ }
+ #endif
+@@ -328,102 +328,102 @@ efi_main (EFI_HANDLE *image, EFI_SYSTEM_TABLE *systab)
+ 	__asm__ volatile("out %0,%1" : : "a" ((uint8_t)0x14), "dN" (0x80));
+ #endif
+ 
+-	Print(L"Hello\r\n");
++	Print(u"Hello\r\n");
+ 	rc = test_failure();
+ 	if (EFI_ERROR(rc)) {
+-		Print(L"Returning Failure works\n");
++		Print(u"Returning Failure works\n");
+ 	} else {
+-		Print(L"Returning failure doesn't work.\r\n");
+-		Print(L"%%rax was 0x%016x, should have been 0x%016x\n",
++		Print(u"Returning failure doesn't work.\r\n");
++		Print(u"%%rax was 0x%016x, should have been 0x%016x\n",
+ 			rc, EFI_UNSUPPORTED);
+ 		return EFI_INVALID_PARAMETER;
+ 	}
+ 
+ 	rc = test_call0();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"0 args works just fine here.\r\n");
++		Print(u"0 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"0 args failed: 0x%016x\n", rc);
++		Print(u"0 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call1();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"1 arg works just fine here.\r\n");
++		Print(u"1 arg works just fine here.\r\n");
+ 	} else {
+-		Print(L"1 arg failed: 0x%016x\n", rc);
++		Print(u"1 arg failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call2();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"2 args works just fine here.\r\n");
++		Print(u"2 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"2 args failed: 0x%016x\n", rc);
++		Print(u"2 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call3();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"3 args works just fine here.\r\n");
++		Print(u"3 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"3 args failed: 0x%016x\n", rc);
++		Print(u"3 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call4();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"4 args works just fine here.\r\n");
++		Print(u"4 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"4 args failed: 0x%016x\n", rc);
++		Print(u"4 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call5();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"5 args works just fine here.\r\n");
++		Print(u"5 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"5 args failed: 0x%016x\n", rc);
++		Print(u"5 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call6();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"6 args works just fine here.\r\n");
++		Print(u"6 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"6 args failed: 0x%016x\n", rc);
++		Print(u"6 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call7();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"7 args works just fine here.\r\n");
++		Print(u"7 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"7 args failed: 0x%016x\n", rc);
++		Print(u"7 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call8();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"8 args works just fine here.\r\n");
++		Print(u"8 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"8 args failed: 0x%016x\n", rc);
++		Print(u"8 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call9();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"9 args works just fine here.\r\n");
++		Print(u"9 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"9 args failed: 0x%016x\n", rc);
++		Print(u"9 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+ 	rc = test_call10();
+ 	if (!EFI_ERROR(rc)) {
+-		Print(L"10 args works just fine here.\r\n");
++		Print(u"10 args works just fine here.\r\n");
+ 	} else {
+-		Print(L"10 args failed: 0x%016x\n", rc);
++		Print(u"10 args failed: 0x%016x\n", rc);
+ 		return rc;
+ 	}
+ 
+diff --git a/apps/tpause.c b/apps/tpause.c
+index 51c86df..2dd7846 100644
+--- a/apps/tpause.c
++++ b/apps/tpause.c
+@@ -4,6 +4,6 @@
+ EFI_STATUS
+ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ {
+-	Print(L"Press `q' to quit, any other key to continue:\n");
++	Print(u"Press `q' to quit, any other key to continue:\n");
+ 	
+ }
+diff --git a/apps/unsetdbg.c b/apps/unsetdbg.c
+index 731e09b..9890bd0 100644
+--- a/apps/unsetdbg.c
++++ b/apps/unsetdbg.c
+@@ -15,22 +15,22 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+ 	UINT8 data = 1;
+ 	InitializeLib(image, systab);
+ 
+-	status = RT->SetVariable(L"SHIM_DEBUG", &SHIM_GUID,
++	status = RT->SetVariable(u"SHIM_DEBUG", &SHIM_GUID,
+ 				 EFI_VARIABLE_NON_VOLATILE |
+ 				 EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ 				 EFI_VARIABLE_RUNTIME_ACCESS,
+ 				 0, &data);
+ 	if (EFI_ERROR(status))
+-		Print(L"SetVariable failed: %r\n", status);
++		Print(u"SetVariable failed: %r\n", status);
+ 
+ #if 0
+-	status = RT->SetVariable(L"GRUB_ENV", &SHIM_GUID,
++	status = RT->SetVariable(u"GRUB_ENV", &SHIM_GUID,
+ 				 EFI_VARIABLE_NON_VOLATILE |
+ 				 EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ 				 EFI_VARIABLE_RUNTIME_ACCESS,
+ 				 sizeof(grubenv)-1, grubenv);
+ 	if (EFI_ERROR(status))
+-		Print(L"SetVariable(GRUB_ENV) failed: %r\n", status);
++		Print(u"SetVariable(GRUB_ENV) failed: %r\n", status);
+ #endif
+ 
+ 	return EFI_SUCCESS;
+diff --git a/inc/efi.h b/inc/efi.h
+index 6d83374..cc4fc4f 100644
+--- a/inc/efi.h
++++ b/inc/efi.h
+@@ -37,7 +37,7 @@ Revision History
+ extern "C" {
+ #endif
+ 
+-#define EFI_FIRMWARE_VENDOR         L"INTEL"
++#define EFI_FIRMWARE_VENDOR         u"INTEu"
+ #define EFI_FIRMWARE_MAJOR_REVISION 12
+ #define EFI_FIRMWARE_MINOR_REVISION 33
+ #define EFI_FIRMWARE_REVISION ((EFI_FIRMWARE_MAJOR_REVISION <<16) | (EFI_FIRMWARE_MINOR_REVISION))
+diff --git a/inc/efilib.h b/inc/efilib.h
+index f35d2ed..0068ae8 100644
+--- a/inc/efilib.h
++++ b/inc/efilib.h
+@@ -180,21 +180,21 @@ extern EFI_GUID ShellDynamicCommandProtocolGuid;
+ //
+ #define LOAD_OPTION_ACTIVE      0x00000001
+ 
+-#define VarLanguageCodes       L"LangCodes"
+-#define VarLanguage            L"Lang"
+-#define VarTimeout             L"Timeout"
+-#define VarConsoleInp          L"ConIn"
+-#define VarConsoleOut          L"ConOut"
+-#define VarErrorOut            L"ErrOut"
+-#define VarBootOption          L"Boot%04x"
+-#define VarBootOrder           L"BootOrder"
+-#define VarBootNext            L"BootNext"
+-#define VarBootCurrent         L"BootCurrent"
+-#define VarDriverOption        L"Driver%04x"
+-#define VarDriverOrder         L"DriverOrder"
+-#define VarConsoleInpDev       L"ConInDev"
+-#define VarConsoleOutDev       L"ConOutDev"
+-#define VarErrorOutDev         L"ErrOutDev"
++#define VarLanguageCodes       u"LangCodes"
++#define VarLanguage            u"Lang"
++#define VarTimeout             u"Timeout"
++#define VarConsoleInp          u"ConIn"
++#define VarConsoleOut          u"ConOut"
++#define VarErrorOut            u"ErrOut"
++#define VarBootOption          u"Boot%04x"
++#define VarBootOrder           u"BootOrder"
++#define VarBootNext            u"BootNext"
++#define VarBootCurrent         u"BootCurrent"
++#define VarDriverOption        u"Driver%04x"
++#define VarDriverOrder         u"DriverOrder"
++#define VarConsoleInpDev       u"ConInDev"
++#define VarConsoleOutDev       u"ConOutDev"
++#define VarErrorOutDev         u"ErrOutDev"
+ 
+ #define LanguageCodeEnglish    "eng"
+ 
+diff --git a/lib/cmdline.c b/lib/cmdline.c
+index 9c214dd..a7f2fa2 100644
+--- a/lib/cmdline.c
++++ b/lib/cmdline.c
+@@ -67,7 +67,7 @@ GetShellArgcArgvFromLoadedImage(
+   if ((*ArgStart != L'\0') && (Argc < MAX_CMDLINE_ARGC))
+     Argv[Argc++] = ArgStart;
+ 
+-  // Print(L"Got argc/argv from loaded image proto\n");
++  // Print(u"Got argc/argv from loaded image proto\n");
+   *ResultArgv = Argv;
+   return Argc;
+ }
+@@ -93,7 +93,7 @@ INTN GetShellArgcArgv(EFI_HANDLE ImageHandle, CHAR16 **Argv[])
+   if (!EFI_ERROR(Status))
+   {
+     // use shell 2.0 interface
+-    // Print(L"Got argc/argv from shell intf proto\n");
++    // Print(u"Got argc/argv from shell intf proto\n");
+     *Argv = EfiShellParametersProtocol->Argv;
+     return EfiShellParametersProtocol->Argc;
+   }
+@@ -109,7 +109,7 @@ INTN GetShellArgcArgv(EFI_HANDLE ImageHandle, CHAR16 **Argv[])
+                              );
+   if (!EFI_ERROR(Status))
+   {
+-    // Print(L"Got argc/argv from shell params proto\n");
++    // Print(u"Got argc/argv from shell params proto\n");
+     *Argv = EfiShellInterfaceProtocol->Argv;
+     return EfiShellInterfaceProtocol->Argc;
+   }
+diff --git a/lib/console.c b/lib/console.c
+index 5ca47ef..a733fb6 100644
+--- a/lib/console.c
++++ b/lib/console.c
+@@ -81,7 +81,7 @@ IInput (
+         
+         if (Key.UnicodeChar == '\b') {
+             if (Len) {
+-                uefi_call_wrapper(ConOut->OutputString, 2, ConOut, L"\b \b");
++                uefi_call_wrapper(ConOut->OutputString, 2, ConOut, u"\b \b");
+                 Len -= 1;
+             }
+             continue;
+diff --git a/lib/dpath.c b/lib/dpath.c
+index 63e4e70..0ee9921 100644
+--- a/lib/dpath.c
++++ b/lib/dpath.c
+@@ -479,7 +479,7 @@ _DevPathPci (
+     PCI_DEVICE_PATH         *Pci;
+ 
+     Pci = DevPath;
+-    CatPrint(Str, L"Pci(0x%x,0x%x)", Pci->Device, Pci->Function);
++    CatPrint(Str, u"Pci(0x%x,0x%x)", Pci->Device, Pci->Function);
+ }
+ 
+ static VOID
+@@ -491,7 +491,7 @@ _DevPathPccard (
+     PCCARD_DEVICE_PATH      *Pccard;
+ 
+     Pccard = DevPath;
+-    CatPrint(Str, L"Pccard(0x%x)", Pccard-> FunctionNumber );
++    CatPrint(Str, u"Pccard(0x%x)", Pccard-> FunctionNumber );
+ }
+ 
+ static VOID
+@@ -503,7 +503,7 @@ _DevPathMemMap (
+     MEMMAP_DEVICE_PATH      *MemMap;
+ 
+     MemMap = DevPath;
+-    CatPrint(Str, L"MemMap(%d,0x%x,0x%x)",
++    CatPrint(Str, u"MemMap(%d,0x%x,0x%x)",
+         MemMap->MemoryType,
+         MemMap->StartingAddress,
+         MemMap->EndingAddress
+@@ -519,7 +519,7 @@ _DevPathController (
+     CONTROLLER_DEVICE_PATH  *Controller;
+ 
+     Controller = DevPath;
+-    CatPrint(Str, L"Ctrl(%d)",
++    CatPrint(Str, u"Ctrl(%d)",
+         Controller->Controller
+         );
+ }
+@@ -536,21 +536,21 @@ _DevPathVendor (
+ 
+     Vendor = DevPath;
+     switch (DevicePathType(&Vendor->Header)) {
+-    case HARDWARE_DEVICE_PATH:  Type = L"Hw";        break;
+-    case MESSAGING_DEVICE_PATH: Type = L"Msg";       break;
+-    case MEDIA_DEVICE_PATH:     Type = L"Media";     break;
+-    default:                    Type = L"?";         break;
++    case HARDWARE_DEVICE_PATH:  Type = u"Hw";        break;
++    case MESSAGING_DEVICE_PATH: Type = u"Msg";       break;
++    case MEDIA_DEVICE_PATH:     Type = u"Media";     break;
++    default:                    Type = u"?";         break;
+     }
+ 
+-    CatPrint(Str, L"Ven%s(%g", Type, &Vendor->Guid);
++    CatPrint(Str, u"Ven%s(%g", Type, &Vendor->Guid);
+     if (CompareGuid (&Vendor->Guid, &UnknownDevice) == 0) {
+         //
+         // GUID used by EFI to enumerate an EDD 1.1 device
+         //
+         UnknownDevPath = (UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *)Vendor;
+-        CatPrint(Str, L":%02x)", UnknownDevPath->LegacyDriveLetter);
++        CatPrint(Str, u":%02x)", UnknownDevPath->LegacyDriveLetter);
+     } else {
+-        CatPrint(Str, L")");
++        CatPrint(Str, u")");
+     }
+ }
+ 
+@@ -570,40 +570,40 @@ _DevPathAcpi (
+     if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
+         switch ( EISA_ID_TO_NUM( Acpi-> HID ) ) {
+             case 0x301 : {
+-                CatPrint( Str , L"Keyboard(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"Keyboard(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             case 0x401 : {
+-                CatPrint( Str , L"ParallelPort(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"ParallelPort(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             case 0x501 : {
+-                CatPrint( Str , L"Serial(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"Serial(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             case 0x604 : {
+-                CatPrint( Str , L"Floppy(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"Floppy(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             case 0xa03 : {
+-                CatPrint( Str , L"PciRoot(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"PciRoot(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             case 0xa08 : {
+-                CatPrint( Str , L"PcieRoot(%d)" , Acpi-> UID ) ;
++                CatPrint( Str , u"PcieRoot(%d)" , Acpi-> UID ) ;
+                 break ;
+             }
+             default : {
+-                CatPrint( Str , L"Acpi(PNP%04x" , EISA_ID_TO_NUM( Acpi-> HID ) ) ;
+-                if ( Acpi-> UID ) CatPrint( Str , L",%d" , Acpi-> UID ) ;
+-                CatPrint( Str , L")" ) ;
++                CatPrint( Str , u"Acpi(PNP%04x" , EISA_ID_TO_NUM( Acpi-> HID ) ) ;
++                if ( Acpi-> UID ) CatPrint( Str , u",%d" , Acpi-> UID ) ;
++                CatPrint( Str , u")" ) ;
+                 break ;
+             }
+ 	}
+     } else {
+-        CatPrint( Str , L"Acpi(0x%X" , Acpi-> HID ) ;
+-        if ( Acpi-> UID ) CatPrint( Str , L",%d" , Acpi-> UID ) ;
+-        CatPrint( Str , L")" , Acpi-> HID , Acpi-> UID ) ;
++        CatPrint( Str , u"Acpi(0x%X" , Acpi-> HID ) ;
++        if ( Acpi-> UID ) CatPrint( Str , u",%d" , Acpi-> UID ) ;
++        CatPrint( Str , u")" , Acpi-> HID , Acpi-> UID ) ;
+     }
+ }
+ 
+@@ -617,9 +617,9 @@ _DevPathAtapi (
+     ATAPI_DEVICE_PATH       *Atapi;
+ 
+     Atapi = DevPath;
+-    CatPrint(Str, L"Ata(%s,%s)",
+-        Atapi->PrimarySecondary ? L"Secondary" : L"Primary",
+-        Atapi->SlaveMaster ? L"Slave" : L"Master"
++    CatPrint(Str, u"Ata(%s,%s)",
++        Atapi->PrimarySecondary ? u"Secondary" : u"Primary",
++        Atapi->SlaveMaster ? u"Slave" : u"Master"
+         );
+ }
+ 
+@@ -632,7 +632,7 @@ _DevPathScsi (
+     SCSI_DEVICE_PATH        *Scsi;
+ 
+     Scsi = DevPath;
+-    CatPrint(Str, L"Scsi(%d,%d)", Scsi->Pun, Scsi->Lun);
++    CatPrint(Str, u"Scsi(%d,%d)", Scsi->Pun, Scsi->Lun);
+ }
+ 
+ 
+@@ -645,8 +645,8 @@ _DevPathFibre (
+     FIBRECHANNEL_DEVICE_PATH    *Fibre;
+ 
+     Fibre = DevPath;
+-    CatPrint( Str , L"Fibre%s(0x%016lx,0x%016lx)" ,
+-        DevicePathType( & Fibre-> Header ) == MSG_FIBRECHANNEL_DP ? L"" : L"Ex" ,
++    CatPrint( Str , u"Fibre%s(0x%016lx,0x%016lx)" ,
++        DevicePathType( & Fibre-> Header ) == MSG_FIBRECHANNEL_DP ? u"" : u"Ex" ,
+         Fibre-> WWN , Fibre-> Lun ) ;
+ }
+ 
+@@ -660,7 +660,7 @@ _DevPath1394 (
+ 
+     F1394 = DevPath;
+     // Guid has format of IEEE-EUI64
+-    CatPrint(Str, L"I1394(%016lx)", F1394->Guid);
++    CatPrint(Str, u"I1394(%016lx)", F1394->Guid);
+ }
+ 
+ 
+@@ -674,7 +674,7 @@ _DevPathUsb (
+     USB_DEVICE_PATH         *Usb;
+ 
+     Usb = DevPath;
+-    CatPrint( Str , L"Usb(0x%x,0x%x)" , Usb-> Port , Usb-> Endpoint ) ;
++    CatPrint( Str , u"Usb(0x%x,0x%x)" , Usb-> Port , Usb-> Endpoint ) ;
+ }
+ 
+ 
+@@ -687,7 +687,7 @@ _DevPathI2O (
+     I2O_DEVICE_PATH         *I2O;
+ 
+     I2O = DevPath;
+-    CatPrint(Str, L"I2O(0x%X)", I2O->Tid);
++    CatPrint(Str, u"I2O(0x%X)", I2O->Tid);
+ }
+ 
+ static VOID
+@@ -710,15 +710,15 @@ _DevPathMacAddr (
+         HwAddressSize = 6;
+     }
+ 
+-    CatPrint(Str, L"Mac(");
++    CatPrint(Str, u"Mac(");
+ 
+     for(Index = 0; Index < HwAddressSize; Index++) {
+-        CatPrint(Str, L"%02x",MAC->MacAddress.Addr[Index]);
++        CatPrint(Str, u"%02x",MAC->MacAddress.Addr[Index]);
+     }
+     if ( MAC-> IfType != 0 ) {
+-        CatPrint(Str, L",%d" , MAC-> IfType ) ;
++        CatPrint(Str, u",%d" , MAC-> IfType ) ;
+     }
+-    CatPrint(Str, L")");
++    CatPrint(Str, u")");
+ }
+ 
+ static VOID
+@@ -727,7 +727,7 @@ CatPrintIPv4(
+     IN EFI_IPv4_ADDRESS * Address
+     )
+ {
+-    CatPrint( Str , L"%d.%d.%d.%d" , Address-> Addr[ 0 ] , Address-> Addr[ 1 ] ,
++    CatPrint( Str , u"%d.%d.%d.%d" , Address-> Addr[ 0 ] , Address-> Addr[ 1 ] ,
+         Address-> Addr[ 2 ] , Address-> Addr[ 3 ] ) ;
+ }
+ 
+@@ -749,11 +749,11 @@ CatPrintNetworkProtocol(
+     )
+ {
+     if ( Proto == 6 ) {
+-        CatPrint( Str , L"TCP" ) ;
++        CatPrint( Str , u"TCP" ) ;
+     } else if ( Proto == 17 ) {
+-        CatPrint( Str , L"UDP" ) ;
++        CatPrint( Str , u"UDP" ) ;
+     } else {
+-        CatPrint( Str , L"%d" , Proto ) ;
++        CatPrint( Str , u"%d" , Proto ) ;
+     }
+ }
+ 
+@@ -767,11 +767,11 @@ _DevPathIPv4 (
+     BOOLEAN show ;
+ 
+     IP = DevPath;
+-    CatPrint( Str , L"IPv4(") ;
++    CatPrint( Str , u"IPv4(") ;
+     CatPrintIPv4( Str , & IP-> RemoteIpAddress ) ;
+-    CatPrint( Str , L",") ;
++    CatPrint( Str , u",") ;
+     CatPrintNetworkProtocol( Str , IP-> Protocol ) ;
+-    CatPrint( Str , L",%s" , IP-> StaticIpAddress ? L"Static" : L"DHCP" ) ;
++    CatPrint( Str , u",%s" , IP-> StaticIpAddress ? u"Static" : u"DHCP" ) ;
+     show = IsNotNullIPv4( & IP-> LocalIpAddress ) ;
+     if ( ! show && DevicePathNodeLength( & IP-> Header ) == sizeof( IPv4_DEVICE_PATH ) ) {
+         /* only version 2 includes gateway and netmask */
+@@ -779,23 +779,23 @@ _DevPathIPv4 (
+         show |= IsNotNullIPv4( & IP-> SubnetMask  ) ;
+     }
+     if ( show ) {
+-        CatPrint( Str , L"," ) ;
++        CatPrint( Str , u"," ) ;
+         CatPrintIPv4( Str , & IP-> LocalIpAddress ) ;
+         if ( DevicePathNodeLength( & IP-> Header ) == sizeof( IPv4_DEVICE_PATH ) ) {
+             /* only version 2 includes gateway and netmask */
+             show = IsNotNullIPv4( & IP-> GatewayIpAddress ) ;
+             show |= IsNotNullIPv4( & IP-> SubnetMask ) ;
+             if ( show ) {
+-                CatPrint( Str , L",") ;
++                CatPrint( Str , u",") ;
+                 CatPrintIPv4( Str , & IP-> GatewayIpAddress ) ;
+                 if ( IsNotNullIPv4( & IP-> SubnetMask ) ) {
+-                    CatPrint( Str , L",") ;
++                    CatPrint( Str , u",") ;
+                     CatPrintIPv4( Str , & IP-> SubnetMask ) ;
+                 }
+             }
+         }
+     }
+-    CatPrint( Str , L")") ;
++    CatPrint( Str , u")") ;
+ }
+ 
+ #define CatPrintIPv6_ADD( x , y ) ( ( (UINT16) ( x ) ) << 8 | ( y ) )
+@@ -805,7 +805,7 @@ CatPrintIPv6(
+     IN EFI_IPv6_ADDRESS * Address
+     )
+ {
+-    CatPrint( Str , L"%x:%x:%x:%x:%x:%x:%x:%x" ,
++    CatPrint( Str , u"%x:%x:%x:%x:%x:%x:%x:%x" ,
+         CatPrintIPv6_ADD( Address-> Addr[ 0 ] , Address-> Addr[ 1 ] ) ,
+         CatPrintIPv6_ADD( Address-> Addr[ 2 ] , Address-> Addr[ 3 ] ) ,
+         CatPrintIPv6_ADD( Address-> Addr[ 4 ] , Address-> Addr[ 5 ] ) ,
+@@ -825,21 +825,21 @@ _DevPathIPv6 (
+     IPv6_DEVICE_PATH     *IP;
+ 
+     IP = DevPath;
+-    CatPrint( Str , L"IPv6(") ;
++    CatPrint( Str , u"IPv6(") ;
+     CatPrintIPv6( Str , & IP-> RemoteIpAddress ) ;
+-    CatPrint( Str , L",") ;
++    CatPrint( Str , u",") ;
+     CatPrintNetworkProtocol( Str, IP-> Protocol ) ;
+-    CatPrint( Str , L",%s," , IP-> IPAddressOrigin ?
+-        ( IP-> IPAddressOrigin == 1 ? L"StatelessAutoConfigure" :
+-        L"StatefulAutoConfigure" ) : L"Static" ) ;
++    CatPrint( Str , u",%s," , IP-> IPAddressOrigin ?
++        ( IP-> IPAddressOrigin == 1 ? u"StatelessAutoConfigure" :
++        u"StatefulAutoConfigure" ) : u"Static" ) ;
+     CatPrintIPv6( Str , & IP-> LocalIpAddress ) ;
+     if ( DevicePathNodeLength( & IP-> Header ) == sizeof( IPv6_DEVICE_PATH ) ) {
+-        CatPrint( Str , L",") ;
++        CatPrint( Str , u",") ;
+         CatPrintIPv6( Str , & IP-> GatewayIpAddress ) ;
+-        CatPrint( Str , L",") ;
+-        CatPrint( Str , L"%d" , & IP-> PrefixLength ) ;
++        CatPrint( Str , u",") ;
++        CatPrint( Str , u"%d" , & IP-> PrefixLength ) ;
+     }
+-    CatPrint( Str , L")") ;
++    CatPrint( Str , u")") ;
+ }
+ 
+ static VOID
+@@ -852,7 +852,7 @@ _DevPathUri (
+ 
+     Uri = DevPath;
+ 
+-    CatPrint( Str, L"Uri(%a)", Uri->Uri );
++    CatPrint( Str, u"Uri(%a)", Uri->Uri );
+ }
+ 
+ static VOID
+@@ -864,7 +864,7 @@ _DevPathInfiniBand (
+     INFINIBAND_DEVICE_PATH  *InfiniBand;
+ 
+     InfiniBand = DevPath;
+-    CatPrint(Str, L"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
++    CatPrint(Str, u"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
+         InfiniBand->ResourceFlags, InfiniBand->PortGid, InfiniBand->ServiceId,
+         InfiniBand->TargetPortId, InfiniBand->DeviceId);
+ }
+@@ -890,25 +890,25 @@ _DevPathUart (
+     }
+ 
+     if (Uart->BaudRate == 0) {
+-        CatPrint(Str, L"Uart(DEFAULT,");
++        CatPrint(Str, u"Uart(DEFAULT,");
+     } else {
+-        CatPrint(Str, L"Uart(%ld,", Uart->BaudRate);
++        CatPrint(Str, u"Uart(%ld,", Uart->BaudRate);
+     }
+ 
+     if (Uart->DataBits == 0) {
+-        CatPrint(Str, L"DEFAULT,");
++        CatPrint(Str, u"DEFAULT,");
+     } else {
+-        CatPrint(Str, L"%d,", Uart->DataBits);
++        CatPrint(Str, u"%d,", Uart->DataBits);
+     }
+ 
+-    CatPrint(Str, L"%c,", Parity);
++    CatPrint(Str, u"%c,", Parity);
+ 
+     switch (Uart->StopBits) {
+-        case 0  : CatPrint(Str, L"D)");   break;
+-        case 1  : CatPrint(Str, L"1)");   break;
+-        case 2  : CatPrint(Str, L"1.5)"); break;
+-        case 3  : CatPrint(Str, L"2)");   break;
+-        default : CatPrint(Str, L"x)");   break;
++        case 0  : CatPrint(Str, u"D)");   break;
++        case 1  : CatPrint(Str, u"1)");   break;
++        case 2  : CatPrint(Str, u"1.5)"); break;
++        case 3  : CatPrint(Str, u"2)");   break;
++        default : CatPrint(Str, u"x)");   break;
+     }
+ }
+ 
+@@ -921,7 +921,7 @@ _DevPathSata (
+     SATA_DEVICE_PATH * Sata ;
+ 
+     Sata = DevPath;
+-    CatPrint( Str , L"Sata(0x%x,0x%x,0x%x)" , Sata-> HBAPortNumber ,
++    CatPrint( Str , u"Sata(0x%x,0x%x,0x%x)" , Sata-> HBAPortNumber ,
+         Sata-> PortMultiplierPortNumber , Sata-> Lun ) ;
+ }
+ 
+@@ -936,19 +936,19 @@ _DevPathHardDrive (
+     Hd = DevPath;
+     switch (Hd->SignatureType) {
+         case SIGNATURE_TYPE_MBR:
+-            CatPrint(Str, L"HD(%d,MBR,0x%08x)",
++            CatPrint(Str, u"HD(%d,MBR,0x%08x)",
+                 Hd->PartitionNumber,
+                 *((UINT32 *)(&(Hd->Signature[0])))
+                 );
+             break;
+         case SIGNATURE_TYPE_GUID:
+-            CatPrint(Str, L"HD(%d,GPT,%g)",
++            CatPrint(Str, u"HD(%d,GPT,%g)",
+                 Hd->PartitionNumber,
+                 (EFI_GUID *) &(Hd->Signature[0])
+                 );
+             break;
+         default:
+-            CatPrint(Str, L"HD(%d,%d,0)",
++            CatPrint(Str, u"HD(%d,%d,0)",
+                 Hd->PartitionNumber,
+                 Hd->SignatureType
+                 );
+@@ -965,7 +965,7 @@ _DevPathCDROM (
+     CDROM_DEVICE_PATH       *Cd;
+ 
+     Cd = DevPath;
+-    CatPrint( Str , L"CDROM(0x%x)" , Cd-> BootEntry ) ;
++    CatPrint( Str , u"CDROM(0x%x)" , Cd-> BootEntry ) ;
+ }
+ 
+ static VOID
+@@ -977,7 +977,7 @@ _DevPathFilePath (
+     FILEPATH_DEVICE_PATH    *Fp;
+ 
+     Fp = DevPath;
+-    CatPrint(Str, L"%s", Fp->PathName);
++    CatPrint(Str, u"%s", Fp->PathName);
+ }
+ 
+ static VOID
+@@ -989,7 +989,7 @@ _DevPathMediaProtocol (
+     MEDIA_PROTOCOL_DEVICE_PATH  *MediaProt;
+ 
+     MediaProt = DevPath;
+-    CatPrint(Str, L"%g", &MediaProt->Protocol);
++    CatPrint(Str, u"%g", &MediaProt->Protocol);
+ }
+ 
+ static VOID
+@@ -1003,16 +1003,16 @@ _DevPathBssBss (
+ 
+     Bss = DevPath;
+     switch (Bss->DeviceType) {
+-    case BBS_TYPE_FLOPPY:               Type = L"Floppy";       break;
+-    case BBS_TYPE_HARDDRIVE:            Type = L"Harddrive";    break;
+-    case BBS_TYPE_CDROM:                Type = L"CDROM";        break;
+-    case BBS_TYPE_PCMCIA:               Type = L"PCMCIA";       break;
+-    case BBS_TYPE_USB:                  Type = L"Usb";          break;
+-    case BBS_TYPE_EMBEDDED_NETWORK:     Type = L"Net";          break;
+-    default:                            Type = L"?";            break;
++    case BBS_TYPE_FLOPPY:               Type = u"Floppy";       break;
++    case BBS_TYPE_HARDDRIVE:            Type = u"Harddrive";    break;
++    case BBS_TYPE_CDROM:                Type = u"CDROM";        break;
++    case BBS_TYPE_PCMCIA:               Type = u"PCMCIA";       break;
++    case BBS_TYPE_USB:                  Type = u"Usb";          break;
++    case BBS_TYPE_EMBEDDED_NETWORK:     Type = u"Net";          break;
++    default:                            Type = u"?";            break;
+     }
+ 
+-    CatPrint(Str, L"Bss-%s(%a)", Type, Bss->String);
++    CatPrint(Str, u"Bss-%s(%a)", Type, Bss->String);
+ }
+ 
+ 
+@@ -1022,7 +1022,7 @@ _DevPathEndInstance (
+     IN VOID                 *DevPath EFI_UNUSED
+     )
+ {
+-    CatPrint(Str, L",");
++    CatPrint(Str, u",");
+ }
+ 
+ /**
+@@ -1044,37 +1044,37 @@ _DevPathNodeUnknown (
+     value += 4 ;
+     switch ( Path-> Type ) {
+         case HARDWARE_DEVICE_PATH : { /* Unknown Hardware Device Path */
+-            CatPrint( Str , L"HardwarePath(%d" , Path-> SubType ) ;
++            CatPrint( Str , u"HardwarePath(%d" , Path-> SubType ) ;
+             break ;
+         }
+         case ACPI_DEVICE_PATH : { /* Unknown ACPI Device Path */
+-            CatPrint( Str , L"AcpiPath(%d" , Path-> SubType ) ;
++            CatPrint( Str , u"AcpiPath(%d" , Path-> SubType ) ;
+             break ;
+         }
+         case MESSAGING_DEVICE_PATH : { /* Unknown Messaging Device Path */
+-            CatPrint( Str , L"Msg(%d" , Path-> SubType ) ;
++            CatPrint( Str , u"Msg(%d" , Path-> SubType ) ;
+             break ;
+         }
+         case MEDIA_DEVICE_PATH : { /* Unknown Media Device Path */
+-            CatPrint( Str , L"MediaPath(%d" , Path-> SubType ) ;
++            CatPrint( Str , u"MediaPath(%d" , Path-> SubType ) ;
+             break ;
+         }
+         case BBS_DEVICE_PATH : { /* Unknown BIOS Boot Specification Device Path */
+-            CatPrint( Str , L"BbsPath(%d" , Path-> SubType ) ;
++            CatPrint( Str , u"BbsPath(%d" , Path-> SubType ) ;
+             break ;
+         }
+         default : { /* Unknown Device Path */
+-            CatPrint( Str , L"Path(%d,%d" , Path-> Type , Path-> SubType ) ;
++            CatPrint( Str , u"Path(%d,%d" , Path-> Type , Path-> SubType ) ;
+             break ;
+         }
+     }
+     length = DevicePathNodeLength( Path ) ;
+     for ( index = 0 ; index < length ; index ++ ) {
+-        if ( index == 0 ) CatPrint( Str , L",0x" ) ;
+-        CatPrint( Str , L"%02x" , * value ) ;
++        if ( index == 0 ) CatPrint( Str , u",0x" ) ;
++        CatPrint( Str , u"%02x" , * value ) ;
+ 	value ++ ;
+     }
+-    CatPrint( Str , L")" ) ;
++    CatPrint( Str , u")" ) ;
+ }
+ 
+ 
+@@ -1180,7 +1180,7 @@ DevicePathToStr (
+         //
+ 
+         if (Str.len  &&  DumpNode != _DevPathEndInstance) {
+-            CatPrint (&Str, L"/");
++            CatPrint (&Str, u"/");
+         }
+ 
+         //
+diff --git a/lib/error.c b/lib/error.c
+index 38e03e8..2837bbb 100644
+--- a/lib/error.c
++++ b/lib/error.c
+@@ -23,49 +23,49 @@ typedef struct {
+     WCHAR		*Desc;
+ } ErrorCodeTable_Type;
+ ErrorCodeTable_Type ErrorCodeTable[] = {
+-	{  EFI_SUCCESS,                L"Success"},
+-	{  EFI_LOAD_ERROR,             L"Load Error"},
+-	{  EFI_INVALID_PARAMETER,      L"Invalid Parameter"},
+-	{  EFI_UNSUPPORTED,            L"Unsupported"},
+-	{  EFI_BAD_BUFFER_SIZE,        L"Bad Buffer Size"},
+-	{  EFI_BUFFER_TOO_SMALL,       L"Buffer Too Small"},
+-	{  EFI_NOT_READY,              L"Not Ready"},
+-	{  EFI_DEVICE_ERROR,           L"Device Error"},
+-	{  EFI_WRITE_PROTECTED,        L"Write Protected"},
+-	{  EFI_OUT_OF_RESOURCES,       L"Out of Resources"},
+-	{  EFI_VOLUME_CORRUPTED,       L"Volume Corrupt"},
+-	{  EFI_VOLUME_FULL,            L"Volume Full"},
+-	{  EFI_NO_MEDIA,               L"No Media"},
+-	{  EFI_MEDIA_CHANGED,          L"Media changed"},
+-	{  EFI_NOT_FOUND,              L"Not Found"},
+-	{  EFI_ACCESS_DENIED,          L"Access Denied"},
+-	{  EFI_NO_RESPONSE,            L"No Response"},
+-	{  EFI_NO_MAPPING,             L"No mapping"},
+-	{  EFI_TIMEOUT,                L"Time out"},
+-	{  EFI_NOT_STARTED,            L"Not started"},
+-	{  EFI_ALREADY_STARTED,        L"Already started"},
+-	{  EFI_ABORTED,                L"Aborted"},
+-	{  EFI_ICMP_ERROR,             L"ICMP Error"},
+-	{  EFI_TFTP_ERROR,             L"TFTP Error"},
+-	{  EFI_PROTOCOL_ERROR,         L"Protocol Error"},
+-	{  EFI_INCOMPATIBLE_VERSION,   L"Incompatible Version"},
+-	{  EFI_SECURITY_VIOLATION,     L"Security Policy Violation"},
+-	{  EFI_CRC_ERROR,              L"CRC Error"},
+-	{  EFI_END_OF_MEDIA,           L"End of Media"},
+-	{  EFI_END_OF_FILE,            L"End of File"},
+-	{  EFI_INVALID_LANGUAGE,       L"Invalid Languages"},
+-	{  EFI_COMPROMISED_DATA,       L"Compromised Data"},
+-	{  EFI_IP_ADDRESS_CONFLICT,    L"IP Address Conflict"},
+-	{  EFI_HTTP_ERROR,             L"HTTP Error"},
++	{  EFI_SUCCESS,                u"Success"},
++	{  EFI_LOAD_ERROR,             u"Load Error"},
++	{  EFI_INVALID_PARAMETER,      u"Invalid Parameter"},
++	{  EFI_UNSUPPORTED,            u"Unsupported"},
++	{  EFI_BAD_BUFFER_SIZE,        u"Bad Buffer Size"},
++	{  EFI_BUFFER_TOO_SMALL,       u"Buffer Too Small"},
++	{  EFI_NOT_READY,              u"Not Ready"},
++	{  EFI_DEVICE_ERROR,           u"Device Error"},
++	{  EFI_WRITE_PROTECTED,        u"Write Protected"},
++	{  EFI_OUT_OF_RESOURCES,       u"Out of Resources"},
++	{  EFI_VOLUME_CORRUPTED,       u"Volume Corrupt"},
++	{  EFI_VOLUME_FULL,            u"Volume Full"},
++	{  EFI_NO_MEDIA,               u"No Media"},
++	{  EFI_MEDIA_CHANGED,          u"Media changed"},
++	{  EFI_NOT_FOUND,              u"Not Found"},
++	{  EFI_ACCESS_DENIED,          u"Access Denied"},
++	{  EFI_NO_RESPONSE,            u"No Response"},
++	{  EFI_NO_MAPPING,             u"No mapping"},
++	{  EFI_TIMEOUT,                u"Time out"},
++	{  EFI_NOT_STARTED,            u"Not started"},
++	{  EFI_ALREADY_STARTED,        u"Already started"},
++	{  EFI_ABORTED,                u"Aborted"},
++	{  EFI_ICMP_ERROR,             u"ICMP Error"},
++	{  EFI_TFTP_ERROR,             u"TFTP Error"},
++	{  EFI_PROTOCOL_ERROR,         u"Protocol Error"},
++	{  EFI_INCOMPATIBLE_VERSION,   u"Incompatible Version"},
++	{  EFI_SECURITY_VIOLATION,     u"Security Policy Violation"},
++	{  EFI_CRC_ERROR,              u"CRC Error"},
++	{  EFI_END_OF_MEDIA,           u"End of Media"},
++	{  EFI_END_OF_FILE,            u"End of File"},
++	{  EFI_INVALID_LANGUAGE,       u"Invalid Languages"},
++	{  EFI_COMPROMISED_DATA,       u"Compromised Data"},
++	{  EFI_IP_ADDRESS_CONFLICT,    u"IP Address Conflict"},
++	{  EFI_HTTP_ERROR,             u"HTTP Error"},
+ 
+ 	// warnings
+-	{  EFI_WARN_UNKNOWN_GLYPH,     L"Warning Unknown Glyph"},
+-	{  EFI_WARN_DELETE_FAILURE,    L"Warning Delete Failure"},
+-	{  EFI_WARN_WRITE_FAILURE,     L"Warning Write Failure"},
+-	{  EFI_WARN_BUFFER_TOO_SMALL,  L"Warning Buffer Too Small"},
+-	{  EFI_WARN_STALE_DATA,        L"Warning Stale Data"},
+-	{  EFI_WARN_FILE_SYSTEM,       L"Warning File System"},
+-	{  EFI_WARN_RESET_REQUIRED,    L"Warning Reset Required"},
++	{  EFI_WARN_UNKNOWN_GLYPH,     u"Warning Unknown Glyph"},
++	{  EFI_WARN_DELETE_FAILURE,    u"Warning Delete Failure"},
++	{  EFI_WARN_WRITE_FAILURE,     u"Warning Write Failure"},
++	{  EFI_WARN_BUFFER_TOO_SMALL,  u"Warning Buffer Too Small"},
++	{  EFI_WARN_STALE_DATA,        u"Warning Stale Data"},
++	{  EFI_WARN_FILE_SYSTEM,       u"Warning File System"},
++	{  EFI_WARN_RESET_REQUIRED,    u"Warning Reset Required"},
+ 	{  0, NULL}
+ } ;
+ 
+@@ -85,5 +85,5 @@ StatusToString (
+         }
+     }
+ 
+-    UnicodeSPrint (Buffer, 0, L"%X", Status);
++    UnicodeSPrint (Buffer, 0, u"%X", Status);
+ }
+diff --git a/lib/guid.c b/lib/guid.c
+index 9c8cc6d..9f817a5 100644
+--- a/lib/guid.c
++++ b/lib/guid.c
+@@ -48,56 +48,56 @@ static struct {
+     EFI_GUID        *Guid;
+     WCHAR           *GuidName;
+ } KnownGuids[] = {
+-	{  &NullGuid,                                       L"G0" },
+-	{  &gEfiGlobalVariableGuid,                         L"EfiVar" },
+-
+-	{  &VariableStoreProtocol,                          L"VarStore" },
+-	{  &gEfiDevicePathProtocolGuid,                     L"DevPath" },
+-	{  &gEfiLoadedImageProtocolGuid,                    L"LdImg" },
+-	{  &gEfiSimpleTextInProtocolGuid,                   L"TxtIn" },
+-	{  &gEfiSimpleTextOutProtocolGuid,                  L"TxtOut" },
+-	{  &gEfiBlockIoProtocolGuid,                        L"BlkIo" },
+-	{  &gEfiBlockIo2ProtocolGuid,                       L"BlkIo2" },
+-	{  &gEfiDiskIoProtocolGuid,                         L"DskIo" },
+-	{  &gEfiDiskIo2ProtocolGuid,                        L"DskIo2" },
+-	{  &gEfiSimpleFileSystemProtocolGuid,               L"Fs" },
+-	{  &gEfiLoadFileProtocolGuid,                       L"LdFile" },
+-	{  &gEfiDeviceIoProtocolGuid,                       L"DevIo" },
+-	{  &gEfiComponentNameProtocolGuid,                  L"CName" },
+-	{  &gEfiComponentName2ProtocolGuid,                 L"CName2" },
+-
+-	{  &gEfiFileInfoGuid,                               L"FileInfo" },
+-	{  &gEfiFileSystemInfoGuid,                         L"FsInfo" },
+-	{  &gEfiFileSystemVolumeLabelInfoIdGuid,            L"FsVolInfo" },
+-
+-	{  &gEfiUnicodeCollationProtocolGuid,               L"Unicode" },
+-	{  &LegacyBootProtocol,                             L"LegacyBoot" },
+-	{  &gEfiSerialIoProtocolGuid,                       L"SerIo" },
+-	{  &VgaClassProtocol,                               L"VgaClass"},
+-	{  &gEfiSimpleNetworkProtocolGuid,                  L"Net" },
+-	{  &gEfiNetworkInterfaceIdentifierProtocolGuid,     L"Nii" },
+-	{  &gEfiPxeBaseCodeProtocolGuid,                    L"Pxe" },
+-	{  &gEfiPxeBaseCodeCallbackProtocolGuid,            L"PxeCb" },
+-
+-	{  &TextOutSpliterProtocol,                         L"TxtOutSplit" },
+-	{  &ErrorOutSpliterProtocol,                        L"ErrOutSplit" },
+-	{  &TextInSpliterProtocol,                          L"TxtInSplit" },
+-	{  &gEfiPcAnsiGuid,                                 L"PcAnsi" },
+-	{  &gEfiVT100Guid,                                  L"Vt100" },
+-	{  &gEfiVT100PlusGuid,                              L"Vt100Plus" },
+-	{  &gEfiVTUTF8Guid,                                 L"VtUtf8" },
+-	{  &UnknownDevice,                                  L"UnknownDev" },
+-
+-	{  &EfiPartTypeSystemPartitionGuid,                 L"ESP" },
+-	{  &EfiPartTypeLegacyMbrGuid,                       L"GPT MBR" },
+-
+-	{  &ShellInterfaceProtocol,                         L"ShellInt" },
+-	{  &SEnvId,                                         L"SEnv" },
+-	{  &SProtId,                                        L"ShellProtId" },
+-	{  &SMapId,                                         L"ShellDevPathMap" },
+-	{  &SAliasId,                                       L"ShellAlias" },
+-
+-	{  NULL, L"" }
++	{  &NullGuid,                                       u"G0" },
++	{  &gEfiGlobalVariableGuid,                         u"EfiVar" },
++
++	{  &VariableStoreProtocol,                          u"VarStore" },
++	{  &gEfiDevicePathProtocolGuid,                     u"DevPath" },
++	{  &gEfiLoadedImageProtocolGuid,                    u"LdImg" },
++	{  &gEfiSimpleTextInProtocolGuid,                   u"TxtIn" },
++	{  &gEfiSimpleTextOutProtocolGuid,                  u"TxtOut" },
++	{  &gEfiBlockIoProtocolGuid,                        u"BlkIo" },
++	{  &gEfiBlockIo2ProtocolGuid,                       u"BlkIo2" },
++	{  &gEfiDiskIoProtocolGuid,                         u"DskIo" },
++	{  &gEfiDiskIo2ProtocolGuid,                        u"DskIo2" },
++	{  &gEfiSimpleFileSystemProtocolGuid,               u"Fs" },
++	{  &gEfiLoadFileProtocolGuid,                       u"LdFile" },
++	{  &gEfiDeviceIoProtocolGuid,                       u"DevIo" },
++	{  &gEfiComponentNameProtocolGuid,                  u"CName" },
++	{  &gEfiComponentName2ProtocolGuid,                 u"CName2" },
++
++	{  &gEfiFileInfoGuid,                               u"FileInfo" },
++	{  &gEfiFileSystemInfoGuid,                         u"FsInfo" },
++	{  &gEfiFileSystemVolumeLabelInfoIdGuid,            u"FsVolInfo" },
++
++	{  &gEfiUnicodeCollationProtocolGuid,               u"Unicode" },
++	{  &LegacyBootProtocol,                             u"LegacyBoot" },
++	{  &gEfiSerialIoProtocolGuid,                       u"SerIo" },
++	{  &VgaClassProtocol,                               u"VgaClass"},
++	{  &gEfiSimpleNetworkProtocolGuid,                  u"Net" },
++	{  &gEfiNetworkInterfaceIdentifierProtocolGuid,     u"Nii" },
++	{  &gEfiPxeBaseCodeProtocolGuid,                    u"Pxe" },
++	{  &gEfiPxeBaseCodeCallbackProtocolGuid,            u"PxeCb" },
++
++	{  &TextOutSpliterProtocol,                         u"TxtOutSplit" },
++	{  &ErrorOutSpliterProtocol,                        u"ErrOutSplit" },
++	{  &TextInSpliterProtocol,                          u"TxtInSplit" },
++	{  &gEfiPcAnsiGuid,                                 u"PcAnsi" },
++	{  &gEfiVT100Guid,                                  u"Vt100" },
++	{  &gEfiVT100PlusGuid,                              u"Vt100Plus" },
++	{  &gEfiVTUTF8Guid,                                 u"VtUtf8" },
++	{  &UnknownDevice,                                  u"UnknownDev" },
++
++	{  &EfiPartTypeSystemPartitionGuid,                 u"ESP" },
++	{  &EfiPartTypeLegacyMbrGuid,                       u"GPT MBR" },
++
++	{  &ShellInterfaceProtocol,                         u"ShellInt" },
++	{  &SEnvId,                                         u"SEnv" },
++	{  &SProtId,                                        u"ShellProtId" },
++	{  &SMapId,                                         u"ShellDevPathMap" },
++	{  &SAliasId,                                       u"ShellAlias" },
++
++	{  NULL, u"" }
+ };
+ 
+ //
+@@ -163,7 +163,7 @@ GuidToString (
+     // Else dump it
+     //
+ 
+-    UnicodeSPrint (Buffer, 0, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
++    UnicodeSPrint (Buffer, 0, u"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+         Guid->Data1,
+         Guid->Data2,
+         Guid->Data3,
+diff --git a/lib/init.c b/lib/init.c
+index 726e493..cdf06bf 100644
+--- a/lib/init.c
++++ b/lib/init.c
+@@ -172,7 +172,7 @@ EFIDebugVariable (
+     UINTN           NewEFIDebug;
+ 
+     DataSize = sizeof(EFIDebug);
+-    Status = uefi_call_wrapper(RT->GetVariable, 5, L"EFIDebug", &EfiGlobalVariable, &Attributes, &DataSize, &NewEFIDebug);
++    Status = uefi_call_wrapper(RT->GetVariable, 5, u"EFIDebug", &EfiGlobalVariable, &Attributes, &DataSize, &NewEFIDebug);
+     if (!EFI_ERROR(Status)) {
+         EFIDebug = NewEFIDebug;
+     }
+diff --git a/lib/print.c b/lib/print.c
+index a43dc8c..77cea25 100644
+--- a/lib/print.c
++++ b/lib/print.c
+@@ -881,7 +881,7 @@ Returns:
+     if (!UnicodeStr)
+         return 0;
+ 
+-    UnicodeFmt = PoolPrint(L"%a", fmt);
++    UnicodeFmt = PoolPrint(u"%a", fmt);
+     if (!UnicodeFmt) {
+         FreePool(UnicodeStr);
+         return 0;
+@@ -1261,7 +1261,7 @@ Returns:
+             case 's':
+                 Item.Item.pw = va_arg(ps->args, CHAR16 *);
+                 if (!Item.Item.pw) {
+-                    Item.Item.pw = L"(null)";
++                    Item.Item.pw = u"(null)";
+                 }
+                 break;
+ 
+@@ -1479,7 +1479,7 @@ TimeToString (
+     Year = Time->Year % 100;
+ 
+     // bugbug: for now just print it any old way
+-    UnicodeSPrint (Buffer, 0, L"%02d/%02d/%02d  %02d:%02d%c",
++    UnicodeSPrint (Buffer, 0, u"%02d/%02d/%02d  %02d:%02d%c",
+         Time->Month,
+         Time->Day,
+         Year,
+@@ -1530,7 +1530,7 @@ DumpHex (
+ 
+         Val[Index*3] = 0;
+         Str[Index] = 0;
+-        Print (L"%*a%X: %-.48a *%a*\n", Indent, "", Offset, Val, Str);
++        Print (u"%*a%X: %-.48a *%a*\n", Indent, "", Offset, Val, Str);
+ 
+         Data += Size;
+         Offset += Size;
+@@ -1543,9 +1543,9 @@ DumpHex (
+             //  block updates
+             //
+             ScreenCount = 0;
+-            Print (L"Press Enter to continue :");
+-            Input (L"", ReturnStr, sizeof(ReturnStr)/sizeof(CHAR16));
+-            Print (L"\n");
++            Print (u"Press Enter to continue :");
++            Input (u"", ReturnStr, sizeof(ReturnStr)/sizeof(CHAR16));
++            Print (u"\n");
+         }
+ 
+     }
+-- 
+2.47.1
+