diff -u -r ../work-orig/corba/make/common/Defs-bsd.gmk ./corba/make/common/Defs-bsd.gmk
--- ../work-orig/corba/make/common/Defs-bsd.gmk	2010-11-04 21:49:08.000000000 +0800
+++ ./corba/make/common/Defs-bsd.gmk	2010-11-04 21:53:16.000000000 +0800
@@ -90,7 +90,11 @@
 CFLAGS_REQUIRED_i586    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
 ifeq ($(OS_VENDOR),Apple)
   # 16-byte stack re-alignment on 32-bit Darwin
-  CFLAGS_REQUIRED_i586 += -mstackrealign
+  CFLAGS_REQUIRED_i586 += -mstackrealign -m32
+  LDFLAGS_COMMON_i586 += -m32
+
+  CFLAGS_REQUIRED_amd64 += -m64
+  LDFLAGS_COMMON_amd64 += -m64
 endif
 CFLAGS_REQUIRED_ia64    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
 CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
diff -u -r ../work-orig/hotspot/make/bsd/makefiles/defs.make ./hotspot/make/bsd/makefiles/defs.make
--- ../work-orig/hotspot/make/bsd/makefiles/defs.make	2010-11-04 21:49:10.000000000 +0800
+++ ./hotspot/make/bsd/makefiles/defs.make	2010-11-04 21:57:49.000000000 +0800
@@ -30,6 +30,33 @@
 
 # Need PLATFORM (os-arch combo names) for jdk and hotspot, plus libarch name
 ARCH:=$(shell uname -m)
+OS_VENDOR:=$(shell uname -s)
+ifeq ($(OS_VENDOR),Darwin)
+  # Darwin returns i386 for 32bit kernel mode and x86_64 for 64bit kernel mode
+  # regardless of the actual supported architecture.
+  ifndef UNAME_MACHINE
+    # UNAME_MACHINE not passed in
+    ifdef ARCH_DATA_MODEL
+      # Overrides ARCH with proper value when ARCH_DATA_MODEL passed
+      ifeq ($(ARCH_DATA_MODEL), 32)
+        UNAME_MACHINE = i386
+      else
+        UNAME_MACHINE = amd64
+      endif
+
+    else
+      # Defaults to 64bit on Darwin 9+ when ARCH_DATA_MODEL is not passed
+      ifneq (,$(findstring $(shell uname -r | cut -d '.' -f1), 9 10))
+        UNAME_MACHINE = amd64
+      else
+        UNAME_MACHINE = i386
+      endif
+    endif
+  endif
+  
+  ARCH = $(UNAME_MACHINE)
+endif
+
 PATH_SEP = :
 ifeq ($(LP64), 1)
   ARCH_DATA_MODEL ?= 64
@@ -72,8 +99,8 @@
   HS_ARCH            = sparc
 endif
 
-# x86_64
-ifeq ($(ARCH), x86_64) 
+# amd64
+ifeq ($(ARCH), amd64) 
   ifeq ($(ARCH_DATA_MODEL), 64)
     ARCH_DATA_MODEL = 64
     MAKE_ARGS       += LP64=1
@@ -85,46 +112,54 @@
     PLATFORM        = bsd-i586
     VM_PLATFORM     = bsd_i486
     HS_ARCH         = x86
-    # We have to reset ARCH to i686 since SRCARCH relies on it
-    ARCH            = i686   
+    # We have to reset ARCH to i386 since SRCARCH relies on it
+    ARCH            = i386   
   endif
 endif
 
-# amd64
-ifeq ($(ARCH), amd64)
-  ARCH_DATA_MODEL = 64
-  MAKE_ARGS       += LP64=1
-  PLATFORM        = bsd-amd64
-  VM_PLATFORM     = bsd_amd64
-  HS_ARCH         = x86
-endif
-
 # i386
 ifeq ($(ARCH), i386)
