7165611: implement Full Debug Symbols on MacOS X hotspot
authordcubed
Tue, 15 Oct 2013 08:24:31 -0700
changeset 20640 66c24722698e
parent 20339 dad6040451df
child 20641 59b55d8f4a75
7165611: implement Full Debug Symbols on MacOS X hotspot Summary: Add MacOS X FDS support to hotspot; add minimal MacOS X FDS import support to jdk; add MacOS X FDS support to install; add MacOS X FDS support to root. Reviewed-by: erikj, sla, dholmes, rdurbin, tbell, ihse
common/autoconf/basics.m4
common/autoconf/generated-configure.sh
common/autoconf/hotspot-spec.gmk.in
common/autoconf/jdk-options.m4
common/autoconf/spec.gmk.in
common/makefiles/NativeCompilation.gmk
--- a/common/autoconf/basics.m4	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/autoconf/basics.m4	Tue Oct 15 08:24:31 2013 -0700
@@ -644,6 +644,7 @@
 fi
 
 if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+  BASIC_REQUIRE_PROG(DSYMUTIL, dsymutil)
   BASIC_REQUIRE_PROG(XATTR, xattr)
   AC_PATH_PROG(CODESIGN, codesign)
   if test "x$CODESIGN" != "x"; then
--- a/common/autoconf/generated-configure.sh	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/autoconf/generated-configure.sh	Tue Oct 15 08:24:31 2013 -0700
@@ -824,6 +824,7 @@
 OS_VERSION_MAJOR
 PKG_CONFIG
 CODESIGN
+DSYMUTIL
 XATTR
 IS_GNU_TIME
 TIME
@@ -10594,6 +10595,64 @@
 $as_echo "yes" >&6; }
     fi
   fi
+
+
+    for ac_prog in dsymutil
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DSYMUTIL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DSYMUTIL="$DSYMUTIL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DSYMUTIL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+DSYMUTIL=$ac_cv_path_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$DSYMUTIL" && break
+done
+
+
+    if test "x$DSYMUTIL" = x; then
+        if test "xdsymutil" = x; then
+          PROG_NAME=dsymutil
+        else
+          PROG_NAME=dsymutil
+        fi
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5
+$as_echo "$as_me: Could not find $PROG_NAME!" >&6;}
+        as_fn_error $? "Cannot continue" "$LINENO" 5
+    fi
 fi
 
 
@@ -29549,11 +29608,11 @@
 elif test "x$enable_debug_symbols" = "xno"; then
   ENABLE_DEBUG_SYMBOLS=false
 else
-  # default on macosx is false
-  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
-    ENABLE_DEBUG_SYMBOLS=false
-  # Default is on if objcopy is found, otherwise off
-  elif test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then
+  # Default is on if objcopy is found
+  if test "x$OBJCOPY" != x; then
+    ENABLE_DEBUG_SYMBOLS=true
+  # MacOS X and Windows don't use objcopy but default is on for those OSes
+  elif test "x$OPENJDK_TARGET_OS" = xmacosx || test "x$OPENJDK_TARGET_OS" = xwindows; then
     ENABLE_DEBUG_SYMBOLS=true
   else
     ENABLE_DEBUG_SYMBOLS=false
--- a/common/autoconf/hotspot-spec.gmk.in	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/autoconf/hotspot-spec.gmk.in	Tue Oct 15 08:24:31 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, 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
@@ -123,8 +123,7 @@
 # Hotspot expects the variable ZIP_DEBUGINFO_FILES=1/0 and not true/false.
 ifeq ($(ZIP_DEBUGINFO_FILES)$(ENABLE_DEBUG_SYMBOLS), truetrue)
   ZIP_DEBUGINFO_FILES:=1
-endif
-ifeq ($(ZIP_DEBUGINFO_FILES), false)
+else
   ZIP_DEBUGINFO_FILES:=0
 endif
 
--- a/common/autoconf/jdk-options.m4	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/autoconf/jdk-options.m4	Tue Oct 15 08:24:31 2013 -0700
@@ -518,11 +518,11 @@
 elif test "x$enable_debug_symbols" = "xno"; then
   ENABLE_DEBUG_SYMBOLS=false
 else
-  # default on macosx is false
-  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
-    ENABLE_DEBUG_SYMBOLS=false
-  # Default is on if objcopy is found, otherwise off
-  elif test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then
+  # Default is on if objcopy is found
+  if test "x$OBJCOPY" != x; then
+    ENABLE_DEBUG_SYMBOLS=true
+  # MacOS X and Windows don't use objcopy but default is on for those OSes
+  elif test "x$OPENJDK_TARGET_OS" = xmacosx || test "x$OPENJDK_TARGET_OS" = xwindows; then
     ENABLE_DEBUG_SYMBOLS=true
   else
     ENABLE_DEBUG_SYMBOLS=false
