1 #
   2 # Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.
   8 #
   9 # This code is distributed in the hope that it will be useful, but WITHOUT
  10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12 # version 2 for more details (a copy is included in the LICENSE file that
  13 # accompanied this code).
  14 #
  15 # You should have received a copy of the GNU General Public License version
  16 # 2 along with this work; if not, write to the Free Software Foundation,
  17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18 #
  19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20 # or visit www.oracle.com if you need additional information or have any
  21 # questions.
  22 #  
  23 #
  24 
  25 # Rules to build jvm_db/dtrace, used by vm.make
  26 
  27 # We build libjvm_dtrace/libjvm_db/dtrace for COMPILER1 and COMPILER2
  28 # but not for CORE configuration.
  29 
  30 ifneq ("${TYPE}", "CORE")
  31 
  32 ifeq ($(OS_VENDOR), Darwin)
  33 # we build dtrace for macosx using USDT2 probes
  34 
  35 DtraceOutDir = $(GENERATED)/dtracefiles
  36 
  37 # Bsd does not build libjvm_db, does not compile on macosx
  38 # disabled in build: rule in vm.make
  39 JVM_DB = libjvm_db
  40 LIBJVM_DB = libjvm_db.dylib
  41 
  42 LIBJVM_DB_DEBUGINFO   = libjvm_db.dylib.dSYM
  43 LIBJVM_DB_DIZ         = libjvm_db.diz
  44 
  45 JVM_DTRACE = jvm_dtrace
  46 LIBJVM_DTRACE = libjvm_dtrace.dylib
  47 
  48 LIBJVM_DTRACE_DEBUGINFO   = libjvm_dtrace.dylib.dSYM
  49 LIBJVM_DTRACE_DIZ         = libjvm_dtrace.diz
  50 
  51 JVMOFFS = JvmOffsets
  52 JVMOFFS.o = $(JVMOFFS).o
  53 GENOFFS = generate$(JVMOFFS)
  54 
  55 DTRACE_SRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/dtrace
  56 DTRACE_COMMON_SRCDIR = $(GAMMADIR)/src/os/posix/dtrace
  57 DTRACE = dtrace
  58 DTRACE.o = $(DTRACE).o
  59 
  60 # to remove '-g' option which causes link problems
  61 # also '-z nodefs' is used as workaround
  62 GENOFFS_CFLAGS = $(shell echo $(CFLAGS) | sed -e 's/ -g / /g' -e 's/ -g0 / /g';)
  63 
  64 ifdef LP64
  65 DTRACE_OPTS = -D_LP64
  66 endif
  67 
  68 # making libjvm_db
  69 
  70 # Use mapfile with libjvm_db.so
  71 LIBJVM_DB_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_db
  72 
  73 # Use mapfile with libjvm_dtrace.so
  74 LIBJVM_DTRACE_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_dtrace
  75 
  76 LFLAGS_JVM_DB += $(PICFLAG) # -D_REENTRANT
  77 LFLAGS_JVM_DTRACE += $(PICFLAG) # -D_REENTRANT
  78 
  79 ISA = $(subst i386,i486,$(BUILDARCH))
  80 
  81 # Making 64/libjvm_db.so: 64-bit version of libjvm_db.so which handles 32-bit libjvm.so
  82 ifneq ("${ISA}","${BUILDARCH}")
  83 
  84 XLIBJVM_DIR = 64
  85 XLIBJVM_DB = $(XLIBJVM_DIR)/$(LIBJVM_DB)
  86 XLIBJVM_DTRACE = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE)
  87 XARCH = $(subst sparcv9,v9,$(shell echo $(ISA)))
  88 
  89 XLIBJVM_DB_DEBUGINFO       = $(XLIBJVM_DIR)/$(LIBJVM_DB_DEBUGINFO)
  90 XLIBJVM_DB_DIZ             = $(XLIBJVM_DIR)/$(LIBJVM_DB_DIZ)
  91 XLIBJVM_DTRACE_DEBUGINFO   = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DEBUGINFO)
  92 XLIBJVM_DTRACE_DIZ         = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DIZ)
  93 
  94 $(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
  95         @echo $(LOG_INFO) Making $@
  96         $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \
  97         $(CC) $(SYMFLAG) -xarch=$(XARCH) -D$(TYPE) -I. -I$(GENERATED) \
  98                 $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c #-lc
  99 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
 100   ifeq ($(OS_VENDOR), Darwin)
 101         $(DSYMUTIL) $@
 102     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 103         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 104         # is not in the archived name:
 105         ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -r -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) )
 106         $(RM) -r $(XLIBJVM_DB_DEBUGINFO)
 107     endif
 108   else
 109         $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO)
 110         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 111         # is not in the link name:
 112         $(QUIETLY) ( cd $(XLIBJVM_DIR) && $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) )
 113     ifeq ($(STRIP_POLICY),all_strip)
 114         $(QUIETLY) $(STRIP) $@
 115     else
 116       ifeq ($(STRIP_POLICY),min_strip)
 117         $(QUIETLY) $(STRIP) -x $@
 118       # implied else here is no stripping at all
 119       endif
 120     endif
 121     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 122         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 123         # is not in the archived name:
 124         ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) )
 125         $(RM) $(XLIBJVM_DB_DEBUGINFO)
 126     endif
 127   endif
 128 endif
 129 
 130 $(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
 131         @echo $(LOG_INFO) Making $@
 132         $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \
 133         $(CC) $(SYMFLAG) -xarch=$(XARCH) -D$(TYPE) -I. \
 134                 $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c #-lc -lthread -ldoor
 135 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
 136   ifeq ($(OS_VENDOR), Darwin)
 137         $(DSYMUTIL) $@
 138     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 139         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 140         # is not in the archived name:
 141         ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -r -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) )
 142         $(RM) -r $(XLIBJVM_DTRACE_DEBUGINFO)
 143     endif
 144   else
 145         $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO)
 146         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 147         # is not in the link name:
 148         ( cd $(XLIBJVM_DIR) && $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) )
 149     ifeq ($(STRIP_POLICY),all_strip)
 150         $(QUIETLY) $(STRIP) $@
 151     else
 152       ifeq ($(STRIP_POLICY),min_strip)
 153         $(QUIETLY) $(STRIP) -x $@
 154       # implied else here is no stripping at all
 155       endif
 156     endif
 157     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 158         # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR)
 159         # is not in the archived name:
 160         ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) )
 161         $(RM) $(XLIBJVM_DTRACE_DEBUGINFO)
 162     endif
 163   endif
 164 endif
 165 
 166 endif # ifneq ("${ISA}","${BUILDARCH}")
 167 
 168 LFLAGS_GENOFFS += -L.
 169 
 170 lib$(GENOFFS).dylib: $(DTRACE_SRCDIR)/$(GENOFFS).cpp $(DTRACE_SRCDIR)/$(GENOFFS).h \
 171                   $(LIBJVM.o)
 172         $(QUIETLY) $(CXX) $(CXXFLAGS) $(GENOFFS_CFLAGS) $(SHARED_FLAG) $(PICFLAG) \
 173                  $(LFLAGS_GENOFFS) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS).cpp -ljvm
 174 
 175 $(GENOFFS): $(DTRACE_SRCDIR)/$(GENOFFS)Main.c lib$(GENOFFS).dylib
 176         $(QUIETLY) $(LINK.CXX) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS)Main.c \
 177                 ./lib$(GENOFFS).dylib
 178 
 179 # $@.tmp is created first to avoid an empty $(JVMOFFS).h if an error occurs.
 180 $(JVMOFFS).h: $(GENOFFS)
 181         $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -header > $@.tmp; touch $@; \
 182         if diff $@.tmp $@ > /dev/null 2>&1 ; \
 183         then rm -f $@.tmp; \
 184         else rm -f $@; mv $@.tmp $@; \
 185         fi
 186 
 187 $(JVMOFFS)Index.h: $(GENOFFS)
 188         $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -index > $@.tmp; touch $@; \
 189         if diff $@.tmp $@ > /dev/null 2>&1 ; \
 190         then rm -f $@.tmp; \
 191         else rm -f $@; mv $@.tmp $@; \
 192         fi
 193 
 194 $(JVMOFFS).cpp: $(GENOFFS) $(JVMOFFS).h $(JVMOFFS)Index.h
 195         $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -table > $@.tmp; touch $@; \
 196         if diff $@.tmp $@ > /dev/null 2>&1; \
 197         then rm -f $@.tmp; \
 198         else rm -f $@; mv $@.tmp $@; \
 199         fi
 200 
 201 $(JVMOFFS.o): $(JVMOFFS).h $(JVMOFFS).cpp 
 202         $(QUIETLY) $(CXX) -c -I. -o $@ $(ARCHFLAG) -D$(TYPE) $(JVMOFFS).cpp
 203 
 204 $(LIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE)
 205         @echo $(LOG_INFO) Making $@
 206         $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. -I$(GENERATED) \
 207                 $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -Wall # -lc
 208 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
 209   ifeq ($(OS_VENDOR), Darwin)
 210         $(DSYMUTIL) $@
 211     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 212         $(ZIPEXE) -q -r -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO)
 213         $(RM) -r $(LIBJVM_DB_DEBUGINFO)
 214     endif
 215   else
 216         $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DB_DEBUGINFO)
 217         $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@
 218     ifeq ($(STRIP_POLICY),all_strip)
 219         $(QUIETLY) $(STRIP) $@
 220     else
 221       ifeq ($(STRIP_POLICY),min_strip)
 222         $(QUIETLY) $(STRIP) -x $@
 223       # implied else here is no stripping at all
 224       endif
 225     endif
 226     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 227         $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO)
 228         $(RM) $(LIBJVM_DB_DEBUGINFO)
 229     endif
 230   endif
 231 endif
 232 
 233 $(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
 234         @echo $(LOG_INFO) Making $@
 235         $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I.  \
 236                 $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c #-lc -lthread -ldoor
 237 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
 238   ifeq ($(OS_VENDOR), Darwin)
 239         $(DSYMUTIL) $@
 240     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 241         $(ZIPEXE) -q -r -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) 
 242         $(RM) -r $(LIBJVM_DTRACE_DEBUGINFO)
 243     endif
 244   else
 245         $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DTRACE_DEBUGINFO)
 246         $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@
 247     ifeq ($(STRIP_POLICY),all_strip)
 248         $(QUIETLY) $(STRIP) $@
 249     else
 250       ifeq ($(STRIP_POLICY),min_strip)
 251         $(QUIETLY) $(STRIP) -x $@
 252       # implied else here is no stripping at all
 253       endif
 254     endif
 255     ifeq ($(ZIP_DEBUGINFO_FILES),1)
 256         $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) 
 257         $(RM) $(LIBJVM_DTRACE_DEBUGINFO)
 258     endif
 259   endif
 260 endif
 261 
 262 
 263 $(DtraceOutDir):
 264         mkdir $(DtraceOutDir)
 265 
 266 # When building using a devkit, dtrace cannot find the correct preprocessor so
 267 # we run it explicitly before runing dtrace.
 268 $(DtraceOutDir)/hotspot.h: $(DTRACE_COMMON_SRCDIR)/hotspot.d | $(DtraceOutDir)
 269         $(QUIETLY) $(CC) -E $(DTRACE_OPTS) -I. -x c $(DTRACE_COMMON_SRCDIR)/hotspot.d > $(DtraceOutDir)/hotspot.d
 270         $(QUIETLY) $(DTRACE_PROG) -h -o $@ -s $(DtraceOutDir)/hotspot.d
 271 
 272 $(DtraceOutDir)/hotspot_jni.h: $(DTRACE_COMMON_SRCDIR)/hotspot_jni.d | $(DtraceOutDir)
 273         $(QUIETLY) $(CC) -E $(DTRACE_OPTS) -I. -x c $(DTRACE_COMMON_SRCDIR)/hotspot_jni.d > $(DtraceOutDir)/hotspot_jni.d
 274         $(QUIETLY) $(DTRACE_PROG) -h -o $@ -s $(DtraceOutDir)/hotspot_jni.d
 275 
 276 $(DtraceOutDir)/hs_private.h: $(DTRACE_COMMON_SRCDIR)/hs_private.d | $(DtraceOutDir)
 277         $(QUIETLY) $(CC) -E $(DTRACE_OPTS) -I. -x c $(DTRACE_COMMON_SRCDIR)/hs_private.d > $(DtraceOutDir)/hs_private.d
 278         $(QUIETLY) $(DTRACE_PROG) -h -o $@ -s $(DtraceOutDir)/hs_private.d
 279 
 280 dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h 
 281 
 282 
 283 .PHONY: dtraceCheck
 284 
 285 SYSTEM_DTRACE_PROG = /usr/sbin/dtrace
 286 systemDtraceFound := $(wildcard ${SYSTEM_DTRACE_PROG})
 287 
 288 ifneq ("$(systemDtraceFound)", "")
 289 DTRACE_PROG=$(SYSTEM_DTRACE_PROG)
 290 else
 291 
 292 endif
 293 
 294 ifneq ("${DTRACE_PROG}", "")
 295 ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
 296 
 297 DTRACE_OBJS = $(DTRACE.o) #$(JVMOFFS.o)
 298 CFLAGS += -DDTRACE_ENABLED #$(DTRACE_INCL)
 299 
 300 
 301 dtraceCheck:
 302 
 303 dtrace_stuff: dtrace_gen_headers
 304         $(QUIETLY) echo $(LOG_INFO) "dtrace headers generated"
 305 
 306 
 307 else # manually disabled
 308 
 309 dtraceCheck:
 310         $(QUIETLY) echo $(LOG_INFO) "**NOTICE** Dtrace support disabled via environment variable"
 311 
 312 dtrace_stuff:
 313 
 314 endif # ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
 315 
 316 else # No dtrace program found
 317 
 318 dtraceCheck:
 319         $(QUIETLY) echo $(LOG_INFO) "**NOTICE** Dtrace support disabled: not supported by system"
 320 
 321 dtrace_stuff:
 322 
 323 endif # ifneq ("${dtraceFound}", "")
 324 
 325 endif # ifeq ($(OS_VENDOR), Darwin)
 326 
 327 
 328 else # CORE build
 329 
 330 dtraceCheck:
 331         $(QUIETLY) echo $(LOG_INFO) "**NOTICE** Dtrace support disabled for CORE builds"
 332 
 333 endif # ifneq ("${TYPE}", "CORE")