bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 4/8] Remove glue code and use mig to regenerate it.


From: Diego Nieto Cid
Subject: [PATCH 4/8] Remove glue code and use mig to regenerate it.
Date: Wed, 4 Aug 2010 04:20:02 -0300

modified:   Makefile
new file:   kdioctl.defs
deleted:    kdioctlServer.c
deleted:    kdioctl_S.h
---
 Makefile        |   59 +++++++++++++++++
 kdioctl.defs    |   39 +++++++++++
 kdioctlServer.c |  192 -------------------------------------------------------
 kdioctl_S.h     |   60 -----------------
 4 files changed, 98 insertions(+), 252 deletions(-)
 create mode 100644 kdioctl.defs
 delete mode 100644 kdioctlServer.c
 delete mode 100644 kdioctl_S.h

diff --git a/Makefile b/Makefile
index b8e8947..b940c4f 100644
--- a/Makefile
+++ b/Makefile
@@ -38,3 +38,62 @@ parser.tab.c parser.tab.h:   parser.y
 input_driver_test:     input_driver_test.c
        $(CC) -rdynamic $(CFLAGS) $(LIBS) -ldl input_driver_test.c -o 
input_driver_test
 
+kbd-repeat.o: kdioctl_S.h
+
+
+## TODO include Makeconf and config.make?
+# How to run compilation tools.
+CC = gcc
+CPP = $(CC) -E -x c # We need this option when input file names are not *.c.
+MIG = mig
+MIGCOM = $(MIG) -cc cat - /dev/null
+
+# How to build RPC stubs
+
+# We always need this setting, because libc does not include the bogus names.
+MIGCOMFLAGS := -subrprefix __
+
+# User settable variables:
+#      mig-sheader-prefix prepend to foo_S.h for name of foo.defs stub header
+#      MIGSFLAGS          flags to CPP when building server stubs and headers
+#      foo-MIGSFLAGS      same, but only for interface `foo'
+#      MIGCOMSFLAGS       flags to MiG when building server stubs and headers
+#      foo-MIGCOMSFLAGS   same, but only for interface `foo'
+#      MIGUFLAGS          flags to CPP when building user stubs and headers
+#      foo-MIGUFLAGS      same, but only for interface `foo'
+#      MIGCOMUFLAGS       flags to MiG when building user stubs and headers
+#      foo-MIGCOMUFLAGS   same, but only for interface `foo'
+#      CPPFLAGS           flags to CPP
+
+# Implicit rules for building server and user stubs from mig .defs files.
+
+# These chained rules could be (and used to be) single rules using pipes.
+# But it's convenient to be able to explicitly make the intermediate
+# files when you want to deal with a problem in the MiG stub generator.
+
+%.sdefsi %.sdefs.d: %.defs
+       $(CPP) $(CPPFLAGS) $(MIGSFLAGS) $($*-MIGSFLAGS) -DSERVERPREFIX=S_ \
+         -MD -MF $*.sdefs.d.new \
+         $< -o $*.sdefsi
+       sed -e 's/[^:]*:/$*Server.c $(mig-sheader-prefix)$*_S.h:/' \
+         < $*.sdefs.d.new > $*.sdefs.d
+       rm $*.sdefs.d.new
+
+$(mig-sheader-prefix)%_S.h %Server.c: %.sdefsi
+       $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMSFLAGS) $($*-MIGCOMSFLAGS) \
+                   -sheader $(mig-sheader-prefix)$*_S.h -server $*Server.c \
+                   -user /dev/null -header /dev/null < $<
+
+%.udefsi %.udefs.d: %.defs
+       $(CPP) $(CPPFLAGS) $(MIGUFLAGS) $($*-MIGUFLAGS) \
+         -MD -MF $*.udefs.d.new \
+         $< -o $*.udefsi
+       sed -e 's/[^:]*:/$*User.c $*_U.h:/' \
+         < $*.udefs.d.new > $*.udefs.d
+       rm $*.udefs.d.new
+
+%_U.h %User.c: %.udefsi
+       $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMUFLAGS) $($*-MIGCOMUFLAGS) < $< \
+                 -user $*User.c -server /dev/null -header $*_U.h
+
+
diff --git a/kdioctl.defs b/kdioctl.defs
new file mode 100644
index 0000000..64f9b9e
--- /dev/null
+++ b/kdioctl.defs
@@ -0,0 +1,39 @@
+/* Definitions for kd ioctls
+   Copyright (C) 1991, 1993, 1994, 1995, 1996, 1998, 2005 Free Software 
Foundation, Inc.
+
+This file is part of the GNU Hurd.
+
+The GNU Hurd is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU Hurd is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU Hurd; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <hurd/hurd_types.defs>
+
+/* Ioctl class `k'; the subsystem is derived from calculations in
+   <ioctls.h>. */
+subsystem kdioctl 120000;
+
+import <hurd/ioctl_types.h>;
+
+skip;  /* 0  unused */
+
+/* 1 KDSKBDMODE */
+routine kdioctl_kdskbdmode (
+       port: io_t;
+       in mode: int);
+/* 2 KDGKBDMODE */
+routine kdioctl_kdgkbdmode (
+       port: io_t;
+       out mode: int);
+
+/* 3 - 256 unused */
diff --git a/kdioctlServer.c b/kdioctlServer.c
deleted file mode 100644
index 4c405b5..0000000
--- a/kdioctlServer.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Module kdioctl */
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE 1
-#endif
-
-#define EXPORT_BOOLEAN
-#include <mach/boolean.h>
-#include <mach/kern_return.h>
-#include <mach/message.h>
-#include <mach/mig_errors.h>
-#include <mach/mig_support.h>
-
-#ifndef        mig_internal
-#define        mig_internal    static
-#endif
-
-#ifndef        mig_external
-#define mig_external
-#endif
-
-#ifndef        TypeCheck
-#define        TypeCheck 1
-#endif
-
-#ifndef        UseExternRCSId
-#define        UseExternRCSId          1
-#endif
-
-#define msgh_request_port      msgh_local_port
-#define MACH_MSGH_BITS_REQUEST(bits)   MACH_MSGH_BITS_LOCAL(bits)
-#define msgh_reply_port                msgh_remote_port
-#define MACH_MSGH_BITS_REPLY(bits)     MACH_MSGH_BITS_REMOTE(bits)
-
-#include <mach/std_types.h>
-#include <mach/mach_types.h>
-#include <device/device_types.h>
-#include <device/net_status.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/statfs.h>
-#include <sys/resource.h>
-#include <sys/utsname.h>
-#include <hurd/hurd_types.h>
-#include <hurd/ioctl_types.h>
-
-/* Routine kdioctl_kdskbdmode */
-mig_internal void _Xkdioctl_kdskbdmode
-       (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
-{
-       typedef struct {
-               mach_msg_header_t Head;
-               mach_msg_type_t modeType;
-               int mode;
-       } Request;
-
-       typedef struct {
-               mach_msg_header_t Head;
-               mach_msg_type_t RetCodeType;
-               kern_return_t RetCode;
-       } Reply;
-
-       register Request *In0P = (Request *) InHeadP;
-       register Reply *OutP = (Reply *) OutHeadP;
-       mig_external kern_return_t S_kdioctl_kdskbdmode
-               (io_t port, int mode);
-
-       static const mach_msg_type_t modeCheck = {
-               /* msgt_name = */               2,
-               /* msgt_size = */               32,
-               /* msgt_number = */             1,
-               /* msgt_inline = */             TRUE,
-               /* msgt_longform = */           FALSE,
-               /* msgt_deallocate = */         FALSE,
-               /* msgt_unused = */             0
-       };
-
-#if    TypeCheck
-       if ((In0P->Head.msgh_size != 32) ||
-           (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX))
-               { OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
-#endif /* TypeCheck */
-
-#if    TypeCheck
-       if (* (int *) &In0P->modeType != * (int *) &modeCheck)
-               { OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
-#endif /* TypeCheck */
-
-       OutP->RetCode = S_kdioctl_kdskbdmode(In0P->Head.msgh_request_port, 
In0P->mode);
-}
-
-/* Routine kdioctl_kdgkbdmode */
-mig_internal void _Xkdioctl_kdgkbdmode
-       (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
-{
-       typedef struct {
-               mach_msg_header_t Head;
-       } Request;
-
-       typedef struct {
-               mach_msg_header_t Head;
-               mach_msg_type_t RetCodeType;
-               kern_return_t RetCode;
-               mach_msg_type_t modeType;
-               int mode;
-       } Reply;
-
-       register Request *In0P = (Request *) InHeadP;
-       register Reply *OutP = (Reply *) OutHeadP;
-       mig_external kern_return_t S_kdioctl_kdgkbdmode
-               (io_t port, int *mode);
-
-       static const mach_msg_type_t modeType = {
-               /* msgt_name = */               2,
-               /* msgt_size = */               32,
-               /* msgt_number = */             1,
-               /* msgt_inline = */             TRUE,
-               /* msgt_longform = */           FALSE,
-               /* msgt_deallocate = */         FALSE,
-               /* msgt_unused = */             0
-       };
-
-#if    TypeCheck
-       if ((In0P->Head.msgh_size != 24) ||
-           (In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX))
-               { OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
-#endif /* TypeCheck */
-
-       OutP->RetCode = S_kdioctl_kdgkbdmode(In0P->Head.msgh_request_port, 
&OutP->mode);
-       if (OutP->RetCode != KERN_SUCCESS)
-               return;
-
-       OutP->Head.msgh_size = 40;
-
-       OutP->modeType = modeType;
-}
-
-static mig_routine_t kdioctl_server_routines[] = {
-               0,
-               _Xkdioctl_kdskbdmode,
-               _Xkdioctl_kdgkbdmode,
-};
-
-mig_external boolean_t kdioctl_server
-       (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
-{
-       register mach_msg_header_t *InP =  InHeadP;
-       register mig_reply_header_t *OutP = (mig_reply_header_t *) OutHeadP;
-
-       static const mach_msg_type_t RetCodeType = {
-               /* msgt_name = */               MACH_MSG_TYPE_INTEGER_32,
-               /* msgt_size = */               32,
-               /* msgt_number = */             1,
-               /* msgt_inline = */             TRUE,
-               /* msgt_longform = */           FALSE,
-               /* msgt_deallocate = */         FALSE,
-               /* msgt_unused = */             0
-       };
-
-       register mig_routine_t routine;
-
-       OutP->Head.msgh_bits = 
MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InP->msgh_bits), 0);
-       OutP->Head.msgh_size = sizeof *OutP;
-       OutP->Head.msgh_remote_port = InP->msgh_reply_port;
-       OutP->Head.msgh_local_port = MACH_PORT_NULL;
-       OutP->Head.msgh_seqno = 0;
-       OutP->Head.msgh_id = InP->msgh_id + 100;
-
-       OutP->RetCodeType = RetCodeType;
-
-       if ((InP->msgh_id > 120002) || (InP->msgh_id < 120000) ||
-           ((routine = kdioctl_server_routines[InP->msgh_id - 120000]) == 0)) {
-               OutP->RetCode = MIG_BAD_ID;
-               return FALSE;
-       }
-       (*routine) (InP, &OutP->Head);
-       return TRUE;
-}
-
-mig_external mig_routine_t kdioctl_server_routine
-       (const mach_msg_header_t *InHeadP)
-{
-       register int msgh_id;
-
-       msgh_id = InHeadP->msgh_id - 120000;
-
-       if ((msgh_id > 2) || (msgh_id < 0))
-               return 0;
-
-       return kdioctl_server_routines[msgh_id];
-}
-
diff --git a/kdioctl_S.h b/kdioctl_S.h
deleted file mode 100644
index 7eb9b14..0000000
--- a/kdioctl_S.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef        _kdioctl_server_
-#define        _kdioctl_server_
-
-/* Module kdioctl */
-
-#include <mach/kern_return.h>
-#include <mach/port.h>
-#include <mach/message.h>
-
-#include <mach/std_types.h>
-#include <mach/mach_types.h>
-#include <device/device_types.h>
-#include <device/net_status.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/statfs.h>
-#include <sys/resource.h>
-#include <sys/utsname.h>
-#include <hurd/hurd_types.h>
-#include <hurd/ioctl_types.h>
-
-/* Routine kdioctl_kdskbdmode */
-#ifdef mig_external
-mig_external
-#else
-extern
-#endif
-kern_return_t S_kdioctl_kdskbdmode
-#if    defined(LINTLIBRARY)
-    (port, mode)
-       io_t port;
-       int mode;
-{ return S_kdioctl_kdskbdmode(port, mode); }
-#else
-(
-       io_t port,
-       int mode
-);
-#endif
-
-/* Routine kdioctl_kdgkbdmode */
-#ifdef mig_external
-mig_external
-#else
-extern
-#endif
-kern_return_t S_kdioctl_kdgkbdmode
-#if    defined(LINTLIBRARY)
-    (port, mode)
-       io_t port;
-       int *mode;
-{ return S_kdioctl_kdgkbdmode(port, mode); }
-#else
-(
-       io_t port,
-       int *mode
-);
-#endif
-
-#endif /* not defined(_kdioctl_server_) */
-- 
1.7.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]