The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kern/makesyscalls.sh

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #! /bin/sh -
    2 #       $NetBSD: makesyscalls.sh,v 1.59 2005/12/03 17:04:36 christos Exp $
    3 #
    4 # Copyright (c) 1994, 1996, 2000 Christopher G. Demetriou
    5 # All rights reserved.
    6 #
    7 # Redistribution and use in source and binary forms, with or without
    8 # modification, are permitted provided that the following conditions
    9 # are met:
   10 # 1. Redistributions of source code must retain the above copyright
   11 #    notice, this list of conditions and the following disclaimer.
   12 # 2. Redistributions in binary form must reproduce the above copyright
   13 #    notice, this list of conditions and the following disclaimer in the
   14 #    documentation and/or other materials provided with the distribution.
   15 # 3. All advertising materials mentioning features or use of this software
   16 #    must display the following acknowledgement:
   17 #      This product includes software developed for the NetBSD Project
   18 #      by Christopher G. Demetriou.
   19 # 4. The name of the author may not be used to endorse or promote products
   20 #    derived from this software without specific prior written permission
   21 #
   22 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   23 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   24 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   25 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   26 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   27 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   28 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   29 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   30 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   31 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32 
   33 #       @(#)makesyscalls.sh     8.1 (Berkeley) 6/10/93
   34 
   35 set -e
   36 
   37 case $# in
   38     2)  ;;
   39     *)  echo "Usage: $0 config-file input-file" 1>&2
   40         exit 1
   41         ;;
   42 esac
   43 
   44 # the config file sets the following variables:
   45 #       sysnames        the syscall names file
   46 #       sysnumhdr       the syscall numbers file
   47 #       syssw           the syscall switch file
   48 #       sysarghdr       the syscall argument struct definitions
   49 #       compatopts      those syscall types that are for 'compat' syscalls
   50 #       switchname      the name for the 'struct sysent' we define
   51 #       namesname       the name for the 'const char *[]' we define
   52 #       constprefix     the prefix for the system call constants
   53 #       registertype    the type for register_t
   54 #       nsysent         the size of the sysent table
   55 #       sys_nosys       [optional] name of function called for unsupported
   56 #                       syscalls, if not sys_nosys()
   57 #
   58 # NOTE THAT THIS makesyscalls.sh DOES NOT SUPPORT 'SYSLIBCOMPAT'.
   59 
   60 # source the config file.
   61 sys_nosys="sys_nosys"   # default is sys_nosys(), if not specified otherwise
   62 . ./$1
   63 
   64 # tmp files:
   65 sysdcl="sysent.dcl"
   66 sysprotos="sys.protos"
   67 syscompat_pref="sysent."
   68 sysent="sysent.switch"
   69 sysnamesbottom="sysnames.bottom"
   70 
   71 trap "rm $sysdcl $sysprotos $sysent $sysnamesbottom" 0
   72 
   73 # Awk program (must support nawk extensions)
   74 # Use "awk" at Berkeley, "nawk" or "gawk" elsewhere.
   75 awk=${AWK:-awk}
   76 
   77 # Does this awk have a "toupper" function?
   78 have_toupper=`$awk 'BEGIN { print toupper("true"); exit; }' 2>/dev/null`
   79 
   80 # If this awk does not define "toupper" then define our own.
   81 if [ "$have_toupper" = TRUE ] ; then
   82         # Used awk (GNU awk or nawk) provides it
   83         toupper=
   84 else
   85         # Provide our own toupper()
   86         toupper='
   87 function toupper(str) {
   88         _toupper_cmd = "echo "str" |tr a-z A-Z"
   89         _toupper_cmd | getline _toupper_str;
   90         close(_toupper_cmd);
   91         return _toupper_str;
   92 }'
   93 fi
   94 
   95 # before handing it off to awk, make a few adjustments:
   96 #       (1) insert spaces around {, }, (, ), *, and commas.
   97 #       (2) get rid of any and all dollar signs (so that rcs id use safe)
   98 #
   99 # The awk script will deal with blank lines and lines that
  100 # start with the comment character (';').
  101 
  102 sed -e '
  103 s/\$//g
  104 :join
  105         /\\$/{a\
  106 
  107         N
  108         s/\\\n//
  109         b join
  110         }
  111 2,${
  112         /^#/!s/\([{}()*,]\)/ \1 /g
  113 }
  114 ' < $2 | $awk "
  115 $toupper
  116 BEGIN {
  117         # to allow nested #if/#else/#endif sets
  118         savedepth = 0
  119         # to track already processed syscalls
  120 
  121         sysnames = \"$sysnames\"
  122         sysprotos = \"$sysprotos\"
  123         sysnumhdr = \"$sysnumhdr\"
  124         sysarghdr = \"$sysarghdr\"
  125         switchname = \"$switchname\"
  126         namesname = \"$namesname\"
  127         constprefix = \"$constprefix\"
  128         registertype = \"$registertype\"
  129         if (!registertype) {
  130             registertype = \"register_t\"
  131         }
  132         nsysent = \"$nsysent\"
  133 
  134         sysdcl = \"$sysdcl\"
  135         syscompat_pref = \"$syscompat_pref\"
  136         sysent = \"$sysent\"
  137         sysnamesbottom = \"$sysnamesbottom\"
  138         sys_nosys = \"$sys_nosys\"
  139         infile = \"$2\"
  140 
  141         compatopts = \"$compatopts\"
  142         "'
  143 
  144         printf "/* \$NetBSD\$ */\n\n" > sysdcl
  145         printf "/*\n * System call switch table.\n *\n" > sysdcl
  146         printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
  147 
  148         ncompat = split(compatopts,compat)
  149         for (i = 1; i <= ncompat; i++) {
  150                 compat_upper[i] = toupper(compat[i])
  151 
  152                 printf "\n#ifdef %s\n", compat_upper[i] > sysent
  153                 printf "#define %s(func) __CONCAT(%s_,func)\n", compat[i], \
  154                     compat[i] > sysent
  155                 printf "#else\n" > sysent
  156                 printf "#define %s(func) %s\n", compat[i], sys_nosys > sysent
  157                 printf "#endif\n" > sysent
  158         }
  159 
  160         printf "\n#define\ts(type)\tsizeof(type)\n\n" > sysent
  161         printf "struct sysent %s[] = {\n",switchname > sysent
  162 
  163         printf "/* \$NetBSD\$ */\n\n" > sysnames
  164         printf "/*\n * System call names.\n *\n" > sysnames
  165         printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
  166 
  167         printf "\n/*\n * System call prototypes.\n */\n\n" > sysprotos
  168 
  169         printf "/* \$NetBSD\$ */\n\n" > sysnumhdr
  170         printf "/*\n * System call numbers.\n *\n" > sysnumhdr
  171         printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnumhdr
  172 
  173         printf "/* \$NetBSD\$ */\n\n" > sysarghdr
  174         printf "/*\n * System call argument lists.\n *\n" > sysarghdr
  175         printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarghdr
  176 }
  177 NR == 1 {
  178         sub(/ $/, "")
  179         printf " * created from%s\n */\n\n", $0 > sysdcl
  180         printf "#include <sys/cdefs.h>\n__KERNEL_RCSID(0, \"\$NetBSD\$\");\n\n" > sysdcl
  181 
  182         printf " * created from%s\n */\n\n", $0 > sysnames
  183         printf "#include <sys/cdefs.h>\n__KERNEL_RCSID(0, \"\$NetBSD\$\");\n\n" > sysnames
  184 
  185         # System call names are included by userland (kdump(1)), so
  186         # hide the include files from it.
  187         printf "#if defined(_KERNEL_OPT)\n" > sysnames
  188 
  189         printf "#endif /* _KERNEL_OPT */\n\n" > sysnamesbottom
  190         printf "const char *const %s[] = {\n",namesname > sysnamesbottom
  191 
  192         printf " * created from%s\n */\n\n", $0 > sysnumhdr
  193 
  194         printf " * created from%s\n */\n\n", $0 > sysarghdr
  195         printf "#ifndef _" constprefix "SYSCALL_H_\n" > sysnumhdr
  196         printf "#define _" constprefix "SYSCALL_H_\n\n" > sysnumhdr
  197         printf "#ifndef _" constprefix "SYSCALLARGS_H_\n" > sysarghdr
  198         printf "#define _" constprefix "SYSCALLARGS_H_\n\n" > sysarghdr
  199         printf "#ifdef\tsyscallarg\n" > sysarghdr
  200         printf "#undef\tsyscallarg\n" > sysarghdr
  201         printf "#endif\n\n" > sysarghdr
  202         printf "#define\tsyscallarg(x)\t\t\t\t\t\t\t\\\n" > sysarghdr
  203         printf "\tunion {\t\t\t\t\t\t\t\t\\\n" > sysarghdr
  204         printf "\t\t%s pad;\t\t\t\t\t\t\\\n", registertype > sysarghdr
  205         printf "\t\tstruct { x datum; } le;\t\t\t\t\t\\\n" > sysarghdr
  206         printf "\t\tstruct { /* LINTED zero array dimension */\t\t\\\n" \
  207                 > sysarghdr
  208         printf "\t\t\tint8_t pad[  /* CONSTCOND */\t\t\t\\\n" > sysarghdr
  209         printf "\t\t\t\t(sizeof (%s) < sizeof (x))\t\\\n", \
  210                 registertype > sysarghdr
  211         printf "\t\t\t\t? 0\t\t\t\t\t\\\n" > sysarghdr
  212         printf "\t\t\t\t: sizeof (%s) - sizeof (x)];\t\\\n", \
  213                 registertype > sysarghdr
  214         printf "\t\t\tx datum;\t\t\t\t\t\\\n" > sysarghdr
  215         printf "\t\t} be;\t\t\t\t\t\t\t\\\n" > sysarghdr
  216         printf "\t}\n" > sysarghdr
  217         next
  218 }
  219 NF == 0 || $1 ~ /^;/ {
  220         next
  221 }
  222 $0 ~ /^%%$/ {
  223         intable = 1
  224         next
  225 }
  226 $1 ~ /^#[       ]*include/ {
  227         print > sysdcl
  228         print > sysnames
  229         next
  230 }
  231 $1 ~ /^#/ && !intable {
  232         print > sysdcl
  233         print > sysnames
  234         next
  235 }
  236 $1 ~ /^#/ && intable {
  237         if ($1 ~ /^#[   ]*if/) {
  238                 savedepth++
  239                 savesyscall[savedepth] = syscall
  240         }
  241         if ($1 ~ /^#[   ]*else/) {
  242                 if (savedepth <= 0) {
  243                         printf("%s: line %d: unbalanced #else\n", \
  244                             infile, NR)
  245                         exit 1
  246                 }
  247                 syscall = savesyscall[savedepth]
  248         }
  249         if ($1 ~ /^#[       ]*endif/) {
  250                 if (savedepth <= 0) {
  251                         printf("%s: line %d: unbalanced #endif\n", \
  252                             infile, NR)
  253                         exit 1
  254                 }
  255                 savedepth--
  256         }
  257         print > sysent
  258         print > sysarghdr
  259         print > sysnumhdr
  260         print > sysprotos
  261         print > sysnamesbottom
  262         next
  263 }
  264 syscall != $1 {
  265         printf "%s: line %d: syscall number out of sync at %d\n", \
  266            infile, NR, syscall
  267         printf "line is:\n"
  268         print
  269         exit 1
  270 }
  271 function parserr(was, wanted) {
  272         printf "%s: line %d: unexpected %s (expected %s)\n", \
  273             infile, NR, was, wanted
  274         printf "line is:\n"
  275         print
  276         exit 1
  277 }
  278 function parseline() {
  279         f=3                     # toss number and type
  280         sycall_flags="0"
  281         if ($NF != "}") {
  282                 funcalias=$NF
  283                 end=NF-1
  284         } else {
  285                 funcalias=""
  286                 end=NF
  287         }
  288         if ($f == "MPSAFE") {           # allow for MP-safe syscalls
  289                 sycall_flags = sprintf("SYCALL_MPSAFE | %s", sycall_flags)
  290                 f++
  291         }
  292         if ($f ~ /^[a-z0-9_]*$/) {      # allow syscall alias
  293                 funcalias=$f
  294                 f++
  295         }
  296         if ($f != "{")
  297                 parserr($f, "{")
  298         f++
  299         if ($end != "}")
  300                 parserr($end, "}")
  301         end--
  302         if ($end != ";")
  303                 parserr($end, ";")
  304         end--
  305         if ($end != ")")
  306                 parserr($end, ")")
  307         end--
  308 
  309         returntype = oldf = "";
  310         do {
  311                 if (returntype != "" && oldf != "*")
  312                         returntype = returntype" ";
  313                 returntype = returntype$f;
  314                 oldf = $f;
  315                 f++
  316         } while (f < (end - 1) && $(f+1) != "(");
  317         if (f == (end - 1)) {
  318                 parserr($f, "function argument definition (maybe \"(\"?)");
  319         }
  320 
  321         funcname=$f
  322         if (funcalias == "") {
  323                 funcalias=funcname
  324                 sub(/^([^_]+_)*sys_/, "", funcalias)
  325         }
  326         f++
  327 
  328         if ($f != "(")
  329                 parserr($f, ")")
  330         f++
  331 
  332         argc=0;
  333         if (f == end) {
  334                 if ($f != "void")
  335                         parserr($f, "argument definition")
  336                 isvarargs = 0;
  337                 varargc = 0;
  338                 return
  339         }
  340 
  341         # some system calls (open() and fcntl()) can accept a variable
  342         # number of arguments.  If syscalls accept a variable number of
  343         # arguments, they must still have arguments specified for
  344         # the remaining argument "positions," because of the way the
  345         # kernel system call argument handling works.
  346         #
  347         # Indirect system calls, e.g. syscall(), are exceptions to this
  348         # rule, since they are handled entirely by machine-dependent code
  349         # and do not need argument structures built.
  350 
  351         isvarargs = 0;
  352         while (f <= end) {
  353                 if ($f == "...") {
  354                         f++;
  355                         isvarargs = 1;
  356                         varargc = argc;
  357                         continue;
  358                 }
  359                 argc++
  360                 argtype[argc]=""
  361                 oldf=""
  362                 while (f < end && $(f+1) != ",") {
  363                         if (argtype[argc] != "" && oldf != "*")
  364                                 argtype[argc] = argtype[argc]" ";
  365                         argtype[argc] = argtype[argc]$f;
  366                         oldf = $f;
  367                         f++
  368                 }
  369                 if (argtype[argc] == "")
  370                         parserr($f, "argument definition")
  371                 argname[argc]=$f;
  372                 f += 2;                 # skip name, and any comma
  373         }
  374         # must see another argument after varargs notice.
  375         if (isvarargs) {
  376                 if (argc == varargc && $2 != "INDIR")
  377                         parserr($f, "argument definition")
  378         } else
  379                 varargc = argc;
  380 }
  381 
  382 function printproto(wrap) {
  383         printf("/* syscall: \"%s%s\" ret: \"%s\" args:", wrap, funcalias,
  384             returntype) > sysnumhdr
  385         for (i = 1; i <= varargc; i++)
  386                 printf(" \"%s\"", argtype[i]) > sysnumhdr
  387         if (isvarargs)
  388                 printf(" \"...\"") > sysnumhdr
  389         printf(" */\n") > sysnumhdr
  390         printf("#define\t%s%s%s\t%d\n\n", constprefix, wrap, funcalias,
  391             syscall) > sysnumhdr
  392 }
  393 
  394 function putent(nodefs, compatwrap) {
  395         # output syscall declaration for switch table.  INDIR functions
  396         # get none, since they always have sys_nosys() for their table
  397         # entries.
  398         if (nodefs != "INDIR") {
  399                 prototype = "(struct lwp *, void *, register_t *)"
  400                 if (compatwrap == "")
  401                         proto = sprintf("int\t%s%s;\n", funcname, prototype);
  402                 else
  403                         proto = sprintf("int\t%s_%s%s;\n", compatwrap,
  404                             funcname, prototype);
  405                 if (sysmap[proto] != 1) {
  406                         sysmap[proto] = 1;
  407                         print proto > sysprotos;
  408                 }
  409         }
  410 
  411         # output syscall switch entry
  412         if (nodefs == "INDIR") {
  413                 printf("\t{ 0, 0, %s,\n\t    %s },\t\t\t/* %d = %s (indir) */\n", \
  414                     sycall_flags, sys_nosys, syscall, funcalias) > sysent
  415         } else {
  416 #               printf("\t{ { %d", argc) > sysent
  417 #               for (i = 1; i <= argc; i++) {
  418 #                       if (i == 5)             # wrap the line
  419 #                               printf(",\n\t    ") > sysent
  420 #                       else
  421 #                               printf(", ") > sysent
  422 #                       printf("s(%s)", argtypenospc[i]) > sysent
  423 #               }
  424                 printf("\t{ %d, ", argc) > sysent
  425                 if (argc == 0)
  426                         printf("0") > sysent
  427                 else if (compatwrap == "")
  428                         printf("s(struct %s_args)", funcname) > sysent
  429                 else
  430                         printf("s(struct %s_%s_args)", compatwrap,
  431                             funcname) > sysent
  432                 if (compatwrap == "")
  433                         wfn = sprintf("%s", funcname);
  434                 else
  435                         wfn = sprintf("%s(%s)", compatwrap, funcname);
  436                 printf(", %s,\n\t    %s },", sycall_flags, wfn) > sysent
  437                 for (i = 0; i < (33 - length(wfn)) / 8; i++)
  438                         printf("\t") > sysent
  439                 if (compatwrap == "")
  440                         printf("/* %d = %s */\n", syscall, funcalias) > sysent
  441                 else
  442                         printf("/* %d = %s %s */\n", syscall, compatwrap,
  443                             funcalias) > sysent
  444         }
  445 
  446         # output syscall name for names table
  447         if (compatwrap == "")
  448                 printf("\t\"%s\",\t\t\t/* %d = %s */\n", funcalias, syscall,
  449                     funcalias) > sysnamesbottom
  450         else
  451                 printf("\t\"%s_%s\",\t/* %d = %s %s */\n", compatwrap,
  452                     funcalias, syscall, compatwrap, funcalias) > sysnamesbottom
  453 
  454         # output syscall number of header, if appropriate
  455         if (nodefs == "" || nodefs == "NOARGS" || nodefs == "INDIR") {
  456                 # output a prototype, to be used to generate lint stubs in
  457                 # libc.
  458                 printproto("")
  459 
  460         } else if (nodefs == "COMPAT") {
  461                 # Just define the syscall number with a comment.  These
  462                 # may be used by compatibility stubs in libc.
  463                 printproto(compatwrap "_")
  464         } else if (nodefs != "NODEF")
  465                 printf("\t\t\t\t/* %d is %s %s */\n\n", syscall,
  466                     compatwrap, funcalias) > sysnumhdr
  467 
  468         # output syscall argument structure, if it has arguments
  469         if (argc != 0 && nodefs != "NOARGS" && nodefs != "INDIR") {
  470                 if (compatwrap == "")
  471                         printf("\nstruct %s_args {\n", funcname) > sysarghdr
  472                 else
  473                         printf("\nstruct %s_%s_args {\n", compatwrap,
  474                             funcname) > sysarghdr
  475                 for (i = 1; i <= argc; i++)
  476                         printf("\tsyscallarg(%s) %s;\n", argtype[i],
  477                             argname[i]) > sysarghdr
  478                 printf("};\n") > sysarghdr
  479         }
  480 }
  481 $2 == "STD" {
  482         parseline()
  483         putent("", "");
  484         syscall++
  485         next
  486 }
  487 $2 == "NODEF" || $2 == "NOARGS" || $2 == "INDIR" {
  488         parseline()
  489         putent($2, "")
  490         syscall++
  491         next
  492 }
  493 $2 == "OBSOL" || $2 == "UNIMPL" || $2 == "EXCL" {
  494         if ($2 == "OBSOL")
  495                 comment="obsolete"
  496         else if ($2 == "EXCL")
  497                 comment="excluded"
  498         else
  499                 comment="unimplemented"
  500         for (i = 3; i <= NF; i++)
  501                 comment=comment " " $i
  502 
  503         printf("\t{ 0, 0, 0,\n\t    %s },\t\t\t/* %d = %s */\n", \
  504             sys_nosys, syscall, comment) > sysent
  505         printf("\t\"#%d (%s)\",\t\t/* %d = %s */\n", \
  506             syscall, comment, syscall, comment) > sysnamesbottom
  507         if ($2 != "UNIMPL")
  508                 printf("\t\t\t\t/* %d is %s */\n", syscall, comment) > sysnumhdr
  509         syscall++
  510         next
  511 }
  512 {
  513         for (i = 1; i <= ncompat; i++) {
  514                 if ($2 == compat_upper[i]) {
  515                         parseline();
  516                         putent("COMPAT", compat[i])
  517                         syscall++
  518                         next
  519                 }
  520         }
  521         printf("%s: line %d: unrecognized keyword %s\n", infile, NR, $2)
  522         exit 1
  523 }
  524 END {
  525         maxsyscall = syscall
  526         if (nsysent) {
  527                 if (syscall > nsysent) {
  528                         printf("%s: line %d: too many syscalls [%d > %d]\n", infile, NR, syscall, nsysent)
  529                         exit 1
  530                 }
  531                 while (syscall < nsysent) {
  532                         printf("\t{ 0, 0, 0,\n\t    %s },\t\t\t/* %d = filler */\n", \
  533                             sys_nosys, syscall) > sysent
  534                         syscall++
  535                 }
  536         }
  537         printf("};\n\n") > sysent
  538         printf("};\n") > sysnamesbottom
  539         printf("#define\t%sMAXSYSCALL\t%d\n", constprefix, maxsyscall) > sysnumhdr
  540         if (nsysent)
  541                 printf("#define\t%sNSYSENT\t%d\n", constprefix, nsysent) > sysnumhdr
  542 } '
  543 
  544 cat $sysprotos >> $sysarghdr
  545 echo "#endif /* _${constprefix}SYSCALL_H_ */" >> $sysnumhdr
  546 echo "#endif /* _${constprefix}SYSCALLARGS_H_ */" >> $sysarghdr
  547 cat $sysdcl $sysent > $syssw
  548 cat $sysnamesbottom >> $sysnames
  549 
  550 #chmod 444 $sysnames $sysnumhdr $syssw

Cache object: 804367c96244ba65a4b71900d8024fc5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.