[CRIU] [PATCH 13/13] syscalls: Change syscalls generating script to shell one

Cyrill Gorcunov gorcunov at openvz.org
Tue Apr 17 17:55:48 EDT 2012


I would appreciate if someone will help to simplify
it more.

In particular this script doesn't allow the syscalls
template file to have only two rows but require four
rows to present.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 Makefile.syscall   |    4 ++--
 syscalls-x86-64.pl |   51 ---------------------------------------------------
 syscalls-x86-64.sh |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 48 insertions(+), 53 deletions(-)
 delete mode 100644 syscalls-x86-64.pl
 create mode 100644 syscalls-x86-64.sh

diff --git a/Makefile.syscall b/Makefile.syscall
index ac180da..42fbae7 100644
--- a/Makefile.syscall
+++ b/Makefile.syscall
@@ -6,7 +6,7 @@ SYS-CODES	:= include/syscall-codes.h
 SYS-PROTO	:= include/syscall.h
 
 SYS-ASM		:= syscall-x86-64.S
-SYS-GEN		:= syscalls-x86-64.pl
+SYS-GEN		:= syscalls-x86-64.sh
 
 SYS-OBJ		:= $(patsubst %.S,%.o,$(SYS-ASM))
 
@@ -14,7 +14,7 @@ SYS-FLAGS	:= -pie -Wstrict-prototypes -D__ASSEMBLY__ -nostdlib -fomit-frame-poin
 
 $(SYS-ASM): $(SYS-GEN) $(SYS-DEF) $(SYS-ASM-COMMON) $(SYS-TYPES)
 	$(E) "  GEN     " $@
-	$(Q) $(PERL)			\
+	$(Q) $(SH)			\
 		$(SYS-GEN)		\
 		$(SYS-DEF)		\
 		$(SYS-CODES)		\
diff --git a/syscalls-x86-64.pl b/syscalls-x86-64.pl
deleted file mode 100644
index f751869..0000000
--- a/syscalls-x86-64.pl
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl -w
-
-my($in, $codes, $protos, $asm, $asmcommon, $proto_types) = @ARGV;
-
-open(IN, "< $in") or die "$0: cannot open: $in\n";
-open(CODES, "> $codes") or die "$0: cannot open: $codes\n";
-open(PROTOS, "> $protos") or die "$0: cannot open: $protos\n";
-open(ASM, "> $asm") or die "$0: cannot open: $asm\n";
-
-$codes =~ s/include\///g;
-$protos =~ s/include\///g;
-$proto_types =~ s/include\///g;
-
-print ASM "/* Autogenerated, don't edit */\n";
-print ASM "#include \"$codes\"\n\n";
-print ASM "#include \"$asmcommon\"\n";
-
-my($codes_def, $protos_def) = ($codes, $protos);
-
-$codes_def =~ s/[\s|\t|\-|\.|\/]/_/g;
-$protos_def =~ s/[\s|\t|\-|\.|\/]/_/g;
-
-print CODES  "/* Autogenerated, don't edit */\n#ifndef $codes_def\n#define $codes_def\n";
-print PROTOS "/* Autogenerated, don't edit */\n#ifndef $protos_def\n#define $protos_def\n";
-print PROTOS "#include \"$proto_types\"\n";
-print PROTOS "#include \"$codes\"\n";
-
-while (defined($line = <IN>)) {
-	chomp $line;
-	$line =~ s/^\s+//;
-	$line =~ s/\s*\#.*$//;
-	next if ($line eq '');
-
-	my(@field) = split(/\t+/, $line);
-
-	if ($#field >= 1) {
-		print CODES "#define $field[0] $field[1]\n";
-	}
-
-	if ($#field >= 2) {
-		print PROTOS "extern long $field[2]$field[3];\n";
-		print ASM "SYSCALL($field[2], $field[0])\n";
-	}
-}
-
-print CODES "#endif /* $codes_def */\n";
-print PROTOS "#endif /* $protos_def */\n";
-
-close(IN);
-close(CODES);
-close(PROTOS);
diff --git a/syscalls-x86-64.sh b/syscalls-x86-64.sh
new file mode 100644
index 0000000..cc1be0d
--- /dev/null
+++ b/syscalls-x86-64.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+in=$1
+codesout=$2
+codes=`echo $2 | sed -e 's/include\///g'`
+protosout=$3
+protos=`echo $3 | sed -e 's/include\///g'`
+asmout=$4
+asmcommon=$5
+prototypes=`echo $6 | sed -e 's/include\///g'`
+
+codesdef=`echo $codes | tr "[[:space:]].-" _`
+protosdef=`echo $protos | tr "[[:space:]].-" _`
+
+echo "/* Autogenerated, don't edit */"	>  $codesout
+echo "#ifndef $codesdef"		>> $codesout
+echo "#define $codesdef"		>> $codesout
+
+echo "/* Autogenerated, don't edit */"	>  $protosout
+echo "#ifndef $protosdef"		>> $protosout
+echo "#define $protosdef"		>> $protosout
+echo "#include \"$prototypes\""		>> $protosout
+echo "#include \"$codes\""		>> $protosout
+
+echo "/* Autogenerated, don't edit */"	>  $asmout
+echo "#include \"$codes\""		>> $asmout
+echo "#include \"$asmcommon\""		>> $asmout
+
+(
+while read line
+do
+	line=`echo $line | sed -e 's/^ *//g' | sed -e '/^\#/d' | sed -e 's/\t\{1,\}/|/g'`
+	if [ -z "$line" ]; then
+		continue
+	fi
+	num=`echo $line | cut -f 1 -d ' '`
+	lv=`echo $line | cut -f 3 -d ' '`
+	rv=`echo $line | cut -f 2 -d '('`
+	echo $line | awk '{ print "#define " $1 " " $2};'	>> $codesout
+	echo "extern unsigned long $lv ($rv;"			>> $protosout
+	echo "SYSCALL($lv,$num)"				>> $asmout
+done
+) < $in
+
+echo "#endif /* $codesdef */"		>> $codesout
+echo "#endif /* $protosdef */"		>> $protosout
-- 
1.7.7.6



More information about the CRIU mailing list