From f274c66b2141aca0f332e272b77cd0a048cef7f6 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Fri, 29 Nov 2013 12:35:13 +0100 Subject: 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. --- 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 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 . */ + +#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 */ -- cgit v1.2.3