From 03a7d6c290eff523cf83375cbbd3ac374b857c4c Mon Sep 17 00:00:00 2001 From: David Schleef Date: Mon, 14 Jun 2010 22:57:36 -0700 Subject: [PATCH] Add handling of ORC_CODE environment variable A comma delimited string of values that control how the compiler works. Possible values are "backup", which causes backup functions to be used instead of compiling, and "debug", which causes the SSE backend to create frame pointers, which produces slower code, but allows backtraces in a debugger. --- orc/orc.c | 2 ++ orc/orccompiler.c | 33 +++++++++++++++++++++++++++++++++ orc/orccpu-arm.c | 2 +- orc/orccpu-x86.c | 4 ++-- orc/orcprogram-sse.c | 8 +++++++- orc/orcprogram.h | 6 ++++++ orc/orcutils.c | 8 ++++---- orc/orcutils.h | 2 +- 8 files changed, 56 insertions(+), 9 deletions(-) diff --git a/orc/orc.c b/orc/orc.c index ff0655a..d90abe9 100644 --- a/orc/orc.c +++ b/orc/orc.c @@ -16,6 +16,7 @@ void _orc_debug_init(void); void _orc_once_init(void); +void _orc_compiler_init(void); /** * orc_init: @@ -36,6 +37,7 @@ orc_init (void) _orc_debug_init(); _orc_once_init(); + _orc_compiler_init(); orc_opcode_init(); orc_c_init(); #ifdef ENABLE_BACKEND_C64X diff --git a/orc/orccompiler.c b/orc/orccompiler.c index 619933b..0a27643 100644 --- a/orc/orccompiler.c +++ b/orc/orccompiler.c @@ -35,6 +35,34 @@ void orc_compiler_rewrite_vars2 (OrcCompiler *compiler); int orc_compiler_dup_temporary (OrcCompiler *compiler, int var, int j); void orc_compiler_check_sizes (OrcCompiler *compiler); +static char **_orc_compiler_flag_list; +static int _orc_compiler_flag_backup; + +void +_orc_compiler_init (void) +{ + const char *envvar; + + envvar = getenv ("ORC_CODE"); + if (envvar != NULL) { + _orc_compiler_flag_list = strsplit (envvar, ','); + } + + _orc_compiler_flag_backup = orc_compiler_flag_check ("backup"); +} + +int +orc_compiler_flag_check (const char *flag) +{ + int i; + + if (_orc_compiler_flag_list == NULL) return FALSE; + + for (i=0;_orc_compiler_flag_list[i];i++){ + if (strcmp (_orc_compiler_flag_list[i], flag) == 0) return TRUE; + } + return FALSE; +} int orc_compiler_allocate_register (OrcCompiler *compiler, int data_reg) @@ -158,6 +186,11 @@ orc_program_compile_full (OrcProgram *program, OrcTarget *target, compiler->target = target; compiler->target_flags = flags; + if (program->backup_func && _orc_compiler_flag_backup) { + ORC_COMPILER_ERROR(compiler, "Compilation disabled"); + goto error; + } + { ORC_LOG("variables"); for(i=0;i