-  ARCH_DATA_MODEL  = 32
-  PLATFORM         = bsd-i586
-  VM_PLATFORM      = bsd_i486
-  HS_ARCH          = x86
+  ifeq ($(ARCH_DATA_MODEL), 64)
+    ARCH_DATA_MODEL = 64
+    MAKE_ARGS       += LP64=1
+    PLATFORM        = bsd-amd64
+    VM_PLATFORM     = bsd_amd64
+    HS_ARCH         = x86
+    # We have to reset ARCH to amd64 since SRCARCH relies on it
+    ARCH            = amd64
+  else
+    ARCH_DATA_MODEL  = 32
+    PLATFORM         = bsd-i586
+    VM_PLATFORM      = bsd_i486
+    HS_ARCH          = x86
+  endif
 endif
 
-# i486
-ifeq ($(ARCH), i486)
+# ARM
+ifeq ($(ARCH), arm)
   ARCH_DATA_MODEL  = 32
-  PLATFORM         = bsd-i586
-  VM_PLATFORM      = bsd_i486
-  HS_ARCH          = x86
+  PLATFORM         = bsd-arm
+  VM_PLATFORM      = bsd_arm
+  HS_ARCH          = arm
 endif
 
-# i686
-ifeq ($(ARCH), i686)
+# PPC
+ifeq ($(ARCH), ppc)
   ARCH_DATA_MODEL  = 32
-  PLATFORM         = bsd-i586
-  VM_PLATFORM      = bsd_i486
-  HS_ARCH          = x86
+  PLATFORM         = bsd-ppc
+  VM_PLATFORM      = bsd_ppc
+  HS_ARCH          = ppc
 endif
 
 JDK_INCLUDE_SUBDIR=bsd
 
+# Library suffix
+ifeq ($(OS_VENDOR),Darwin)
+  LIBRARY_SUFFIX=dylib
+else
+  LIBRARY_SUFFIX=so
+endif
+
 # FIXUP: The subdirectory for a debug build is NOT the same on all platforms
 VM_DEBUG=jvmg
 
@@ -132,22 +167,32 @@
 
 # client and server subdirectories have symbolic links to ../libjsig.so
 EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
-
 EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
+
+ifndef BUILD_CLIENT_ONLY
 EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
 EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
+endif
+
 ifneq ($(ZERO_BUILD), true)
   ifeq ($(ARCH_DATA_MODEL), 32)
     EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
     EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
     EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
-    EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX)
-    EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar 
-  else
-    ifeq ($(ARCH),ia64)
-      else
-        EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX)
-        EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
-    endif
   endif
 endif
+
+# Serviceability Binaries
+# No SA Support for PPC, IA64, ARM or zero and Darwin
+ifneq ($(OS_VENDOR),Darwin)
+ADD_SA_BINARIES/x86   = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
+                        $(EXPORT_LIB_DIR)/sa-jdi.jar
+endif
+ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
+                        $(EXPORT_LIB_DIR)/sa-jdi.jar
+ADD_SA_BINARIES/ppc   =
+ADD_SA_BINARIES/ia64  =
+ADD_SA_BINARIES/arm   =
+ADD_SA_BINARIES/zero  =
+
+EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
diff -u -r ../work-orig/hotspot/make/bsd/makefiles/gcc.make ./hotspot/make/bsd/makefiles/gcc.make
--- ../work-orig/hotspot/make/bsd/makefiles/gcc.make	2010-11-04 21:49:10.000000000 +0800
+++ ./hotspot/make/bsd/makefiles/gcc.make	2010-11-04 21:53:17.000000000 +0800
@@ -76,9 +76,6 @@
 ifeq ($(OS_VENDOR), Darwin)
   # Ineffecient 16-byte stack re-alignment on Darwin/IA32
   ARCHFLAG/i486 += -mstackrealign
-
-  # -arch compiler flag required for x64_64
-  ARCHFLAGS/amd64 += -arch x86_64
 endif
 
 CFLAGS     += $(ARCHFLAG)
