authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-12-26 15:25:54-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-12-26 15:25:54-05:00
loga918ce26b81b8e51c061d85631aa432a025c1ee2
treead8ad8079a40065a9121c397e7d4b41d431dbf70
parentf49b45b00fbdf3feaea7d8460bdbfd5935ff1ea1
signaturelock-open Commit is signed but in an unrecognized format.

fixups


17 files changed, 253 insertions(+), 259 deletions(-)

CMakeLists.txt+1-1
...@@ -590,7 +590,7 @@ set(ZIG_STD_FILES...@@ -590,7 +590,7 @@ set(ZIG_STD_FILES
590 "os/freebsd/x86_64.zig"590 "os/freebsd/x86_64.zig"
591 "os/path.zig"591 "os/path.zig"
592 "os/time.zig"592 "os/time.zig"
593 "os/uefi/index.zig"593 "os/uefi.zig"
594 "os/windows/advapi32.zig"594 "os/windows/advapi32.zig"
595 "os/windows/error.zig"595 "os/windows/error.zig"
596 "os/windows/index.zig"596 "os/windows/index.zig"
README.md+20-20
...@@ -87,26 +87,26 @@ clarity....@@ -87,26 +87,26 @@ clarity.
8787
88#### Support Table88#### Support Table
8989
90| | freestanding | linux | macosx | windows | freebsd | other |90| | freestanding | linux | macosx | windows | freebsd | UEFI | other |
91|--------|--------------|--------|--------|---------|---------|--------|91|--------|--------------|--------|--------|---------|---------|--------|--------|
92|x86_64 | Tier 2 | Tier 1 | Tier 1 | Tier 1 | Tier 2 | Tier 3 |92|x86_64 | Tier 2 | Tier 1 | Tier 1 | Tier 1 | Tier 2 | Tier 2 | Tier 3 |
93|i386 | Tier 2 | Tier 2 | Tier 2 | Tier 2 | Tier 3 | Tier 3 |93|i386 | Tier 2 | Tier 2 | Tier 2 | Tier 2 | Tier 3 | Tier 3 | Tier 3 |
94|arm | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |94|arm | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |
95|arm64 | Tier 2 | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |95|arm64 | Tier 2 | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |
96|bpf | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |96|bpf | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
97|hexagon | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |97|hexagon | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
98|mips | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |98|mips | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
99|powerpc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |99|powerpc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
100|r600 | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |100|r600 | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
101|amdgcn | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |101|amdgcn | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
102|sparc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |102|sparc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
103|s390x | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |103|s390x | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
104|spir | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |104|spir | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
105|lanai | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |105|lanai | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 | Tier 3 |
106|wasm32 | Tier 4 | N/A | N/A | N/A | N/A | N/A |106|wasm32 | Tier 4 | N/A | N/A | N/A | N/A | N/A | N/A |
107|wasm64 | Tier 4 | N/A | N/A | N/A | N/A | N/A |107|wasm64 | Tier 4 | N/A | N/A | N/A | N/A | N/A | N/A |
108|riscv32 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 |108|riscv32 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 | Tier 4 |
109|riscv64 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 |109|riscv64 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 | Tier 4 |
110110
111## Community111## Community
112112
src/all_types.hpp+1-1
...@@ -1750,11 +1750,11 @@ struct CodeGen {...@@ -1750,11 +1750,11 @@ struct CodeGen {
1750 BuildMode build_mode;1750 BuildMode build_mode;
1751 OutType out_type;1751 OutType out_type;
1752 ZigTarget zig_target;1752 ZigTarget zig_target;
1753 TargetSubsystem subsystem;
1753 bool is_static;1754 bool is_static;
1754 bool strip_debug_symbols;1755 bool strip_debug_symbols;
1755 bool is_test_build;1756 bool is_test_build;
1756 bool is_native_target;1757 bool is_native_target;
1757 ZigLLVM_MSVCSubsystemType msvc_subsystem;
1758 bool linker_rdynamic;1758 bool linker_rdynamic;
1759 bool no_rosegment_workaround;1759 bool no_rosegment_workaround;
1760 bool each_lib_rpath;1760 bool each_lib_rpath;
src/analyze.cpp+3-5
...@@ -3203,22 +3203,20 @@ void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLi...@@ -3203,22 +3203,20 @@ void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLi
3203 if (ccc) {3203 if (ccc) {
3204 if (buf_eql_str(symbol_name, "main") && g->libc_link_lib != nullptr) {3204 if (buf_eql_str(symbol_name, "main") && g->libc_link_lib != nullptr) {
3205 g->have_c_main = true;3205 g->have_c_main = true;
3206 g->msvc_subsystem = ZigLLVM_MSVC_CONSOLE;3206 g->subsystem = TargetSubsystemConsole;
3207 } else if (buf_eql_str(symbol_name, "WinMain") &&3207 } else if (buf_eql_str(symbol_name, "WinMain") &&
3208 g->zig_target.os == OsWindows)3208 g->zig_target.os == OsWindows)
3209 {3209 {
3210 g->have_winmain = true;3210 g->have_winmain = true;
3211 g->msvc_subsystem = ZigLLVM_MSVC_WINDOWS;3211 g->subsystem = TargetSubsystemWindows;
3212 } else if (buf_eql_str(symbol_name, "WinMainCRTStartup") &&3212 } else if (buf_eql_str(symbol_name, "WinMainCRTStartup") &&
3213 g->zig_target.os == OsWindows)3213 g->zig_target.os == OsWindows)
3214 {3214 {
3215 g->have_winmain_crt_startup = true;3215 g->have_winmain_crt_startup = true;
3216 g->msvc_subsystem = ZigLLVM_MSVC_WINDOWS;
3217 } else if (buf_eql_str(symbol_name, "DllMainCRTStartup") &&3216 } else if (buf_eql_str(symbol_name, "DllMainCRTStartup") &&
3218 g->zig_target.os == OsWindows)3217 g->zig_target.os == OsWindows)
3219 {3218 {
3220 g->have_dllmain_crt_startup = true;3219 g->have_dllmain_crt_startup = true;
3221 g->msvc_subsystem = ZigLLVM_MSVC_WINDOWS;
3222 }3220 }
3223 }3221 }
32243222
...@@ -4377,7 +4375,7 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *r...@@ -4377,7 +4375,7 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *r
4377 if (is_pub && ok_cc) {4375 if (is_pub && ok_cc) {
4378 if (buf_eql_str(proto_name, "main")) {4376 if (buf_eql_str(proto_name, "main")) {
4379 g->have_pub_main = true;4377 g->have_pub_main = true;
4380 g->msvc_subsystem = ZigLLVM_MSVC_CONSOLE;4378 g->subsystem = TargetSubsystemConsole;
4381 } else if (buf_eql_str(proto_name, "panic")) {4379 } else if (buf_eql_str(proto_name, "panic")) {
4382 g->have_pub_panic = true;4380 g->have_pub_panic = true;
4383 }4381 }
src/codegen.cpp+3-3
...@@ -7231,7 +7231,7 @@ static void init(CodeGen *g) {...@@ -7231,7 +7231,7 @@ static void init(CodeGen *g) {
7231 }7231 }
72327232
7233 if (g->is_test_build) {7233 if (g->is_test_build) {
7234 g->msvc_subsystem = ZigLLVM_MSVC_CONSOLE;7234 g->subsystem = TargetSubsystemConsole;
7235 }7235 }
72367236
7237 assert(g->root_out_name);7237 assert(g->root_out_name);
...@@ -7513,7 +7513,7 @@ static void gen_root_source(CodeGen *g) {...@@ -7513,7 +7513,7 @@ static void gen_root_source(CodeGen *g) {
7513 report_errors_and_maybe_exit(g);7513 report_errors_and_maybe_exit(g);
75147514
7515 if (!g->is_test_build && g->zig_target.os != OsFreestanding &&7515 if (!g->is_test_build && g->zig_target.os != OsFreestanding &&
7516 g->zig_target.os != OsZen && g->zig_target.os != OsUefi &&7516 g->zig_target.os != OsUefi &&
7517 !g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup &&7517 !g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup &&
7518 ((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe))7518 ((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe))
7519 {7519 {
...@@ -8070,11 +8070,11 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) {...@@ -8070,11 +8070,11 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) {
8070 cache_int(ch, g->zig_target.os);8070 cache_int(ch, g->zig_target.os);
8071 cache_int(ch, g->zig_target.env_type);8071 cache_int(ch, g->zig_target.env_type);
8072 cache_int(ch, g->zig_target.oformat);8072 cache_int(ch, g->zig_target.oformat);
8073 cache_int(ch, g->subsystem);
8073 cache_bool(ch, g->is_static);8074 cache_bool(ch, g->is_static);
8074 cache_bool(ch, g->strip_debug_symbols);8075 cache_bool(ch, g->strip_debug_symbols);
8075 cache_bool(ch, g->is_test_build);8076 cache_bool(ch, g->is_test_build);
8076 cache_bool(ch, g->is_native_target);8077 cache_bool(ch, g->is_native_target);
8077 cache_int(ch, g->msvc_subsystem);
8078 cache_bool(ch, g->linker_rdynamic);8078 cache_bool(ch, g->linker_rdynamic);
8079 cache_bool(ch, g->no_rosegment_workaround);8079 cache_bool(ch, g->no_rosegment_workaround);
8080 cache_bool(ch, g->each_lib_rpath);8080 cache_bool(ch, g->each_lib_rpath);
src/ir.cpp+1-7
...@@ -17872,13 +17872,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct...@@ -17872,13 +17872,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
17872 if (type_is_invalid(cimport_result->value.type))17872 if (type_is_invalid(cimport_result->value.type))
17873 return ira->codegen->invalid_instruction;17873 return ira->codegen->invalid_instruction;
1787417874
17875 if (ira->codegen->msvc_subsystem != ZigLLVM_MSVC_EFI_APPLICATION &&17875 find_libc_include_path(ira->codegen);
17876 ira->codegen->msvc_subsystem != ZigLLVM_MSVC_EFI_BOOT_SERVICE_DRIVER &&
17877 ira->codegen->msvc_subsystem != ZigLLVM_MSVC_EFI_ROM &&
17878 ira->codegen->msvc_subsystem != ZigLLVM_MSVC_EFI_RUNTIME_DRIVER) {
17879
17880 find_libc_include_path(ira->codegen);
17881 }
1788217876
17883 ImportTableEntry *child_import = allocate<ImportTableEntry>(1);17877 ImportTableEntry *child_import = allocate<ImportTableEntry>(1);
17884 child_import->decls_scope = create_decls_scope(ira->codegen, node, nullptr, nullptr, child_import);17878 child_import->decls_scope = create_decls_scope(ira->codegen, node, nullptr, nullptr, child_import);
src/link.cpp+161-149
...@@ -444,97 +444,20 @@ static bool zig_lld_link(ZigLLVM_ObjectFormatType oformat, const char **args, si...@@ -444,97 +444,20 @@ static bool zig_lld_link(ZigLLVM_ObjectFormatType oformat, const char **args, si
444 return ZigLLDLink(oformat, args, arg_count, link_diag_callback, diag);444 return ZigLLDLink(oformat, args, arg_count, link_diag_callback, diag);
445}445}
446446
447static void construct_linker_job_coff(LinkJob *lj) {447static void add_uefi_link_args(LinkJob *lj) {
448 CodeGen *g = lj->codegen;448 lj->args.append("/BASE:0");
449449 lj->args.append("/ENTRY:EfiMain");
450 lj->args.append("/ERRORLIMIT:0");450 lj->args.append("/OPT:REF");
451451 lj->args.append("/SAFESEH:NO");
452 if (g->libc_link_lib != nullptr) {452 lj->args.append("/MERGE:.rdata=.data");
453 find_libc_lib_path(g);453 lj->args.append("/ALIGN:32");
454 }454 lj->args.append("/NODEFAULTLIB");
455455 lj->args.append("/SECTION:.xdata,D");
456 lj->args.append("-NOLOGO");456}
457
458 if (!g->strip_debug_symbols && g->zig_target.os != Os::OsUefi) {
459 lj->args.append("-DEBUG");
460 }
461
462 if (g->out_type == OutTypeExe) {
463 // TODO compile time stack upper bound detection
464 lj->args.append("/STACK:16777216");
465 }
466
467 coff_append_machine_arg(g, &lj->args);
468
469 // The commented out stuff is from when we linked with MinGW
470 // Now that we're linking with LLD it remains to be determined
471 // how to handle --target-environ gnu
472 // These comments are a clue
473
474 bool is_library = g->out_type == OutTypeLib;
475 //bool dll = g->out_type == OutTypeLib;
476 //bool shared = !g->is_static && dll;
477 //if (g->is_static) {
478 // lj->args.append("-Bstatic");
479 //} else {
480 // if (dll) {
481 // lj->args.append("--dll");
482 // } else if (shared) {
483 // lj->args.append("--shared");
484 // }
485 // lj->args.append("-Bdynamic");
486 // if (dll || shared) {
487 // lj->args.append("-e");
488 // if (g->zig_target.arch.arch == ZigLLVM_x86) {
489 // lj->args.append("_DllMainCRTStartup@12");
490 // } else {
491 // lj->args.append("DllMainCRTStartup");
492 // }
493 // lj->args.append("--enable-auto-image-base");
494 // }
495 //}
496
497
498 // These are n actual command lines from LINK.EXE UEFI builds (app & driver) to be used as guidance cleaning
499 // up a bit for building the COFF linker args:
500 // /OUT:"J:\coding\nebulae\k\x64\Release\k.efi" /LTCG:incremental /Driver /PDB:"J:\coding\nebulae\k\x64\Release\k.pdb" "UefiApplicationEntryPoint.lib" "UefiRuntimeLib.lib" "UefiHiiLib.lib" "UefiHiiServicesLib.lib" "UefiSortLib.lib" "UefiShellLib.lib" "GlueLib.lib" "BaseLib.lib" "BaseDebugPrintErrorLevelLib.lib" "BasePrintLib.lib" "UefiLib.lib" "UefiBootServicesTableLib.lib" "UefiRuntimeServicesTableLib.lib" "UefiDevicePathLibDevicePathProtocol.lib" "UefiDebugLibConOut.lib" "UefiMemoryLib.lib" "UefiMemoryAllocationLib.lib" "BaseSynchronizationLib.lib" "UefiFileHandleLib.lib" /IMPLIB:"J:\coding\nebulae\k\x64\Release\k.lib" /DEBUG:FASTLINK /BASE:"0" /MACHINE:X64 /ENTRY:"EfiMain" /OPT:REF /SAFESEH:NO /SUBSYSTEM:EFI_APPLICATION /MERGE:".rdata=.data" /NOLOGO /ALIGN:32 /NODEFAULTLIB /SECTION:".xdata,D"
501 // /OUT:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.efi" /LTCG:incremental /Driver /PDB:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.pdb" "UefiDriverEntryPoint.lib" "UefiHiiLib.lib" "UefiHiiServicesLib.lib" "UefiSortLib.lib" "UefiShellLib.lib" "GlueLib.lib" "BaseLib.lib" "BaseDebugPrintErrorLevelLib.lib" "BasePrintLib.lib" "UefiLib.lib" "UefiBootServicesTableLib.lib" "UefiRuntimeServicesTableLib.lib" "UefiDevicePathLibDevicePathProtocol.lib" "UefiDebugLibConOut.lib" "UefiMemoryLib.lib" "UefiMemoryAllocationLib.lib" "BaseSynchronizationLib.lib" "UefiFileHandleLib.lib" /IMPLIB:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.lib" /DEBUG:FASTLINK /BASE:"0" /MACHINE:X64 /ENTRY:"EfiMain" /OPT:REF /SAFESEH:NO /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /MERGE:".rdata=.data" /NOLOGO /ALIGN:32 /NODEFAULTLIB /SECTION:".xdata,D"
502
503 // Sorry for the goto(s) :)
504 switch (g->msvc_subsystem) {
505 case ZigLLVM_MSVC_CONSOLE:
506 lj->args.append("/SUBSYSTEM:console");
507 goto building_nt;
508 case ZigLLVM_MSVC_EFI_APPLICATION:
509 lj->args.append("/SUBSYSTEM:efi_application");
510 goto building_uefi;
511 case ZigLLVM_MSVC_EFI_BOOT_SERVICE_DRIVER:
512 lj->args.append("/SUBSYSTEM:efi_boot_service_driver");
513 goto building_uefi;
514 case ZigLLVM_MSVC_EFI_ROM:
515 lj->args.append("/SUBSYSTEM:efi_rom");
516 goto building_uefi;
517 case ZigLLVM_MSVC_EFI_RUNTIME_DRIVER:
518 lj->args.append("/SUBSYSTEM:efi_runtime_driver");
519 goto building_uefi;
520 case ZigLLVM_MSVC_NATIVE:
521 lj->args.append("/SUBSYSTEM:native");
522 goto building_nt;
523 case ZigLLVM_MSVC_POSIX:
524 lj->args.append("/SUBSYSTEM:posix");
525 goto building_nt;
526 case ZigLLVM_MSVC_WINDOWS:
527 lj->args.append("/SUBSYSTEM:windows");
528 goto building_nt;
529 case ZigLLVM_MSVC_NONE:
530 goto continuing_build;
531 }
532457
533building_uefi:458static void add_nt_link_args(LinkJob *lj, bool is_library) {
534 lj->args.append("/BASE:\"0\" /ENTRY:\"EfiMain\" /OPT:REF /SAFESEH:NO /MERGE:\".rdata=.data\" /ALIGN:32 /NODEFAULTLIB /SECTION:\".xdata,D\"");459 CodeGen *g = lj->codegen;
535 goto continuing_build;
536460
537building_nt:
538 if (lj->link_in_crt) {461 if (lj->link_in_crt) {
539 const char *lib_str = g->is_static ? "lib" : "";462 const char *lib_str = g->is_static ? "lib" : "";
540 const char *d_str = (g->build_mode == BuildModeDebug) ? "d" : "";463 const char *d_str = (g->build_mode == BuildModeDebug) ? "d" : "";
...@@ -557,17 +480,6 @@ building_nt:...@@ -557,17 +480,6 @@ building_nt:
557 //https://msdn.microsoft.com/en-us/library/bb531344.aspx480 //https://msdn.microsoft.com/en-us/library/bb531344.aspx
558 lj->args.append("legacy_stdio_definitions.lib");481 lj->args.append("legacy_stdio_definitions.lib");
559482
560 //if (shared || dll) {
561 // lj->args.append(get_libc_file(g, "dllcrt2.o"));
562 //} else {
563 // if (g->windows_linker_unicode) {
564 // lj->args.append(get_libc_file(g, "crt2u.o"));
565 // } else {
566 // lj->args.append(get_libc_file(g, "crt2.o"));
567 // }
568 //}
569 //lj->args.append(get_libc_static_file(g, "crtbegin.o"));
570
571 // msvcrt depends on kernel32483 // msvcrt depends on kernel32
572 lj->args.append("kernel32.lib");484 lj->args.append("kernel32.lib");
573 } else {485 } else {
...@@ -580,8 +492,156 @@ building_nt:...@@ -580,8 +492,156 @@ building_nt:
580 }492 }
581 }493 }
582 }494 }
495}
496
497// These are n actual command lines from LINK.EXE UEFI builds (app & driver) to be used as guidance cleaning
498// up a bit for building the COFF linker args:
499// /OUT:"J:\coding\nebulae\k\x64\Release\k.efi" /LTCG:incremental /Driver /PDB:"J:\coding\nebulae\k\x64\Release\k.pdb" "UefiApplicationEntryPoint.lib" "UefiRuntimeLib.lib" "UefiHiiLib.lib" "UefiHiiServicesLib.lib" "UefiSortLib.lib" "UefiShellLib.lib" "GlueLib.lib" "BaseLib.lib" "BaseDebugPrintErrorLevelLib.lib" "BasePrintLib.lib" "UefiLib.lib" "UefiBootServicesTableLib.lib" "UefiRuntimeServicesTableLib.lib" "UefiDevicePathLibDevicePathProtocol.lib" "UefiDebugLibConOut.lib" "UefiMemoryLib.lib" "UefiMemoryAllocationLib.lib" "BaseSynchronizationLib.lib" "UefiFileHandleLib.lib" /IMPLIB:"J:\coding\nebulae\k\x64\Release\k.lib" /DEBUG:FASTLINK /BASE:"0" /MACHINE:X64 /ENTRY:"EfiMain" /OPT:REF /SAFESEH:NO /SUBSYSTEM:EFI_APPLICATION /MERGE:".rdata=.data" /NOLOGO /ALIGN:32 /NODEFAULTLIB /SECTION:".xdata,D"
500// /OUT:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.efi" /LTCG:incremental /Driver /PDB:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.pdb" "UefiDriverEntryPoint.lib" "UefiHiiLib.lib" "UefiHiiServicesLib.lib" "UefiSortLib.lib" "UefiShellLib.lib" "GlueLib.lib" "BaseLib.lib" "BaseDebugPrintErrorLevelLib.lib" "BasePrintLib.lib" "UefiLib.lib" "UefiBootServicesTableLib.lib" "UefiRuntimeServicesTableLib.lib" "UefiDevicePathLibDevicePathProtocol.lib" "UefiDebugLibConOut.lib" "UefiMemoryLib.lib" "UefiMemoryAllocationLib.lib" "BaseSynchronizationLib.lib" "UefiFileHandleLib.lib" /IMPLIB:"J:\coding\VisualUefi\samples\x64\Release\UefiDriver.lib" /DEBUG:FASTLINK /BASE:"0" /MACHINE:X64 /ENTRY:"EfiMain" /OPT:REF /SAFESEH:NO /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /MERGE:".rdata=.data" /NOLOGO /ALIGN:32 /NODEFAULTLIB /SECTION:".xdata,D"
501// This commented out stuff is from when we linked with MinGW
502// Now that we're linking with LLD it remains to be determined
503// how to handle --target-environ gnu
504// These comments are a clue
505//bool dll = g->out_type == OutTypeLib;
506//bool shared = !g->is_static && dll;
507//if (g->is_static) {
508// lj->args.append("-Bstatic");
509//} else {
510// if (dll) {
511// lj->args.append("--dll");
512// } else if (shared) {
513// lj->args.append("--shared");
514// }
515// lj->args.append("-Bdynamic");
516// if (dll || shared) {
517// lj->args.append("-e");
518// if (g->zig_target.arch.arch == ZigLLVM_x86) {
519// lj->args.append("_DllMainCRTStartup@12");
520// } else {
521// lj->args.append("DllMainCRTStartup");
522// }
523// lj->args.append("--enable-auto-image-base");
524// }
525//}
526//if (shared || dll) {
527// lj->args.append(get_libc_file(g, "dllcrt2.o"));
528//} else {
529// if (g->windows_linker_unicode) {
530// lj->args.append(get_libc_file(g, "crt2u.o"));
531// } else {
532// lj->args.append(get_libc_file(g, "crt2.o"));
533// }
534//}
535//lj->args.append(get_libc_static_file(g, "crtbegin.o"));
536//if (g->libc_link_lib != nullptr) {
537//if (g->is_static) {
538// lj->args.append("--start-group");
539//}
540
541//lj->args.append("-lmingw32");
542
543//lj->args.append("-lgcc");
544//bool is_android = (g->zig_target.env_type == ZigLLVM_Android);
545//bool is_cyg_ming = is_target_cyg_mingw(&g->zig_target);
546//if (!g->is_static && !is_android) {
547// if (!is_cyg_ming) {
548// lj->args.append("--as-needed");
549// }
550// //lj->args.append("-lgcc_s");
551// if (!is_cyg_ming) {
552// lj->args.append("--no-as-needed");
553// }
554//}
555//if (g->is_static && !is_android) {
556// //lj->args.append("-lgcc_eh");
557//}
558//if (is_android && !g->is_static) {
559// lj->args.append("-ldl");
560//}
561
562//lj->args.append("-lmoldname");
563//lj->args.append("-lmingwex");
564//lj->args.append("-lmsvcrt");
565
566
567//if (g->windows_subsystem_windows) {
568// lj->args.append("-lgdi32");
569// lj->args.append("-lcomdlg32");
570//}
571//lj->args.append("-ladvapi32");
572//lj->args.append("-lshell32");
573//lj->args.append("-luser32");
574//lj->args.append("-lkernel32");
575
576//if (g->is_static) {
577// lj->args.append("--end-group");
578//}
579
580//if (lj->link_in_crt) {
581// lj->args.append(get_libc_static_file(g, "crtend.o"));
582//}
583//}
584
585
586static void construct_linker_job_coff(LinkJob *lj) {
587 CodeGen *g = lj->codegen;
588
589 lj->args.append("/ERRORLIMIT:0");
590
591 if (g->libc_link_lib != nullptr) {
592 find_libc_lib_path(g);
593 }
594
595 lj->args.append("/NOLOGO");
583596
584continuing_build:597 if (!g->strip_debug_symbols) {
598 lj->args.append("/DEBUG");
599 }
600
601 if (g->out_type == OutTypeExe) {
602 // TODO compile time stack upper bound detection
603 lj->args.append("/STACK:16777216");
604 }
605
606 coff_append_machine_arg(g, &lj->args);
607
608 bool is_library = g->out_type == OutTypeLib;
609 switch (g->subsystem) {
610 case TargetSubsystemAuto:
611 break;
612 case TargetSubsystemConsole:
613 lj->args.append("/SUBSYSTEM:console");
614 add_nt_link_args(lj, is_library);
615 break;
616 case TargetSubsystemEfiApplication:
617 lj->args.append("/SUBSYSTEM:efi_application");
618 add_uefi_link_args(lj);
619 break;
620 case TargetSubsystemEfiBootServiceDriver:
621 lj->args.append("/SUBSYSTEM:efi_boot_service_driver");
622 add_uefi_link_args(lj);
623 break;
624 case TargetSubsystemEfiRom:
625 lj->args.append("/SUBSYSTEM:efi_rom");
626 add_uefi_link_args(lj);
627 break;
628 case TargetSubsystemEfiRuntimeDriver:
629 lj->args.append("/SUBSYSTEM:efi_runtime_driver");
630 add_uefi_link_args(lj);
631 break;
632 case TargetSubsystemNative:
633 lj->args.append("/SUBSYSTEM:native");
634 add_nt_link_args(lj, is_library);
635 break;
636 case TargetSubsystemPosix:
637 lj->args.append("/SUBSYSTEM:posix");
638 add_nt_link_args(lj, is_library);
639 break;
640 case TargetSubsystemWindows:
641 lj->args.append("/SUBSYSTEM:windows");
642 add_nt_link_args(lj, is_library);
643 break;
644 }
585645
586 lj->args.append(buf_ptr(buf_sprintf("-OUT:%s", buf_ptr(&g->output_file_path))));646 lj->args.append(buf_ptr(buf_sprintf("-OUT:%s", buf_ptr(&g->output_file_path))));
587647
...@@ -665,54 +725,6 @@ continuing_build:...@@ -665,54 +725,6 @@ continuing_build:
665 }725 }
666 }726 }
667727
668 //if (g->libc_link_lib != nullptr) {
669 //if (g->is_static) {
670 // lj->args.append("--start-group");
671 //}
672
673 //lj->args.append("-lmingw32");
674
675 //lj->args.append("-lgcc");
676 //bool is_android = (g->zig_target.env_type == ZigLLVM_Android);
677 //bool is_cyg_ming = is_target_cyg_mingw(&g->zig_target);
678 //if (!g->is_static && !is_android) {
679 // if (!is_cyg_ming) {
680 // lj->args.append("--as-needed");
681 // }
682 // //lj->args.append("-lgcc_s");
683 // if (!is_cyg_ming) {
684 // lj->args.append("--no-as-needed");
685 // }
686 //}
687 //if (g->is_static && !is_android) {
688 // //lj->args.append("-lgcc_eh");
689 //}
690 //if (is_android && !g->is_static) {
691 // lj->args.append("-ldl");
692 //}
693
694 //lj->args.append("-lmoldname");
695 //lj->args.append("-lmingwex");
696 //lj->args.append("-lmsvcrt");
697
698
699 //if (g->windows_subsystem_windows) {
700 // lj->args.append("-lgdi32");
701 // lj->args.append("-lcomdlg32");
702 //}
703 //lj->args.append("-ladvapi32");
704 //lj->args.append("-lshell32");
705 //lj->args.append("-luser32");
706 //lj->args.append("-lkernel32");
707
708 //if (g->is_static) {
709 // lj->args.append("--end-group");
710 //}
711
712 //if (lj->link_in_crt) {
713 // lj->args.append(get_libc_static_file(g, "crtend.o"));
714 //}
715 //}
716}728}
717729
718730
src/main.cpp+35-43
...@@ -16,13 +16,6 @@...@@ -16,13 +16,6 @@
1616
17#include <stdio.h>17#include <stdio.h>
1818
19#ifdef __GNUC__
20#include <strings.h>
21#define STRCASECMP strcasecmp
22#else
23#define STRCASECMP stricmp
24#endif
25
26static int print_error_usage(const char *arg0) {19static int print_error_usage(const char *arg0) {
27 fprintf(stderr, "See `%s help` for detailed usage information\n", arg0);20 fprintf(stderr, "See `%s help` for detailed usage information\n", arg0);
28 return EXIT_FAILURE;21 return EXIT_FAILURE;
...@@ -97,8 +90,8 @@ static int print_full_usage(const char *arg0) {...@@ -97,8 +90,8 @@ static int print_full_usage(const char *arg0) {
97 " -rdynamic add all symbols to the dynamic symbol table\n"90 " -rdynamic add all symbols to the dynamic symbol table\n"
98 " -rpath [path] add directory to the runtime library search path\n"91 " -rpath [path] add directory to the runtime library search path\n"
99 " --no-rosegment compromise security to workaround valgrind bug\n"92 " --no-rosegment compromise security to workaround valgrind bug\n"
100 " --msvc-subsystem [subsystem] (windows/uefi) /SUBSYSTEM:<subsystem> to the linker\n"93 " --subsystem [subsystem] (windows) /SUBSYSTEM:<subsystem> to the linker\n"
101 " -framework [name] (darwin) link against framework\n"94 " -framework [name] (darwin) link against framework\n"
102 " -mios-version-min [ver] (darwin) set iOS deployment target\n"95 " -mios-version-min [ver] (darwin) set iOS deployment target\n"
103 " -mmacosx-version-min [ver] (darwin) set Mac OS X deployment target\n"96 " -mmacosx-version-min [ver] (darwin) set Mac OS X deployment target\n"
104 " --ver-major [ver] dynamic library semver major version\n"97 " --ver-major [ver] dynamic library semver major version\n"
...@@ -377,8 +370,6 @@ int main(int argc, char **argv) {...@@ -377,8 +370,6 @@ int main(int argc, char **argv) {
377 const char *target_arch = nullptr;370 const char *target_arch = nullptr;
378 const char *target_os = nullptr;371 const char *target_os = nullptr;
379 const char *target_environ = nullptr;372 const char *target_environ = nullptr;
380 bool mwindows = false;
381 bool mconsole = false;
382 bool rdynamic = false;373 bool rdynamic = false;
383 const char *mmacosx_version_min = nullptr;374 const char *mmacosx_version_min = nullptr;
384 const char *mios_version_min = nullptr;375 const char *mios_version_min = nullptr;
...@@ -401,7 +392,7 @@ int main(int argc, char **argv) {...@@ -401,7 +392,7 @@ int main(int argc, char **argv) {
401 int runtime_args_start = -1;392 int runtime_args_start = -1;
402 bool no_rosegment_workaround = false;393 bool no_rosegment_workaround = false;
403 bool system_linker_hack = false;394 bool system_linker_hack = false;
404 ZigLLVM_MSVCSubsystemType msvc_subsystem_type = ZigLLVM_MSVC_NONE;395 TargetSubsystem subsystem = TargetSubsystemAuto;
405396
406 if (argc >= 2 && strcmp(argv[1], "build") == 0) {397 if (argc >= 2 && strcmp(argv[1], "build") == 0) {
407 Buf zig_exe_path_buf = BUF_INIT;398 Buf zig_exe_path_buf = BUF_INIT;
...@@ -547,36 +538,6 @@ int main(int argc, char **argv) {...@@ -547,36 +538,6 @@ int main(int argc, char **argv) {
547 verbose_llvm_ir = true;538 verbose_llvm_ir = true;
548 } else if (strcmp(arg, "--verbose-cimport") == 0) {539 } else if (strcmp(arg, "--verbose-cimport") == 0) {
549 verbose_cimport = true;540 verbose_cimport = true;
550 } else if (strcmp(arg, "--msvc-subsystem") == 0) {
551 if (i + 1 >= argc) {
552 fprintf(stderr, "Expected 1 argument after --msvc-subsystem\n");
553 return print_error_usage(arg0);
554 }
555 i += 1;
556 if (STRCASECMP(argv[i], "CONSOLE") == 0) {
557 msvc_subsystem_type = ZigLLVM_MSVC_CONSOLE;
558 } else if (STRCASECMP(argv[i], "WINDOWS") == 0) {
559 msvc_subsystem_type = ZigLLVM_MSVC_WINDOWS;
560 } else if (STRCASECMP(argv[i], "POSIX") == 0) {
561 msvc_subsystem_type = ZigLLVM_MSVC_POSIX;
562 } else if (STRCASECMP(argv[i], "NATIVE") == 0) {
563 msvc_subsystem_type = ZigLLVM_MSVC_NATIVE;
564 } else if (STRCASECMP(argv[i], "EFI_APPLICATION") == 0) {
565 msvc_subsystem_type = ZigLLVM_MSVC_EFI_APPLICATION;
566 } else if (STRCASECMP(argv[i], "EFI_BOOT_SERVICE_DRIVER") == 0) {
567 msvc_subsystem_type = ZigLLVM_MSVC_EFI_BOOT_SERVICE_DRIVER;
568 } else if (STRCASECMP(argv[i], "EFI_ROM") == 0) {
569 msvc_subsystem_type = ZigLLVM_MSVC_EFI_ROM;
570 } else if (STRCASECMP(argv[i], "EFI_RUNTIME_DRIVER") == 0) {
571 msvc_subsystem_type = ZigLLVM_MSVC_EFI_RUNTIME_DRIVER;
572 } else {
573 fprintf(stderr, "Unknown format %s for --msvc-subsystem argument\n", argv[i]);
574 return EXIT_FAILURE;
575 }
576 } else if (strcmp(arg, "-mwindows") == 0) {
577 mwindows = true;
578 } else if (strcmp(arg, "-mconsole") == 0) {
579 mconsole = true;
580 } else if (strcmp(arg, "-rdynamic") == 0) {541 } else if (strcmp(arg, "-rdynamic") == 0) {
581 rdynamic = true;542 rdynamic = true;
582 } else if (strcmp(arg, "--no-rosegment") == 0) {543 } else if (strcmp(arg, "--no-rosegment") == 0) {
...@@ -720,6 +681,37 @@ int main(int argc, char **argv) {...@@ -720,6 +681,37 @@ int main(int argc, char **argv) {
720 ver_patch = atoi(argv[i]);681 ver_patch = atoi(argv[i]);
721 } else if (strcmp(arg, "--test-cmd") == 0) {682 } else if (strcmp(arg, "--test-cmd") == 0) {
722 test_exec_args.append(argv[i]);683 test_exec_args.append(argv[i]);
684 } else if (strcmp(arg, "--subsystem") == 0) {
685 if (strcmp(argv[i], "console") == 0) {
686 subsystem = TargetSubsystemConsole;
687 } else if (strcmp(argv[i], "windows") == 0) {
688 subsystem = TargetSubsystemWindows;
689 } else if (strcmp(argv[i], "posix") == 0) {
690 subsystem = TargetSubsystemPosix;
691 } else if (strcmp(argv[i], "native") == 0) {
692 subsystem = TargetSubsystemNative;
693 } else if (strcmp(argv[i], "efi_application") == 0) {
694 subsystem = TargetSubsystemEfiApplication;
695 } else if (strcmp(argv[i], "efi_boot_service_driver") == 0) {
696 subsystem = TargetSubsystemEfiBootServiceDriver;
697 } else if (strcmp(argv[i], "efi_rom") == 0) {
698 subsystem = TargetSubsystemEfiRom;
699 } else if (strcmp(argv[i], "efi_runtime_driver") == 0) {
700 subsystem = TargetSubsystemEfiRuntimeDriver;
701 } else {
702 fprintf(stderr, "invalid: --subsystem %s\n"
703 "Options are:\n"
704 " console\n"
705 " windows\n"
706 " posix\n"
707 " native\n"
708 " efi_application\n"
709 " efi_boot_service_driver\n"
710 " efi_rom\n"
711 " efi_runtime_driver\n"
712 , argv[i]);
713 return EXIT_FAILURE;
714 }
723 } else {715 } else {
724 fprintf(stderr, "Invalid argument: %s\n", arg);716 fprintf(stderr, "Invalid argument: %s\n", arg);
725 return print_error_usage(arg0);717 return print_error_usage(arg0);
...@@ -882,7 +874,7 @@ int main(int argc, char **argv) {...@@ -882,7 +874,7 @@ int main(int argc, char **argv) {
882 buf_out_name = buf_create_from_str("run");874 buf_out_name = buf_create_from_str("run");
883 }875 }
884 CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode, get_zig_lib_dir());876 CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode, get_zig_lib_dir());
885 g->msvc_subsystem = msvc_subsystem_type;877 g->subsystem = subsystem;
886878
887 if (disable_pic) {879 if (disable_pic) {
888 if (out_type != OutTypeLib || !is_static) {880 if (out_type != OutTypeLib || !is_static) {
src/target.cpp+2-3
...@@ -283,6 +283,7 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {...@@ -283,6 +283,7 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {
283 case OsSolaris:283 case OsSolaris:
284 return ZigLLVM_Solaris;284 return ZigLLVM_Solaris;
285 case OsWindows:285 case OsWindows:
286 case OsUefi:
286 return ZigLLVM_Win32;287 return ZigLLVM_Win32;
287 case OsHaiku:288 case OsHaiku:
288 return ZigLLVM_Haiku;289 return ZigLLVM_Haiku;
...@@ -316,8 +317,6 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {...@@ -316,8 +317,6 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {
316 return ZigLLVM_Contiki;317 return ZigLLVM_Contiki;
317 case OsAMDPAL:318 case OsAMDPAL:
318 return ZigLLVM_AMDPAL;319 return ZigLLVM_AMDPAL;
319 case OsUefi:
320 return ZigLLVM_Uefi;
321 }320 }
322 zig_unreachable();321 zig_unreachable();
323}322}
...@@ -809,7 +808,7 @@ uint32_t target_c_type_size_in_bits(const ZigTarget *target, CIntType id) {...@@ -809,7 +808,7 @@ uint32_t target_c_type_size_in_bits(const ZigTarget *target, CIntType id) {
809}808}
810809
811const char *target_o_file_ext(ZigTarget *target) {810const char *target_o_file_ext(ZigTarget *target) {
812 if (target->env_type == ZigLLVM_MSVC || (target->os == OsWindows || target->os == OsUefi)) {811 if (target->env_type == ZigLLVM_MSVC || target->os == OsWindows || target->os == OsUefi) {
813 return ".obj";812 return ".obj";
814 } else {813 } else {
815 return ".o";814 return ".o";
src/target.hpp+12-1
...@@ -54,13 +54,24 @@ enum Os {...@@ -54,13 +54,24 @@ enum Os {
54 OsUefi,54 OsUefi,
55};55};
5656
57enum TargetSubsystem {
58 TargetSubsystemAuto, // Zig should infer the subsystem
59 TargetSubsystemConsole,
60 TargetSubsystemWindows,
61 TargetSubsystemPosix,
62 TargetSubsystemNative,
63 TargetSubsystemEfiApplication,
64 TargetSubsystemEfiBootServiceDriver,
65 TargetSubsystemEfiRom,
66 TargetSubsystemEfiRuntimeDriver,
67};
68
57struct ZigTarget {69struct ZigTarget {
58 ArchType arch;70 ArchType arch;
59 ZigLLVM_VendorType vendor;71 ZigLLVM_VendorType vendor;
60 Os os;72 Os os;
61 ZigLLVM_EnvironmentType env_type;73 ZigLLVM_EnvironmentType env_type;
62 ZigLLVM_ObjectFormatType oformat;74 ZigLLVM_ObjectFormatType oformat;
63 ZigLLVM_MSVCSubsystemType msvc_subsystem = ZigLLVM_MSVC_NONE;
64};75};
6576
66enum CIntType {77enum CIntType {
src/translate_c.cpp+1-1
...@@ -4749,7 +4749,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const...@@ -4749,7 +4749,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const
4749 clang_argv.append("-isystem");4749 clang_argv.append("-isystem");
4750 clang_argv.append(buf_ptr(codegen->zig_c_headers_dir));4750 clang_argv.append(buf_ptr(codegen->zig_c_headers_dir));
47514751
4752 if (codegen->libc_include_dir) {4752 if (codegen->libc_include_dir != nullptr) {
4753 clang_argv.append("-isystem");4753 clang_argv.append("-isystem");
4754 clang_argv.append(buf_ptr(codegen->libc_include_dir));4754 clang_argv.append(buf_ptr(codegen->libc_include_dir));
4755 }4755 }
src/zig_llvm.cpp+1-6
...@@ -690,12 +690,7 @@ const char *ZigLLVMGetVendorTypeName(ZigLLVM_VendorType vendor) {...@@ -690,12 +690,7 @@ const char *ZigLLVMGetVendorTypeName(ZigLLVM_VendorType vendor) {
690}690}
691691
692const char *ZigLLVMGetOSTypeName(ZigLLVM_OSType os) {692const char *ZigLLVMGetOSTypeName(ZigLLVM_OSType os) {
693 switch (os) {693 return (const char*)Triple::getOSTypeName((Triple::OSType)os).bytes_begin();
694 case ZigLLVM_Uefi:
695 return "windows";
696 default:
697 return (const char*)Triple::getOSTypeName((Triple::OSType)os).bytes_begin();
698 }
699}694}
700695
701const char *ZigLLVMGetEnvironmentTypeName(ZigLLVM_EnvironmentType env_type) {696const char *ZigLLVMGetEnvironmentTypeName(ZigLLVM_EnvironmentType env_type) {
src/zig_llvm.h+2-16
...@@ -10,7 +10,6 @@...@@ -10,7 +10,6 @@
1010
11#include <stdbool.h>11#include <stdbool.h>
12#include <stddef.h>12#include <stddef.h>
13#include <stdint.h>
14#include <llvm-c/Core.h>13#include <llvm-c/Core.h>
15#include <llvm-c/Analysis.h>14#include <llvm-c/Analysis.h>
16#include <llvm-c/Target.h>15#include <llvm-c/Target.h>
...@@ -358,8 +357,8 @@ enum ZigLLVM_OSType {...@@ -358,8 +357,8 @@ enum ZigLLVM_OSType {
358 ZigLLVM_Mesa3D,357 ZigLLVM_Mesa3D,
359 ZigLLVM_Contiki,358 ZigLLVM_Contiki,
360 ZigLLVM_AMDPAL, // AMD PAL Runtime359 ZigLLVM_AMDPAL, // AMD PAL Runtime
361 ZigLLVM_Uefi,360
362 ZigLLVM_LastOSType = ZigLLVM_Uefi361 ZigLLVM_LastOSType = ZigLLVM_AMDPAL
363};362};
364363
365// Synchronize with target.cpp::environ_list364// Synchronize with target.cpp::environ_list
...@@ -398,19 +397,6 @@ enum ZigLLVM_ObjectFormatType {...@@ -398,19 +397,6 @@ enum ZigLLVM_ObjectFormatType {
398 ZigLLVM_Wasm,397 ZigLLVM_Wasm,
399};398};
400399
401// For MSVC-supported subsystems
402enum ZigLLVM_MSVCSubsystemType {
403 ZigLLVM_MSVC_NONE,
404 ZigLLVM_MSVC_CONSOLE,
405 ZigLLVM_MSVC_WINDOWS,
406 ZigLLVM_MSVC_POSIX,
407 ZigLLVM_MSVC_NATIVE,
408 ZigLLVM_MSVC_EFI_APPLICATION,
409 ZigLLVM_MSVC_EFI_BOOT_SERVICE_DRIVER,
410 ZigLLVM_MSVC_EFI_ROM,
411 ZigLLVM_MSVC_EFI_RUNTIME_DRIVER,
412};
413
414ZIG_EXTERN_C const char *ZigLLVMGetArchTypeName(enum ZigLLVM_ArchType arch);400ZIG_EXTERN_C const char *ZigLLVMGetArchTypeName(enum ZigLLVM_ArchType arch);
415ZIG_EXTERN_C const char *ZigLLVMGetSubArchTypeName(enum ZigLLVM_SubArchType sub_arch);401ZIG_EXTERN_C const char *ZigLLVMGetSubArchTypeName(enum ZigLLVM_SubArchType sub_arch);
416ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor);402ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor);
std/os/index.zig+3-2
...@@ -18,7 +18,7 @@ test "std.os" {...@@ -18,7 +18,7 @@ test "std.os" {
18 _ = @import("test.zig");18 _ = @import("test.zig");
19 _ = @import("time.zig");19 _ = @import("time.zig");
20 _ = @import("windows/index.zig");20 _ = @import("windows/index.zig");
21 _ = @import("uefi/index.zig");21 _ = @import("uefi.zig");
22 _ = @import("get_app_data_dir.zig");22 _ = @import("get_app_data_dir.zig");
23}23}
2424
...@@ -27,7 +27,7 @@ pub const darwin = @import("darwin.zig");...@@ -27,7 +27,7 @@ pub const darwin = @import("darwin.zig");
27pub const linux = @import("linux/index.zig");27pub const linux = @import("linux/index.zig");
28pub const freebsd = @import("freebsd/index.zig");28pub const freebsd = @import("freebsd/index.zig");
29pub const zen = @import("zen.zig");29pub const zen = @import("zen.zig");
30pub const uefi = @import("uefi/index.zig");30pub const uefi = @import("uefi.zig");
3131
32pub const posix = switch (builtin.os) {32pub const posix = switch (builtin.os) {
33 Os.linux => linux,33 Os.linux => linux,
...@@ -192,6 +192,7 @@ pub fn abort() noreturn {...@@ -192,6 +192,7 @@ pub fn abort() noreturn {
192 windows.ExitProcess(3);192 windows.ExitProcess(3);
193 },193 },
194 Os.uefi => {194 Os.uefi => {
195 // TODO there's gotta be a better thing to do here than loop forever
195 while (true) {}196 while (true) {}
196 },197 },
197 else => @compileError("Unsupported OS"),198 else => @compileError("Unsupported OS"),
std/os/uefi.zig created+2
...@@ -0,0 +1,2 @@
1// TODO this is where the extern declarations go. For example, see
2// inc/efilib.h in gnu-efi-code
std/os/uefi/index.zig deleted
std/special/panic.zig+5-1
...@@ -10,9 +10,13 @@ pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn...@@ -10,9 +10,13 @@ pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn
10 @setCold(true);10 @setCold(true);
11 switch (builtin.os) {11 switch (builtin.os) {
12 // TODO: fix panic in zen.12 // TODO: fix panic in zen.
13 builtin.Os.freestanding, builtin.Os.zen, builtin.Os.uefi => {13 builtin.Os.freestanding, builtin.Os.zen => {
14 while (true) {}14 while (true) {}
15 },15 },
16 builtin.Os.uefi => {
17 // TODO look into using the debug info and logging helpful messages
18 std.os.abort();
19 },
16 else => {20 else => {
17 const first_trace_addr = @ptrToInt(@returnAddress());21 const first_trace_addr = @ptrToInt(@returnAddress());
18 std.debug.panicExtra(error_return_trace, first_trace_addr, "{}", msg);22 std.debug.panicExtra(error_return_trace, first_trace_addr, "{}", msg);