From c6c710465a087473c5856f1f298ebea12d4d516a Mon Sep 17 00:00:00 2001 From: xb-bx Date: Mon, 8 Jan 2024 19:54:39 +0200 Subject: [PATCH 1/6] fix --- core/mem/virtual/virtual_darwin.odin | 2 +- core/mem/virtual/virtual_linux.odin | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mem/virtual/virtual_darwin.odin b/core/mem/virtual/virtual_darwin.odin index 5505149b0..bd1336cba 100644 --- a/core/mem/virtual/virtual_darwin.odin +++ b/core/mem/virtual/virtual_darwin.odin @@ -136,7 +136,7 @@ _protect :: proc "contextless" (data: rawptr, size: uint, flags: Protect_Flags) if .Write in flags { pflags |= PROT_WRITE } if .Execute in flags { pflags |= PROT_EXEC } err := _mprotect(data, size, pflags) - return err != 0 + return err == 0 } diff --git a/core/mem/virtual/virtual_linux.odin b/core/mem/virtual/virtual_linux.odin index 7ffc7643e..b927f2877 100644 --- a/core/mem/virtual/virtual_linux.odin +++ b/core/mem/virtual/virtual_linux.odin @@ -40,7 +40,7 @@ _protect :: proc "contextless" (data: rawptr, size: uint, flags: Protect_Flags) if .Write in flags { pflags |= {.WRITE} } if .Execute in flags { pflags |= {.EXEC} } errno := linux.mprotect(data, size, pflags) - return errno != .NONE + return errno == .NONE } _platform_memory_init :: proc() { From 2411febf838bc24935a1fd5c99c84916e3c45805 Mon Sep 17 00:00:00 2001 From: avanspector Date: Sat, 13 Jan 2024 19:25:13 +0100 Subject: [PATCH 2/6] add shell environment for Nix --- default.nix | 27 --------------------------- shell.nix | 11 +++++++++++ 2 files changed, 11 insertions(+), 27 deletions(-) delete mode 100644 default.nix create mode 100644 shell.nix diff --git a/default.nix b/default.nix deleted file mode 100644 index 64d20f674..000000000 --- a/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs ? import { } }: -let - odin-unwrapped = pkgs.llvmPackages_11.stdenv.mkDerivation (rec { - name = "odin-unwrapped"; - src = ./.; - dontConfigure = true; - nativeBuildInputs = [ pkgs.git ]; - buildPhase = '' - make debug SHELL=${pkgs.llvmPackages_11.stdenv.shell} - ''; - installPhase = '' - mkdir -p $out/bin - cp odin $out/bin/odin - cp -r core $out/bin/core - ''; - }); - path = builtins.map (path: path + "/bin") (with pkgs.llvmPackages_11; [ - bintools - llvm - clang - lld - ]); -in -pkgs.writeScriptBin "odin" '' - #!${pkgs.llvmPackages_11.stdenv.shell} - PATH="${(builtins.concatStringsSep ":" path)}" exec ${odin-unwrapped}/bin/odin $@ -'' diff --git a/shell.nix b/shell.nix new file mode 100644 index 000000000..21301b9d7 --- /dev/null +++ b/shell.nix @@ -0,0 +1,11 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + name = "odin"; + nativeBuildInputs = with pkgs; [ + git + clang_17 + llvmPackages_17.llvm + llvmPackages_17.bintools + ]; + shellHook="CXX=clang++"; +} From 70c150fc83666281df372b83209c33863bde73e9 Mon Sep 17 00:00:00 2001 From: avanspector Date: Sat, 13 Jan 2024 19:27:42 +0100 Subject: [PATCH 3/6] Fix gcc build Although gcc is not officially supported, this little fix lets it to build Odin --- src/gb/gb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gb/gb.h b/src/gb/gb.h index 5dae7a5c4..93d250f21 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -448,7 +448,7 @@ typedef i32 b32; // NOTE(bill): Prefer this!!! #define gb_inline __forceinline #endif #else - #define gb_inline __attribute__ ((__always_inline__)) + #define gb_inline inline __attribute__ ((__always_inline__)) #endif #endif From 76f52dd6c9d37683e8e1ef85755b77e7e9b71c7b Mon Sep 17 00:00:00 2001 From: codename-irvin Date: Mon, 15 Jan 2024 19:49:34 -0500 Subject: [PATCH 4/6] Add freestanding aarch64 target --- src/build_settings.cpp | 10 +++++++++- src/llvm_backend.cpp | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 9d909fcae..db09eabcf 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -582,7 +582,14 @@ gb_global TargetMetrics target_freestanding_amd64_sysv = { TargetABI_SysV, }; - +gb_global TargetMetrics target_freestanding_arm64_sysv = { + TargetOs_freestanding, + TargetArch_arm64, + 8, 8, 8, 16, + str_lit("aarch64-none-elf"), + str_lit("e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"), + TargetABI_SysV, +}; struct NamedTargetMetrics { String name; @@ -617,6 +624,7 @@ gb_global NamedTargetMetrics named_targets[] = { { str_lit("wasi_wasm64p32"), &target_wasi_wasm64p32 }, { str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv }, + { str_lit("freestanding_arm64_sysv"), &target_freestanding_arm64_sysv }, }; gb_global NamedTargetMetrics *selected_target_metrics; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 0175d039e..003424e0a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2503,7 +2503,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { LLVMCodeModel code_mode = LLVMCodeModelDefault; if (is_arch_wasm()) { code_mode = LLVMCodeModelJITDefault; - } else if (build_context.metrics.os == TargetOs_freestanding) { + } else if (is_arch_x86() && build_context.metrics.os == TargetOs_freestanding) { code_mode = LLVMCodeModelKernel; } From 0fcd2f1d88b1b9d21fbc77adb45833fcbdc0d3d4 Mon Sep 17 00:00:00 2001 From: codename-irvin Date: Tue, 16 Jan 2024 10:47:25 -0500 Subject: [PATCH 5/6] Use default calling convention for arm target for now - not 100% sure this is correct --- src/build_settings.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index db09eabcf..1f57b5625 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -582,13 +582,12 @@ gb_global TargetMetrics target_freestanding_amd64_sysv = { TargetABI_SysV, }; -gb_global TargetMetrics target_freestanding_arm64_sysv = { +gb_global TargetMetrics target_freestanding_arm64 = { TargetOs_freestanding, TargetArch_arm64, 8, 8, 8, 16, str_lit("aarch64-none-elf"), str_lit("e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"), - TargetABI_SysV, }; struct NamedTargetMetrics { @@ -624,7 +623,7 @@ gb_global NamedTargetMetrics named_targets[] = { { str_lit("wasi_wasm64p32"), &target_wasi_wasm64p32 }, { str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv }, - { str_lit("freestanding_arm64_sysv"), &target_freestanding_arm64_sysv }, + { str_lit("freestanding_arm64"), &target_freestanding_arm64 }, }; gb_global NamedTargetMetrics *selected_target_metrics; From b25e85a8bb92aa5f639c393f27245d9bd10bc5d4 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 22 Dec 2023 20:08:41 +0100 Subject: [PATCH 6/6] check if string could be converted from float --- src/exact_value.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/exact_value.cpp b/src/exact_value.cpp index cd499272f..b744d2db0 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -174,7 +174,7 @@ gb_internal ExactValue exact_value_integer_from_string(String const &string) { -gb_internal f64 float_from_string(String const &string) { +gb_internal f64 float_from_string(String const &string, bool *success = nullptr) { if (string.len < 128) { char buf[128] = {}; isize n = 0; @@ -187,7 +187,13 @@ gb_internal f64 float_from_string(String const &string) { buf[n++] = cast(char)c; } buf[n] = 0; - return atof(buf); + + char *end_ptr; + f64 f = strtod(buf, &end_ptr); + if (success != nullptr) { + *success = *end_ptr == '\0'; + } + return f; } else { TEMPORARY_ALLOCATOR_GUARD(); char *buf = gb_alloc_array(temporary_allocator(), char, string.len+1); @@ -201,7 +207,13 @@ gb_internal f64 float_from_string(String const &string) { buf[n++] = cast(char)c; } buf[n] = 0; - return atof(buf); + + char *end_ptr; + f64 f = strtod(buf, &end_ptr); + if (success != nullptr) { + *success = *end_ptr == '\0'; + } + return f; } /* isize i = 0; @@ -313,7 +325,11 @@ gb_internal ExactValue exact_value_float_from_string(String string) { return exact_value_integer_from_string(string); } - f64 f = float_from_string(string); + bool success; + f64 f = float_from_string(string, &success); + if (!success) { + return {ExactValue_Invalid}; + } return exact_value_float(f); }