--- a/common/autoconf/spec.gmk.in	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/autoconf/spec.gmk.in	Tue Oct 15 08:24:31 2013 -0700
@@ -485,6 +485,7 @@
 DATE:=@DATE@
 DIFF:=@DIFF@
 DIRNAME:=@DIRNAME@
+DSYMUTIL:=@DSYMUTIL@
 FIND:=@FIND@
 FIND_DELETE:=@FIND_DELETE@
 ECHO:=@ECHO@
--- a/common/makefiles/NativeCompilation.gmk	Thu Oct 10 10:08:45 2013 -0700
+++ b/common/makefiles/NativeCompilation.gmk	Tue Oct 15 08:24:31 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, 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
@@ -435,31 +435,36 @@
 			$(CP) $$< $$@
                 endif
 
-                ifeq ($(OPENJDK_TARGET_OS), solaris)
-                    # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
-                    # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
-                    # empty section headers until a fixed $(OBJCOPY) is available.
-                    # An empty section header has sh_addr == 0 and sh_size == 0.
-                    # This problem has only been seen on Solaris X64, but we call this tool
-                    # on all Solaris builds just in case.
-                    #
-                    # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
-                    # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
-                    $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
-					$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
-			$(RM) $$@
-			$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
-			$(OBJCOPY) --only-keep-debug $$< $$@
-			$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
-                else # not solaris
-                    $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
-			$(RM) $$@
-			$(OBJCOPY) --only-keep-debug $$< $$@
-			$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
-                endif # Touch to not retrigger rule on rebuild
+                ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+                  ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+                    ifeq ($(OPENJDK_TARGET_OS), solaris)
+                        # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+                        # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+                        # empty section headers until a fixed $(OBJCOPY) is available.
+                        # An empty section header has sh_addr == 0 and sh_size == 0.
+                        # This problem has only been seen on Solaris X64, but we call this tool
+                        # on all Solaris builds just in case.
+                        #
+                        # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+                        # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+                        $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
+					    $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+			    $(RM) $$@
+			    $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+			    $(OBJCOPY) --only-keep-debug $$< $$@
+			    $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+                    else # not solaris
+                        $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
+			    $(RM) $$@
+			    $(OBJCOPY) --only-keep-debug $$< $$@
+			    $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+                    endif # Touch to not retrigger rule on rebuild
 			$(TOUCH) $$@
+                  endif # !windows
+                endif # !macosx
 
                 ifeq ($(ZIP_DEBUGINFO_FILES), true)
+                  ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
                     $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz
 
                     ifeq ($(OPENJDK_TARGET_OS), windows)
@@ -472,11 +477,12 @@
 				$(CD) $$($1_OBJECT_DIR) \
 				&& $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo 
                     endif
+                  endif # no MacOS X support yet
                 else
                     ifeq ($(OPENJDK_TARGET_OS), windows)
                         $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \
 			      $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb
-                    else
+                    else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
                         $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
                     endif
                 endif
@@ -513,31 +519,36 @@
 			$(CP) $$< $$@
                 endif
 
-                ifeq ($(OPENJDK_TARGET_OS), solaris)
-                    # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
-                    # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
-                    # empty section headers until a fixed $(OBJCOPY) is available.
-                    # An empty section header has sh_addr == 0 and sh_size == 0.
-                    # This problem has only been seen on Solaris X64, but we call this tool
-                    # on all Solaris builds just in case.
-                    #
-                    # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
-                    # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
-                    $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
-					$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
-			$(RM) $$@
-			$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
-			$(OBJCOPY) --only-keep-debug $$< $$@
-			$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
-                else # not solaris
-                    $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
-			$(RM) $$@
-			$(OBJCOPY) --only-keep-debug $$< $$@
-			$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
-                endif
-			$(TOUCH) $$@
+                ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+                  ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+                    ifeq ($(OPENJDK_TARGET_OS), solaris)
+                        # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+                        # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+                        # empty section headers until a fixed $(OBJCOPY) is available.
+                        # An empty section header has sh_addr == 0 and sh_size == 0.
+                        # This problem has only been seen on Solaris X64, but we call this tool
+                        # on all Solaris builds just in case.
+                        #
+                        # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+                        # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+                        $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
+					    $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+			    $(RM) $$@
+			    $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+			    $(OBJCOPY) --only-keep-debug $$< $$@
+			    $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+                    else # not solaris
+                        $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
+			    $(RM) $$@
+			    $(OBJCOPY) --only-keep-debug $$< $$@
+			    $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+                    endif
+			    $(TOUCH) $$@
+                  endif # !windows
+                endif # !macosx
 
                 ifeq ($(ZIP_DEBUGINFO_FILES), true)
+                  ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
                     $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz
 
                     ifeq ($(OPENJDK_TARGET_OS), windows)
@@ -550,11 +561,12 @@
 				$(CD) $$($1_OBJECT_DIR) \
 				&& $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo 
                     endif
+                  endif # no MacOS X support yet
                 else
                     ifeq ($(OPENJDK_TARGET_OS), windows)
                         $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \
 			      $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb
-                    else
+                    else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
                         $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo
                     endif
                 endif