1.1 --- a/libexec/include/exec/process_creating.h Sun Mar 19 17:58:10 2023 +0100
1.2 +++ b/libexec/include/exec/process_creating.h Sun Mar 19 19:38:07 2023 +0100
1.3 @@ -38,9 +38,10 @@
1.4 protected:
1.5 std::mutex _lock;
1.6
1.7 - /* Region mapper program filename. */
1.8 + /* Region mapper program file. */
1.9
1.10 const char *_rm_filename;
1.11 + file_t *_rm_file;
1.12
1.13 /* External pager configuration. */
1.14
1.15 @@ -86,7 +87,7 @@
1.16 long start_program(int argc, const char *argv[]);
1.17
1.18 public:
1.19 - explicit ProcessCreating(const char *rm_filename);
1.20 + explicit ProcessCreating(const char *rm_filename, file_t *rm_file);
1.21
1.22 virtual long start(int argc, const char *argv[], l4_cap_idx_t *process);
1.23 };
2.1 --- a/libexec/include/exec/process_creator_resource.h Sun Mar 19 17:58:10 2023 +0100
2.2 +++ b/libexec/include/exec/process_creator_resource.h Sun Mar 19 19:38:07 2023 +0100
2.3 @@ -36,7 +36,7 @@
2.4 ProcessCreating _creating;
2.5
2.6 public:
2.7 - explicit ProcessCreatorResource(const char *rm_filename);
2.8 + explicit ProcessCreatorResource(const char *rm_filename, file_t *rm_file);
2.9
2.10 virtual ~ProcessCreatorResource();
2.11
3.1 --- a/libexec/lib/src/process_creating.cc Sun Mar 19 17:58:10 2023 +0100
3.2 +++ b/libexec/lib/src/process_creating.cc Sun Mar 19 19:38:07 2023 +0100
3.3 @@ -43,8 +43,8 @@
3.4
3.5 /* Initialise the process creator with the details of a region mapper. */
3.6
3.7 -ProcessCreating::ProcessCreating(const char *rm_filename)
3.8 -: _rm_filename(rm_filename)
3.9 +ProcessCreating::ProcessCreating(const char *rm_filename, file_t *rm_file)
3.10 +: _rm_filename(rm_filename), _rm_file(rm_file)
3.11 {
3.12 }
3.13
3.14 @@ -54,7 +54,7 @@
3.15
3.16 long ProcessCreating::init_region_mapper()
3.17 {
3.18 - long err = exec_get_payload(_rm_filename, &_rm_payload, true);
3.19 + long err = exec_get_payload_file(_rm_file, &_rm_payload, true);
3.20
3.21 if (err)
3.22 return err;
4.1 --- a/libexec/lib/src/process_creator_resource.cc Sun Mar 19 17:58:10 2023 +0100
4.2 +++ b/libexec/lib/src/process_creator_resource.cc Sun Mar 19 19:38:07 2023 +0100
4.3 @@ -30,8 +30,8 @@
4.4
4.5 /* Support for creating processes. */
4.6
4.7 -ProcessCreatorResource::ProcessCreatorResource(const char *rm_filename)
4.8 -: _creating(rm_filename)
4.9 +ProcessCreatorResource::ProcessCreatorResource(const char *rm_filename, file_t *rm_file)
4.10 +: _creating(rm_filename, rm_file)
4.11 {
4.12 }
4.13
5.1 --- a/servers/process_server.cc Sun Mar 19 17:58:10 2023 +0100
5.2 +++ b/servers/process_server.cc Sun Mar 19 19:38:07 2023 +0100
5.3 @@ -22,6 +22,7 @@
5.4 #include <l4/sys/debugger.h>
5.5 #include <l4/sys/err.h>
5.6
5.7 +#include <fsclient/client.h>
5.8 #include <ipc/thread.h>
5.9
5.10 #include <stdio.h>
5.11 @@ -30,6 +31,7 @@
5.12 #include <exec/process_creator_resource.h>
5.13 #include <fsserver/resource_server.h>
5.14 #include <systypes/env.h>
5.15 +#include <systypes/fcntl.h>
5.16
5.17
5.18
5.19 @@ -59,7 +61,16 @@
5.20 return 1;
5.21 }
5.22
5.23 - ProcessCreatorResource creator(rm_filename);
5.24 + file_t *rm_file = client_open(rm_filename, O_RDONLY);
5.25 +
5.26 + if (!client_opened(rm_file))
5.27 + {
5.28 + err = (rm_file == NULL) ? -L4_ENOMEM : rm_file->error;
5.29 + printf("Could not open region mapper file: %s\n", l4sys_errtostr(err));
5.30 + return 1;
5.31 + }
5.32 +
5.33 + ProcessCreatorResource creator(rm_filename, rm_file);
5.34
5.35 /* Register a server associating it with the given object. */
5.36