Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 53423)
+++ /trunk/Config.kmk	(revision 53424)
@@ -2682,5 +2682,5 @@
 	$(VBOX_TSA_URL_ARGS) \
 	$(if $(strip $(2)),/d "$(strip $(2))",) \
-       $(3) \
+	$(3) \
 	$(1)
   ## Sign an executable image.
@@ -2722,5 +2722,5 @@
   #
   ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
-   VBOX_CERTIFICATE_SUBJECT_NAME ?= $(error You, need to set VBOX_CERTIFICATE_SUBJECT_NAME in LocalConfig.kmk.)
+   VBOX_CERTIFICATE_SUBJECT_NAME ?= $(error You need to set VBOX_CERTIFICATE_SUBJECT_NAME in LocalConfig.kmk.)
    VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= --sign "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
   else if1of ($(VBOX_SIGNING_MODE), release development)
@@ -2747,5 +2747,5 @@
 	--verbose=9 \
 	--force \
-       --file-list - \
+	--file-list - \
 	$(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
 	$(1) \
@@ -2758,11 +2758,45 @@
 	--verbose=9 \
 	--force \
-       --file-list - \
+	--file-list - \
 	$(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
 	$(1) -D $(1).codesign \
 	$(if $(2),--identifier "$(2)",)
 
+ else ifeq ($(KBUILD_HOST),solaris)
+  #
+  # Solaris code signing.
+  #
+
+  # There are three signing modes; 'test', 'development' and 'release'.
+  ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
+   VBOX_CERTIFICATE_FILE  ?= $(error You need to set VBOX_CERTIFICATE_FILE in LocalConfig.kmk.)
+   VBOX_TOKEN_NAME        ?= $(error You need to set VBOX_TOKEN_NAME in LocalConfig.kmk.)
+   VBOX_PIN_FILE          ?= $(error You need to set VBOX_PIN_FILE in LocalConfig.kmk.)
+  else if1of ($(VBOX_SIGNING_MODE), release development)
+   VBOX_CERTIFICATE_FILE  ?= $(PATH_ROOT)/oracle.pem
+   VBOX_TOKEN_NAME        ?= "Sun Software PKCS\#11 softtoken"
+   VBOX_PIN_FILE          ?= $(PATH_ROOT)/oracle.pin
+  else
+   $(error VBox: Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
+  endif
+  VBOX_CERTIFICATE_FILE_ARGS ?= -c $(VBOX_CERTIFICATE_FILE)
+  VBOX_TOKEN_NAME_ARGS       ?= -T $(VBOX_TOKEN_NAME)
+  VBOX_PIN_ARGS              ?= -P $(VBOX_PIN_FILE)
+
+  VBOX_ELFSIGN ?= elfsign
+
+  ## Commands for signing a driver image after link.
+  VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_ELF_FN,$(out)))
+  # Sign an ELF image.
+  # @param 1   The elf object file to sign.
+  VBOX_SIGN_ELF_FN ?= $(VBOX_ELFSIGN) \
+	sign \
+	$(VBOX_CERTIFICATE_FILE_ARGS) \
+	$(VBOX_TOKEN_NAME_ARGS) \
+	$(VBOX_PIN_ARGS) \
+	-e $(1)
+
  else
-  # Not Windows or mac os x build host, ignore.
+  # Not Windows, Mac OS X or Solaris build host, ignore.
   VBOX_SIGNING_MODE :=
  endif
@@ -3337,4 +3371,6 @@
   TEMPLATE_VBoxR0_CXXFLAGS.amd64 += -Wa,-xmodel=kernel
  endif
+ # Solaris driver signing.
+ TEMPLATE_VBoxR0_POST_CMDS          = $(VBOX_SIGN_DRIVER_CMDS)
 else
  TEMPLATE_VBoxR0_LDFLAGS            = -nostdlib -Bsymbolic -g
@@ -3515,4 +3551,5 @@
 TEMPLATE_VBOXR0DRV_CXXFLAGS.x86       = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
 TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64     = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
+TEMPLATE_VBOXR0DRV_POST_CMDS          = $(VBOX_SIGN_DRIVER_CMDS)
 endif # Solaris
 
