make/bsd/makefiles/dtrace.make

changeset 3202
436b4a3231bf
parent 3156
f08d439fab8c
child 3518
719f7007c8e8
     1.1 --- a/make/bsd/makefiles/dtrace.make	Mon Oct 10 21:01:36 2011 -0400
     1.2 +++ b/make/bsd/makefiles/dtrace.make	Thu Oct 13 09:35:42 2011 -0700
     1.3 @@ -1,5 +1,5 @@
     1.4  #
     1.5 -# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
     1.6 +# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
     1.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8  #
     1.9  # This code is free software; you can redistribute it and/or modify it
    1.10 @@ -22,6 +22,282 @@
    1.11  #  
    1.12  #
    1.13  
    1.14 -# Bsd does not build jvm_db
    1.15 -LIBJVM_DB =
    1.16 +# Rules to build jvm_db/dtrace, used by vm.make
    1.17  
    1.18 +# We build libjvm_dtrace/libjvm_db/dtrace for COMPILER1 and COMPILER2
    1.19 +# but not for CORE or KERNEL configurations.
    1.20 +
    1.21 +ifneq ("${TYPE}", "CORE")
    1.22 +ifneq ("${TYPE}", "KERNEL")
    1.23 +
    1.24 +ifeq ($(OS_VENDOR), Darwin)
    1.25 +# we build dtrace for macosx using USDT2 probes
    1.26 +
    1.27 +DtraceOutDir = $(GENERATED)/dtracefiles
    1.28 +
    1.29 +# Bsd does not build libjvm_db, does not compile on macosx
    1.30 +# disabled in build: rule in vm.make
    1.31 +JVM_DB = libjvm_db
    1.32 +#LIBJVM_DB = libjvm_db.dylib
    1.33 +LIBJVM_DB = libjvm$(G_SUFFIX)_db.dylib
    1.34 +
    1.35 +JVM_DTRACE = jvm_dtrace
    1.36 +#LIBJVM_DTRACE = libjvm_dtrace.dylib
    1.37 +LIBJVM_DTRACE = libjvm$(G_SUFFIX)_dtrace.dylib
    1.38 +
    1.39 +JVMOFFS = JvmOffsets
    1.40 +JVMOFFS.o = $(JVMOFFS).o
    1.41 +GENOFFS = generate$(JVMOFFS)
    1.42 +
    1.43 +DTRACE_SRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/dtrace
    1.44 +DTRACE = dtrace
    1.45 +DTRACE.o = $(DTRACE).o
    1.46 +
    1.47 +# to remove '-g' option which causes link problems
    1.48 +# also '-z nodefs' is used as workaround
    1.49 +GENOFFS_CFLAGS = $(shell echo $(CFLAGS) | sed -e 's/ -g / /g' -e 's/ -g0 / /g';)
    1.50 +
    1.51 +ifdef LP64
    1.52 +DTRACE_OPTS = -D_LP64
    1.53 +endif
    1.54 +
    1.55 +# making libjvm_db
    1.56 +
    1.57 +# Use mapfile with libjvm_db.so
    1.58 +LIBJVM_DB_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_db
    1.59 +#LFLAGS_JVM_DB += $(MAPFLAG:FILENAME=$(LIBJVM_DB_MAPFILE))
    1.60 +
    1.61 +# Use mapfile with libjvm_dtrace.so
    1.62 +LIBJVM_DTRACE_MAPFILE = # no mapfile for usdt2 # $(MAKEFILES_DIR)/mapfile-vers-jvm_dtrace
    1.63 +#LFLAGS_JVM_DTRACE += $(MAPFLAG:FILENAME=$(LIBJVM_DTRACE_MAPFILE))
    1.64 +
    1.65 +LFLAGS_JVM_DB += $(PICFLAG) # -D_REENTRANT
    1.66 +LFLAGS_JVM_DTRACE += $(PICFLAG) # -D_REENTRANT
    1.67 +
    1.68 +ISA = $(subst i386,i486,$(BUILDARCH))
    1.69 +
    1.70 +# Making 64/libjvm_db.so: 64-bit version of libjvm_db.so which handles 32-bit libjvm.so
    1.71 +ifneq ("${ISA}","${BUILDARCH}")
    1.72 +
    1.73 +XLIBJVM_DB = 64/$(LIBJVM_DB)
    1.74 +XLIBJVM_DB_G = 64/$(LIBJVM_DB_G)
    1.75 +XLIBJVM_DTRACE = 64/$(LIBJVM_DTRACE)
    1.76 +XLIBJVM_DTRACE_G = 64/$(LIBJVM_DTRACE_G)
    1.77 +XARCH = $(subst sparcv9,v9,$(shell echo $(ISA)))
    1.78 +
    1.79 +$(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
    1.80 +	@echo Making $@
    1.81 +	$(QUIETLY) mkdir -p 64/ ; \
    1.82 +	$(CC) $(SYMFLAG) -xarch=$(XARCH) -D$(TYPE) -I. -I$(GENERATED) \
    1.83 +		$(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c #-lc
    1.84 +#	[ -f $(XLIBJVM_DB_G) ] || { ln -s $(LIBJVM_DB) $(XLIBJVM_DB_G); }
    1.85 +
    1.86 +$(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
    1.87 +	@echo Making $@
    1.88 +	$(QUIETLY) mkdir -p 64/ ; \
    1.89 +	$(CC) $(SYMFLAG) -xarch=$(XARCH) -D$(TYPE) -I. \
    1.90 +		$(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c #-lc -lthread -ldoor
    1.91 +#	[ -f $(XLIBJVM_DTRACE_G) ] || { ln -s $(LIBJVM_DTRACE) $(XLIBJVM_DTRACE_G); }
    1.92 +
    1.93 +endif # ifneq ("${ISA}","${BUILDARCH}")
    1.94 +
    1.95 +LFLAGS_GENOFFS += -L.
    1.96 +
    1.97 +lib$(GENOFFS).dylib: $(DTRACE_SRCDIR)/$(GENOFFS).cpp $(DTRACE_SRCDIR)/$(GENOFFS).h \
    1.98 +                  $(LIBJVM.o)
    1.99 +	$(QUIETLY) $(CCC) $(CPPFLAGS) $(GENOFFS_CFLAGS) $(SHARED_FLAG) $(PICFLAG) \
   1.100 +		 $(LFLAGS_GENOFFS) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS).cpp -ljvm
   1.101 +
   1.102 +$(GENOFFS): $(DTRACE_SRCDIR)/$(GENOFFS)Main.c lib$(GENOFFS).dylib
   1.103 +	$(QUIETLY) $(LINK.CC) -o $@ $(DTRACE_SRCDIR)/$(GENOFFS)Main.c \
   1.104 +		./lib$(GENOFFS).dylib
   1.105 +
   1.106 +# $@.tmp is created first to avoid an empty $(JVMOFFS).h if an error occurs.
   1.107 +$(JVMOFFS).h: $(GENOFFS)
   1.108 +	$(QUIETLY) DYLD_LIBRARY_PATH=. ./$(GENOFFS) -header > $@.tmp; touch $@; \
   1.109 +	if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \
   1.110 +	then rm -f $@; mv $@.tmp $@; \
   1.111 +	else rm -f $@.tmp; \
   1.112 +	fi
   1.113 +
   1.114 +$(JVMOFFS)Index.h: $(GENOFFS)
   1.115 +	$(QUIETLY) DYLD_LIBRARY_PATH=. ./$(GENOFFS) -index > $@.tmp; touch $@; \
   1.116 +	if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \
   1.117 +	then rm -f $@; mv $@.tmp $@; \
   1.118 +	else rm -f $@.tmp; \
   1.119 +	fi
   1.120 +
   1.121 +$(JVMOFFS).cpp: $(GENOFFS) $(JVMOFFS).h $(JVMOFFS)Index.h
   1.122 +	$(QUIETLY) DYLD_LIBRARY_PATH=. ./$(GENOFFS) -table > $@.tmp; touch $@; \
   1.123 +	if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \
   1.124 +	then rm -f $@; mv $@.tmp $@; \
   1.125 +	else rm -f $@.tmp; \
   1.126 +	fi
   1.127 +
   1.128 +$(JVMOFFS.o): $(JVMOFFS).h $(JVMOFFS).cpp 
   1.129 +	$(QUIETLY) $(CCC) -c -I. -o $@ $(ARCHFLAG) -D$(TYPE) $(JVMOFFS).cpp
   1.130 +
   1.131 +$(LIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE)
   1.132 +	@echo Making $@
   1.133 +	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. -I$(GENERATED) \
   1.134 +		$(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -Wall # -lc
   1.135 +#	[ -f $(LIBJVM_DB_G) ] || { ln -s $@ $(LIBJVM_DB_G); }
   1.136 +
   1.137 +$(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
   1.138 +	@echo Making $@
   1.139 +	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I.  \
   1.140 +		$(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c #-lc -lthread -ldoor
   1.141 +#	[ -f $(LIBJVM_DTRACE_G) ] || { ln -s $@ $(LIBJVM_DTRACE_G); }
   1.142 +
   1.143 +#$(DTRACE).d: $(DTRACE_SRCDIR)/hotspot.d $(DTRACE_SRCDIR)/hotspot_jni.d \
   1.144 +#             $(DTRACE_SRCDIR)/hs_private.d $(DTRACE_SRCDIR)/jhelper.d
   1.145 +#	$(QUIETLY) cat $^ > $@
   1.146 +
   1.147 +$(DtraceOutDir):
   1.148 +	mkdir $(DtraceOutDir)
   1.149 +
   1.150 +$(DtraceOutDir)/hotspot.h: $(DTRACE_SRCDIR)/hotspot.d | $(DtraceOutDir)
   1.151 +	$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hotspot.d
   1.152 +
   1.153 +$(DtraceOutDir)/hotspot_jni.h: $(DTRACE_SRCDIR)/hotspot_jni.d | $(DtraceOutDir)
   1.154 +	$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hotspot_jni.d
   1.155 +
   1.156 +$(DtraceOutDir)/hs_private.h: $(DTRACE_SRCDIR)/hs_private.d | $(DtraceOutDir)
   1.157 +	$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/hs_private.d
   1.158 +
   1.159 +$(DtraceOutDir)/jhelper.h: $(DTRACE_SRCDIR)/jhelper.d $(JVMOFFS).o | $(DtraceOutDir)
   1.160 +	$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -h -o $@ -s $(DTRACE_SRCDIR)/jhelper.d
   1.161 +
   1.162 +# jhelper currently disabled
   1.163 +dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h 
   1.164 +
   1.165 +DTraced_Files = ciEnv.o \
   1.166 +                classLoadingService.o \
   1.167 +                compileBroker.o \
   1.168 +                hashtable.o \
   1.169 +                instanceKlass.o \
   1.170 +                java.o \
   1.171 +                jni.o \
   1.172 +                jvm.o \
   1.173 +                memoryManager.o \
   1.174 +                nmethod.o \
   1.175 +                objectMonitor.o \
   1.176 +                runtimeService.o \
   1.177 +                sharedRuntime.o \
   1.178 +                synchronizer.o \
   1.179 +                thread.o \
   1.180 +                unsafe.o \
   1.181 +                vmThread.o \
   1.182 +                vmCMSOperations.o \
   1.183 +                vmPSOperations.o \
   1.184 +                vmGCOperations.o \
   1.185 +
   1.186 +# Dtrace is available, so we build $(DTRACE.o)  
   1.187 +#$(DTRACE.o): $(DTRACE).d $(JVMOFFS).h $(JVMOFFS)Index.h $(DTraced_Files)
   1.188 +#	@echo Compiling $(DTRACE).d
   1.189 +
   1.190 +#	$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \
   1.191 +#     $(DTraced_Files) ||\
   1.192 +#  STATUS=$$?;\
   1.193 +#	if [ x"$$STATUS" = x"1" -a \
   1.194 +#       x`uname -r` = x"5.10" -a \
   1.195 +#       x`uname -p` = x"sparc" ]; then\
   1.196 +#    echo "*****************************************************************";\
   1.197 +#    echo "* If you are building server compiler, and the error message is ";\
   1.198 +#    echo "* \"incorrect ELF machine type...\", you have run into solaris bug ";\
   1.199 +#    echo "* 6213962, \"dtrace -G doesn't work on sparcv8+ object files\".";\
   1.200 +#    echo "* Either patch/upgrade your system (>= S10u1_15), or set the ";\
   1.201 +#    echo "* environment variable HOTSPOT_DISABLE_DTRACE_PROBES to disable ";\
   1.202 +#    echo "* dtrace probes for this build.";\
   1.203 +#    echo "*****************************************************************";\
   1.204 +#  fi;\
   1.205 +#  exit $$STATUS
   1.206 +  # Since some DTraced_Files are in LIBJVM.o and they are touched by this
   1.207 +  # command, and libgenerateJvmOffsets.so depends on LIBJVM.o, 'make' will
   1.208 +  # think it needs to rebuild libgenerateJvmOffsets.so and thus JvmOffsets*
   1.209 +  # files, but it doesn't, so we touch the necessary files to prevent later
   1.210 +  # recompilation. Note: we only touch the necessary files if they already
   1.211 +  # exist in order to close a race where an empty file can be created
   1.212 +  # before the real build rule is executed.
   1.213 +  # But, we can't touch the *.h files:  This rule depends
   1.214 +  # on them, and that would cause an infinite cycle of rebuilding.
   1.215 +  # Neither the *.h or *.ccp files need to be touched, since they have
   1.216 +  # rules which do not update them when the generator file has not
   1.217 +  # changed their contents.
   1.218 +#	$(QUIETLY) if [ -f lib$(GENOFFS).so ]; then touch lib$(GENOFFS).so; fi
   1.219 +#	$(QUIETLY) if [ -f $(GENOFFS) ]; then touch $(GENOFFS); fi
   1.220 +#	$(QUIETLY) if [ -f $(JVMOFFS.o) ]; then touch $(JVMOFFS.o); fi
   1.221 +
   1.222 +.PHONY: dtraceCheck
   1.223 +
   1.224 +#SYSTEM_DTRACE_H = /usr/include/dtrace.h
   1.225 +SYSTEM_DTRACE_PROG = /usr/sbin/dtrace
   1.226 +#PATCH_DTRACE_PROG = /opt/SUNWdtrd/sbin/dtrace
   1.227 +systemDtraceFound := $(wildcard ${SYSTEM_DTRACE_PROG})
   1.228 +#patchDtraceFound := $(wildcard ${PATCH_DTRACE_PROG})
   1.229 +#systemDtraceHdrFound := $(wildcard $(SYSTEM_DTRACE_H))
   1.230 +
   1.231 +#ifneq ("$(systemDtraceHdrFound)", "") 
   1.232 +#CFLAGS += -DHAVE_DTRACE_H
   1.233 +#endif
   1.234 +
   1.235 +#ifneq ("$(patchDtraceFound)", "")
   1.236 +#DTRACE_PROG=$(PATCH_DTRACE_PROG)
   1.237 +#DTRACE_INCL=-I/opt/SUNWdtrd/include
   1.238 +#else
   1.239 +ifneq ("$(systemDtraceFound)", "")
   1.240 +DTRACE_PROG=$(SYSTEM_DTRACE_PROG)
   1.241 +else
   1.242 +
   1.243 +endif # ifneq ("$(systemDtraceFound)", "")
   1.244 +#endif # ifneq ("$(patchDtraceFound)", "")
   1.245 +
   1.246 +ifneq ("${DTRACE_PROG}", "")
   1.247 +ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
   1.248 +
   1.249 +DTRACE_OBJS = $(DTRACE.o) #$(JVMOFFS.o)
   1.250 +CFLAGS += -DDTRACE_ENABLED #$(DTRACE_INCL)
   1.251 +#clangCFLAGS += -DDTRACE_ENABLED -fno-optimize-sibling-calls
   1.252 +#MAPFILE_DTRACE_OPT = $(MAPFILE_DTRACE)
   1.253 +
   1.254 +
   1.255 +dtraceCheck:
   1.256 +
   1.257 +dtrace_stuff: dtrace_gen_headers
   1.258 +	$(QUIETLY) echo "dtrace headers generated"
   1.259 +
   1.260 +
   1.261 +else # manually disabled
   1.262 +
   1.263 +dtraceCheck:
   1.264 +	$(QUIETLY) echo "**NOTICE** Dtrace support disabled via environment variable"
   1.265 +
   1.266 +dtrace_stuff:
   1.267 +
   1.268 +endif # ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
   1.269 +
   1.270 +else # No dtrace program found
   1.271 +
   1.272 +dtraceCheck:
   1.273 +	$(QUIETLY) echo "**NOTICE** Dtrace support disabled: not supported by system"
   1.274 +
   1.275 +dtrace_stuff:
   1.276 +
   1.277 +endif # ifneq ("${dtraceFound}", "")
   1.278 +
   1.279 +endif # ifeq ($(OS_VENDOR), Darwin)
   1.280 +
   1.281 +
   1.282 +else # KERNEL build
   1.283 +
   1.284 +dtraceCheck:
   1.285 +	$(QUIETLY) echo "**NOTICE** Dtrace support disabled for KERNEL builds"
   1.286 +
   1.287 +endif # ifneq ("${TYPE}", "KERNEL")
   1.288 +
   1.289 +else # CORE build
   1.290 +
   1.291 +dtraceCheck:
   1.292 +	$(QUIETLY) echo "**NOTICE** Dtrace support disabled for CORE builds"
   1.293 +
   1.294 +endif # ifneq ("${TYPE}", "CORE")

mercurial