Remove IA32 macOS (Darwin) support (#2278)
This patch removes support for 32-bit Darwin (macOS, iOS, etc) targets on Intel hardware. This enables various special cases to be removed in the i386 backend. The current version of macOS (Mojave) is the last one that will support 32-bit x86 binaries. The current version of iOS does not support execution of 32-bit binaries any more.master
parent
00c18be73c
commit
784c9da23c
6
Changes
6
Changes
|
@ -3,6 +3,12 @@ Working version
|
|||
|
||||
(Changes that can break existing programs are marked with a "*")
|
||||
|
||||
### Code generation and optimizations:
|
||||
|
||||
- GPR#2278: Remove native code generation support for 32-bit Intel macOS,
|
||||
iOS and other Darwin targets.
|
||||
(Mark Shinwell, review by Nicolas Ojeda Bar and Xavier Leroy)
|
||||
|
||||
### Internal/compiler-libs changes:
|
||||
|
||||
- GPR#1579: Add a separate types for clambda primitives
|
||||
|
|
|
@ -49,7 +49,7 @@ compiler currently runs on the following platforms:
|
|||
Tier 1 (actively used and maintained by the core OCaml team):
|
||||
|
||||
AMD64 (Opteron):: Linux, OS X, MS Windows
|
||||
IA32 (Pentium):: Linux, FreeBSD, OS X, MS Windows
|
||||
IA32 (Pentium):: Linux, FreeBSD, MS Windows
|
||||
PowerPC:: Linux, OS X
|
||||
ARM:: Linux
|
||||
|
||||
|
|
|
@ -4,10 +4,13 @@ Intel and AMD x86 processors in 32-bit mode.
|
|||
The baseline is the 80486, also known as `i486`.
|
||||
(Debian's baseline is now the Pentium 1.)
|
||||
|
||||
In OCaml versions 3.09.2 to 4.08, MacOS was supported by this port. Support
|
||||
was removed in OCaml 4.09.
|
||||
|
||||
Floating-point architecture: x87.
|
||||
(SSE2 not available in Debian's baseline.)
|
||||
|
||||
Operating systems: Linux, BSD, MacOS X, MS Windows.
|
||||
Operating systems: Linux, BSD, MS Windows.
|
||||
|
||||
Debian architecture name: `i386`
|
||||
|
||||
|
@ -18,5 +21,3 @@ Debian architecture name: `i386`
|
|||
* ELF application binary interface:
|
||||
_System V Application Binary Interface,
|
||||
Intel386 Architecture Processor Supplement_
|
||||
* MacOS X application binary interface:
|
||||
_OS X ABI Function Call Guide: IA-32 Function Calling Conventions_
|
||||
|
|
|
@ -163,5 +163,4 @@ let stack_alignment =
|
|||
match Config.system with
|
||||
| "win32" -> 4 (* MSVC *)
|
||||
| _ -> 16
|
||||
(* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays,
|
||||
even if only MacOS X's ABI formally requires it *)
|
||||
(* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays *)
|
||||
|
|
|
@ -467,9 +467,6 @@ let emit_global_label s =
|
|||
let function_name = ref ""
|
||||
(* Entry point for tail recursive calls *)
|
||||
let tailrec_entry_point = ref 0
|
||||
(* Record references to external C functions (for MacOSX) *)
|
||||
let external_symbols_direct = ref String.Set.empty
|
||||
let external_symbols_indirect = ref String.Set.empty
|
||||
|
||||
(* Emission of the profiling prelude *)
|
||||
|
||||
|
@ -487,7 +484,6 @@ let emit_profile () =
|
|||
match system with
|
||||
| S_linux_elf | S_gnu -> call_mcount "mcount"
|
||||
| S_bsd_elf -> call_mcount ".mcount"
|
||||
| S_macosx -> call_mcount "Lmcount$stub"
|
||||
| _ -> () (*unsupported yet*)
|
||||
|
||||
let emit_instr fallthrough i =
|
||||
|
@ -564,24 +560,11 @@ let emit_instr fallthrough i =
|
|||
| Lop(Iextcall { func; alloc; label_after; }) ->
|
||||
add_used_symbol func;
|
||||
if alloc then begin
|
||||
if system <> S_macosx then
|
||||
I.mov (immsym func) eax
|
||||
else begin
|
||||
external_symbols_indirect :=
|
||||
String.Set.add func !external_symbols_indirect;
|
||||
I.mov (mem_sym DWORD (Printf.sprintf "L%s$non_lazy_ptr"
|
||||
(emit_symbol func))) eax
|
||||
end;
|
||||
I.mov (immsym func) eax;
|
||||
emit_call "caml_c_call";
|
||||
record_frame i.live false i.dbg ~label:label_after
|
||||
end else begin
|
||||
if system <> S_macosx then
|
||||
emit_call func
|
||||
else begin
|
||||
external_symbols_direct :=
|
||||
String.Set.add func !external_symbols_direct;
|
||||
I.call (sym (Printf.sprintf "L%s$stub" (emit_symbol func)))
|
||||
end
|
||||
emit_call func
|
||||
end
|
||||
| Lop(Istackoffset n) ->
|
||||
if n < 0
|
||||
|
@ -916,32 +899,6 @@ let rec emit_all fallthrough i =
|
|||
(system = S_win32 || Linearize.has_fallthrough i.desc)
|
||||
i.next
|
||||
|
||||
(* Emission of external symbol references (for MacOSX) *)
|
||||
|
||||
let emit_external_symbol_direct s =
|
||||
_label (Printf.sprintf "L%s$stub" (emit_symbol s));
|
||||
D.indirect_symbol (emit_symbol s);
|
||||
I.hlt (); I.hlt (); I.hlt (); I.hlt () ; I.hlt ()
|
||||
|
||||
let emit_external_symbol_indirect s =
|
||||
_label (Printf.sprintf "L%s$non_lazy_ptr" (emit_symbol s));
|
||||
D.indirect_symbol (emit_symbol s);
|
||||
D.long (const 0)
|
||||
|
||||
let emit_external_symbols () =
|
||||
D.section [ "__IMPORT"; "__pointers"] None ["non_lazy_symbol_pointers" ];
|
||||
String.Set.iter emit_external_symbol_indirect !external_symbols_indirect;
|
||||
external_symbols_indirect := String.Set.empty;
|
||||
D.section [ "__IMPORT"; "__jump_table"] None
|
||||
[ "symbol_stubs"; "self_modifying_code+pure_instructions"; "5" ];
|
||||
String.Set.iter emit_external_symbol_direct !external_symbols_direct;
|
||||
external_symbols_direct := String.Set.empty;
|
||||
if !Clflags.gprofile then begin
|
||||
_label "Lmcount$stub";
|
||||
D.indirect_symbol "mcount";
|
||||
I.hlt (); I.hlt (); I.hlt () ; I.hlt () ; I.hlt ()
|
||||
end
|
||||
|
||||
(* Emission of a function declaration *)
|
||||
|
||||
let fundecl fundecl =
|
||||
|
@ -955,13 +912,7 @@ let fundecl fundecl =
|
|||
D.text ();
|
||||
add_def_symbol fundecl.fun_name;
|
||||
D.align (if system = S_win32 then 4 else 16);
|
||||
if system = S_macosx
|
||||
&& not !Clflags.output_c_object
|
||||
&& is_generic_function fundecl.fun_name
|
||||
then (* PR#4690 *)
|
||||
D.private_extern (emit_symbol fundecl.fun_name)
|
||||
else
|
||||
D.global (emit_symbol fundecl.fun_name);
|
||||
D.global (emit_symbol fundecl.fun_name);
|
||||
D.label (emit_symbol fundecl.fun_name);
|
||||
emit_debug_info fundecl.fun_dbg;
|
||||
cfi_startproc ();
|
||||
|
@ -1027,9 +978,7 @@ let begin_assembly() =
|
|||
emit_global_label "data_begin";
|
||||
|
||||
D.text ();
|
||||
emit_global_label "code_begin";
|
||||
if system = S_macosx then I.nop (); (* PR#4690 *)
|
||||
()
|
||||
emit_global_label "code_begin"
|
||||
|
||||
let end_assembly() =
|
||||
if !float_constants <> [] then begin
|
||||
|
@ -1038,8 +987,6 @@ let end_assembly() =
|
|||
end;
|
||||
|
||||
D.text ();
|
||||
if system = S_macosx then I.nop ();
|
||||
(* suppress "ld warning: atom sorting error" *)
|
||||
|
||||
emit_global_label "code_end";
|
||||
|
||||
|
@ -1066,7 +1013,6 @@ let end_assembly() =
|
|||
efa_string = (fun s -> D.bytes (s ^ "\000"))
|
||||
};
|
||||
|
||||
if system = S_macosx then emit_external_symbols ();
|
||||
if system = S_linux_elf then
|
||||
(* Mark stack as non-executable, PR#4564 *)
|
||||
D.section [".note.GNU-stack"] (Some "") ["%progbits"];
|
||||
|
|
|
@ -13435,10 +13435,6 @@ if test x"$enable_shared" != "xno"; then :
|
|||
natdynlink=true ;; #(
|
||||
x86_64-*-linux*) :
|
||||
natdynlink=true ;; #(
|
||||
i[3456]86-*-darwin*) :
|
||||
if $arch64; then :
|
||||
natdynlink=true
|
||||
fi ;; #(
|
||||
x86_64-*-darwin*) :
|
||||
natdynlink=true ;; #(
|
||||
s390x*-*-linux*) :
|
||||
|
@ -13526,12 +13522,6 @@ case $host in #(
|
|||
arch=i386; system=beos ;; #(
|
||||
i[3456]86-*-cygwin) :
|
||||
arch=i386; system=cygwin ;; #(
|
||||
i[3456]86-*-darwin*) :
|
||||
if $arch64; then :
|
||||
arch=amd64
|
||||
else
|
||||
arch=i386
|
||||
fi; system=macosx ;; #(
|
||||
i[3456]86-*-gnu*) :
|
||||
arch=i386; system=gnu ;; #(
|
||||
i[3456]86-*-mingw32) :
|
||||
|
@ -13766,8 +13756,6 @@ case "$arch,$system" in #(
|
|||
profiling=true ;; #(
|
||||
amd64,macosx) :
|
||||
profiling=true ;; #(
|
||||
i386,macosx) :
|
||||
profiling=true ;; #(
|
||||
amd64,linux) :
|
||||
profiling=true ;; #(
|
||||
amd64,openbsd) :
|
||||
|
@ -15371,7 +15359,7 @@ esac
|
|||
$as_echo_n "checking whether stack overflows can be detected... " >&6; }
|
||||
|
||||
case $arch,$system in #(
|
||||
i386,linux_elf|amd64,linux|amd64,macosx|i386,macosx \
|
||||
i386,linux_elf|amd64,linux|amd64,macosx \
|
||||
|amd64,openbsd|i386,bsd_elf) :
|
||||
$as_echo "#define HAS_STACK_OVERFLOW_DETECTION 1" >>confdefs.h
|
||||
|
||||
|
|
|
@ -751,7 +751,6 @@ AS_IF([test x"$enable_shared" != "xno"],
|
|||
[[i[3456]86-*-linux*]], [natdynlink=true],
|
||||
[[i[3456]86-*-gnu*]], [natdynlink=true],
|
||||
[[x86_64-*-linux*]], [natdynlink=true],
|
||||
[[i[3456]86-*-darwin*]], [AS_IF([$arch64], [natdynlink=true])],
|
||||
[x86_64-*-darwin*], [natdynlink=true],
|
||||
[s390x*-*-linux*], [natdynlink=true],
|
||||
[powerpc*-*-linux*], [natdynlink=true],
|
||||
|
@ -793,8 +792,6 @@ AS_CASE([$host],
|
|||
[arch=i386; system=beos],
|
||||
[[i[3456]86-*-cygwin]],
|
||||
[arch=i386; system=cygwin],
|
||||
[[i[3456]86-*-darwin*]],
|
||||
[AS_IF([$arch64], [arch=amd64], [arch=i386]); system=macosx],
|
||||
[[i[3456]86-*-gnu*]],
|
||||
[arch=i386; system=gnu],
|
||||
[[i[3456]86-*-mingw32]],
|
||||
|
@ -904,7 +901,6 @@ AS_CASE(["$arch,$system"],
|
|||
[i386,gnu], [profiling=true],
|
||||
[i386,bsd_elf], [profiling=true],
|
||||
[amd64,macosx], [profiling=true],
|
||||
[i386,macosx], [profiling=true],
|
||||
[amd64,linux], [profiling=true],
|
||||
[amd64,openbsd], [profiling=true],
|
||||
[amd64,freebsd], [profiling=true],
|
||||
|
@ -1453,7 +1449,7 @@ AS_CASE([$enable_debug_runtime],
|
|||
AC_MSG_CHECKING([whether stack overflows can be detected])
|
||||
|
||||
AS_CASE([$arch,$system],
|
||||
[i386,linux_elf|amd64,linux|amd64,macosx|i386,macosx \
|
||||
[i386,linux_elf|amd64,linux|amd64,macosx \
|
||||
|amd64,openbsd|i386,bsd_elf],
|
||||
[AC_DEFINE([HAS_STACK_OVERFLOW_DETECTION])
|
||||
AC_MSG_RESULT([yes])],
|
||||
|
|
Loading…
Reference in New Issue