< 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 >