April Chin wrote:
> From: James Carlson <james.d.carlson at sun.com>
> > Roland Mainz writes:
> > > BTW: The "real" fix for this problem is to compile the shell scripts -
> > > in that case the compiled shell script /usr/bin/sleep will just appear
> > > as "just another binary application" in the $ ps -ef # output ...
> > > ... the trouble is that the matching kernel module ("shbinexec") was
> > > added to OS/Net in B106 and we need some builds before we're able to
> > > request a flag day and make the availablity of the kernel module a
> > > requirement... ;-/
> >
> > I'd guess that the flag day is for BFU and not for the build machines
> > themselves: you would need to install at least 106 before BFU-ing any
> > higher.
> 
> Isn't the new /bin/shcomp, introduced in build 106,
> needed on the build machines to compile the ksh93 script for sleep?
> In that case, build 106 would be required for build machines also.

Attached (as
"ksh93_integration_cr6793120_sleep_wrong_processname20090120_001.diff.txt")
is a patch which should fix the problem. The patch changes the
"alias.sh" wrapper into a C program with the same functionality (using
libshell (which is ksh93's code as shared library)), having a similar
affect as the originally planned use of compiled shell scripts (which
can't be currently used since /usr/bin/shcomp was added in B106 (= too
early to make it a requirement on the build machines) and because
something weired is wrong with the "shbinexec" kernel module (I'll debug
that once I have my claws on a SXCE 106 DVD image)).

Casper: Can you sponsor this putback ?

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) roland.mainz at nrubsig.org
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)
-------------- next part --------------
Index: src/cmd/ksh/builtins/alias.sh
===================================================================
--- src/cmd/ksh/builtins/alias.sh       (revision 1374)
+++ src/cmd/ksh/builtins/alias.sh       (working copy)
@@ -1,51 +0,0 @@
-#!/usr/bin/ksh93
-
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-# Get name of builtin
-builtin basename
-typeset cmd="$(basename "$0")"
-
-# If the requested command is not an alias load it explicitly
-# to make sure it is not bound to a path (those built-ins which
-# are mapped via shell aliases point to commands which are
-# "special shell built-ins" which cannot be bound to a specific
-# PATH element) - otherwise we may execute the wrong command
-# if an executable with the same name sits in a PATH element
-# before /usr/bin (e.g. /usr/xpg4/bin/ls would be executed
-# before /usr/bin/ls if would look like
-# PATH=/usr/xpg4/bin:/usr/bin).
-if [[ "${cmd}" != ~(Elr)(alias|unalias|command) ]] && ! alias "${cmd}" 
>/dev/null 2>&1 ; then
-       builtin "${cmd}"
-fi
-
-# command is a keyword and needs to be handled separately
-if [[ "${cmd}" == "command" ]] ; then
-       command "$@"
-else
-       "${cmd}" "$@"
-fi
Index: src/cmd/ksh/builtins/alias.c
===================================================================
--- src/cmd/ksh/builtins/alias.c        (revision 0)
+++ src/cmd/ksh/builtins/alias.c        (revision 0)
@@ -0,0 +1,101 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * alias.c is a C version of the alias.sh wrapper (which links ksh
+ * builtins to commands in /usr/bin/, e.g. calling this wrapper as
+ * /usr/bin/alias will call the ksh "alias" builtin, running it as
+ * /usr/bin/cut will call the ksh "cut" builtin etc.
+ */
+
+#include <shell.h>
+#include <nval.h>
+#include <stdio.h>
+
+/* Builtin script, original derived from alias.sh */
+static const char *script = "\n"
+/* Get name of builtin */
+"builtin basename\n"
+"typeset cmd=\"$(basename \"$0\")\"\n"
+/*
+ * If the requested command is not an alias load it explicitly
+ * to make sure it is not bound to a path (those built-ins which
+ * are mapped via shell aliases point to commands which are
+ * "special shell built-ins" which cannot be bound to a specific
+ * PATH element) - otherwise we may execute the wrong command
+ * if an executable with the same name sits in a PATH element
+ * before /usr/bin (e.g. /usr/xpg4/bin/ls would be executed
+ * before /usr/bin/ls if would look like
+ * PATH=/usr/xpg4/bin:/usr/bin).
+ */
+"if [[ \"${cmd}\" != ~(Elr)(alias|unalias|command) ]] && "
+       "! alias \"${cmd}\" >/dev/null 2>&1 ; then\n"
+"        builtin \"${cmd}\"\n"
+"fi\n"
+/* command is a keyword and needs to be handled separately */
+"if [[ \"${cmd}\" == \"command\" ]] ; then\n"
+"        command \"$...@\"\n"
+"else\n"
+"        \"${cmd}\" \"$...@\"\n"
+"fi\n"
+"exitval=$?";
+
+int
+main(int argc, char *argv[])
+{
+       int i;
+       Shell_t *shp;
+       Namval_t *np;
+       int exitval;
+
+       /*
+        * Create copy of |argv| array shifted by one position to
+        * emulate $ /usr/bin/sh <scriptname> <args1> <arg2> ... #.
+        * First position is set to "/usr/bin/sh" since other
+        * values may trigger special shell modes (e.g. *rsh* will
+        * trigger "restricted" shell mode etc.).
+        */
+       char *xargv[argc+2];
+       xargv[0] = "/usr/bin/sh";
+       xargv[1] = "scriptname";
+       for (i = 0; i < argc; i++) {
+               xargv[i+1] = argv[i];
+       }
+       xargv[i+1] = NULL;
+
+       shp = sh_init(argc+1, xargv, 0);
+       if (!shp)
+               error(ERROR_exit(1), "shell initialisation failed.");
+       (void) sh_trap(script, 0);
+
+       np = nv_open("exitval", shp->var_tree, 0);
+       if (!np)
+               error(ERROR_exit(1), "variable %s not found.", "exitval");
+       exitval = (int)nv_getnum(np);
+       nv_close(np);
+
+       return (exitval);
+}
Index: src/cmd/ksh/builtins/Makefile
===================================================================
--- src/cmd/ksh/builtins/Makefile       (revision 1374)
+++ src/cmd/ksh/builtins/Makefile       (working copy)
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 
@@ -63,14 +63,40 @@
 $(ROOTBIN)/%: $(ROOTBIN)/alias
        $(INS.link)
 
-# In the future we should replace the "cat" with a call to
-# "shcomp" to compile the script (for better performance).
-$(PROG): alias.sh
-       cat "alias.sh" >"$@"
+include ../../Makefile.cmd
 
-install: all $(ROOTALIASPROG)
+.KEEP_STATE:
 
+# Set common AST build flags (e.g., needed to support the math stuff).
+include ../../../Makefile.ast
+
+OBJECTS= \
+        alias.o
+
+SRCS=  $(OBJECTS:%.o=%.c)
+
+GROUP= bin
+LDLIBS += -lshell -last
+
+CPPFLAGS = \
+       $(DTEXTDOM) $(DTS_ERRNO) \
+       -I$(ROOT)/usr/include/ast
+
+CFLAGS += \
+       $(ASTCFLAGS)
+CFLAGS64 += \
+       $(ASTCFLAGS64)
+
+ROOTCMDDIR=$(ROOT)/usr/bin
+
+install: all $(ROOTCMD)
+
+$(PROG):       $(OBJECTS)
+       $(RM) alias
+       $(LINK.c) $(OBJECTS) -o $@ $(LDLIBS)
+       $(POST_PROCESS)
+
 clean clobber:
-       rm -f $(PROG)
+       rm -f $(PROG) $(OBJECTS)
 
-lint:
+lint _msg:

Reply via email to