Hi Greg, Christos, Currently building the jdk with debug symbols fails on OpenBSD and I suspect at least FreeBSD (since it is disabled in the ports tree java/openjdk8/Makefile too). This was determined to be caused by libjli being statically linked on *BSD. [1]
Statically linking libjli was a work-around introduced in 1.5 or 1.6 most likely due to the lack of rpath $ORIGIN support in our runtime linkers. All of the BSD's have rpath $ORIGIN support for several years now. I propose that we eliminate linking libjli statically and remove another difference we have in the build when compared to Linux and Solaris. Dynamically linking libjli fixes the build with debug symbols. Please review/test this diff on FreeBSD and NetBSD and let me know if you are okay with the change. Thanks, -Kurt [1] http://mail.openjdk.java.net/pipermail/bsd-port-dev/2015-May/002525.html diff -r 7dc4b05dd9fd make/CompileLaunchers.gmk --- a/make/CompileLaunchers.gmk Sat May 16 12:18:42 2015 -0400 +++ b/make/CompileLaunchers.gmk Sat May 16 14:49:01 2015 -0400 @@ -49,7 +49,7 @@ ORIGIN_ROOT := /.. endif -ifneq ($(findstring $(OPENJDK_TARGET_OS), bsd macosx), ) +ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx), ) ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN) else ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli) @@ -89,11 +89,6 @@ $1_LDFLAGS := $3 $1_LDFLAGS_SUFFIX := - ifeq ($(OPENJDK_TARGET_OS), bsd) - $1_LDFLAGS += -Wl,--whole-archive $(JDK_OUTPUTDIR)/objs/libjli_static.a \ - -Wl,--no-whole-archive - $1_LDFLAGS_SUFFIX += -pthread - endif ifeq ($(OPENJDK_TARGET_OS), macosx) $1_PLIST_FILE := Info-cmdline.plist @@ -181,6 +176,8 @@ $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \ LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \ $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \ + LDFLAGS_bsd := -pthread \ + $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \ MAPFILE := $$($1_MAPFILE), \ LDFLAGS_SUFFIX := $(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX), \ LDFLAGS_SUFFIX_posix := $4, \ @@ -188,6 +185,7 @@ $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5, \ LDFLAGS_SUFFIX_linux := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli $(LIBDL) -lc, \ LDFLAGS_SUFFIX_solaris := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -lthread $(LIBDL) -lc, \ + LDFLAGS_SUFFIX_bsd := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -pthread, \ OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/$1_objs$(OUTPUT_SUBDIR), \ OUTPUT_DIR := $$($1_OUTPUT_DIR_ARG)$(OUTPUT_SUBDIR), \ PROGRAM := $1, \ @@ -203,7 +201,7 @@ BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1) - ifneq (,$(filter $(OPENJDK_TARGET_OS), bsd macosx aix)) + ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix)) $$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjli_static.a endif diff -r 7dc4b05dd9fd make/lib/CoreLibraries.gmk --- a/make/lib/CoreLibraries.gmk Sat May 16 12:18:42 2015 -0400 +++ b/make/lib/CoreLibraries.gmk Sat May 16 14:49:01 2015 -0400 @@ -466,7 +466,7 @@ BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC) -else ifneq ($(findstring $(OPENJDK_TARGET_OS), bsd macosx), ) +else ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx), ) # # On BSD they do partial (incremental) linking of libjli_static.a # code it here...rather than add support to NativeCompilation diff -r 7dc4b05dd9fd make/lib/ServiceabilityLibraries.gmk --- a/make/lib/ServiceabilityLibraries.gmk Sat May 16 12:18:42 2015 -0400 +++ b/make/lib/ServiceabilityLibraries.gmk Sat May 16 14:49:01 2015 -0400 @@ -263,8 +263,7 @@ $(LIBINSTRUMENT_LDFLAGS), \ LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \ LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \ - LDFLAGS_bsd := -Xlinker --whole-archive $(JDK_OUTPUTDIR)/objs/libjli_static.a \ - -Xlinker --no-whole-archive, \ + LDFLAGS_bsd := $(call SET_SHARED_LIBRARY_ORIGIN,/jli), \ LDFLAGS_macosx := -Xlinker -all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \ -framework Cocoa -framework Security -framework ApplicationServices, \ LDFLAGS_SUFFIX := $(LIBINSTRUMENT_LDFLAGS_SUFFIX), \ @@ -281,7 +280,7 @@ OBJECT_DIR := $(LIBINSTRUMENT_DIR), \ DEBUG_SYMBOLS := true)) -ifneq (, $(findstring $(OPENJDK_TARGET_OS), bsd macosx windows aix)) +ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows aix)) $(BUILD_LIBINSTRUMENT): $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) else $(BUILD_LIBINSTRUMENT): $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX)