< prev index next >
make/hotspot/lib/CompileJvm.gmk
Print this page
*** 1,7 ****
#
! # Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
#
! # Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
*** 268,272 ****
--- 268,331 ----
# defined after the above call to BUILD_LIBJVM. Mapfile will be generated
# after all object files are built, but before the jvm library is linked.
include lib/JvmMapfile.gmk
TARGETS += $(BUILD_LIBJVM)
+
+ ################################################################################
+ # Hotspot disallows the use of global operators 'new' and 'delete'. This build
+ # time check helps enforce this requirement. If you trigger this check and the
+ # reference is not obvious from the source, GNU objdump can be used to help find
+ # the reference if compiled with GCC:
+ #
+ # objdump -lrdSC <path/to/file.o>
+ #
+ # -C demangle
+ # -d disassemble
+ # -r print relocation entries, interspersed with the disassembly
+ # -S print source code, intermixed with disassembly
+ # -l include filenames and line numbers
+ #
+ # Search the output for the operator(s) of interest, to see where they are
+ # referenced.
+
+ ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang solstudio), )
+
+ DEMANGLED_REGEXP := [^:]operator (new|delete)
+
+ # Running c++filt to find offending symbols in all files is too expensive,
+ # especially on Solaris, so use mangled names when looking for symbols.
+ # Save the demangling for when something is actually found.
+ ifeq ($(TOOLCHAIN_TYPE), solstudio)
+ MANGLED_SYMS := \
+ __1c2n6FL_pv_ \
+ __1c2N6FL_pv_ \
+ __1c2k6Fpv_v_ \
+ __1c2K6Fpv_v_ \
+ #
+ UNDEF_PATTERN := UNDEF
+ else
+ MANGLED_SYMS := \
+ _ZdaPv \
+ _ZdlPv \
+ _Znam \
+ _Znwm \
+ #
+ UNDEF_PATTERN := ' U '
+ endif
+
+ define SetupOperatorNewDeleteCheck
+ $1.op_check: $1
+ if [ -n "`$(NM) $$< | $(GREP) $(addprefix -e , $(MANGLED_SYMS)) \
+ | $(GREP) $(UNDEF_PATTERN)`" ]; then \
+ $(ECHO) "$$<: Error: Use of global operators new and delete is not allowed in Hotspot:"; \
+ $(NM) $$< | $(CXXFILT) | $(EGREP) '$(DEMANGLED_REGEXP)' | $(GREP) $(UNDEF_PATTERN); \
+ $(ECHO) "See: $(TOPDIR)/make/hotspot/lib/CompileJvm.gmk"; \
+ exit 1; \
+ fi
+ $(TOUCH) $$@
+
+ TARGETS += $1.op_check
+ endef
+
+ $(foreach o, $(BUILD_LIBJVM_ALL_OBJS), $(eval $(call SetupOperatorNewDeleteCheck,$o)))
+ endif
< prev index next >