@@ -183,6 +180,13 @@
 
   # Keep symbols even they are not used
   #AOUT_FLAGS += -export-dynamic
+
+  ifeq ($(ARCH_DATA_MODEL), 32)
+    LFLAGS += -m32
+  else
+    LFLAGS += -m64
+  endif
+
 else
   # Enable linker optimization
   LFLAGS += -Xlinker -O1
diff -u -r ../work-orig/jdk/make/common/Defs-bsd.gmk ./jdk/make/common/Defs-bsd.gmk
--- ../work-orig/jdk/make/common/Defs-bsd.gmk	2010-11-04 21:49:12.000000000 +0800
+++ ./jdk/make/common/Defs-bsd.gmk	2010-11-04 21:53:20.000000000 +0800
@@ -100,7 +100,11 @@
 CFLAGS_REQUIRED_i586    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
 ifeq ($(OS_VENDOR),Apple)
   # 16-byte stack re-alignment on 32-bit Darwin
-  CFLAGS_REQUIRED_i586 += -mstackrealign
+  CFLAGS_REQUIRED_i586 += -mstackrealign -m32
+  LDFLAGS_COMMON_i586 += -m32
+
+  CFLAGS_REQUIRED_amd64 += -m64
+  LDFLAGS_COMMON_amd64 += -m64
 endif
 CFLAGS_REQUIRED_ia64    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
 CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
diff -u -r ../work-orig/jdk/make/common/shared/Platform.gmk ./jdk/make/common/shared/Platform.gmk
--- ../work-orig/jdk/make/common/shared/Platform.gmk	2010-11-04 21:49:12.000000000 +0800
+++ ./jdk/make/common/shared/Platform.gmk	2010-11-04 21:53:20.000000000 +0800
@@ -308,6 +308,32 @@
   OS_VERSION := $(shell uname -r)
   # Arch and OS name/version
   mach := $(shell uname -m)
+  ifeq ($(OS_VENDOR),Apple)
+    # Darwin returns i386 for 32bit kernel mode and x86_64 for 64bit kernel mode
+    # regardless of the actual supported architecture.
+    ifndef UNAME_MACHINE
+      # UNAME_MACHINE not passed in
+      ifdef ARCH_DATA_MODEL
+        # Overrides ARCH with proper value when ARCH_DATA_MODEL passed
+        ifeq ($(ARCH_DATA_MODEL), 32)
+          UNAME_MACHINE = i386
+        else
+          UNAME_MACHINE = amd64
+        endif
+
+      else
+        # Defaults to 64bit on Darwin 9+ when ARCH_DATA_MODEL is not passed
+        ifneq (,$(findstring $(shell echo $(OS_VERSION) | cut -d '.' -f1), 9 10))
+          UNAME_MACHINE = amd64
+        else
+          UNAME_MACHINE = i386
+        endif
+      endif
+    endif
+    
+    mach = $(UNAME_MACHINE)
+  endif
+
   archExpr = case "$(mach)" in \
                 i[3-9]86) \
                     echo i586 \
@@ -319,11 +345,13 @@
   ARCH        := $(shell $(archExpr) )
   ARCH_FAMILY := $(ARCH)
 
-  # i586 and sparc are 32 bit, amd64 and sparc64 are 64
-  ifneq (,$(findstring $(ARCH), i586 sparc))
-    ARCH_DATA_MODEL=32
-  else
-    ARCH_DATA_MODEL=64
+  ifndef ARCH_DATA_MODEL
+    # i586 and sparc are 32 bit, amd64 and sparc64 are 64
+    ifneq (,$(findstring $(ARCH), i586 sparc))
+      ARCH_DATA_MODEL=32
+    else
+      ARCH_DATA_MODEL=64
+    endif
   endif
 
   # Need to maintain the jre/lib/i386 location for 32-bit Intel
