diff --git a/make/autoconf/flags-ldflags.m4 b/make/autoconf/flags-ldflags.m4 index 66f8904db8911..3eba9cc4ff384 100644 --- a/make/autoconf/flags-ldflags.m4 +++ b/make/autoconf/flags-ldflags.m4 @@ -98,6 +98,9 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER], # Setup OS-dependent LDFLAGS if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$TOOLCHAIN_TYPE" = xclang; then + if test "x$OPENJDK_TARGET_CPU" = xaarch64; then + BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-dead_strip" + fi # FIXME: We should really generalize SetSharedLibraryOrigin instead. OS_LDFLAGS_JVM_ONLY="-Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." OS_LDFLAGS="-mmacosx-version-min=$MACOSX_VERSION_MIN -Wl,-reproducible" diff --git a/src/hotspot/share/oops/metadata.cpp b/src/hotspot/share/oops/metadata.cpp index 8f86be292bd28..3157c33144aaa 100644 --- a/src/hotspot/share/oops/metadata.cpp +++ b/src/hotspot/share/oops/metadata.cpp @@ -26,6 +26,16 @@ #include "oops/metadata.hpp" #include "prims/jvmtiRedefineClasses.hpp" +#if defined(__APPLE__) +extern void* _ZTV8Metadata[]; + +// avoid code stripping which disturbs the serviceability agent +__attribute__((used)) + void* dead_strip_helper() { + return _ZTV8Metadata[0]; +} +#endif + void Metadata::set_on_stack(const bool value) { // nothing to set for most metadata // Can't inline because this materializes the vtable on some C++ compilers.