mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Add -show-system-calls; Update runtime for windows_386; Fix some minor bugs
This commit is contained in:
+1
-1
@@ -13,7 +13,7 @@ zero_item :: inline proc(item: $P/^$T) {
|
|||||||
set(item, 0, size_of(T));
|
set(item, 0, size_of(T));
|
||||||
}
|
}
|
||||||
zero_slice :: proc(data: $T/[]$E) {
|
zero_slice :: proc(data: $T/[]$E) {
|
||||||
zero(raw_data(data), size_of(E)*n);
|
zero(raw_data(data), size_of(E)*len(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -203,7 +203,9 @@ stderr := get_std_handle(uint(win32.STD_ERROR_HANDLE));
|
|||||||
|
|
||||||
get_std_handle :: proc "contextless" (h: uint) -> Handle {
|
get_std_handle :: proc "contextless" (h: uint) -> Handle {
|
||||||
fd := win32.GetStdHandle(win32.DWORD(h));
|
fd := win32.GetStdHandle(win32.DWORD(h));
|
||||||
win32.SetHandleInformation(fd, win32.HANDLE_FLAG_INHERIT, 0);
|
when size_of(uintptr) == 8 {
|
||||||
|
win32.SetHandleInformation(fd, win32.HANDLE_FLAG_INHERIT, 0);
|
||||||
|
}
|
||||||
return Handle(fd);
|
return Handle(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
@require foreign import "system:int64.lib"
|
||||||
|
|
||||||
foreign import kernel32 "system:Kernel32.lib"
|
foreign import kernel32 "system:Kernel32.lib"
|
||||||
|
|
||||||
windows_trap_array_bounds :: proc "contextless" () -> ! {
|
windows_trap_array_bounds :: proc "contextless" () -> ! {
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ struct BuildContext {
|
|||||||
i32 optimization_level;
|
i32 optimization_level;
|
||||||
bool show_timings;
|
bool show_timings;
|
||||||
bool show_more_timings;
|
bool show_more_timings;
|
||||||
|
bool show_system_calls;
|
||||||
bool keep_temp_files;
|
bool keep_temp_files;
|
||||||
bool ignore_unknown_attributes;
|
bool ignore_unknown_attributes;
|
||||||
bool no_bounds_check;
|
bool no_bounds_check;
|
||||||
|
|||||||
@@ -519,6 +519,9 @@ bool sig_compare(TypeCheckSig *a, TypeCheckSig *b, Type *x, Type *y) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool signature_parameter_similar_enough(Type *x, Type *y) {
|
bool signature_parameter_similar_enough(Type *x, Type *y) {
|
||||||
|
x = core_type(x);
|
||||||
|
y = core_type(y);
|
||||||
|
|
||||||
if (sig_compare(is_type_pointer, x, y)) {
|
if (sig_compare(is_type_pointer, x, y)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12204,7 +12204,10 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
for_array(i, global_variables) {
|
for_array(i, global_variables) {
|
||||||
auto *var = &global_variables[i];
|
auto *var = &global_variables[i];
|
||||||
if (var->decl->init_expr != nullptr) {
|
if (var->decl->init_expr != nullptr) {
|
||||||
var->init = lb_build_expr(p, var->decl->init_expr);
|
lbValue init = lb_build_expr(p, var->decl->init_expr);
|
||||||
|
if (!lb_is_const(init)) {
|
||||||
|
var->init = init;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity *e = var->decl->entity;
|
Entity *e = var->decl->entity;
|
||||||
@@ -12441,5 +12444,10 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
|
|
||||||
array_add(&gen->output_object_paths, filepath_obj);
|
array_add(&gen->output_object_paths, filepath_obj);
|
||||||
|
|
||||||
|
for_array(i, m->info->required_foreign_imports_through_force) {
|
||||||
|
Entity *e = m->info->required_foreign_imports_through_force[i];
|
||||||
|
lb_add_foreign_library_path(m, e);
|
||||||
|
}
|
||||||
|
|
||||||
#undef TIME_SECTION
|
#undef TIME_SECTION
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-6
@@ -43,13 +43,16 @@ i32 system_exec_command_line_app(char const *name, char const *fmt, ...) {
|
|||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
STARTUPINFOW start_info = {gb_size_of(STARTUPINFOW)};
|
STARTUPINFOW start_info = {gb_size_of(STARTUPINFOW)};
|
||||||
PROCESS_INFORMATION pi = {0};
|
PROCESS_INFORMATION pi = {0};
|
||||||
char cmd_line[4*1024] = {0};
|
isize cmd_len = 0;
|
||||||
isize cmd_len;
|
isize cmd_cap = 1024;
|
||||||
|
char *cmd_line = cast(char *)calloc(1, cmd_cap);
|
||||||
va_list va;
|
va_list va;
|
||||||
gbTempArenaMemory tmp;
|
gbTempArenaMemory tmp;
|
||||||
String16 cmd;
|
String16 cmd;
|
||||||
i32 exit_code = 0;
|
i32 exit_code = 0;
|
||||||
|
|
||||||
|
defer (free(cmd_line));
|
||||||
|
|
||||||
start_info.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
|
start_info.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
|
||||||
start_info.wShowWindow = SW_SHOW;
|
start_info.wShowWindow = SW_SHOW;
|
||||||
start_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
|
start_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
@@ -57,10 +60,21 @@ i32 system_exec_command_line_app(char const *name, char const *fmt, ...) {
|
|||||||
start_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
start_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
||||||
|
|
||||||
va_start(va, fmt);
|
va_start(va, fmt);
|
||||||
cmd_len = gb_snprintf_va(cmd_line, gb_size_of(cmd_line), fmt, va);
|
for (;;) {
|
||||||
|
cmd_len = gb_snprintf_va(cmd_line, cmd_cap-1, fmt, va);
|
||||||
|
if (cmd_len < 0) {
|
||||||
|
cmd_cap *= 2;
|
||||||
|
cmd_line = cast(char *)realloc(cmd_line, cmd_cap);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
// gb_printf_err("%.*s\n", cast(int)cmd_len, cmd_line);
|
if (build_context.show_system_calls) {
|
||||||
|
gb_printf_err("[SYSTEM CALL] %s\n", name);
|
||||||
|
gb_printf_err("%.*s\n\n", cast(int)cmd_len, cmd_line);
|
||||||
|
}
|
||||||
|
|
||||||
tmp = gb_temp_arena_memory_begin(&string_buffer_arena);
|
tmp = gb_temp_arena_memory_begin(&string_buffer_arena);
|
||||||
defer (gb_temp_arena_memory_end(tmp));
|
defer (gb_temp_arena_memory_end(tmp));
|
||||||
@@ -95,8 +109,11 @@ i32 system_exec_command_line_app(char const *name, char const *fmt, ...) {
|
|||||||
va_end(va);
|
va_end(va);
|
||||||
cmd = make_string(cast(u8 *)&cmd_line, cmd_len-1);
|
cmd = make_string(cast(u8 *)&cmd_line, cmd_len-1);
|
||||||
|
|
||||||
// printf("do: %s\n", cmd_line);
|
if (build_context.show_system_calls) {
|
||||||
exit_code = system(&cmd_line[0]);
|
gb_printf_err("[SYSTEM CALL] %s\n", name);
|
||||||
|
gb_printf_err("%s\n\n", cmd_line);
|
||||||
|
exit_code = system(&cmd_line[0]);
|
||||||
|
}
|
||||||
|
|
||||||
// pid_t pid = fork();
|
// pid_t pid = fork();
|
||||||
// int status = 0;
|
// int status = 0;
|
||||||
@@ -554,6 +571,7 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_OptimizationLevel,
|
BuildFlag_OptimizationLevel,
|
||||||
BuildFlag_ShowTimings,
|
BuildFlag_ShowTimings,
|
||||||
BuildFlag_ShowMoreTimings,
|
BuildFlag_ShowMoreTimings,
|
||||||
|
BuildFlag_ShowSystemCalls,
|
||||||
BuildFlag_ThreadCount,
|
BuildFlag_ThreadCount,
|
||||||
BuildFlag_KeepTempFiles,
|
BuildFlag_KeepTempFiles,
|
||||||
BuildFlag_Collection,
|
BuildFlag_Collection,
|
||||||
@@ -648,6 +666,7 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), BuildFlagParam_Integer);
|
add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), BuildFlagParam_Integer);
|
||||||
add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None);
|
add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None);
|
||||||
add_flag(&build_flags, BuildFlag_ShowMoreTimings, str_lit("show-more-timings"), BuildFlagParam_None);
|
add_flag(&build_flags, BuildFlag_ShowMoreTimings, str_lit("show-more-timings"), BuildFlagParam_None);
|
||||||
|
add_flag(&build_flags, BuildFlag_ShowSystemCalls, str_lit("show-system-calls"), BuildFlagParam_None);
|
||||||
add_flag(&build_flags, BuildFlag_ThreadCount, str_lit("thread-count"), BuildFlagParam_Integer);
|
add_flag(&build_flags, BuildFlag_ThreadCount, str_lit("thread-count"), BuildFlagParam_Integer);
|
||||||
add_flag(&build_flags, BuildFlag_KeepTempFiles, str_lit("keep-temp-files"), BuildFlagParam_None);
|
add_flag(&build_flags, BuildFlag_KeepTempFiles, str_lit("keep-temp-files"), BuildFlagParam_None);
|
||||||
add_flag(&build_flags, BuildFlag_Collection, str_lit("collection"), BuildFlagParam_String);
|
add_flag(&build_flags, BuildFlag_Collection, str_lit("collection"), BuildFlagParam_String);
|
||||||
@@ -836,6 +855,10 @@ bool parse_build_flags(Array<String> args) {
|
|||||||
build_context.show_timings = true;
|
build_context.show_timings = true;
|
||||||
build_context.show_more_timings = true;
|
build_context.show_more_timings = true;
|
||||||
break;
|
break;
|
||||||
|
case BuildFlag_ShowSystemCalls:
|
||||||
|
GB_ASSERT(value.kind == ExactValue_Invalid);
|
||||||
|
build_context.show_system_calls = true;
|
||||||
|
break;
|
||||||
case BuildFlag_ThreadCount: {
|
case BuildFlag_ThreadCount: {
|
||||||
GB_ASSERT(value.kind == ExactValue_Integer);
|
GB_ASSERT(value.kind == ExactValue_Integer);
|
||||||
isize count = cast(isize)big_int_to_i64(&value.value_integer);
|
isize count = cast(isize)big_int_to_i64(&value.value_integer);
|
||||||
|
|||||||
Reference in New Issue
Block a user