6647068: libjvm.so is not built PIC
authorxlu
Tue, 10 Jun 2008 16:39:20 -0700
changeset 744 88e28f2ccee4
parent 612 807f8137637e
child 745 47129a5cacd3
6647068: libjvm.so is not built PIC Summary: Remove the preferred base address built with libjvm.so and unified the PIC approach on Solaris & Linux. Reviewed-by: never, kamg Contributed-by: xiaobin.lu@sun.com
hotspot/make/defs.make
hotspot/make/linux/makefiles/gcc.make
hotspot/make/linux/makefiles/rules.make
hotspot/make/solaris/makefiles/rules.make
--- a/hotspot/make/defs.make	Fri Jun 06 14:34:24 2008 -0700
+++ b/hotspot/make/defs.make	Tue Jun 10 16:39:20 2008 -0700
@@ -261,3 +261,21 @@
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h
+
+# A list of object files built without the platform specific PIC flags, e.g.
+# -fPIC on linux. Performance measurements show that by compiling GC related 
+# code, we could significantly reduce the GC pause time on 32 bit Linux/Unix
+# platforms. See 6454213 for more details.
+include $(GAMMADIR)/make/scm.make
+
+ifneq ($(OSNAME), windows)
+  ifndef LP64
+    NONPIC_DIRS  = memory oops gc_implementation gc_interface 
+    NONPIC_DIRS  := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir))
+    # Look for source files under NONPIC_DIRS
+    NONPIC_FILES := $(foreach dir,$(NONPIC_DIRS),\
+                      $(shell find $(dir) \( $(SCM_DIRS) \) -prune -o \
+		      -name '*.cpp' -print))
+    NONPIC_OBJ_FILES := $(notdir $(subst .cpp,.o,$(NONPIC_FILES)))
+  endif
+endif
--- a/hotspot/make/linux/makefiles/gcc.make	Fri Jun 06 14:34:24 2008 -0700
+++ b/hotspot/make/linux/makefiles/gcc.make	Tue Jun 10 16:39:20 2008 -0700
@@ -50,14 +50,7 @@
 
 VM_PICFLAG/LIBJVM = $(PICFLAG)
 VM_PICFLAG/AOUT   =
-
-ifneq ($(BUILDARCH), i486)
 VM_PICFLAG        = $(VM_PICFLAG/$(LINK_INTO))
-else
-# PIC has significant overhead on x86, build nonpic VM for now.
-# Link JVM at a "good" base location to avoid unnecessary .text patching.
-JVM_BASE_ADDR     = 0x06000000
-endif
 
 CFLAGS += $(VM_PICFLAG)
 CFLAGS += -fno-rtti
--- a/hotspot/make/linux/makefiles/rules.make	Fri Jun 06 14:34:24 2008 -0700
+++ b/hotspot/make/linux/makefiles/rules.make	Tue Jun 10 16:39:20 2008 -0700
@@ -133,10 +133,22 @@
 COMPILE_DONE    = && { echo Done with $<; }
 endif
 
+include $(GAMMADIR)/make/defs.make
+
+# The non-PIC object files are only generated for 32 bit platforms.
+ifdef LP64
 %.o: %.cpp
 	@echo Compiling $<
 	$(QUIETLY) $(REMOVE_TARGET)
 	$(QUIETLY) $(COMPILE.CC) -o $@ $< $(COMPILE_DONE)
+else
+%.o: %.cpp
+	@echo Compiling $<
+	$(QUIETLY) $(REMOVE_TARGET)
+	$(QUIETLY) $(if $(findstring $@, $(NONPIC_OBJ_FILES)), \
+	   $(subst $(VM_PICFLAG), ,$(COMPILE.CC)) -o $@ $< $(COMPILE_DONE), \
+	   $(COMPILE.CC) -o $@ $< $(COMPILE_DONE))
+endif
 
 %.o: %.s
 	@echo Assembling $<
--- a/hotspot/make/solaris/makefiles/rules.make	Fri Jun 06 14:34:24 2008 -0700
+++ b/hotspot/make/solaris/makefiles/rules.make	Tue Jun 10 16:39:20 2008 -0700
@@ -133,19 +133,7 @@
 COMPILE_DONE    = && { echo Done with $<; }
 endif
 
-# A list of directories under which all source code are built without -KPIC/-Kpic
-# flag. Performance measurements show that compiling GC related code will
-# dramatically reduce the gc pause time. See bug 6454213 for more details.
-
-include $(GAMMADIR)/make/scm.make
-
-NONPIC_DIRS  = memory oops gc_implementation gc_interface 
-NONPIC_DIRS  := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir))
-# Look for source code under NONPIC_DIRS
-NONPIC_FILES := $(foreach dir,$(NONPIC_DIRS),\
-                 $(shell find $(dir) \( $(SCM_DIRS) \) -prune -o \
-		  -name '*.cpp' -print))
-NONPIC_OBJ_FILES := $(notdir $(subst .cpp,.o,$(NONPIC_FILES)))
+include $(GAMMADIR)/make/defs.make
 
 # Sun compiler for 64 bit Solaris does not support building non-PIC object files.
 ifdef LP64