diff options
author | Magnus Lång <[email protected]> | 2017-03-30 12:01:53 +0200 |
---|---|---|
committer | Magnus Lång <[email protected]> | 2017-03-30 22:38:16 +0200 |
commit | d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64 (patch) | |
tree | 80f30f8935ab775fb2fd4aef51467699ab584cf8 /lib/hipe/llvm | |
parent | 6d8c39229231c9cdaa977dfbd8bf0b12ec97ebaa (diff) | |
download | otp-d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64.tar.gz otp-d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64.tar.bz2 otp-d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64.zip |
Fix ErLLVM in --enable-m32-build builds
By having ErLLVM explicitly tell LLVM which architecture we're expecting
it to compile for we remove the risk of having LLVM generate amd64 code
for a x86 VM.
Diffstat (limited to 'lib/hipe/llvm')
-rw-r--r-- | lib/hipe/llvm/Makefile | 3 | ||||
-rw-r--r-- | lib/hipe/llvm/hipe_llvm_main.erl | 17 |
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/hipe/llvm/Makefile b/lib/hipe/llvm/Makefile index 88016a7d8b..e8d9a0e8bb 100644 --- a/lib/hipe/llvm/Makefile +++ b/lib/hipe/llvm/Makefile @@ -73,8 +73,7 @@ include ../native.mk ERL_COMPILE_FLAGS += -Werror +inline +warn_export_vars #+warn_missing_spec # if in 32 bit backend define BIT32 symbol -ARCH = $(shell echo $(TARGET) | sed 's/^\(x86_64\)-.*/64bit/') -ifneq ($(ARCH), 64bit) +ifneq ($(BITS64),yes) ERL_COMPILE_FLAGS += -DBIT32 endif diff --git a/lib/hipe/llvm/hipe_llvm_main.erl b/lib/hipe/llvm/hipe_llvm_main.erl index 0957dd4df2..4eec0c752b 100644 --- a/lib/hipe/llvm/hipe_llvm_main.erl +++ b/lib/hipe/llvm/hipe_llvm_main.erl @@ -108,8 +108,10 @@ llvm_llc(Dir, Filename, Ver, Options) -> OptLevel = trans_optlev_flag(llc, Options), VerFlags = llc_ver_flags(Ver), Align = find_stack_alignment(), + Target = llc_target_opt(), LlcFlags = [OptLevel, "-code-model=medium", "-stack-alignment=" ++ Align , "-tailcallopt", "-filetype=asm" %FIXME + , Target | VerFlags], Command = "llc " ++ fix_opts(LlcFlags) ++ " " ++ Source, %% io:format("LLC: ~s~n", [Command]), @@ -123,7 +125,8 @@ llvm_llc(Dir, Filename, Ver, Options) -> compile(Dir, Fun_Name, Compiler) -> Source = Dir ++ Fun_Name ++ ".s", Dest = Dir ++ Fun_Name ++ ".o", - Command = Compiler ++ " -c " ++ Source ++ " -o " ++ Dest, + Target = compiler_target_opt(), + Command = Compiler ++ " " ++ Target ++ " -c " ++ Source ++ " -o " ++ Dest, %% io:format("~s: ~s~n", [Compiler, Command]), case os:cmd(Command) of "" -> ok; @@ -137,6 +140,18 @@ find_stack_alignment() -> _ -> exit({?MODULE, find_stack_alignment, "Unimplemented architecture"}) end. +llc_target_opt() -> + case get(hipe_target_arch) of + x86 -> "-march=x86"; + amd64 -> "-march=x86-64" + end. + +compiler_target_opt() -> + case get(hipe_target_arch) of + x86 -> "-m32"; + amd64 -> "-m64" + end. + %% @doc Join options. fix_opts(Opts) -> string:join(Opts, " "). |