File 0096-Fix-ErLLVM-in-enable-m32-build-builds.patch of Package erlang

From d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Magnus=20L=C3=A5ng?= <margnus1@telia.com>
Date: Thu, 30 Mar 2017 12:01:53 +0200
Subject: [PATCH 3/3] 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.
---
 lib/hipe/llvm/Makefile           |  3 +--
 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 88016a7d8..e8d9a0e8b 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 0957dd4df..4eec0c752 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, " ").
-- 
2.12.2

openSUSE Build Service is sponsored by