7071904: 4/4 HotSpot: Full Debug Symbols

Fri, 16 Sep 2011 16:21:20 -0700

author
dcubed
date
Fri, 16 Sep 2011 16:21:20 -0700
changeset 3150
da0999c4b733
parent 3148
5a3c2bc614ca
child 3151
86cbe939f0c7

7071904: 4/4 HotSpot: Full Debug Symbols
Summary: Add support for .debuginfo files for HSX libraries.
Reviewed-by: poonam, dholmes, never

make/Makefile file | annotate | diff | comparison | revisions
make/linux/Makefile file | annotate | diff | comparison | revisions
make/linux/makefiles/build_vm_def.sh file | annotate | diff | comparison | revisions
make/linux/makefiles/buildtree.make file | annotate | diff | comparison | revisions
make/linux/makefiles/defs.make file | annotate | diff | comparison | revisions
make/linux/makefiles/gcc.make file | annotate | diff | comparison | revisions
make/linux/makefiles/jsig.make file | annotate | diff | comparison | revisions
make/linux/makefiles/product.make file | annotate | diff | comparison | revisions
make/linux/makefiles/saproc.make file | annotate | diff | comparison | revisions
make/linux/makefiles/vm.make file | annotate | diff | comparison | revisions
make/solaris/Makefile file | annotate | diff | comparison | revisions
make/solaris/makefiles/build_vm_def.sh file | annotate | diff | comparison | revisions
make/solaris/makefiles/buildtree.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/defs.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/dtrace.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/jsig.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/mapfile-vers file | annotate | diff | comparison | revisions
make/solaris/makefiles/product.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/saproc.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/sparcWorks.make file | annotate | diff | comparison | revisions
make/solaris/makefiles/vm.make file | annotate | diff | comparison | revisions
     1.1 --- a/make/Makefile	Thu Sep 15 20:56:24 2011 -0700
     1.2 +++ b/make/Makefile	Fri Sep 16 16:21:20 2011 -0700
     1.3 @@ -346,6 +346,20 @@
     1.4  	$(install-file)
     1.5  $(EXPORT_SERVER_DIR)/64/%.so:    $(C2_DIR)/%.so
     1.6  	$(install-file)
     1.7 +
     1.8 +# Debug info for shared library
     1.9 +$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C1_DIR)/%.debuginfo
    1.10 +	$(install-file)
    1.11 +$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C2_DIR)/%.debuginfo
    1.12 +	$(install-file)
    1.13 +$(EXPORT_CLIENT_DIR)/%.debuginfo:       $(C1_DIR)/%.debuginfo
    1.14 +	$(install-file)
    1.15 +$(EXPORT_CLIENT_DIR)/64/%.debuginfo:    $(C1_DIR)/%.debuginfo
    1.16 +	$(install-file)
    1.17 +$(EXPORT_SERVER_DIR)/%.debuginfo:       $(C2_DIR)/%.debuginfo
    1.18 +	$(install-file)
    1.19 +$(EXPORT_SERVER_DIR)/64/%.debuginfo:    $(C2_DIR)/%.debuginfo
    1.20 +	$(install-file)
    1.21    endif
    1.22  endif
    1.23  
     2.1 --- a/make/linux/Makefile	Thu Sep 15 20:56:24 2011 -0700
     2.2 +++ b/make/linux/Makefile	Fri Sep 16 16:21:20 2011 -0700
     2.3 @@ -210,6 +210,7 @@
     2.4  BUILDTREE_MAKE    = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make
     2.5  BUILDTREE_VARS    = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH)
     2.6  BUILDTREE_VARS   += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
     2.7 +BUILDTREE_VARS   += OBJCOPY=$(OBJCOPY) STRIP_POLICY=$(STRIP_POLICY)
     2.8  
     2.9  BUILDTREE         = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS)
    2.10  
     3.1 --- a/make/linux/makefiles/build_vm_def.sh	Thu Sep 15 20:56:24 2011 -0700
     3.2 +++ b/make/linux/makefiles/build_vm_def.sh	Fri Sep 16 16:21:20 2011 -0700
     3.3 @@ -7,6 +7,10 @@
     3.4  NM=nm
     3.5  fi
     3.6  
     3.7 -$NM --defined-only $* | awk '
     3.8 -   { if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";" }
     3.9 -   '
    3.10 +$NM --defined-only $* \
    3.11 +    | awk '{
    3.12 +              if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";"
    3.13 +              if ($3 ~ /^UseSharedSpaces$/) print "\t" $3 ";"
    3.14 +              if ($3 ~ /^_ZN9Arguments17SharedArchivePathE$/) print "\t" $3 ";"
    3.15 +          }' \
    3.16 +    | sort -u
     4.1 --- a/make/linux/makefiles/buildtree.make	Thu Sep 15 20:56:24 2011 -0700
     4.2 +++ b/make/linux/makefiles/buildtree.make	Fri Sep 16 16:21:20 2011 -0700
     4.3 @@ -233,6 +233,10 @@
     4.4  	echo "$(call gamma-path,commonsrc,os/posix/vm)"; \
     4.5  	[ -n "$(CFLAGS_BROWSE)" ] && \
     4.6  	    echo && echo "CFLAGS_BROWSE = $(CFLAGS_BROWSE)"; \
     4.7 +	[ -n "$(OBJCOPY)" ] && \
     4.8 +	    echo && echo "OBJCOPY = $(OBJCOPY)"; \
     4.9 +	[ -n "$(STRIP_POLICY)" ] && \
    4.10 +	    echo && echo "STRIP_POLICY = $(STRIP_POLICY)"; \
    4.11  	[ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \
    4.12  	    echo && \
    4.13  	    echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \
     5.1 --- a/make/linux/makefiles/defs.make	Thu Sep 15 20:56:24 2011 -0700
     5.2 +++ b/make/linux/makefiles/defs.make	Fri Sep 16 16:21:20 2011 -0700
     5.3 @@ -1,5 +1,5 @@
     5.4  #
     5.5 -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
     5.6 +# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
     5.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5.8  #
     5.9  # This code is free software; you can redistribute it and/or modify it
    5.10 @@ -114,6 +114,67 @@
    5.11    HS_ARCH          = ppc
    5.12  endif
    5.13  
    5.14 +# determine if HotSpot is being built in JDK6 or earlier version
    5.15 +JDK6_OR_EARLIER=0
    5.16 +ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
    5.17 +  # if the longer variable names (newer build style) are set, then check those
    5.18 +  ifeq "$(shell expr \( $(JDK_MAJOR_VERSION) = 1 \& $(JDK_MINOR_VERSION) \< 7 \))" "1"
    5.19 +    JDK6_OR_EARLIER=1
    5.20 +  endif
    5.21 +else
    5.22 +  # the longer variables aren't set so check the shorter variable names
    5.23 +  ifeq "$(shell expr \( '$(JDK_MAJOR_VER)' = 1 \& '$(JDK_MINOR_VER)' \< 7 \))" "1"
    5.24 +    JDK6_OR_EARLIER=1
    5.25 +  endif
    5.26 +endif
    5.27 +
    5.28 +ifeq ($(JDK6_OR_EARLIER),0)
    5.29 +  # Full Debug Symbols is supported on JDK7 or newer
    5.30 +
    5.31 +  # Default OBJCOPY comes from GNU Binutils on Linux:
    5.32 +  DEF_OBJCOPY=/usr/bin/objcopy
    5.33 +  ifdef CROSS_COMPILE_ARCH
    5.34 +    # don't try to generate .debuginfo files when cross compiling
    5.35 +    _JUNK_ := $(shell \
    5.36 +      echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \
    5.37 +        "skipping .debuginfo generation.")
    5.38 +    OBJCOPY=
    5.39 +  else
    5.40 +    OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
    5.41 +    ifneq ($(ALT_OBJCOPY),)
    5.42 +      _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
    5.43 +      # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
    5.44 +      OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
    5.45 +    endif
    5.46 +  endif
    5.47 +  
    5.48 +  ifeq ($(OBJCOPY),)
    5.49 +    _JUNK_ := $(shell \
    5.50 +      echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
    5.51 +  else
    5.52 +    _JUNK_ := $(shell \
    5.53 +      echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
    5.54 +  
    5.55 +    # Library stripping policies for .debuginfo configs:
    5.56 +    #   all_strip - strips everything from the library
    5.57 +    #   min_strip - strips most stuff from the library; leaves minimum symbols
    5.58 +    #   no_strip  - does not strip the library at all
    5.59 +    #
    5.60 +    # Oracle security policy requires "all_strip". A waiver was granted on
    5.61 +    # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
    5.62 +    #
    5.63 +    DEF_STRIP_POLICY="min_strip"
    5.64 +    ifeq ($(ALT_STRIP_POLICY),)
    5.65 +      STRIP_POLICY=$(DEF_STRIP_POLICY)
    5.66 +    else
    5.67 +      STRIP_POLICY=$(ALT_STRIP_POLICY)
    5.68 +    endif
    5.69 +  
    5.70 +    _JUNK_ := $(shell \
    5.71 +      echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
    5.72 +  endif
    5.73 +endif
    5.74 +
    5.75  JDK_INCLUDE_SUBDIR=linux
    5.76  
    5.77  # FIXUP: The subdirectory for a debug build is NOT the same on all platforms
    5.78 @@ -123,18 +184,28 @@
    5.79  
    5.80  # client and server subdirectories have symbolic links to ../libjsig.so
    5.81  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
    5.82 +ifneq ($(OBJCOPY),)
    5.83 +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo
    5.84 +endif
    5.85 +
    5.86  EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
    5.87  EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
    5.88  
    5.89  ifndef BUILD_CLIENT_ONLY
    5.90  EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
    5.91  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
    5.92 +  ifneq ($(OBJCOPY),)
    5.93 +    EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
    5.94 +  endif
    5.95  endif
    5.96  
    5.97  ifneq ($(ZERO_BUILD), true)
    5.98    ifeq ($(ARCH_DATA_MODEL), 32)
    5.99      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
   5.100      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so 
   5.101 +    ifneq ($(OBJCOPY),)
   5.102 +      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo
   5.103 +    endif
   5.104    endif
   5.105  endif
   5.106  
   5.107 @@ -144,6 +215,10 @@
   5.108                          $(EXPORT_LIB_DIR)/sa-jdi.jar 
   5.109  ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
   5.110                          $(EXPORT_LIB_DIR)/sa-jdi.jar 
   5.111 +ifneq ($(OBJCOPY),)
   5.112 +  ADD_SA_BINARIES/x86   += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo
   5.113 +  ADD_SA_BINARIES/sparc += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo
   5.114 +endif
   5.115  ADD_SA_BINARIES/ppc   = 
   5.116  ADD_SA_BINARIES/ia64  = 
   5.117  ADD_SA_BINARIES/arm   = 
     6.1 --- a/make/linux/makefiles/gcc.make	Thu Sep 15 20:56:24 2011 -0700
     6.2 +++ b/make/linux/makefiles/gcc.make	Fri Sep 16 16:21:20 2011 -0700
     6.3 @@ -225,6 +225,26 @@
     6.4  DEBUG_CFLAGS += -gstabs
     6.5  endif
     6.6  
     6.7 +ifneq ($(OBJCOPY),)
     6.8 +  FASTDEBUG_CFLAGS/ia64  = -g
     6.9 +  FASTDEBUG_CFLAGS/amd64 = -g
    6.10 +  FASTDEBUG_CFLAGS/arm   = -g
    6.11 +  FASTDEBUG_CFLAGS/ppc   = -g
    6.12 +  FASTDEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH))
    6.13 +  ifeq ($(FASTDEBUG_CFLAGS/$(BUILDARCH)),)
    6.14 +    FASTDEBUG_CFLAGS += -gstabs
    6.15 +  endif
    6.16 +
    6.17 +  OPT_CFLAGS/ia64  = -g
    6.18 +  OPT_CFLAGS/amd64 = -g
    6.19 +  OPT_CFLAGS/arm   = -g
    6.20 +  OPT_CFLAGS/ppc   = -g
    6.21 +  OPT_CFLAGS += $(OPT_CFLAGS/$(BUILDARCH))
    6.22 +  ifeq ($(OPT_CFLAGS/$(BUILDARCH)),)
    6.23 +    OPT_CFLAGS += -gstabs
    6.24 +  endif
    6.25 +endif
    6.26 +
    6.27  # DEBUG_BINARIES overrides everything, use full -g debug information
    6.28  ifeq ($(DEBUG_BINARIES), true)
    6.29    DEBUG_CFLAGS = -g
    6.30 @@ -242,3 +262,9 @@
    6.31  ifdef MINIMIZE_RAM_USAGE
    6.32  CFLAGS += -DMINIMIZE_RAM_USAGE
    6.33  endif
    6.34 +
    6.35 +ifdef CROSS_COMPILE_ARCH
    6.36 +  STRIP = $(ALT_COMPILER_PATH)/strip
    6.37 +else
    6.38 +  STRIP = strip
    6.39 +endif
     7.1 --- a/make/linux/makefiles/jsig.make	Thu Sep 15 20:56:24 2011 -0700
     7.2 +++ b/make/linux/makefiles/jsig.make	Fri Sep 16 16:21:20 2011 -0700
     7.3 @@ -1,5 +1,5 @@
     7.4  #
     7.5 -# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
     7.6 +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
     7.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     7.8  #
     7.9  # This code is free software; you can redistribute it and/or modify it
    7.10 @@ -31,9 +31,13 @@
    7.11  JSIG_G    = $(JSIG)$(G_SUFFIX)
    7.12  LIBJSIG_G = lib$(JSIG_G).so
    7.13  
    7.14 +LIBJSIG_DEBUGINFO   = lib$(JSIG).debuginfo
    7.15 +LIBJSIG_G_DEBUGINFO = lib$(JSIG_G).debuginfo
    7.16 +
    7.17  JSIGSRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/vm
    7.18  
    7.19 -DEST_JSIG  = $(JDK_LIBDIR)/$(LIBJSIG)
    7.20 +DEST_JSIG           = $(JDK_LIBDIR)/$(LIBJSIG)
    7.21 +DEST_JSIG_DEBUGINFO = $(JDK_LIBDIR)/$(LIBJSIG_DEBUGINFO)
    7.22  
    7.23  LIBJSIG_MAPFILE = $(MAKEFILES_DIR)/mapfile-vers-jsig
    7.24  
    7.25 @@ -54,9 +58,24 @@
    7.26  	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \
    7.27                           $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $@ $< -ldl
    7.28  	$(QUIETLY) [ -f $(LIBJSIG_G) ] || { ln -s $@ $(LIBJSIG_G); }
    7.29 +ifneq ($(OBJCOPY),)
    7.30 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO)
    7.31 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@
    7.32 +  ifeq ($(STRIP_POLICY),all_strip)
    7.33 +	$(QUIETLY) $(STRIP) $@
    7.34 +  else
    7.35 +    ifeq ($(STRIP_POLICY),min_strip)
    7.36 +	$(QUIETLY) $(STRIP) -g $@
    7.37 +    # implied else here is no stripping at all
    7.38 +    endif
    7.39 +  endif
    7.40 +	[ -f $(LIBJSIG_G_DEBUGINFO) ] || { ln -s $(LIBJSIG_DEBUGINFO) $(LIBJSIG_G_DEBUGINFO); }
    7.41 +endif
    7.42  
    7.43  install_jsig: $(LIBJSIG)
    7.44  	@echo "Copying $(LIBJSIG) to $(DEST_JSIG)"
    7.45 +	$(QUIETLY) test -f $(LIBJSIG_DEBUGINFO) && \
    7.46 +	    cp -f $(LIBJSIG_DEBUGINFO) $(DEST_JSIG_DEBUGINFO)
    7.47  	$(QUIETLY) cp -f $(LIBJSIG) $(DEST_JSIG) && echo "Done"
    7.48  
    7.49  .PHONY: install_jsig
     8.1 --- a/make/linux/makefiles/product.make	Thu Sep 15 20:56:24 2011 -0700
     8.2 +++ b/make/linux/makefiles/product.make	Fri Sep 16 16:21:20 2011 -0700
     8.3 @@ -1,5 +1,5 @@
     8.4  #
     8.5 -# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
     8.6 +# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
     8.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     8.8  #
     8.9  # This code is free software; you can redistribute it and/or modify it
    8.10 @@ -46,13 +46,10 @@
    8.11  
    8.12  # use -g to strip library as -x will discard its symbol table; -x is fine for
    8.13  # executables.
    8.14 -ifdef CROSS_COMPILE_ARCH
    8.15 -  STRIP = $(ALT_COMPILER_PATH)/strip
    8.16 -else
    8.17 -  STRIP = strip
    8.18 -endif
    8.19 +# Note: these macros are not used in .debuginfo configs
    8.20  STRIP_LIBJVM = $(STRIP) -g $@ || exit 1;
    8.21  STRIP_AOUT   = $(STRIP) -x $@ || exit 1;
    8.22  
    8.23 -# Don't strip in VM build; JDK build will strip libraries later
    8.24 +# If we can create .debuginfo files, then the VM is stripped in vm.make
    8.25 +# and this macro is not used.
    8.26  # LINK_LIB.CC/POST_HOOK += $(STRIP_$(LINK_INTO))
     9.1 --- a/make/linux/makefiles/saproc.make	Thu Sep 15 20:56:24 2011 -0700
     9.2 +++ b/make/linux/makefiles/saproc.make	Fri Sep 16 16:21:20 2011 -0700
     9.3 @@ -1,5 +1,5 @@
     9.4  #
     9.5 -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
     9.6 +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
     9.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     9.8  #
     9.9  # This code is free software; you can redistribute it and/or modify it
    9.10 @@ -32,6 +32,9 @@
    9.11  SAPROC_G = $(SAPROC)$(G_SUFFIX)
    9.12  LIBSAPROC_G = lib$(SAPROC_G).so
    9.13  
    9.14 +LIBSAPROC_DEBUGINFO   = lib$(SAPROC).debuginfo
    9.15 +LIBSAPROC_G_DEBUGINFO = lib$(SAPROC_G).debuginfo
    9.16 +
    9.17  AGENT_DIR = $(GAMMADIR)/agent
    9.18  
    9.19  SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family)
    9.20 @@ -45,7 +48,8 @@
    9.21  
    9.22  SAMAPFILE = $(SASRCDIR)/mapfile
    9.23  
    9.24 -DEST_SAPROC = $(JDK_LIBDIR)/$(LIBSAPROC)
    9.25 +DEST_SAPROC           = $(JDK_LIBDIR)/$(LIBSAPROC)
    9.26 +DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO)
    9.27  
    9.28  # DEBUG_BINARIES overrides everything, use full -g debug information
    9.29  ifeq ($(DEBUG_BINARIES), true)
    9.30 @@ -82,10 +86,25 @@
    9.31  	           -o $@                                                \
    9.32  	           -lthread_db
    9.33  	$(QUIETLY) [ -f $(LIBSAPROC_G) ] || { ln -s $@ $(LIBSAPROC_G); }
    9.34 +ifneq ($(OBJCOPY),)
    9.35 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO)
    9.36 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@
    9.37 +  ifeq ($(STRIP_POLICY),all_strip)
    9.38 +	$(QUIETLY) $(STRIP) $@
    9.39 +  else
    9.40 +    ifeq ($(STRIP_POLICY),min_strip)
    9.41 +	$(QUIETLY) $(STRIP) -g $@
    9.42 +    # implied else here is no stripping at all
    9.43 +    endif
    9.44 +  endif
    9.45 +	[ -f $(LIBSAPROC_G_DEBUGINFO) ] || { ln -s $(LIBSAPROC_DEBUGINFO) $(LIBSAPROC_G_DEBUGINFO); }
    9.46 +endif
    9.47  
    9.48  install_saproc: $(BUILDLIBSAPROC)
    9.49  	$(QUIETLY) if [ -e $(LIBSAPROC) ] ; then             \
    9.50  	  echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)";     \
    9.51 +	  test -f $(LIBSAPROC_DEBUGINFO) &&                  \
    9.52 +	    cp -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \
    9.53  	  cp -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done";  \
    9.54  	fi
    9.55  
    10.1 --- a/make/linux/makefiles/vm.make	Thu Sep 15 20:56:24 2011 -0700
    10.2 +++ b/make/linux/makefiles/vm.make	Fri Sep 16 16:21:20 2011 -0700
    10.3 @@ -60,10 +60,16 @@
    10.4  # The order is important for the precompiled headers to work.
    10.5  INCLUDES += $(PRECOMPILED_HEADER_DIR:%=-I%) $(Src_Dirs_I:%=-I%)
    10.6  
    10.7 -ifeq (${VERSION}, debug)
    10.8 +# SYMFLAG is used by {jsig,saproc}.make
    10.9 +ifneq ($(OBJCOPY),)
   10.10 +  # always build with debug info when we can create .debuginfo files
   10.11    SYMFLAG = -g
   10.12  else
   10.13 -  SYMFLAG =
   10.14 +  ifeq (${VERSION}, debug)
   10.15 +    SYMFLAG = -g
   10.16 +  else
   10.17 +    SYMFLAG =
   10.18 +  endif
   10.19  endif
   10.20  
   10.21  # HOTSPOT_RELEASE_VERSION and HOTSPOT_BUILD_VERSION are defined 
   10.22 @@ -124,6 +130,9 @@
   10.23  LIBJVM   = lib$(JVM).so
   10.24  LIBJVM_G = lib$(JVM)$(G_SUFFIX).so
   10.25  
   10.26 +LIBJVM_DEBUGINFO   = lib$(JVM).debuginfo
   10.27 +LIBJVM_G_DEBUGINFO = lib$(JVM)$(G_SUFFIX).debuginfo
   10.28 +
   10.29  SPECIAL_PATHS:=adlc c1 gc_implementation opto shark libadt
   10.30  
   10.31  SOURCE_PATHS=\
   10.32 @@ -307,11 +316,30 @@
   10.33  	      fi                                                        \
   10.34              fi 								\
   10.35  	}
   10.36 +ifeq ($(CROSS_COMPILE_ARCH),)
   10.37 +  ifneq ($(OBJCOPY),)
   10.38 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO)
   10.39 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@
   10.40 +    ifeq ($(STRIP_POLICY),all_strip)
   10.41 +	$(QUIETLY) $(STRIP) $@
   10.42 +    else
   10.43 +      ifeq ($(STRIP_POLICY),min_strip)
   10.44 +	$(QUIETLY) $(STRIP) -g $@
   10.45 +      # implied else here is no stripping at all
   10.46 +      endif
   10.47 +    endif
   10.48 +	$(QUIETLY) [ -f $(LIBJVM_G_DEBUGINFO) ] || ln -s $(LIBJVM_DEBUGINFO) $(LIBJVM_G_DEBUGINFO)
   10.49 +  endif
   10.50 +endif
   10.51  
   10.52 -DEST_JVM = $(JDK_LIBDIR)/$(VM_SUBDIR)/$(LIBJVM)
   10.53 +DEST_SUBDIR        = $(JDK_LIBDIR)/$(VM_SUBDIR)
   10.54 +DEST_JVM           = $(DEST_SUBDIR)/$(LIBJVM)
   10.55 +DEST_JVM_DEBUGINFO = $(DEST_SUBDIR)/$(LIBJVM_DEBUGINFO)
   10.56  
   10.57  install_jvm: $(LIBJVM)
   10.58  	@echo "Copying $(LIBJVM) to $(DEST_JVM)"
   10.59 +	$(QUIETLY) test -f $(LIBJVM_DEBUGINFO) && \
   10.60 +	    cp -f $(LIBJVM_DEBUGINFO) $(DEST_JVM_DEBUGINFO)
   10.61  	$(QUIETLY) cp -f $(LIBJVM) $(DEST_JVM) && echo "Done"
   10.62  
   10.63  #----------------------------------------------------------------------
    11.1 --- a/make/solaris/Makefile	Thu Sep 15 20:56:24 2011 -0700
    11.2 +++ b/make/solaris/Makefile	Fri Sep 16 16:21:20 2011 -0700
    11.3 @@ -1,5 +1,5 @@
    11.4  #
    11.5 -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
    11.6 +# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
    11.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    11.8  #
    11.9  # This code is free software; you can redistribute it and/or modify it
   11.10 @@ -168,6 +168,7 @@
   11.11  BUILDTREE_MAKE    = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make
   11.12  BUILDTREE_VARS    = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) ARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH)
   11.13  BUILDTREE_VARS   += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
   11.14 +BUILDTREE_VARS   += OBJCOPY=$(OBJCOPY) STRIP_POLICY=$(STRIP_POLICY)
   11.15  
   11.16  BUILDTREE         = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS)
   11.17  
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/make/solaris/makefiles/build_vm_def.sh	Fri Sep 16 16:21:20 2011 -0700
    12.3 @@ -0,0 +1,10 @@
    12.4 +#!/bin/sh
    12.5 +
    12.6 +/usr/ccs/bin/nm -p $* \
    12.7 +    | awk '{
    12.8 +          if ($2 == "U") next
    12.9 +          if ($3 ~ /^__1c.*__vtbl_$/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";"
   12.10 +          if ($3 ~ /^UseSharedSpaces$/) print "\t" $3 ";"
   12.11 +          if ($3 ~ /^__1cJArgumentsRSharedArchivePath_$/) print "\t" $3 ";"
   12.12 +          }' \
   12.13 +    | sort -u
    13.1 --- a/make/solaris/makefiles/buildtree.make	Thu Sep 15 20:56:24 2011 -0700
    13.2 +++ b/make/solaris/makefiles/buildtree.make	Fri Sep 16 16:21:20 2011 -0700
    13.3 @@ -226,6 +226,10 @@
    13.4  	echo "$(call gamma-path,commonsrc,os/posix/vm)"; \
    13.5  	[ -n "$(CFLAGS_BROWSE)" ] && \
    13.6  	    echo && echo "CFLAGS_BROWSE = $(CFLAGS_BROWSE)"; \
    13.7 +	[ -n "$(OBJCOPY)" ] && \
    13.8 +	    echo && echo "OBJCOPY = $(OBJCOPY)"; \
    13.9 +	[ -n "$(STRIP_POLICY)" ] && \
   13.10 +	    echo && echo "STRIP_POLICY = $(STRIP_POLICY)"; \
   13.11  	[ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \
   13.12  	    echo && \
   13.13  	    echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \
    14.1 --- a/make/solaris/makefiles/defs.make	Thu Sep 15 20:56:24 2011 -0700
    14.2 +++ b/make/solaris/makefiles/defs.make	Fri Sep 16 16:21:20 2011 -0700
    14.3 @@ -1,5 +1,5 @@
    14.4  #
    14.5 -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
    14.6 +# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
    14.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    14.8  #
    14.9  # This code is free software; you can redistribute it and/or modify it
   14.10 @@ -59,6 +59,79 @@
   14.11    endif
   14.12  endif
   14.13  
   14.14 +# determine if HotSpot is being built in JDK6 or earlier version
   14.15 +JDK6_OR_EARLIER=0
   14.16 +ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
   14.17 +  # if the longer variable names (newer build style) are set, then check those
   14.18 +  ifeq "$(shell expr \( $(JDK_MAJOR_VERSION) = 1 \& $(JDK_MINOR_VERSION) \< 7 \))" "1"
   14.19 +    JDK6_OR_EARLIER=1
   14.20 +  endif
   14.21 +else
   14.22 +  # the longer variables aren't set so check the shorter variable names
   14.23 +  ifeq "$(shell expr \( '$(JDK_MAJOR_VER)' = 1 \& '$(JDK_MINOR_VER)' \< 7 \))" "1"
   14.24 +    JDK6_OR_EARLIER=1
   14.25 +  endif
   14.26 +endif
   14.27 +
   14.28 +ifeq ($(JDK6_OR_EARLIER),0)
   14.29 +  # Full Debug Symbols is supported on JDK7 or newer
   14.30 +
   14.31 +ifdef ENABLE_FULL_DEBUG_SYMBOLS
   14.32 +  # Only check for Full Debug Symbols support on Solaris if it is
   14.33 +  # specifically enabled. Hopefully, it can be enabled by default
   14.34 +  # once the .debuginfo size issues are worked out.
   14.35 +  
   14.36 +  # Default OBJCOPY comes from the SUNWbinutils package:
   14.37 +  DEF_OBJCOPY=/usr/sfw/bin/gobjcopy
   14.38 +  ifeq ($(VM_PLATFORM),solaris_amd64)
   14.39 +    # On Solaris AMD64/X64, gobjcopy is not happy and fails:
   14.40 +    #
   14.41 +    # usr/sfw/bin/gobjcopy --add-gnu-debuglink=<lib>.debuginfo <lib>.so
   14.42 +    # BFD: stKPaiop: Not enough room for program headers, try linking with -N
   14.43 +    # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
   14.44 +    # BFD: stKPaiop: Not enough room for program headers, try linking with -N
   14.45 +    # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value
   14.46 +    # BFD: stKPaiop: Not enough room for program headers, try linking with -N
   14.47 +    # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
   14.48 +    _JUNK_ := $(shell \
   14.49 +      echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64")
   14.50 +    OBJCOPY=
   14.51 +  else
   14.52 +    OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
   14.53 +    ifneq ($(ALT_OBJCOPY),)
   14.54 +      _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
   14.55 +      # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
   14.56 +      OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
   14.57 +    endif
   14.58 +  endif
   14.59 +endif
   14.60 +  
   14.61 +  ifeq ($(OBJCOPY),)
   14.62 +    _JUNK_ := $(shell \
   14.63 +      echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
   14.64 +  else
   14.65 +    _JUNK_ := $(shell \
   14.66 +      echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
   14.67 +  
   14.68 +    # Library stripping policies for .debuginfo configs:
   14.69 +    #   all_strip - strips everything from the library
   14.70 +    #   min_strip - strips most stuff from the library; leaves minimum symbols
   14.71 +    #   no_strip  - does not strip the library at all
   14.72 +    #
   14.73 +    # Oracle security policy requires "all_strip". A waiver was granted on
   14.74 +    # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
   14.75 +    #
   14.76 +    DEF_STRIP_POLICY="min_strip"
   14.77 +    ifeq ($(ALT_STRIP_POLICY),)
   14.78 +      STRIP_POLICY=$(DEF_STRIP_POLICY)
   14.79 +    else
   14.80 +      STRIP_POLICY=$(ALT_STRIP_POLICY)
   14.81 +    endif
   14.82 +    _JUNK_ := $(shell \
   14.83 +      echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
   14.84 +  endif
   14.85 +endif
   14.86 +
   14.87  JDK_INCLUDE_SUBDIR=solaris
   14.88  
   14.89  # FIXUP: The subdirectory for a debug build is NOT the same on all platforms
   14.90 @@ -68,6 +141,9 @@
   14.91  
   14.92  # client and server subdirectories have symbolic links to ../libjsig.so
   14.93  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
   14.94 +ifneq ($(OBJCOPY),)
   14.95 +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo
   14.96 +endif
   14.97  
   14.98  EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
   14.99  EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
  14.100 @@ -77,6 +153,11 @@
  14.101  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
  14.102  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.so
  14.103  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.so
  14.104 +  ifneq ($(OBJCOPY),)
  14.105 +    EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
  14.106 +    EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo
  14.107 +    EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo
  14.108 +  endif
  14.109  endif
  14.110  ifeq ($(ARCH_DATA_MODEL), 32)
  14.111    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
  14.112 @@ -85,11 +166,25 @@
  14.113    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.so
  14.114    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.so
  14.115    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.so
  14.116 +  ifneq ($(OBJCOPY),)
  14.117 +    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo 
  14.118 +    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.debuginfo 
  14.119 +    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.debuginfo
  14.120 +    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.debuginfo
  14.121 +    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.debuginfo
  14.122 +  endif
  14.123    ifneq ($(BUILD_CLIENT_ONLY), true)
  14.124      EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.so
  14.125      EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.so
  14.126 +    ifneq ($(OBJCOPY),)
  14.127 +      EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.debuginfo
  14.128 +      EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.debuginfo
  14.129 +    endif
  14.130    endif
  14.131  endif
  14.132  
  14.133  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so
  14.134 +ifneq ($(OBJCOPY),)
  14.135 +  EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo
  14.136 +endif
  14.137  EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar 
    15.1 --- a/make/solaris/makefiles/dtrace.make	Thu Sep 15 20:56:24 2011 -0700
    15.2 +++ b/make/solaris/makefiles/dtrace.make	Fri Sep 16 16:21:20 2011 -0700
    15.3 @@ -1,5 +1,5 @@
    15.4  #
    15.5 -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
    15.6 +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
    15.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    15.8  #
    15.9  # This code is free software; you can redistribute it and/or modify it
   15.10 @@ -41,10 +41,16 @@
   15.11  LIBJVM_DB = libjvm_db.so
   15.12  LIBJVM_DB_G = libjvm$(G_SUFFIX)_db.so
   15.13  
   15.14 +LIBJVM_DB_DEBUGINFO = libjvm_db.debuginfo
   15.15 +LIBJVM_DB_G_DEBUGINFO = libjvm$(G_SUFFIX)_db.debuginfo
   15.16 +
   15.17  JVM_DTRACE = jvm_dtrace
   15.18  LIBJVM_DTRACE = libjvm_dtrace.so
   15.19  LIBJVM_DTRACE_G = libjvm$(G_SUFFIX)_dtrace.so
   15.20  
   15.21 +LIBJVM_DTRACE_DEBUGINFO = libjvm_dtrace.debuginfo
   15.22 +LIBJVM_DTRACE_G_DEBUGINFO = libjvm$(G_SUFFIX)_dtrace.debuginfo
   15.23 +
   15.24  JVMOFFS = JvmOffsets
   15.25  JVMOFFS.o = $(JVMOFFS).o
   15.26  GENOFFS = generate$(JVMOFFS)
   15.27 @@ -89,12 +95,30 @@
   15.28  XLIBJVM_DTRACE = 64/$(LIBJVM_DTRACE)
   15.29  XLIBJVM_DTRACE_G = 64/$(LIBJVM_DTRACE_G)
   15.30  
   15.31 +XLIBJVM_DB_DEBUGINFO = 64/$(LIBJVM_DB_DEBUGINFO)
   15.32 +XLIBJVM_DB_G_DEBUGINFO = 64/$(LIBJVM_DB_G_DEBUGINFO)
   15.33 +XLIBJVM_DTRACE_DEBUGINFO = 64/$(LIBJVM_DTRACE_DEBUGINFO)
   15.34 +XLIBJVM_DTRACE_G_DEBUGINFO = 64/$(LIBJVM_DTRACE_G_DEBUGINFO)
   15.35 +
   15.36  $(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
   15.37  	@echo Making $@
   15.38  	$(QUIETLY) mkdir -p 64/ ; \
   15.39  	$(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. -I$(GENERATED) \
   15.40  		$(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc
   15.41  	[ -f $(XLIBJVM_DB_G) ] || { ln -s $(LIBJVM_DB) $(XLIBJVM_DB_G); }
   15.42 +ifneq ($(OBJCOPY),)
   15.43 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO)
   15.44 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DB_DEBUGINFO) $@
   15.45 +  ifeq ($(STRIP_POLICY),all_strip)
   15.46 +	$(QUIETLY) $(STRIP) $@
   15.47 +  else
   15.48 +    ifeq ($(STRIP_POLICY),min_strip)
   15.49 +	$(QUIETLY) $(STRIP) -x $@
   15.50 +    # implied else here is no stripping at all
   15.51 +    endif
   15.52 +  endif
   15.53 +	[ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(LIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO); }
   15.54 +endif
   15.55  
   15.56  $(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
   15.57  	@echo Making $@
   15.58 @@ -102,6 +126,19 @@
   15.59  	$(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. \
   15.60  		$(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor
   15.61  	[ -f $(XLIBJVM_DTRACE_G) ] || { ln -s $(LIBJVM_DTRACE) $(XLIBJVM_DTRACE_G); }
   15.62 +ifneq ($(OBJCOPY),)
   15.63 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO)
   15.64 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DTRACE_DEBUGINFO) $@
   15.65 +  ifeq ($(STRIP_POLICY),all_strip)
   15.66 +	$(QUIETLY) $(STRIP) $@
   15.67 +  else
   15.68 +    ifeq ($(STRIP_POLICY),min_strip)
   15.69 +	$(QUIETLY) $(STRIP) -x $@
   15.70 +    # implied else here is no stripping at all
   15.71 +    endif
   15.72 +  endif
   15.73 +	[ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(LIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO); }
   15.74 +endif
   15.75  
   15.76  endif # ifneq ("${ISA}","${BUILDARCH}")
   15.77  
   15.78 @@ -148,12 +185,38 @@
   15.79  	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. -I$(GENERATED) \
   15.80  		$(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc
   15.81  	[ -f $(LIBJVM_DB_G) ] || { ln -s $@ $(LIBJVM_DB_G); }
   15.82 +ifneq ($(OBJCOPY),)
   15.83 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DB_DEBUGINFO)
   15.84 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@
   15.85 +  ifeq ($(STRIP_POLICY),all_strip)
   15.86 +	$(QUIETLY) $(STRIP) $@
   15.87 +  else
   15.88 +    ifeq ($(STRIP_POLICY),min_strip)
   15.89 +	$(QUIETLY) $(STRIP) -x $@
   15.90 +    # implied else here is no stripping at all
   15.91 +    endif
   15.92 +  endif
   15.93 +	[ -f $(LIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO); }
   15.94 +endif
   15.95  
   15.96  $(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
   15.97  	@echo Making $@
   15.98  	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I.  \
   15.99  		$(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor
  15.100  	[ -f $(LIBJVM_DTRACE_G) ] || { ln -s $@ $(LIBJVM_DTRACE_G); }
  15.101 +ifneq ($(OBJCOPY),)
  15.102 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DTRACE_DEBUGINFO)
  15.103 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@
  15.104 +  ifeq ($(STRIP_POLICY),all_strip)
  15.105 +	$(QUIETLY) $(STRIP) $@
  15.106 +  else
  15.107 +    ifeq ($(STRIP_POLICY),min_strip)
  15.108 +	$(QUIETLY) $(STRIP) -x $@
  15.109 +    # implied else here is no stripping at all
  15.110 +    endif
  15.111 +  endif
  15.112 +	[ -f $(LIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO); }
  15.113 +endif
  15.114  
  15.115  $(DTRACE).d: $(DTRACE_SRCDIR)/hotspot.d $(DTRACE_SRCDIR)/hotspot_jni.d \
  15.116               $(DTRACE_SRCDIR)/hs_private.d $(DTRACE_SRCDIR)/jhelper.d
    16.1 --- a/make/solaris/makefiles/jsig.make	Thu Sep 15 20:56:24 2011 -0700
    16.2 +++ b/make/solaris/makefiles/jsig.make	Fri Sep 16 16:21:20 2011 -0700
    16.3 @@ -1,5 +1,5 @@
    16.4  #
    16.5 -# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
    16.6 +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
    16.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    16.8  #
    16.9  # This code is free software; you can redistribute it and/or modify it
   16.10 @@ -31,9 +31,13 @@
   16.11  JSIG_G    = $(JSIG)$(G_SUFFIX)
   16.12  LIBJSIG_G = lib$(JSIG_G).so
   16.13  
   16.14 +LIBJSIG_DEBUGINFO   = lib$(JSIG).debuginfo
   16.15 +LIBJSIG_G_DEBUGINFO = lib$(JSIG_G).debuginfo
   16.16 +
   16.17  JSIGSRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/vm
   16.18  
   16.19 -DEST_JSIG  = $(JDK_LIBDIR)/$(LIBJSIG)
   16.20 +DEST_JSIG           = $(JDK_LIBDIR)/$(LIBJSIG)
   16.21 +DEST_JSIG_DEBUGINFO = $(JDK_LIBDIR)/$(LIBJSIG_DEBUGINFO)
   16.22  
   16.23  LIBJSIG_MAPFILE = $(MAKEFILES_DIR)/mapfile-vers-jsig
   16.24  
   16.25 @@ -50,9 +54,24 @@
   16.26  	$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \
   16.27                           $(LFLAGS_JSIG) -o $@ $< -ldl
   16.28  	[ -f $(LIBJSIG_G) ] || { ln -s $@ $(LIBJSIG_G); }
   16.29 +ifneq ($(OBJCOPY),)
   16.30 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO)
   16.31 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@
   16.32 +  ifeq ($(STRIP_POLICY),all_strip)
   16.33 +	$(QUIETLY) $(STRIP) $@
   16.34 +  else
   16.35 +    ifeq ($(STRIP_POLICY),min_strip)
   16.36 +	$(QUIETLY) $(STRIP) -x $@
   16.37 +    # implied else here is no stripping at all
   16.38 +    endif
   16.39 +  endif
   16.40 +	[ -f $(LIBJSIG_G_DEBUGINFO) ] || { ln -s $(LIBJSIG_DEBUGINFO) $(LIBJSIG_G_DEBUGINFO); }
   16.41 +endif
   16.42  
   16.43  install_jsig: $(LIBJSIG)
   16.44  	@echo "Copying $(LIBJSIG) to $(DEST_JSIG)"
   16.45 +	$(QUIETLY) test -f $(LIBJSIG_DEBUGINFO) && \
   16.46 +	    cp -f $(LIBJSIG_DEBUGINFO) $(DEST_JSIG_DEBUGINFO)
   16.47  	$(QUIETLY) cp -f $(LIBJSIG) $(DEST_JSIG) && echo "Done"
   16.48  
   16.49  .PHONY: install_jsig
    17.1 --- a/make/solaris/makefiles/mapfile-vers	Thu Sep 15 20:56:24 2011 -0700
    17.2 +++ b/make/solaris/makefiles/mapfile-vers	Fri Sep 16 16:21:20 2011 -0700
    17.3 @@ -3,7 +3,7 @@
    17.4  #
    17.5  
    17.6  #
    17.7 -# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
    17.8 +# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
    17.9  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   17.10  #
   17.11  # This code is free software; you can redistribute it and/or modify it
   17.12 @@ -256,6 +256,9 @@
   17.13  
   17.14  		# This is for Forte Analyzer profiling support.
   17.15  		AsyncGetCallTrace;
   17.16 +
   17.17 +		# INSERT VTABLE SYMBOLS HERE
   17.18 +
   17.19          local:
   17.20                  *;
   17.21  };
    18.1 --- a/make/solaris/makefiles/product.make	Thu Sep 15 20:56:24 2011 -0700
    18.2 +++ b/make/solaris/makefiles/product.make	Fri Sep 16 16:21:20 2011 -0700
    18.3 @@ -1,5 +1,5 @@
    18.4  #
    18.5 -# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
    18.6 +# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    18.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    18.8  #
    18.9  # This code is free software; you can redistribute it and/or modify it
   18.10 @@ -68,7 +68,8 @@
   18.11  REORDERFILE = $(GAMMADIR)/make/solaris/makefiles/reorder_$(TYPE)_$(BUILDARCH)
   18.12  endif
   18.13  
   18.14 -# Don't strip in VM build; JDK build will strip libraries later
   18.15 +# If we can create .debuginfo files, then the VM is stripped in vm.make
   18.16 +# and this macro is not used.
   18.17  # LINK_LIB.CC/POST_HOOK += $(STRIP_LIB.CC/POST_HOOK)
   18.18  
   18.19  G_SUFFIX =
    19.1 --- a/make/solaris/makefiles/saproc.make	Thu Sep 15 20:56:24 2011 -0700
    19.2 +++ b/make/solaris/makefiles/saproc.make	Fri Sep 16 16:21:20 2011 -0700
    19.3 @@ -32,6 +32,9 @@
    19.4  SAPROC_G = $(SAPROC)$(G_SUFFIX)
    19.5  LIBSAPROC_G = lib$(SAPROC_G).so
    19.6  
    19.7 +LIBSAPROC_DEBUGINFO   = lib$(SAPROC).debuginfo
    19.8 +LIBSAPROC_G_DEBUGINFO = lib$(SAPROC_G).debuginfo
    19.9 +
   19.10  AGENT_DIR = $(GAMMADIR)/agent
   19.11  
   19.12  SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family)/proc
   19.13 @@ -40,7 +43,8 @@
   19.14  
   19.15  SAMAPFILE = $(SASRCDIR)/mapfile
   19.16  
   19.17 -DEST_SAPROC = $(JDK_LIBDIR)/$(LIBSAPROC)
   19.18 +DEST_SAPROC           = $(JDK_LIBDIR)/$(LIBSAPROC)
   19.19 +DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO)
   19.20  
   19.21  # if $(AGENT_DIR) does not exist, we don't build SA
   19.22  
   19.23 @@ -101,10 +105,25 @@
   19.24  	           -o $@                                                \
   19.25  	           -ldl -ldemangle -lthread -lc
   19.26  	[ -f $(LIBSAPROC_G) ] || { ln -s $@ $(LIBSAPROC_G); }
   19.27 +ifneq ($(OBJCOPY),)
   19.28 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO)
   19.29 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@
   19.30 +  ifeq ($(STRIP_POLICY),all_strip)
   19.31 +	$(QUIETLY) $(STRIP) $@
   19.32 +  else
   19.33 +    ifeq ($(STRIP_POLICY),min_strip)
   19.34 +	$(QUIETLY) $(STRIP) -x $@
   19.35 +    # implied else here is no stripping at all
   19.36 +    endif
   19.37 +  endif
   19.38 +	[ -f $(LIBSAPROC_G_DEBUGINFO) ] || { ln -s $(LIBSAPROC_DEBUGINFO) $(LIBSAPROC_G_DEBUGINFO); }
   19.39 +endif
   19.40  
   19.41  install_saproc: $(BULDLIBSAPROC)
   19.42  	$(QUIETLY) if [ -f $(LIBSAPROC) ] ; then             \
   19.43  	  echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)";     \
   19.44 +	  test -f $(LIBSAPROC_DEBUGINFO) &&             \
   19.45 +	    cp -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \
   19.46  	  cp -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done";  \
   19.47  	fi
   19.48  
    20.1 --- a/make/solaris/makefiles/sparcWorks.make	Thu Sep 15 20:56:24 2011 -0700
    20.2 +++ b/make/solaris/makefiles/sparcWorks.make	Fri Sep 16 16:21:20 2011 -0700
    20.3 @@ -1,5 +1,5 @@
    20.4  #
    20.5 -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
    20.6 +# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
    20.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    20.8  #
    20.9  # This code is free software; you can redistribute it and/or modify it
   20.10 @@ -481,9 +481,18 @@
   20.11  endif
   20.12  
   20.13  # Flags for Debugging
   20.14 +# The -g0 setting allows the C++ frontend to inline, which is a big win.
   20.15 +# The -xs setting disables 'lazy debug info' which puts everything in
   20.16 +# the .so instead of requiring the '.o' files.
   20.17 +ifneq ($(OBJCOPY),)
   20.18 +  OPT_CFLAGS += -g0 -xs
   20.19 +endif
   20.20  DEBUG_CFLAGS = -g
   20.21  FASTDEBUG_CFLAGS = -g0
   20.22 -# The -g0 setting allows the C++ frontend to inline, which is a big win.
   20.23 +ifneq ($(OBJCOPY),)
   20.24 +  DEBUG_CFLAGS += -xs
   20.25 +  FASTDEBUG_CFLAGS += -xs
   20.26 +endif
   20.27  
   20.28  # Special global options for SS12
   20.29  ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
   20.30 @@ -502,6 +511,9 @@
   20.31  # data using a unique globalization prefix. Instead force the use of
   20.32  # a static globalization prefix based on the source filepath so the
   20.33  # objects from two identical compilations are the same.
   20.34 +# EXTRA_CFLAGS only covers vm_version.cpp for some reason
   20.35 +#EXTRA_CFLAGS += -Qoption ccfe -xglobalstatic
   20.36 +#OPT_CFLAGS += -Qoption ccfe -xglobalstatic
   20.37  #DEBUG_CFLAGS += -Qoption ccfe -xglobalstatic
   20.38  #FASTDEBUG_CFLAGS += -Qoption ccfe -xglobalstatic
   20.39  
   20.40 @@ -562,6 +574,8 @@
   20.41  # since the hook must terminate itself as a valid command.)
   20.42  
   20.43  # Also, strip debug and line number information (worth about 1.7Mb).
   20.44 +# If we can create .debuginfo files, then the VM is stripped in vm.make
   20.45 +# and this macro is not used.
   20.46  STRIP_LIB.CC/POST_HOOK = $(STRIP) -x $@ || exit 1;
   20.47  # STRIP_LIB.CC/POST_HOOK is incorporated into LINK_LIB.CC/POST_HOOK
   20.48  # in certain configurations, such as product.make.  Other configurations,
    21.1 --- a/make/solaris/makefiles/vm.make	Thu Sep 15 20:56:24 2011 -0700
    21.2 +++ b/make/solaris/makefiles/vm.make	Fri Sep 16 16:21:20 2011 -0700
    21.3 @@ -55,10 +55,17 @@
    21.4  Src_Dirs_I += $(GENERATED)
    21.5  INCLUDES += $(Src_Dirs_I:%=-I%)
    21.6  
    21.7 -ifeq (${VERSION}, debug)
    21.8 -  SYMFLAG = -g
    21.9 +# SYMFLAG is used by {dtrace,jsig,saproc}.make.
   21.10 +ifneq ($(OBJCOPY),)
   21.11 +  # always build with debug info when we can create .debuginfo files
   21.12 +  # and disable 'lazy debug info' so the .so has everything.
   21.13 +  SYMFLAG = -g -xs
   21.14  else
   21.15 -  SYMFLAG =
   21.16 +  ifeq (${VERSION}, debug)
   21.17 +    SYMFLAG = -g
   21.18 +  else
   21.19 +    SYMFLAG =
   21.20 +  endif
   21.21  endif
   21.22  
   21.23  # The following variables are defined in the generated flags.make file.
   21.24 @@ -140,6 +147,9 @@
   21.25  LIBJVM   = lib$(JVM).so
   21.26  LIBJVM_G = lib$(JVM)$(G_SUFFIX).so
   21.27  
   21.28 +LIBJVM_DEBUGINFO   = lib$(JVM).debuginfo
   21.29 +LIBJVM_G_DEBUGINFO = lib$(JVM)$(G_SUFFIX).debuginfo
   21.30 +
   21.31  SPECIAL_PATHS:=adlc c1 dist gc_implementation opto shark libadt
   21.32  
   21.33  SOURCE_PATHS=\
   21.34 @@ -212,14 +222,24 @@
   21.35  
   21.36  vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
   21.37  
   21.38 -mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT)
   21.39 +mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT) vm.def
   21.40  	rm -f $@
   21.41 -	cat $^ > $@
   21.42 +	cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \
   21.43 +	    | $(NAWK) '{                                         \
   21.44 +	              if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") {  \
   21.45 +	                  system ("cat vm.def");                 \
   21.46 +	              } else {                                   \
   21.47 +	                  print $$0;                             \
   21.48 +	              }                                          \
   21.49 +	          }' > $@
   21.50  
   21.51  mapfile_reorder : mapfile $(MAPFILE_DTRACE_OPT) $(REORDERFILE)
   21.52  	rm -f $@
   21.53  	cat $^ > $@
   21.54  
   21.55 +vm.def: $(Obj_Files)
   21.56 +	sh $(GAMMADIR)/make/solaris/makefiles/build_vm_def.sh *.o > $@
   21.57 +
   21.58  ifeq ($(LINK_INTO),AOUT)
   21.59    LIBJVM.o                 =
   21.60    LIBJVM_MAPFILE           =
   21.61 @@ -255,13 +275,30 @@
   21.62  	$(QUIETLY) rm -f $@.1 && ln -s $@ $@.1
   21.63  	$(QUIETLY) [ -f $(LIBJVM_G) ] || ln -s $@ $(LIBJVM_G)
   21.64  	$(QUIETLY) [ -f $(LIBJVM_G).1 ] || ln -s $@.1 $(LIBJVM_G).1
   21.65 +ifneq ($(OBJCOPY),)
   21.66 +	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO)
   21.67 +	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@
   21.68 +  ifeq ($(STRIP_POLICY),all_strip)
   21.69 +	$(QUIETLY) $(STRIP) $@
   21.70 +  else
   21.71 +    ifeq ($(STRIP_POLICY),min_strip)
   21.72 +	$(QUIETLY) $(STRIP) -x $@
   21.73 +    # implied else here is no stripping at all
   21.74 +    endif
   21.75 +  endif
   21.76 +	$(QUIETLY) [ -f $(LIBJVM_G_DEBUGINFO) ] || ln -s $(LIBJVM_DEBUGINFO) $(LIBJVM_G_DEBUGINFO)
   21.77 +endif
   21.78  endif # filter -sbfast -xsbfast
   21.79  
   21.80  
   21.81 -DEST_JVM = $(JDK_LIBDIR)/$(VM_SUBDIR)/$(LIBJVM)
   21.82 +DEST_SUBDIR        = $(JDK_LIBDIR)/$(VM_SUBDIR)
   21.83 +DEST_JVM           = $(DEST_SUBDIR)/$(LIBJVM)
   21.84 +DEST_JVM_DEBUGINFO = $(DEST_SUBDIR)/$(LIBJVM_DEBUGINFO)
   21.85  
   21.86  install_jvm: $(LIBJVM)
   21.87  	@echo "Copying $(LIBJVM) to $(DEST_JVM)"
   21.88 +	$(QUIETLY) test -f $(LIBJVM_DEBUGINFO) && \
   21.89 +	    cp -f $(LIBJVM_DEBUGINFO) $(DEST_JVM_DEBUGINFO)
   21.90  	$(QUIETLY) cp -f $(LIBJVM) $(DEST_JVM) && echo "Done"
   21.91  
   21.92  #----------------------------------------------------------------------

mercurial