diff --git a/racket/src/ChezScheme/c/fasl.c b/racket/src/ChezScheme/c/fasl.c index 0bd2d16dbf..2486b08a7f 100644 --- a/racket/src/ChezScheme/c/fasl.c +++ b/racket/src/ChezScheme/c/fasl.c @@ -561,6 +561,8 @@ static ptr bv_fasl_entry(ptr tc, ptr bv, int ty, uptr offset, uptr len, unbufFas ptr x; ptr strbuf = S_G.null_string; struct faslFileObj ffo; + S_thread_start_code_write(); + if (ty == fasl_type_vfasl) { x = S_vfasl(bv, NULL, offset, len); } else if (ty == fasl_type_fasl) { @@ -575,6 +577,8 @@ static ptr bv_fasl_entry(ptr tc, ptr bv, int ty, uptr offset, uptr len, unbufFas } S_flush_instruction_cache(tc); + S_thread_end_code_write(); + return x; } @@ -606,6 +610,25 @@ static void bytesin(octet *s, iptr n, faslFile f) { } } +static void code_bytesin(octet *s, iptr n, faslFile f) { +#ifdef CANNOT_READ_DIRECTLY_INTO_CODE + while (1) { + iptr avail = f->end - f->next; + if (avail < n) { + bytesin(s, avail, f); + n -= avail; + s += avail; + fillFaslFile(f); + } else { + bytesin(s, n, f); + break; + } + } +#else + bytesin(s, n, f); +#endif +} + static void toolarge(ptr path) { S_error1("", "fasl value too large for this machine type in ~a", path); } @@ -1039,7 +1062,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { if (pinfos != Snil) { S_G.profile_counters = Scons(S_weak_cons(co, pinfos), S_G.profile_counters); } - bytesin((octet *)&CODEIT(co, 0), n, f); + code_bytesin((octet *)&CODEIT(co, 0), n, f); #ifdef PORTABLE_BYTECODE_BIGENDIAN swap_code_endian((octet *)&CODEIT(co, 0), n); #endif diff --git a/racket/src/ChezScheme/c/prim.c b/racket/src/ChezScheme/c/prim.c index 54dd0b2b17..c2194edc97 100644 --- a/racket/src/ChezScheme/c/prim.c +++ b/racket/src/ChezScheme/c/prim.c @@ -288,6 +288,7 @@ static void s_instantiate_code_object() { static void s_link_code_object(co, objs) ptr co, objs; { ptr t; uptr a, m, n; + S_thread_start_code_write(); t = CODERELOC(co); m = RELOCSIZE(t); a = 0; @@ -306,6 +307,7 @@ static void s_link_code_object(co, objs) ptr co, objs; { S_set_code_obj("gc", RELOC_TYPE(entry), co, a, Scar(objs), item_off); objs = Scdr(objs); } + S_thread_end_code_write(); } static INT s_check_heap_enabledp(void) { diff --git a/racket/src/ChezScheme/c/prim5.c b/racket/src/ChezScheme/c/prim5.c index 40f20cbaa1..e0e564fdb2 100644 --- a/racket/src/ChezScheme/c/prim5.c +++ b/racket/src/ChezScheme/c/prim5.c @@ -878,47 +878,64 @@ static char *s_getwd() { static ptr s_set_code_byte(p, n, x) ptr p, n, x; { I8 *a; + S_thread_start_code_write(); a = (I8 *)TO_VOIDP((uptr)p + UNFIX(n)); *a = (I8)UNFIX(x); + S_thread_end_code_write(); + return Svoid; } static ptr s_set_code_word(p, n, x) ptr p, n, x; { I16 *a; + S_thread_start_code_write(); a = (I16 *)TO_VOIDP((uptr)p + UNFIX(n)); *a = (I16)UNFIX(x); + S_thread_end_code_write(); + return Svoid; } static ptr s_set_code_long(p, n, x) ptr p, n, x; { I32 *a; + S_thread_start_code_write(); a = (I32 *)TO_VOIDP((uptr)p + UNFIX(n)); *a = (I32)(Sfixnump(x) ? UNFIX(x) : Sinteger_value(x)); + S_thread_end_code_write(); + return Svoid; } static void s_set_code_long2(p, n, h, l) ptr p, n, h, l; { I32 *a; + S_thread_start_code_write(); a = (I32 *)TO_VOIDP((uptr)p + UNFIX(n)); *a = (I32)((UNFIX(h) << 16) + UNFIX(l)); + S_thread_end_code_write(); } static ptr s_set_code_quad(p, n, x) ptr p, n, x; { I64 *a; + S_thread_start_code_write(); a = (I64 *)TO_VOIDP((uptr)p + UNFIX(n)); *a = Sfixnump(x) ? UNFIX(x) : S_int64_value("\\#set-code-quad!", x); + S_thread_end_code_write(); + return Svoid; } static ptr s_set_reloc(p, n, e) ptr p, n, e; { iptr *a; + S_thread_start_code_write(); a = (iptr *)(&RELOCIT(CODERELOC(p), UNFIX(n))); *a = Sfixnump(e) ? UNFIX(e) : Sinteger_value(e); + S_thread_end_code_write(); + return e; } @@ -931,6 +948,8 @@ static ptr s_make_code(flags, free, name, arity_mark, n, info, pinfos) iptr flags, free, n; ptr name, arity_mark, info, pinfos; { ptr co; + S_thread_start_code_write(); + co = S_code(get_thread_context(), type_code | (flags << code_flags_offset), n); CODEFREE(co) = free; CODENAME(co) = name; @@ -940,12 +959,17 @@ static ptr s_make_code(flags, free, name, arity_mark, n, info, pinfos) if (pinfos != Snil) { S_G.profile_counters = Scons(S_weak_cons(co, pinfos), S_G.profile_counters); } + + S_thread_end_code_write(); + return co; } static ptr s_make_reloc_table(codeobj, n) ptr codeobj, n; { + S_thread_start_code_write(); CODERELOC(codeobj) = S_relocation_table(UNFIX(n)); RELOCCODE(CODERELOC(codeobj)) = codeobj; + S_thread_end_code_write(); return Svoid; } diff --git a/racket/src/ChezScheme/c/scheme.c b/racket/src/ChezScheme/c/scheme.c index 22579cb083..196916cdfc 100644 --- a/racket/src/ChezScheme/c/scheme.c +++ b/racket/src/ChezScheme/c/scheme.c @@ -109,6 +109,7 @@ static void main_init() { VIRTREG(tc, i) = FIX(0); } + S_thread_start_code_write(); p = S_code(tc, type_code, size_rp_header); CODERELOC(p) = S_relocation_table(0); CODENAME(p) = Sfalse; @@ -122,6 +123,7 @@ static void main_init() { (uptr)TO_PTR(&RPHEADERTOPLINK(TO_PTR(&CODEIT(p, 0)))) - (uptr)p; S_protect(&S_G.dummy_code_object); S_G.dummy_code_object = p; + S_thread_end_code_write(); S_protect(&S_G.error_invoke_code_object); S_G.error_invoke_code_object = Snil; diff --git a/racket/src/ChezScheme/c/schsig.c b/racket/src/ChezScheme/c/schsig.c index c3bd7db83e..b3dd380c16 100644 --- a/racket/src/ChezScheme/c/schsig.c +++ b/racket/src/ChezScheme/c/schsig.c @@ -783,6 +783,7 @@ void S_schsig_init() { S_protect(&S_G.collect_request_pending_id); S_G.collect_request_pending_id = S_intern((const unsigned char *)"$collect-request-pending"); + S_thread_start_code_write(); p = S_code(get_thread_context(), type_code | (code_flag_continuation << code_flags_offset), 0); CODERELOC(p) = S_relocation_table(0); CODENAME(p) = Sfalse; @@ -790,6 +791,7 @@ void S_schsig_init() { CODEFREE(p) = 0; CODEINFO(p) = Sfalse; CODEPINFOS(p) = Snil; + S_thread_end_code_write(); S_set_symbol_value(S_G.null_continuation_id, S_mkcontinuation(space_new, diff --git a/racket/src/ChezScheme/c/thread.c b/racket/src/ChezScheme/c/thread.c index cd0889f4f1..35b74281a7 100644 --- a/racket/src/ChezScheme/c/thread.c +++ b/racket/src/ChezScheme/c/thread.c @@ -252,6 +252,7 @@ static IBOOL destroy_thread(tc) ptr tc; { S_scan_dirty((ptr *)EAP(tc), (ptr *)REAL_EAP(tc)); /* close off thread-local allocation */ + S_thread_start_code_write(); { ISPC s; IGEN g; thread_gc *tgc = THREAD_GC(tc); @@ -260,6 +261,7 @@ static IBOOL destroy_thread(tc) ptr tc; { if (tgc->next_loc[g][s]) S_close_off_thread_local_segment(tc, s, g); } + S_thread_end_code_write(); alloc_mutex_release(); diff --git a/racket/src/ChezScheme/c/version.h b/racket/src/ChezScheme/c/version.h index c8ed8582c4..c484a61c62 100644 --- a/racket/src/ChezScheme/c/version.h +++ b/racket/src/ChezScheme/c/version.h @@ -83,8 +83,7 @@ # if (machine_type == machine_type_tarm64osx) # define PTHREADS # endif -# define S_MAP_CODE MAP_JIT -# define S_ENABLE_CODE_WRITE(on) pthread_jit_write_protect_np(!(on)) +# define FLUSHCACHE #endif #if (machine_type == machine_type_ppc32osx || machine_type == machine_type_tppc32osx) @@ -325,6 +324,12 @@ typedef int tputsputcchar; #if !defined(__POWERPC__) # define LITTLE_ENDIAN_IEEE_DOUBLE #endif +#if defined(__arm64__) +# define S_MAP_CODE MAP_JIT +# define S_ENABLE_CODE_WRITE(on) pthread_jit_write_protect_np(!(on)) +# define CANNOT_READ_DIRECTLY_INTO_CODE +# include +#endif #define LDEXP #define ARCHYPERBOLIC #define GETPAGESIZE() getpagesize() diff --git a/racket/src/ChezScheme/c/vfasl.c b/racket/src/ChezScheme/c/vfasl.c index 84ce71fa28..7de7d627c5 100644 --- a/racket/src/ChezScheme/c/vfasl.c +++ b/racket/src/ChezScheme/c/vfasl.c @@ -258,8 +258,21 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) memcpy(TO_VOIDP(vspaces[s]), bv_addr, sz); bv_addr = TO_VOIDP(ptr_add(TO_PTR(bv_addr), sz)); } else { - if (S_fasl_stream_read(stream, TO_VOIDP(vspaces[s]), sz) < 0) + ptr dest; +#ifdef CANNOT_READ_DIRECTLY_INTO_CODE + if (s == vspace_code) + newspace_find_room(tc, typemod, sz, dest); + else + dest = vspaces[s]; +#else + dest = vspaces[s]; +#endif + if (S_fasl_stream_read(stream, TO_VOIDP(dest), sz) < 0) S_error("fasl-read", "input truncated"); +#ifdef CANNOT_READ_DIRECTLY_INTO_CODE + if (dest != vspaces[s]) + memcpy(TO_VOIDP(vspaces[s]), TO_VOIDP(dest), sz); +#endif } } else vspaces[s] = (ptr)0; diff --git a/racket/src/ChezScheme/configure b/racket/src/ChezScheme/configure index 89c80c1760..81864a5008 100755 --- a/racket/src/ChezScheme/configure +++ b/racket/src/ChezScheme/configure @@ -159,7 +159,7 @@ case "${CONFIG_UNAME}" in tm64=ta6osx elif uname -a | egrep 'arm|aarch' > /dev/null 2>&1 ; then m64=arm64osx - tm64=tarm6osx + tm64=tarm64osx elif uname -a | egrep 'Power' > /dev/null 2>&1 ; then m64=ppc32osx tm64=tppc32osx @@ -356,7 +356,7 @@ if [ "$m" = "pb" ] ; then fi if [ "$bits" = "" ] ; then - if uname -a | egrep 'amd64|x86_64|aarch64' > /dev/null 2>&1 ; then + if uname -a | egrep 'amd64|x86_64|aarch64|arm64' > /dev/null 2>&1 ; then bits=64 else bits=32 @@ -522,7 +522,7 @@ if [ "$cflagsset" = "no" ] ; then CFLAGS="-m64 ${optFlags}" ;; arm64osx|tarm64osx) - CFLAGS="-arch arm ${optFlags}" + CFLAGS="-arch arm64 ${optFlags}" ;; a6nt|ta6nt) CFLAGS="${optFlags}" diff --git a/racket/src/ChezScheme/mats/Mf-arm64osx b/racket/src/ChezScheme/mats/Mf-arm64osx new file mode 100644 index 0000000000..b1d870ab48 --- /dev/null +++ b/racket/src/ChezScheme/mats/Mf-arm64osx @@ -0,0 +1,14 @@ +# Mf-arm64osx + +m ?= arm64osx + +fsrc = foreign1.c foreign2.c foreign3.c foreign4.c +fobj = foreign1.so + +include Mf-base + +foreign1.so: ${fsrc} ../boot/$m/scheme.h + cc -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc} + +cat_flush: cat_flush.c + cc -o cat_flush cat_flush.c diff --git a/racket/src/ChezScheme/mats/Mf-tarm64osx b/racket/src/ChezScheme/mats/Mf-tarm64osx new file mode 100644 index 0000000000..520b683f43 --- /dev/null +++ b/racket/src/ChezScheme/mats/Mf-tarm64osx @@ -0,0 +1,5 @@ +# Mf-tarm64osx + +m = tarm64osx + +include Mf-arm64osx diff --git a/racket/src/ChezScheme/workarea b/racket/src/ChezScheme/workarea index 5e2fadceed..d1b0aa80b4 100755 --- a/racket/src/ChezScheme/workarea +++ b/racket/src/ChezScheme/workarea @@ -66,6 +66,8 @@ case "$Mhost" in i3s2) ;; ppc32le) ;; ppc32osx) ;; + ppc32osx) ;; + arm64osx) ;; ta6fb) Muni=a6fb ;; ta6le) Muni=a6le ;; ta6nb) Muni=a6nb ;; @@ -86,6 +88,7 @@ case "$Mhost" in ti3s2) Muni=i3s2 ;; tppc32le) Muni=ppc32le ;; tppc32osx) Muni=ppc32osx ;; + tarm64osx) Muni=arm64osx ;; *) echo "Unrecognized machine name $Mhost"; exit 1 ;; esac diff --git a/racket/src/ac/strip.m4 b/racket/src/ac/strip.m4 index 024b71207b..d277775a43 100644 --- a/racket/src/ac/strip.m4 +++ b/racket/src/ac/strip.m4 @@ -37,3 +37,21 @@ if test "${enable_strip}" = "yes" ; then fi fi fi + +case "$host_os" in + darwin*) + case "$host_cpu" in + aarch64) + STRIP_SIGNATURE="codesign --remove-signature" + RESTORE_SIGNATURE="codesign -s - --entitlements" + ;; + *) + # Check whether `codesign` can remove signatures + touch sig-test-file + if `codesign --remove-signature sig-test-file > /dev/null 2>&1` ; then + STRIP_SIGNATURE="codesign --remove-signature" + fi + rm sig-test-file + ;; + esac +esac diff --git a/racket/src/ac/strip_arg.m4 b/racket/src/ac/strip_arg.m4 index b977a3f098..81d724d18e 100644 --- a/racket/src/ac/strip_arg.m4 +++ b/racket/src/ac/strip_arg.m4 @@ -5,3 +5,6 @@ STRIP_LIB_DEBUG=":" strip_debug_flags="" enable_strip_by_default=yes strip_needs_dash_s=no + +STRIP_SIGNATURE=":" +RESTORE_SIGNATURE=":" diff --git a/racket/src/bc/Makefile.in b/racket/src/bc/Makefile.in index 1f681354fd..985f54e934 100644 --- a/racket/src/bc/Makefile.in +++ b/racket/src/bc/Makefile.in @@ -40,6 +40,9 @@ RANLIB = @RANLIB@ STRIP_DEBUG = @STRIP_DEBUG@ STRIP_LIB_DEBUG = @STRIP_LIB_DEBUG@ +STRIP_SIGNATURE = @STRIP_SIGNATURE@ +RESTORE_SIGNATURE = @RESTORE_SIGNATURE@ "${srcdir}/../mac/entitlements.plist" + ARLIBFLAGS = @LDFLAGS@ @LIBS@ RACKET = racket @@ -50,7 +53,7 @@ RUN_THIS_RACKET_CGC = ./racket@CGC@ RUN_THIS_RACKET_MMM = ./racket@MMM@ SETUP_BOOT = -O "info@compiler/cm" -l- setup @BOOT_MODE@ $(srcdir)/../setup-go.rkt ../compiled -SETUP_BOOT_COLLECTS_PATH = $(SETUP_BOOT) collpath.inc collpath.d "$(srcdir)/../start/collects-path.rkt" +SETUP_BOOT_COLLECTS_PATH = $(SETUP_BOOT) collpath.inc collpath.d "$(srcdir)/../start/collects-path.rkt" "${srcdir}/.." MZSRC = $(srcdir)/src @@ -479,6 +482,7 @@ unix-install: cd ..; cp bc/starter@EXE_SUFFIX@ "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@" cp $(srcdir)/../start/starter-sh . cd ..; cp bc/starter-sh "$(DESTDIR)$(libpltdir)/starter-sh" + cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@" cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@" @RUN_RACKET_CGC@ $(SETUP_BOOT_COLLECTS_PATH) "$(DESTDIR)$(libpltdir)/starter@EXE_SUFFIX@" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ cd ..; echo 'CC=@CC@' > "$(BUILDINFO)" @@ -491,6 +495,7 @@ unix-install: unix-install-cgc: $(MAKE) unix-@INSTALL_LIBS_ENABLE@-libs-cgc cd ..; $(ICP) bc/racket@CGC@ "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@" + cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@" cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@" cd ..; cp bc/mzdyn.o "$(DESTDIR)$(libpltdir)/mzdyn.o" @RUN_RACKET_CGC@ $(SETUP_BOOT_COLLECTS_PATH) "$(DESTDIR)$(bindir)/racket@CGC_INSTALLED@@EXE_SUFFIX@" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ @@ -510,6 +515,7 @@ unix-install-cgc-final: unix-install-3m: cd ..; $(ICP) bc/racket@MMM@ "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@" + cd ..; $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@" cd ..; $(STRIP_DEBUG) "$(DESTDIR)$(bindir)/racket@MMM_INSTALLED@" $(MAKE) unix-@INSTALL_LIBS_ENABLE@-libs-3m cd ..; $(ICP) bc/mzdyn3m.o "$(DESTDIR)$(libpltdir)/mzdyn3m.o" @@ -599,7 +605,7 @@ osx-install-cgc: mkdir -p $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION) cp $(MZFW) $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)/ /usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)/Racket" $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@" - $(STRIP_DEBUG) $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@" + $(RESTORE_SIGNATURE) $(DESTDIR)"$(bindir)/racket@CGC_INSTALLED@" osx-install-cgc-final: $(MAKE) unix-install-cgc-final @@ -610,7 +616,7 @@ osx-install-3m: mkdir -p $(DESTDIR)"$(MZFWDIR)/Versions/$(FWVERSION)_3m" cp $(MZFWMMM) $(DESTDIR)$(MZFWDIR)/Versions/$(FWVERSION)_3m/ /usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)_3m/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_3m/Racket" $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@" - $(STRIP_DEBUG) $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@" + $(RESTORE_SIGNATURE) $(DESTDIR)"$(bindir)/racket@MMM_INSTALLED@" osx-install-3m-final: $(MAKE) unix-install-3m-final diff --git a/racket/src/bc/configure b/racket/src/bc/configure index 2c74ce17be..49fd45624c 100755 --- a/racket/src/bc/configure +++ b/racket/src/bc/configure @@ -695,6 +695,8 @@ PLAIN_CC POST_LINKER MZLINKER REZ +RESTORE_SIGNATURE +STRIP_SIGNATURE STRIP_LIB_DEBUG STRIP_DEBUG ARFLAGS @@ -2907,6 +2909,9 @@ strip_debug_flags="" enable_strip_by_default=yes strip_needs_dash_s=no +STRIP_SIGNATURE=":" +RESTORE_SIGNATURE=":" + # Check whether --enable-noopt was given. if test "${enable_noopt+set}" = set; then : enableval=$enable_noopt; @@ -5379,6 +5384,24 @@ $as_echo "$set_strip_lib" >&6; } fi fi +case "$host_os" in + darwin*) + case "$host_cpu" in + aarch64) + STRIP_SIGNATURE="codesign --remove-signature" + RESTORE_SIGNATURE="codesign -s - --entitlements" + ;; + *) + # Check whether `codesign` can remove signatures + touch sig-test-file + if `codesign --remove-signature sig-test-file > /dev/null 2>&1` ; then + STRIP_SIGNATURE="codesign --remove-signature" + fi + rm sig-test-file + ;; + esac +esac + ############## C flags ################ @@ -7164,6 +7187,8 @@ LIBS="$LIBS $EXTRALIBS" + + diff --git a/racket/src/bc/configure.ac b/racket/src/bc/configure.ac index 9801b7914a..f8a6acbb0b 100644 --- a/racket/src/bc/configure.ac +++ b/racket/src/bc/configure.ac @@ -1409,6 +1409,8 @@ AC_SUBST(STATIC_AR) AC_SUBST(ARFLAGS) AC_SUBST(STRIP_DEBUG) AC_SUBST(STRIP_LIB_DEBUG) +AC_SUBST(STRIP_SIGNATURE) +AC_SUBST(RESTORE_SIGNATURE) AC_SUBST(REZ) AC_SUBST(MZLINKER) AC_SUBST(POST_LINKER) diff --git a/racket/src/bc/foreign/README b/racket/src/bc/foreign/README index 8f41f4ec56..749439607d 100644 --- a/racket/src/bc/foreign/README +++ b/racket/src/bc/foreign/README @@ -9,3 +9,5 @@ Changes to the source in this copy: * Added $CPPFLAGS to use of $CC in "configure.host" * Added preprocessor conditionals for Go closures in "ffi_darwin.c" + + * Adjusted "config.guess" to detect Mac OS AArch64 diff --git a/racket/src/bc/foreign/libffi/config.guess b/racket/src/bc/foreign/libffi/config.guess index faa63aa942..6718d4dbfc 100644 --- a/racket/src/bc/foreign/libffi/config.guess +++ b/racket/src/bc/foreign/libffi/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2017-05-11' +timestamp='2020-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -1321,6 +1321,8 @@ EOF # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 + elif test "$UNAME_PROCESSOR" = arm ; then + UNAME_PROCESSOR=aarch64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; diff --git a/racket/src/bc/gc2/Makefile.in b/racket/src/bc/gc2/Makefile.in index 80157c1f65..c8303ac601 100644 --- a/racket/src/bc/gc2/Makefile.in +++ b/racket/src/bc/gc2/Makefile.in @@ -611,7 +611,7 @@ $(MZFWMMM): ../libracket3m.@LIBSFX@ $(LIBRKTIO) rm -f Racket.framework/Racket ln -s Versions/$(FWVERSION)_3m/Racket Racket.framework/Racket mkdir -p "../Racket.framework/Versions/$(FWVERSION)_3m" - cp "Racket.framework/Versions/$(FWVERSION)_3m/Racket" "../Racket.framework/Versions/$(FWVERSION)_3m/Racket" + cp "Racket.framework/Racket" "../Racket.framework/Versions/$(FWVERSION)_3m/Racket" # Depending on MACLIBRKT_LINK_MODE, use Framework or statically link the framework's code: MACLIBRKT_LINK_fw = -F. -framework Racket @@ -619,7 +619,9 @@ MACLIBRKT_LINK_static = $(MACLIBRKT_LIBS) ../racket@MMM@@OSX@: $(MZFWMMM) main.@LTO@ @MZLINKER@ -o ../racket@MMM@ @PROFFLAGS@ @LDFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names $(MACLIBRKT_LINK_@MACLIBRKT_LINK_MODE@) @LIBS@ + @STRIP_SIGNATURE@ "../racket@MMM@" /usr/bin/install_name_tool -change "Racket.framework/Versions/$(FWVERSION)_3m/Racket" "@executable_path/Racket.framework/Versions/$(FWVERSION)_3m/Racket" "../racket@MMM@" + @RESTORE_SIGNATURE@ "${srcdir}/../../mac/entitlements.plist" "../racket@MMM@" ../lib/libracket3mxxxxxxx.dll: ../libracket3m.@LIBSFX@ ../mzsj86g.o $(LIBRKTIO) mkdir -p ../lib diff --git a/racket/src/bc/gracket/Makefile.in b/racket/src/bc/gracket/Makefile.in index c9514673a2..0b63a5f92b 100644 --- a/racket/src/bc/gracket/Makefile.in +++ b/racket/src/bc/gracket/Makefile.in @@ -90,7 +90,7 @@ LINKRESULT_wx_mac = GRacket@CGC@.app/Contents/MacOS/GRacket@CGC@ LINKRESULT = $(LINKRESULT_@WXVARIANT@) SETUP_BOOT = -O "info@compiler/cm" -l- setup @BOOT_MODE@ $(srcdir)/../../setup-go.rkt ../../compiled -SETUP_BOOT_COLLECTS_PATH = $(SETUP_BOOT) collpath.inc collpath.d "$(srcdir)/../../start/collects-path.rkt" +SETUP_BOOT_COLLECTS_PATH = $(SETUP_BOOT) collpath.inc collpath.d "$(srcdir)/../../start/collects-path.rkt" "${srcdir}/../.." # Incremented each time the binaries change: DOWNLOAD_BIN_VERSION = 1 diff --git a/racket/src/cs/c/Makefile.in b/racket/src/cs/c/Makefile.in index 6287176b5b..c4375a23a2 100644 --- a/racket/src/cs/c/Makefile.in +++ b/racket/src/cs/c/Makefile.in @@ -30,6 +30,9 @@ WINDRES = @WINDRES@ STRIP_DEBUG = @STRIP_DEBUG@ STRIP_LIB_DEBUG = @STRIP_LIB_DEBUG@ +STRIP_SIGNATURE = @STRIP_SIGNATURE@ +RESTORE_SIGNATURE = @RESTORE_SIGNATURE@ "${srcdir}/../../mac/entitlements.plist" + ICP=@ICP@ ICP_LIB=@ICP_LIB@ @@ -68,6 +71,8 @@ ALLDIRINFO = "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(libpltdir)" \ "$(DESTDIR)$(includepltdir)" +START_COLLECTS_PATH = "$(srcdir)/../../start/collects-path.rkt" "${srcdir}/../.." + # Defines FWVERSION: mainsrcdir = @srcdir@/../.. @INCLUDEDEP@ @srcdir@/../../version/version.mak @@ -240,7 +245,9 @@ racketcs@OSX@: main.o $(RKTFW) $(MAKE) raw_racketcs $(MAKE) adjust-framework-boot-compress $(MAKE) mac-embed-boot-@MACLIBRKT_LINK_MODE@ EMBED_DEST=racketcs + $(STRIP_SIGNATURE) racketcs /usr/bin/install_name_tool -change "Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@executable_path/Racket.framework/Versions/$(FWVERSION)_CS/Racket" racketcs + $(RESTORE_SIGNATURE) racketcs raw_racketcs@OSX@: ln -s racketcs raw_racketcs @@ -253,7 +260,9 @@ gracketcs@OSX@: $(GRACKET_BIN): grmain.o $(RKTFW) $(GRAPPSKEL) $(CC) $(CFLAGS) -o $(GRACKET_BIN) grmain.o $(MACLIBRKT_LINK_@MACLIBRKT_LINK_MODE@) $(MAKE) mac-embed-boot-@MACLIBRKT_LINK_MODE@ EMBED_DEST=$(GRACKET_BIN) + $(STRIP_SIGNATURE) $(GRACKET_BIN) /usr/bin/install_name_tool -change "Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@executable_path/../../../Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(GRACKET_BIN) + $(RESTORE_SIGNATURE) $(GRACKET_BIN) $(GRAPPSKEL): $(srcdir)/../../mac/osx_appl.rkt $(srcdir)/../../version/racket_version.h $(srcdir)/../../mac/icon/GRacket.icns $(BOOTSTRAP_RACKET) $(srcdir)/../../mac/osx_appl.rkt $(srcdir)/../.. "CS" @@ -468,11 +477,15 @@ common-install: rm -f "$(DESTDIR)$(libpltdir)/starter" rm -f "$(DESTDIR)$(libpltdir)/starter-sh" $(ICP) racketcs "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" + $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(STRIP_DEBUG) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" - $(ICP) starter "$(DESTDIR)$(libpltdir)/starter" - $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/starter" + $(RESTORE_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(ICP) $(srcdir)/../../start/starter-sh "$(DESTDIR)$(libpltdir)/starter-sh" - $(BOOTSTRAP_RACKET) "$(srcdir)/../../start/collects-path.rkt" "$(DESTDIR)$(libpltdir)/starter" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(ICP) starter "$(DESTDIR)$(libpltdir)/starter" + $(STRIP_SIGNATURE) "$(DESTDIR)$(libpltdir)/starter" + $(STRIP_DEBUG) "$(DESTDIR)$(libpltdir)/starter" + $(BOOTSTRAP_RACKET) $(START_COLLECTS_PATH) "$(DESTDIR)$(libpltdir)/starter" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(RESTORE_SIGNATURE) "$(DESTDIR)$(libpltdir)/starter" $(MAKE) system-install $(MAKE) include-install $(MAKE) common-@INSTALL_LIBS_ENABLE@-libs @@ -498,8 +511,12 @@ unix-install: $(MAKE) common-install rm -f "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" $(ICP) gracketcs "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" - $(BOOTSTRAP_RACKET) "$(srcdir)/../../start/collects-path.rkt" "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ - $(BOOTSTRAP_RACKET) "$(srcdir)/../../start/collects-path.rkt" "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" + $(STRIP_SIGNATURE) "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" + $(BOOTSTRAP_RACKET) $(START_COLLECTS_PATH) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(BOOTSTRAP_RACKET) $(START_COLLECTS_PATH) "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(RESTORE_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" + $(RESTORE_SIGNATURE) "$(DESTDIR)$(libpltdir)/gracket$(CS_INSTALLED)" $(MAKE) unix-@INSTALL_LIBS_ENABLE@-libs unix-install-cross: @@ -535,18 +552,24 @@ macos-install: cp $(RKTFWDIR)/boot/petite.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/ cp $(RKTFWDIR)/boot/scheme.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/ cp $(RKTFWDIR)/boot/racket.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/ - $(BOOTSTRAP_RACKET) "$(srcdir)/../../start/collects-path.rkt" "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + $(STRIP_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" + $(BOOTSTRAP_RACKET) $(START_COLLECTS_PATH) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(DESTDIR)@COLLECTS_PATH@ $(DESTDIR)@CONFIG_PATH@ + /usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(DESTDIR)"$(bindir)/racket$(CS_INSTALLED)" + $(RESTORE_SIGNATURE) "$(DESTDIR)$(bindir)/racket$(CS_INSTALLED)" $(MAKE) macos-install-gracket CS_GR_INSTALLED="`echo $(CS_INSTALLED) | tr a-z A-Z`" $(MAKE) macos-@INSTALL_LIBS_ENABLE@-libs +GRACKET_INSTALLED = $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app/Contents/MacOS/GRacket$(CS_GR_INSTALLED)" + macos-install-gracket: - /usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(DESTDIR)"$(bindir)/racket$(CS_INSTALLED)" rm -rf $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app" $(ICP) -r "GRacketCS.app" $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app" $(BOOTSTRAP_RACKET) "$(srcdir)/../../mac/rename-app.rkt" $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app" "GRacketCS" "GRacket$(CS_GR_INSTALLED)" no-up - /usr/bin/install_name_tool -change "@executable_path/../../../../bc/Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app/Contents/MacOS/GRacket$(CS_GR_INSTALLED)" - $(BOOTSTRAP_RACKET) "$(srcdir)/../../start/collects-path.rkt" $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app/Contents/MacOS/GRacket$(CS_GR_INSTALLED)" ../../../../collects ../../../../etc - $(STRIP_DEBUG) $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app/Contents/MacOS/GRacket$(CS_GR_INSTALLED)" + /usr/bin/install_name_tool -change "@executable_path/../../../../bc/Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(GRACKET_INSTALLED) + $(STRIP_SIGNATURE) $(GRACKET_INSTALLED) + $(BOOTSTRAP_RACKET) $(START_COLLECTS_PATH) $(GRACKET_INSTALLED) ../../../../collects ../../../../etc + $(STRIP_DEBUG) $(GRACKET_INSTALLED) + $(RESTORE_SIGNATURE) $(GRACKET_INSTALLED) rm -rf $(DESTDIR)"$(libpltdir)/Starter.app" $(ICP) -r Starter.app $(DESTDIR)"$(libpltdir)/." diff --git a/racket/src/cs/c/configure b/racket/src/cs/c/configure index 2d4522a658..3bcba637a4 100755 --- a/racket/src/cs/c/configure +++ b/racket/src/cs/c/configure @@ -668,6 +668,8 @@ RKTL_PRE INCLUDEDEP POST_LINKER RKTLINKER +RESTORE_SIGNATURE +STRIP_SIGNATURE STRIP_LIB_DEBUG STRIP_DEBUG ICP_LIB @@ -2685,6 +2687,9 @@ strip_debug_flags="" enable_strip_by_default=yes strip_needs_dash_s=no +STRIP_SIGNATURE=":" +RESTORE_SIGNATURE=":" + # Check whether --enable-ubsan was given. if test "${enable_ubsan+set}" = set; then : enableval=$enable_ubsan; @@ -4762,6 +4767,24 @@ $as_echo "$set_strip_lib" >&6; } fi fi +case "$host_os" in + darwin*) + case "$host_cpu" in + aarch64) + STRIP_SIGNATURE="codesign --remove-signature" + RESTORE_SIGNATURE="codesign -s - --entitlements" + ;; + *) + # Check whether `codesign` can remove signatures + touch sig-test-file + if `codesign --remove-signature sig-test-file > /dev/null 2>&1` ; then + STRIP_SIGNATURE="codesign --remove-signature" + fi + rm sig-test-file + ;; + esac +esac + ############## natipkg ################ @@ -5652,6 +5675,8 @@ SCHEME_CROSS_CONFIG_ARGS="--machine=${TARGET_MACH} --disable-x11 ${cs_auto_flags + + diff --git a/racket/src/cs/c/configure.ac b/racket/src/cs/c/configure.ac index 502a5c5b4f..872c124ed3 100644 --- a/racket/src/cs/c/configure.ac +++ b/racket/src/cs/c/configure.ac @@ -731,6 +731,8 @@ AC_SUBST(ICP) AC_SUBST(ICP_LIB) AC_SUBST(STRIP_DEBUG) AC_SUBST(STRIP_LIB_DEBUG) +AC_SUBST(STRIP_SIGNATURE) +AC_SUBST(RESTORE_SIGNATURE) AC_SUBST(RKTLINKER) AC_SUBST(POST_LINKER) AC_SUBST(INCLUDEDEP) diff --git a/racket/src/lt/config.guess b/racket/src/lt/config.guess index 6c32c8645c..4f33f71f23 100755 --- a/racket/src/lt/config.guess +++ b/racket/src/lt/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2014-11-04' +timestamp='2020-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -1281,6 +1281,8 @@ EOF # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 + elif test "$UNAME_PROCESSOR" = arm ; then + UNAME_PROCESSOR=aarch64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; diff --git a/racket/src/lt/config.sub b/racket/src/lt/config.sub index 7ffe373784..4b8834621a 100755 --- a/racket/src/lt/config.sub +++ b/racket/src/lt/config.sub @@ -2,7 +2,7 @@ # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2014-12-03' +timestamp='2020-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -253,7 +253,7 @@ case $basic_machine in | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] | arm64 \ | avr | avr32 \ | be32 | be64 \ | bfin \ diff --git a/racket/src/mac/entitlements.plist b/racket/src/mac/entitlements.plist new file mode 100644 index 0000000000..5d9c488ec7 --- /dev/null +++ b/racket/src/mac/entitlements.plist @@ -0,0 +1,16 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.inherit + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + + diff --git a/racket/src/start/collects-path.rkt b/racket/src/start/collects-path.rkt index d48bb39899..97d51968ae 100644 --- a/racket/src/start/collects-path.rkt +++ b/racket/src/start/collects-path.rkt @@ -6,20 +6,7 @@ ;; the embedded path to "collects" and "lib" in an executable. (command-line - #:args (dest dir-path config-path) - - ;; For a Mac OS executable, first strip any signature that the - ;; compiler may have added - (when (call-with-input-file* - dest - (lambda (i) - (define bstr (read-bytes 4 i)) - (and (= 4 (bytes-length bstr)) - (member (integer-bytes->integer bstr #f) - '(#xFeedFace #xFeedFacf))))) - (define codesign (find-executable-path "codesign")) - (when codesign - (system* codesign "--remove-signature" dest))) + #:args (srcdir dest dir-path config-path) (define (fix-one label path-in) (define-values (i o) (open-input-output-file dest #:exists 'update))