1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
|
2000-03-20 Roland McGrath <roland@baalperazim.frob.com>
* main.c (trivfs_allow_open): Initialize to zero.
(trivfs_support_read, trivfs_support_write): Likewise.
(trivfs_support_exec): Variable removed.
* exectrans.c: Obsolete file removed.
* Makefile (DIST_FILES): Remove it.
2000-03-17 Roland McGrath <roland@baalperazim.frob.com>
* hashexec.c (check_hashbang): Use strpbrk directly instead of strsep.
Fix up INTERP_LEN properly in the no-argument case.
2000-03-17 Thomas Bushnell, BSG <tb@mit.edu>
* main.c (S_exec_init): Don't use MOVE_SEND in Hurd RPC.
2000-03-17 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (do_exec): Use ports_get_send_right.
2000-03-13 Roland McGrath <roland@baalperazim.frob.com>
* priv.h (EXECDATA_STREAM): Define this only #ifdef BFD.
The non-BFD exec server is now completely independent of stdio magic;
it uses only those interfaces documented in the C library manual,
which are provided both by old GNU stdio and by GNU libio.
Resurrecting the BFD exec server will require using magic again,
for which libio-specific magic needs to be written.
* exec.c [! EXECDATA_STREAM] (prepare_stream): Replace no-op with real
function to initialize map_* members to zero.
* priv.h (EXECDATA_STREAM): New macro, always defined for now.
(struct execdata) [! EXECDATA_STREAM]: Add members
map_buffer, map_bsize, map_fsize, map_filepos in place of stream.
(map_buffer, map_filepos, map_set_fsize): New macros for accessing
those or stream.
[! EXECDATA_STREAM] (map_fsize, map_vsize): Define using new members.
* exec.c (map): Rewritten purely using those accessor macros.
(input_room): Set the __target, __bufp, __error, and __eof members,
which are no longer set by map.
[! EXECDATA_STREAM] (prepare_stream, prepare_in_memory): Make no-ops.
(input_room, close_exec_stream, fake_seek, prepare_stream,
prepare_in_memory): Conditionalize these defns on [EXECDATA_STREAM].
(load_section): Always use map instead of stdio.
Replace bcopy with memcpy.
(check_gzip: zipread): Rewrite using map instead of stdio.
(check_bzip2: zipread): Likewise.
* hashexec.c (check_hashbang): Fix up multiple fencepost brainos.
* hashexec.c (check_hashbang): Fix fencepost error in last change.
* exec.c (map): Made global.
* priv.h: Declare it.
(map_fsize, map_vsize): New macros for accessing state set up by map.
* hashexec.c (check_hashbang): Use map and copying operations rather
than stdio to extract the first line from the file. Move finish call
to immediately after reading the line.
* exec.c (map): If E->file_data is set, diagnose EOF before going to
direct io_read.
(prepare_in_memory): New function, broken out of check_gzip before
last change.
(check_gzip, check_bzip2): Use it.
* exec.c (prepare_stream): New function, broken out of prepare.
(prepare): Call it.
[_STDIO_USES_IOSTREAM]: Do #error if this is defined.
(map, input_room, close_exec_stream, fake_seek, prepare_stream):
Conditionalize all these definitions on [! _STDIO_USES_IOSTREAM].
Only map and prepare_stream are called from elsewhere in the code.
(check_gzip): Don't reinitialize E->stream, since it will in fact not
be used again.
(check_bzip2): Likewise.
2000-03-09 Roland McGrath <roland@baalperazim.frob.com>
* hostarch.c (elf_machine_matches_host): Don't recognize EM_486,
since newer <elf.h>'s don't define it any more.
2000-02-27 Roland McGrath <roland@baalperazim.frob.com>
* hashexec.c (check_hashbang: user_fd): Add a user ref to DTABLE[FD]
send right, because caller (hurd_file_name_lookup internals) will
consume one.
* hashexec.c (check_hashbang): When dealloc'ing DTABLE ports,
optimize out syscall for null ports.
1999-11-08 Roland McGrath <roland@baalperazim.frob.com>
* exectrans.c (trivfs_support_write, trivfs_support_exec): Variables
removed.
(trivfs_allow_open): Set to just O_READ.
1999-09-09 Roland McGrath <roland@baalperazim.frob.com>
* Makefile (exec.static-LDFLAGS): Variable removed.
1999-07-17 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (servercopy): Removed unused variable.
1999-07-11 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (load_section): Fix typos in last change.
1999-07-11 Thomas Bushnell, BSG <tb@mit.edu>
* exec.c (load_section): Use mmap instead of vm_allocate when
allocating in mach_task_self ().
(servercopy): Likewise.
(do_exec): Likewise.
* hashexec.c (check_hashbang): Likewise.
1999-07-10 Roland McGrath <roland@baalperazim.frob.com>
* hostarch.c (mach_host_elf_machine): Replaced with ...
(elf_machine_matches_host): New function. Instead of returning
an ELF EM_* code, take one and check if it matches the host;
operate only on mach_host_self(), cache results,
Grok CPU_TYPE_{I486,PENTIUM,PENTIUMPRO} to accept EM_386 or EM_486.
Grok POWERPC, ALPHA, HPPA types.
* exec.c (check_elf): Call elf_machine_matches_host instead of
comparing against elf_machine.
(load_section): #if 0 out no-op code that uses elf_machine.
* priv.h (elf_machine_matches_host): Declare it.
(elf_machine, mach_host_elf_machine): Remove decls.
* main.c (main) [!BFD]: Don't call mach_host_elf_machine.
(elf_machine): Variable removed.
* exec.c (map): Don't cast arg to munmap to vm_address_t.
* priv.h: Add #include <sys/mman.h> for munmap decl.
1999-07-03 Thomas Bushnell, BSG <tb@mit.edu>
* core.c (core_dump_task): Use munmap instead of vm_deallocate,
when it's from our own task.
* elfcore.c: Likewise.
* exec.c (load_section): Likewise.
(map): Likewise.
(close_exec_stream): Likewise.
(finish_mapping): Likewise.
(load): Likewise.
(do_exec): Likewise.
(S_exec_setexecdata): Likewise.
* hashexec.c (check_hashbang): Likewise.
* main.c (deadboot): Likewise.
1999-06-04 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (map): Fix mapping calls to use F->__offset consistently
instead of F->__target.
1999-05-16 Roland McGrath <roland@baalperazim.frob.com>
* hashexec.c (check_hashbang): Fix bug in last change.
1999-05-15 Roland McGrath <roland@baalperazim.frob.com>
* hashexec.c (check_hashbang): Trim trailing blanks after interpreter
argument.
1998-09-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* do-bunzip2.c: New file.
* exec.c (check_bzip2): New function.
(BZIP2): New cpp symbol. If defined, bunzip2 engine is enabled.
* Makefile (bzip2-objects): New variable.
(OBJS): Add bzip2-objects.
(CPPFLAGS): Add -DBZIP2.
1999-04-27 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (do_exec): Implement EXEC_SIGTRAP flag.
1998-12-27 Roland McGrath <roland@baalperazim.frob.com>
* main.c (S_exec_init): Deallocate PROCSERVER port when finished.
1998-12-27 Roland McGrath <roland@baalperazim.frob.com>
* main.c (S_exec_init): Remove variable DEV_MASTER; pass null instead
since we don't need it. Use assert_perror on getting the host-priv
port and on startup_essential_task, since init will hang until we've
done made that RPC.
1998-12-26 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (do_exec): Fix conditional for cleaning up INTERP,
from nonnull E.interp.section to nonnull INTERP.file.
If we failed to open the interpreter file, INTERP.file will be
null and the rest of INTERP will be uninitialized.
1998-12-21 Roland McGrath <roland@baalperazim.frob.com>
* main.c (S_exec_init): Don't call set_active_trans.
(set_active_trans): Function removed.
* Makefile (HURDLIBS): Add missing implied library deps.
1998-11-25 Mark Kettenis <kettenis@phys.uva.nl>
* main.c (S_exec_init): Call _hurd_proc_init with new args set to
zero.
* hashexec.c (check_hashbang): Fix typo: interplen -> interp_len.
Thu Nov 5 15:26:50 1998 Thomas Bushnell, BSG <tb@mit.edu>
* hashexec.c (check_hashbang): Keep INTERP_LEN with the correct
value (bytes of memory holding INTERP) for later use.
(check_hashbang: setup_args): Set argv[0] from the interpreter
name, not copied from the existing command line.
1998-10-26 Roland McGrath <roland@baalperazim.frob.com>
* hashexec.c: Use mach_* instead of __mach_*.
1998-07-15 Roland McGrath <roland@baalperazim.frob.com>
* exec.c (do_exec): Set boot->phdr_addr and boot->user_entry after
loading, to addresses adjusted for actual run-time load address.
Wed Aug 20 14:02:11 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* main.c (main): New args for
ports_manage_port_operations_multithread.
1997-06-30 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Arg parsing added.
(argp_program_version): New variable.
Include <argp.h>.
Mon Jan 20 16:16:33 1997 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (check_hashbang): `preempter' -> `preemptor'.
Sat Nov 23 16:26:55 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* priv.h (mach_host_elf_machine): New prototype.
* hostarch.c: Include "priv.h".
Mon Nov 18 17:45:48 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* exec.c (load_section): If ANYWHERE, then make sure ADDR starts
out at least past the first page, so that we don't take it. Then
the library can (if desired) make the page no-access.
Fri Nov 15 17:34:23 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* exec.c: Don't include <hurd/shared.h> any more.
* main.c (S_exec_init): New arg syntax of trivfs_open.
Mon Oct 7 21:31:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* exec.c (fake_seek): New function.
(prepare): Initialize E->stream.__io_funcs.seek to fake_seek; this
is called now that stdio doesn't assume it always knows the file
position.
Thu Sep 12 16:30:12 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* Makefile (HURDLIBS): New variable.
(exec): Delete special dependencies.
Thu Sep 5 11:11:19 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* main.c: Include <version.h>.
(exec_version): Delete variable.
(S_exec_init): Pass empty string as release; HURD_VERSION
as version.
Thu Aug 29 13:00:38 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* priv.h: Only include <bfd.h> if BFD. Only declare
host_bfd_arc_info, and bfd_host_bfd if BFD. If not BFD, give
typedef for asection.
* main.c: Only define host_bfd_arch_info, host_bfd, and
bfd_mach_host_arch_mach if BFD.
(main): Only call bfd_mach_most_arch_mach if BFD.
Call mach_host_elf_machine.
* hostarch.c (bfd_mach_host_arch_mach): Only define if BFD.
Delete arg E_MACHINE. All callers changed.
(mach_host_elf_machine): New function.
Sun Jul 7 21:13:22 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* exec.c (S_exec_exec): Don't use unsafe MOVE_SEND in call to
interruptible exec_exec stub.
Mon Jul 1 16:08:03 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* Makefile (DIST_FILES): Removed crash.c.
* crash.c: Moved to ../trans.
Thu Jun 20 15:43:51 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* Makefile (exec): Link against fshelp too now.
* exec.c (do_exec): Call proc_setowner *after* possible
proc_reassign; otherwise it modifies the stub process's state and
not the real process's.
Wed Jun 19 14:08:15 1996 Miles Bader <miles@gnu.ai.mit.edu>
* exec.c (do_exec, S_exec_exec): Pass 0 for new LOOKUP arg to
hurd_file_name_lookup.
* hashexec.c (hurd_file_name_path_lookup): Declaration removed.
(check_hashbang): Pass 0 for new LOOKUP arg to hurd_file_name_lookup.
Wed Jun 12 21:17:33 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* gzip.h (basename): Comment out declaration; it conflicts with
libc's.
* exec.c (do_exec): If secure, set the owner with proc_setowner.
Fri May 10 16:47:11 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (search_path): Don't make PATH or PFXED_NAME const.
Fri May 10 09:20:26 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* exec.c (do_exec) [use1]: Use new auth_user_authenticate interface.
* hashexec.c (check_hashbang) [userport/reauthenticate]: Likewise.
* hashexec.c (check_hashbang) [setup_args/search_path]: Declare
PATH to be `char const *'.
Tue May 7 16:24:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hashexec.c (check_hashbang): Use io_identity instead of io_stat to
compare files.
Mon May 6 14:26:41 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* main.c (exec_version): Upgrade to 0.0.
Fri May 3 14:16:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* exec.c (map): Use F->__offset and F->__target properly.
Thu May 2 10:21:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* exec.c (map): Fix fencepost error in check of current mapping
window. Request round_page (LEN) bytes in io_read to avoid many small
reads.
* exec.c (do_exec): Terminate OLDTASK if we get an error after killing
its threads and deallocating its address space.
Tue Apr 30 11:36:25 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* exec.c (check_gzip) [ziprderr]: Treat all read errors as
ENOEXEC. First off, because that's what they are; also because
some callers of read_error don't set errno at all.
Mon Apr 29 15:11:55 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* exec.c (check_section): If the format makes no sense, return
ENOEXEC, not EINVAL.
(check_bfd): Likewise.
(check_elf): Likewise.
(check_elf_phdr): Likewise.
(do_exec): Likewise.
* exec.c (do_exec): Use correct args to ports_create_port.
Sat Apr 27 06:02:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crash.c: Use ports_create_port instead of ports_allocate_port, and
notice the error.
* exec.c: Likewise.
Tue Apr 23 18:53:54 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hashexec.c (check_hashbang: user_port): Use default root port when
secure.
Mon Apr 15 12:48:35 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* Makefile (DIST_FILES): Add elfcore.c, crash.c, and exectrans.c.
(SRCS): That's hashexec.c, not .o.
* Makefile (exec-MIGSFLAGS): Look for execmutations.h in
$(srcdir).
Mon Apr 8 15:49:39 1996 Miles Bader <miles@gnu.ai.mit.edu>
* exec.c (prepare): If io_map returns EOPNOTSUPP, suppress the
error, and still setup E's stream.
(prepare_and_check): If prepare returns an error, do no more.
Thu Mar 28 14:06:07 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (check_hashbang): Pass open flags & mode args to
hurd_file_name_path_lookup.
Mon Feb 26 16:33:22 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (check_hashbang): Correctly deal with interpreter
lines having no argument.
Sat Jan 13 12:28:03 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (check_hashbang): Use hash_file_name_path_lookup()
instead of doing the path search ourselves, and get rid of
LOOKUP_CWDIR & associated logic.
* exec.c (S_exec_exec): Use strdupa(). Also update use of
hurd_file_name_lookup() [still probably not right though].
Thu Jan 11 15:36:18 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hashexec.c (check_hashbang): When using executable name found on
the path, don't return alloca()ed memory from search_path(); use
malloc() instead.
Use envz_get() to search the environment.
* exec.c (S_exec_exec): Use envz_get() to search the environment.
Thu Jan 4 11:30:15 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (safe_bzero): Rewritten using hurd_catch_signal.
* hashexec.c (check_hashbang): Rearrange arg frobbing code
somewhat to use hurd_catch_signal instead of old preemption interface.
Fri Dec 29 15:54:06 1995 Miles Bader <miles@gnu.ai.mit.edu>
* exec.c (do_exec): Be careful not to look at BOOT after we
release our reference on it.
Correctly initialize BOOT->intarray in the case where NINTS <
INIT_INT_MAX but we don't alloc a new array.
Fri Dec 15 01:53:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (map): Rearrange code to fix some bugs and not remap
unless necessary.
(input_room): Simplify.
(check_elf): Extract all information from file header before
calling `map' for program headers.
Sat Nov 25 22:10:41 1995 Miles Bader <miles@gnu.ai.mit.edu>
* crash.c (S_msg_sig_post_untraced): Also let the debugger have
the process back if it's posting the crashing signal.
Tue Nov 21 15:01:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (safe_bzero): New function, broken out of load_section.
(load_section): Call it.
* main.c (going_down): Variable removed.
(deadboot): Don't test it. Instead, use ports calls to check if
there are no other live ports.
(trivfs_goaway): Don't set it.
Wed Nov 15 19:40:44 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hashexec.c (user_port): Fixed port selection logic.
(check_hashbang): Fixed PATH searching in script name guessing.
Mon Nov 13 15:11:37 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (S_exec_startup): Compatibility RPC removed.
* exec.c (load_section): Catch faults while zeroing partial bss page.
Sun Nov 5 00:15:07 1995 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Add flags arg to trivfs_startup call.
Wed Oct 25 15:50:38 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (S_exec_startup_get_info): New function, modified from
S_exec_startup.
(S_exec_startup): Just call it.
* main.c (exec_demuxer): Call exec_startup_server.
Tue Oct 24 19:21:20 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (OBJS): Add exec_startupServer.o.
* priv.h (struct bootinfo): Use vm_size_t for phdr_size.
Wed Oct 18 18:36:30 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hashexec.c (check_hashbang: prepare_args): Enable and clean up
code to guess the name of the script before resorting to /dev/fd.
Wed Oct 18 03:05:05 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hashexec.c: New file.
* exec.c (struct execdata): Moved to priv.h.
(std_*, finish): Make global.
(do_exec): Only reset CWDIR when null, even if secure.
Actually call check_hashbang and return success if it does.
Use new hurd_file_name_lookup protocol with private callbacks to open
interpreter file on behalf of client.
Remove `bootout' label; use `stdout' or `out' as appropriate instead.
At `out' label always deref BOOT, which cleans it up iff necessary.
(S_exec_exec): #if 0 out $EXECSERVERS processing for time being.
* priv.h: Added some #includes.
(struct execdata): Moved here from exec.c.
(std_*): Declare these.
(finish, check_hashbang): Declare them.
* Makefile (SRCS, OBJS): Add hashexec.[co].
(DIST_FILES): Remove it from here.
Wed Oct 11 01:45:32 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* main.c, priv.h, execmutations.h: New files.
* exec.c: Server mechanics removed; now uses libtrivfs/libports.
Main program split out into main.c.
(std_lock): New variable (rwlock).
(do_exec): Acquire reader lock to access std_ints and std_ports.
(S_exec_setexecdata): Acquire writer lock to change them.
* Makefile (OBJS): Add main.o; remove fsysServer.o, notifyServer.o.
(LCLHDRS): Add priv.h and execmutations.h.
(exec-MIGSFLAGS): New variable.
(exec): Depend on livtrivfs, libthreads, libshouldbeinlibc.
Mon Oct 2 10:33:14 1995 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* exec.c (do_exec): Doc fix.
Wed Sep 27 11:21:19 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (do_exec): Don't set NEWTASK's bootstrap port until after
we have finished completely with OLDTASK.
(do_mach_notify_no_senders): Remove bogus mod_refs call on
receive_portset.
Wed Sep 20 19:57:55 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (struct bootinfo): New members `phdr_addr', `phdr_size',
`user_entry'.
(do_exec): Set them. Code rearranged to construct bootinfo before
looking up interpreter file, keep proper track of port rights and
VM copied into bootinfo (there were leaks).
Sat Sep 16 13:15:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile: Remove vpath directive.
Fri Sep 8 17:50:03 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (OTHERLIBS, CPPFLAGS): Disable bfd by default.
Mon Aug 28 16:57:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (S_fsys_forward): New stub function.
Sun Jul 30 23:49:49 1995 Michael I. Bushnell, p/BSG <mib@geech.gnu.ai.mit.edu>
* Makefile (SRCS): Added unzip.c, util.c, and inflate.c.
Thu Jul 6 15:32:39 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* hostarch.c (bfd_mach_host_arch_mach): Remove assignment from
inside if test.
* Makefile: Removed dependencies that are now automatically
generated.
Wed Jul 5 18:00:49 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* Makefile (OTHERLIBS): Define var.
(all, exec): Delete targets.
Tue Jun 27 11:48:08 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* exec.c (load_section): Remove assignments from if tests.
(map): Likewise.
(prepare): Likewise.
(load): Likewise.
(servercopy): Likewise.
(do_exec): Likewise.
(S_exec_setexecdata): Likewise.
(S_exec_exec): Put extra parens around assignment inside while
test.
Thu Jun 8 02:57:28 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (struct execdata.info.elf): Add members `anywhere' and
`loadbase'.
(load_section): Use them; if `anywhere' set, load the section anywhere.
Record load address in `loadbase'.
(check_elf): Initialize `anywhere' and `loadbase'.
(postload): Merged into load.
(load): Perform postload functionality here, after calling
finish_mapping.
(finish): Take new flag arg; deallocate file port only if set.
(do_exec): Pass flag to finish appropriately.
Don't call finish_mapping and postload after load. KLUDGE: Load
the interpreter before the program instead of after.
Mon Jun 5 06:42:33 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c: Majorly revamped: Now supports the ELF format directly.
Secondarily uses the BFD library #ifdef BFD. Supports gunzipping
only #ifdef GZIP.
* hostarch.c: Rewritten to unconditionally return both BFD and ELF
machine types.
Fri May 12 18:59:21 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* exec.c (S_fsys_set_options, S_fsys_mod_readonly): Change from
mod_readonly to set_options.
Thu Apr 20 22:14:47 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (check_gzip): Rewind the stream before calling
`get_method'. Open a new BFD on the uncompressed data stream
before return.
Sun Apr 9 01:27:10 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (struct execdata) [BFD]: New member `interp_section'.
(check_section): Notice section named ".interp" and set that pointer.
(load_section): Do nothing if the section is zero size.
When reading into our copy of the overlap page, don't read past
the end of the section.
(do_exec): Consolidate new subfunction `check_maybe_gzip'.
If there is an interpreter section, load the interpreter file too,
and use its entry point instead of the user program's. Cleaned up
and made more robust deallocation of BOOT info on error.
(deadboot): New function, split out of do_mach_port_notify_no_senders.
* Makefile (vpath lib%.a): Add search path.
(exec): Depend on -lbfd and -liberty.
(CPPFLAGS): Append -DBFD; omit -DA_OUT_H=...
(bfdexec): Target removed.
* exec.c (load_section): fseek to desired position before freading.
(input_room): Always map a page-aligned region.
Thu Feb 9 01:01:57 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (check_section): Don't check SEC_RELOC flag.
Wed Feb 8 19:48:11 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* exec.c (load_section) [BFD]: BFD does not set SEC_HAS_CONTENTS
on a.out BSS's ever; don't make zeroing of bss conditional on that.
It's not clear exactly what SEC_HAS_CONTENTS is for anyhow;
perhaps the Right Thing is to set in on BSS. In any case, don't
depend on this flag here.
Sat Jan 28 17:08:02 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (prepare): Give the stream a seek function.
Sun Jan 22 03:16:17 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c: Update BFD code; it works now.
* hostarch.c [BFD]: Fix prototype.
Thu Jan 19 01:24:18 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hostarch.c: Add case for CPU_TYPE_ALPHA.
* hostarch.c (bfd_mach_host_arch_mach, aout_mach_host_machine):
Use mach_msg_type_number_t instead of unsigned int. Cast
&HOSTINFO to (natural_t *).
Sun Jan 15 06:29:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c [BFD] (bfd_mach_host_arch_mach): In decl, MACHINE arg is
`long int *' now.
[BFD] (host_bfd_arch_info): New variable.
[BFD] (host_bfd): Initialize `arch_info' member to its address.
(check) [BFD]: Use bfd_arch_get_compatible properly, rather than the
nonexistent bfd_arch_compatible.
(main) [BFD]: Fill in host_bfd.arch_info instead of old
`obj_machine' and `obj_archiecture' members, which BFD no longer has.
* hostarch.c [BFD] (bfd_mach_host_arch_mach): MACHINE arg is `long
int *' now.
Tue Dec 13 23:28:08 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (OBJS): Add unzip.o util.o inflate.o.
(LCLHDRS): Add gzip.h crypt.h tailor.h.
(unzip.o util.o inflate.o): Depend on those.
(CFLAGS): Use +=.
* inflate.c, unzip.c, util.c, tailor.h, gzip.h, crypt.h: New files.
Sun Dec 11 19:49:01 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (struct execdata): New members `headbuf', `file_data',
`optimal_block'.
(load_section): Copy data from U->file_data if that is nonnull.
Use new subfunction `write_to_task' that handles non-page aligned
sections.
(input_room): Fix EOF check.
Use io_read if no memory object.
(prepare): New function, broken out of check.
Initialize E->file_data and E->optimal_block. Set
E->stream.__seen bit.
(check): No longer take FILE arg.
Use E->file_data if nonnull; else read from stream if no memory object.
(finish_mapping): Reset members after deallocating resources.
(finish): Likewise. Call fclose. Don't deallocate E->header if
it points to &E->headbuf or E->file_data.
(check_gzip): New function, implements executing gzip'd binaries.
(do_exec): Call prepare before check.
Call check_gzip if file format unrecognized.
Wed Nov 9 01:40:28 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (set_active_trans): Don't deallocate EXECNODE here to
work around a ufs bug.
* exec.c: Include <hurd/paths.h> and <fcntl.h>.
(set_active_trans): New function.
(S_exec_init): Call set_active_trans.
Wed Aug 31 11:16:04 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (load_section): Pass address of stream in call to fread.
(input_room): Cast second arg to vm_deallocate. Dereference F
in setting __error member.
(close_exec_stream): Provide all three args to vm_deallocate
and cast the second one properly.
Wed Aug 31 04:32:26 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c (do_exec): Do check before task_suspend.
#if 0'd out: If check gets ENOEXEC, call check_hashbang.
(struct execdata): Move member `stream' outside of [BFD].
(load_section): Use fread instead of hand mapping and copying
unconditionally (was [BFD]); old code left #if'd out.
(close_exec_stream): Renamed from close_stdio_bfd; moved out of [BFD].
(input_room): Define unconditionally, not [BFD].
(check): Set up E->stream unconditionally.
Tue Aug 30 11:58:27 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (S_fsys_syncfs, S_fsys_mod_readonly): New stubs.
* exec.c (set_init_port): Use new authentication protocol.
* exec.c (S_exec_exec): Call hurd_file_name_lookup instead
of hurd_path_lookup.
* exec.c (S_fsys_getroot): Return FS_RETRY_NORMAL instead
of FS_RETRY_NONE.
* exec.c (procserver): New global variable.
(S_exec_init): Set procserver.
(do_exec): Use `procserver' instead of USEPORT macro.
(S_exec_init): Likewise.
Mon Aug 29 13:08:44 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (do_exec): Enable and fix up code for doing proc_reassign
in the EXEC_NEWTASK case.
(do_exec): If we don't provide the proc port, and this is a
newtask exec, then use the proc port to fetch a new one
corresponding to the new task.
Wed Aug 17 14:59:58 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (S_exec_exec): Bother to pass flags to do_exec.
* exec.c (essentialstartupport, essentialhostport): Deleted vars.
(S_exec_init): Do startup_essential_task here like before, but
make sure we do it last.
(S_exec_setexecdata): Don't do startup_essential_task here.
Tue Aug 16 10:02:50 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (set_init_port): Don't assume that MACH_PORT_NULL == 0.
(do_exec): Likewise.
Mon Aug 15 21:23:13 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* exec.c: Include <unistd.h> for getpid decl.
(set_init_port): Use pid_t for PID.
(S_exec_init): Pass poly arg to proc_execdata_notify.
Mon Aug 15 15:24:45 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* exec.c (do_exec): Finish implementing EXEC_SECURE flag;
implement EXEC_DEFAULTS flag.
(S_exec_init): Delay startup_essential_task until after
we've received the first essential ports from the proc server.
(essentialstartupport essentialhostport): New global vars.
Fri Jul 22 10:21:30 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* Makefile: Rewritten in accord with new scheme.
* exec.c: Include "exec_S.h" instead of "exec_server.h".
Include "notify_S.h".
Tue Jul 19 20:51:58 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* Makefile (exec_server.h execServer.c, fsys_S.h fsysServer.c):
Find .defs file in ../hurd, not $(includedir).
Tue Jul 19 12:42:32 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* exec.c (S_fsys_getroot): New arg `dotdot'; don't do anything
with it.
(S_fsys_startup): Removed dotdot args.
(main): Deleted var `dotdot'; don't expect it from fsys_startup.
* Makefile (exec): Don't use variable $(link) anymore.
Tue Jul 5 14:20:15 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* Makefile (SRCS, TAGSHDRS): New variables.
Fri Jun 24 14:42:59 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* exec.c (load_section) [AOUT, mapstart > addr]: Dereference
U->header in use of N_MAGIC.
Fri Jun 24 02:40:32 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (load_section): Store protection of section in new local
VM_PROT. If vm_write of overlap page gets KERN_PROTECTION_FAILURE,
change protection of overlap page long enough to write it.
[AOUT]: Return ENOEXEC if there is overlap in NMAGIC or ZMAGIC.
Thu Jun 16 16:15:17 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* exec.c (S_fsys_getroot): Implement new fsys_getroot interface.
Mon Jun 13 04:06:24 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
* exec.c (check): Store FILE in E->file.
Tue May 31 17:20:24 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
* a.out.h (struct exec): Type removed.
(OMAGIC, NMAGIC, ZMAGIC, N_MAGIC, N_MACHTYPE, N_BADMAG): Macros
removed. Just #include "a.out.gnu.h" to get all these defined.
(N_TXTLEN, N_TXTOFF): Use N_MAGIC instead of a_magic member.
* Makefile (DIST_FILES): Add a.out.gnu.h.
(exec.o, hostarch.o): Depend on a.out.gnu.h.
Fri May 27 01:40:04 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (servercopy): New function to check the servercopy flag
and possibly vm_allocate a copy of argument data.
(do_exec): Take new args DTABLE_COPY, PORTARRAY_COPY,
INTARRAY_COPY. Use servercopy for ARGV, ENVP, DTABLE, PORTARRAY,
and INTARRAY.
(S_exec_exec): Take those new args and pass them to do_exec.
(S_exec_setexecdata): Take new args PORTS_COPY and INTS_COPY.
Use servercopy for PORTS and INTS.
(S_exec_startup): Never copy from info in *BOOT, always just set
the argument pointers to the pointers in *BOOT. MiG will copy and
deallocate the space as necessary.
* exec.c (check): Lock and unlock E->cntl->lock properly.
(finish_mapping): New function, broken out of finish.
(postload_section): New function, broken out of load_section.
(postload): New function, like load but calls postload_section.
(do_exec): Call finish_mapping and postload between load and finish.
Tue May 24 19:49:16 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (S_exec_exec): Use strsep instead of strtok.
(main): Keep looping after error from mach_msg_server.
Tue May 24 14:22:16 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* exec.c (load_section): Cast arg to vm_deallocate properly.
Tue May 24 01:05:08 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (struct bootinfo): Remove members argv_vmalloc, envp_vmalloc.
(do_exec): Don't set BOOT->argv_vmalloc or BOOT->envp_vmalloc. If
ARGV_COPY is set, vm_allocate space for ARGV; likewise for
ENVP_COPY and ENVP.
(S_exec_startup): Don't test BOOT->argv_vmalloc and
BOOT->envp_vmalloc; BOOT->argv and BOOT->envp are always vm_allocate'd.
(do_mach_notify_no_senders): Likewise.
(load_section): Handle non-bss sections that are not page aligned.
Mon May 23 22:01:11 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (S_exec_exec): Reverse args to memmem.
(do_exec): Don't vm_deallocate DEALLOCNAMES or DESTROYNAMES; mig
deallocates the space for us.
Tue May 17 13:33:41 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* exec.c (S_exec_init): Don't deallocate host_priv until after
we've used it in the call to startup_essential_task.
Thu May 12 03:53:57 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (S_fsys_init): Add reply port args.
Wed May 11 16:03:07 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* exec.c (S_exec_init): Spelling fix.
* Makefile (exec.o): Add dependencies on fsys_S.h and notify_S.h.
(fsysServer.c, notifyServer.c): Notice that these rules build
fsys_S.h and notify_S.h respectively.
Mon May 9 17:06:52 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* exec.c (exec_version, save_argv): New variable.
(main): Set save_argv.
(S_exec_init): Give the real argv to proc.
Call proc_register_version if we can.
(S_exec_init): Call startup_essential_task if we can.
Thu May 5 06:25:02 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* Makefile: Change uses of $(headers) to $(includedir).
* exec.c: Change return type of all RPC server functions to
kern_return_t. error_t is not compatible with the declarations in
the mig-generated header files.
* exec.c (do_exec): Set BOOT->stack_base and BOOT->stack_size with
mach_setup_thread.
(S_exec_exec): Pass msg type arg for FILE arg to exec_exec.
Thu Dec 23 18:05:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* exec.c (do_exec): For a newtask exec when EXEC_SECURE is not set
and OLDTASK is not null, send the `task_create' RPC on OLDTASK
rather than mach_task_self ().
|