bug-hurd
[Top][All Lists]
Advanced

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

[PATCH 2/3] exec: fix receiver lookup


From: Justus Winter
Subject: [PATCH 2/3] exec: fix receiver lookup
Date: Sat, 5 Apr 2014 00:07:15 +0200

* exec/Makefile (exec_startup-MIGSFLAGS): New variable.
* exec/execmutations.h: Add mutators for exec_startup_t.
* exec/mig-decls.h: New file.
* exec/priv.h (bootinfo_t): New type declaration to appease mig.
* exec/exec.c (S_exec_startup_get_info): Fix receiver lookup.
---
 exec/Makefile        |  1 +
 exec/exec.c          |  5 +----
 exec/execmutations.h |  8 ++++++++
 exec/mig-decls.h     | 40 ++++++++++++++++++++++++++++++++++++++++
 exec/priv.h          |  2 +-
 5 files changed, 51 insertions(+), 5 deletions(-)
 create mode 100644 exec/mig-decls.h

diff --git a/exec/Makefile b/exec/Makefile
index 3ef742d..d332f36 100644
--- a/exec/Makefile
+++ b/exec/Makefile
@@ -30,6 +30,7 @@ HURDLIBS = trivfs fshelp iohelp ports ihash shouldbeinlibc
 OTHERLIBS = -lpthread
 
 exec-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
+exec_startup-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
 
 include ../Makeconf
 
diff --git a/exec/exec.c b/exec/exec.c
index e693f63..935762e 100644
--- a/exec/exec.c
+++ b/exec/exec.c
@@ -1457,7 +1457,7 @@ S_exec_setexecdata (struct trivfs_protid *protid,
 /* RPC sent on the bootstrap port.  */
 
 kern_return_t
-S_exec_startup_get_info (mach_port_t port,
+S_exec_startup_get_info (struct bootinfo *boot,
                         vm_address_t *user_entry,
                         vm_address_t *phdr_data, vm_size_t *phdr_size,
                         vm_address_t *stack_base, vm_size_t *stack_size,
@@ -1472,11 +1472,8 @@ S_exec_startup_get_info (mach_port_t port,
                         mach_msg_type_number_t *nports,
                         int **intarray, mach_msg_type_number_t *nints)
 {
-  struct bootinfo *boot = ports_lookup_port (port_bucket, port,
-                                            execboot_portclass);
   if (! boot)
     return EOPNOTSUPP;
-  ports_port_deref (boot);
 
   /* Pass back all the information we are storing.  */
 
diff --git a/exec/execmutations.h b/exec/execmutations.h
index ffcba9c..2acca7a 100644
--- a/exec/execmutations.h
+++ b/exec/execmutations.h
@@ -7,4 +7,12 @@
   import "priv.h";                                     \
   import "../libtrivfs/mig-decls.h";                   \
 
+#define EXEC_STARTUP_INTRAN                             \
+  bootinfo_t begin_using_bootinfo_port (exec_startup_t)
+#define EXEC_STARTUP_DESTRUCTOR                         \
+  end_using_bootinfo (bootinfo_t)
+#define EXEC_STARTUP_IMPORTS                            \
+  import "priv.h";                                      \
+  import "mig-decls.h";
+
 #define SERVERCOPY 1
diff --git a/exec/mig-decls.h b/exec/mig-decls.h
new file mode 100644
index 0000000..0437414
--- /dev/null
+++ b/exec/mig-decls.h
@@ -0,0 +1,40 @@
+/*
+   Copyright (C) 2014 Free Software Foundation, Inc.
+   Written by Justus Winter.
+
+   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.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef __EXEC_MIG_DECLS_H__
+#define __EXEC_MIG_DECLS_H__
+
+#include "priv.h"
+
+/* Called by server stub functions.  */
+
+static inline struct bootinfo * __attribute__ ((unused))
+begin_using_bootinfo_port (mach_port_t port)
+{
+    return ports_lookup_port (port_bucket, port, execboot_portclass);
+}
+
+static inline void __attribute__ ((unused))
+end_using_bootinfo (struct bootinfo *b)
+{
+  if (b)
+    ports_port_deref (b);
+}
+
+#endif /* __EXEC_MIG_DECLS_H__ */
diff --git a/exec/priv.h b/exec/priv.h
index 85e03ae..733f35c 100644
--- a/exec/priv.h
+++ b/exec/priv.h
@@ -52,6 +52,7 @@ struct bootinfo
     vm_address_t phdr_addr, user_entry;
     vm_size_t phdr_size;
   };
+typedef struct bootinfo *bootinfo_t;
 
 
 /* Where to put the service ports. */
@@ -151,5 +152,4 @@ extern int *std_ints;
 extern size_t std_nports, std_nints;
 extern pthread_rwlock_t std_lock;
 
-
 #endif /* exec_priv_h */
-- 
1.9.1




reply via email to

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