summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-11-29 12:35:13 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-04-05 13:40:08 +0200
commitf274c66b2141aca0f332e272b77cd0a048cef7f6 (patch)
tree04d26cb83988e515ce07578a8973ee57b6ae5cd0
parentb939d0b64ac0cfb90e672386a8586a5515ebcd16 (diff)
exec: fix receiver lookup
* 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.
-rw-r--r--exec/Makefile1
-rw-r--r--exec/exec.c5
-rw-r--r--exec/execmutations.h8
-rw-r--r--exec/mig-decls.h40
-rw-r--r--exec/priv.h2
5 files changed, 51 insertions, 5 deletions
diff --git a/exec/Makefile b/exec/Makefile
index 3ef742dd..d332f360 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 e693f633..935762e2 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 ffcba9cd..2acca7a0 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 00000000..0437414f
--- /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 85e03aee..733f35c0 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 */