diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2013-11-29 12:35:13 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-04-05 13:40:08 +0200 |
commit | f274c66b2141aca0f332e272b77cd0a048cef7f6 (patch) | |
tree | 04d26cb83988e515ce07578a8973ee57b6ae5cd0 /exec | |
parent | b939d0b64ac0cfb90e672386a8586a5515ebcd16 (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.
Diffstat (limited to 'exec')
-rw-r--r-- | exec/Makefile | 1 | ||||
-rw-r--r-- | exec/exec.c | 5 | ||||
-rw-r--r-- | exec/execmutations.h | 8 | ||||
-rw-r--r-- | exec/mig-decls.h | 40 | ||||
-rw-r--r-- | exec/priv.h | 2 |
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 */ |