在具有 gcc 的 Linux 主机下构建时,我在 EDK2(x64 shell 应用程序)下使用变量参数时遇到问题。程序构建但在执行时会在执行 VA_ARG() 时导致页面错误。
在带有 VS2015 的 Windows 主机下构建的相同代码可以正常工作。
这似乎与GCC 错误 50818有关,但我找不到解决方案。
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/PrintLib.h>
#include <Library/ShellCEntryLib.h>
VOID PrintInts(UINTN n, ...)
{
VA_LIST vl;
VA_START(vl, n);
Print(L"Printing integers:");
for (UINTN i=0; i<n; i++) {
UINTN val = 0;
val = VA_ARG(vl, UINTN);
Print(L" [%d]", val);
}
VA_END(vl);
Print(L"\n");
}
INTN EFIAPI ShellAppMain(IN UINTN Argc, IN CHAR16 **Argv)
{
UINTN a = 3;
UINTN b = 10;
UINTN c = 9;
PrintInts(3, a, b, c);
return 0;
}