cae36a52 |
1 | 2008-08-16 |
2 | Creation of a CHANGES file |
3 | |
4 | A entry starts with the date followed by a newline and then |
5 | the content follows. Usualy, the first line after the date |
6 | is some short description and then a loger follows. |
7 | To terminate the entry, intert two newlines at the end. |
8 | |
9 | So this entry serves as an exampe. Hope this is simple enougth :-) |
10 | |
11 | |
12 | 2008-08-16 |
13 | New debugging implemented |
14 | |
15 | Debug code removed from mem.c and trap.c and rewrote in |
16 | acid. See the DEBUGGING section in the HOWTO file for further |
17 | information. |
18 | |
19 | |
20 | 2008-08-17 |
21 | Fontconfig crash fixed, Debug code fixes |
22 | |
23 | libfontconfig mapped some config files with len == 0, this |
24 | was not handled correctly so it crashed. |
25 | |
26 | the umem() acid function didnt check for zero segment |
27 | pointers so it showd invalid data for the mostly unused |
28 | SEGSHARED segment. |
29 | |
30 | |
31 | 2008-08-18 |
32 | Some minjor fixes |
33 | |
34 | more checking in memory manager |
35 | sys_[gs]etpgrp implemented for pid != current->pid |
36 | renamed emu.c to main.c |
37 | set UID/GID/EUID/EGID in AUXVEC on exec() |
38 | |
39 | |
40 | |
41 | 2008-08-21 |
42 | Making prof(1) work (at least dont let it crash) |
43 | |
44 | mem.c: convertseg(): |
45 | |
46 | Peplaced read() calls to pread() to prevent profiling related crash. |
47 | The problem was that convertseg() detaches the DATA segment reattaches |
48 | a new one and used read() to get the contents back. read() was a |
49 | profiled function and the profiler finds its structures cleared to |
50 | zero and crashes. We now use pread() that is a unprofiled assembly |
51 | syscall stub. |
52 | |
53 | Still, child processes and kprocs are not currently profiled. |
54 | |
55 | |
56 | 2008-08-22 |
57 | AF_UNIX client sockets implemented |
58 | |
59 | Its a little bit of a hack. We do the AF_UNIX handling like APE |
60 | does so we can interact with the ported Xservers Xbr and equis. |
61 | |
62 | |
63 | 2008-08-23 |
64 | Work arround for mozilla GPFAULT bug |
65 | |
66 | If a process is notified that he has pending signals with the |
67 | "sig" message and if the note interrupts the execution of a |
68 | INT 0x80 instruction, a syscall in the handler causes mystic |
69 | crashes i dont understand. |
70 | |
71 | The work arround detects the condition and delays the |
72 | handling of the signals returning back to userspace. |
73 | |
74 | I could reproduce the condition and this hack seems |
75 | to work. I should write some testcase to analyze this |
76 | condition further. Maybe its some kernel bug. |
77 | |
78 | |
79 | 2008-08-23 |
80 | Minjor file related fixes/cleanups |
81 | |
82 | - Implemented in miscdev.c for writable /dev/zero |
83 | - sys_umask() now returns the previous umask |
84 | - default umask set to 022 |
85 | - sys_umask() sys_cwd() moved from proc.c to file.c |
86 | |
87 | |
88 | 2008-08-24 |
89 | linuxemu.rc script updated |
90 | |
91 | - resolve relative rootpath |
92 | - generate /etc files for hostname and resolv.conf if not readable |
93 | - removed enviroment user->USER home->HOME conversion in main.c |
94 | |
95 | |
96 | 2008-09-10 |
97 | Better work arround for mozilla GPFAULT bug |
98 | |
99 | The problem arises because of the handling of notes in Plan9 kernel. |
100 | |
101 | It happens if linux code does a syscall while here are usernotes (like |
102 | the "sig" ones) queued in the process note[] array. Then the trap() |
103 | function in the kernel will enqueue the trap in the queue and the user |
104 | note gets handled first. |
105 | |
106 | Now, after we have done a syscall in the note handler of the user |
107 | signal, notify() gets called in the kernel that detects the next note |
108 | to be a trap and thinks the note handler itself caused it and kills |
109 | the process. |
110 | |
111 | I suggested a patch that makes sure traps get enqued on the head of |
112 | the note[] array so that they get handled before a user note but its |
113 | not decided to be applied yet so here is the work arround. |
114 | |
115 | The work arround avoids posting notes to a process that could possibly |
116 | cause a trap in the future before the usernote gets handled. (this |
117 | excluded all linux code because it can issure a syscall anytime) The |
118 | only time it is save to post notes is if we are in linuxemu syscall |
119 | handler. |
120 | |
121 | This is mostly the case anyway when notes are used to interrupt |
122 | blocking syscalls (waking a process sleeping in a sigsuspend for |
123 | example) |
124 | |
125 | Linuxcode that would spin in a endless loop will not be interrupted by |
126 | notes/signals anymore. |
127 | |
128 | |
129 | 2008-09-20 |
130 | Minjor stuff |
131 | |
132 | Masking more fp-errors in trap.c. (To get some dos game running in |
133 | bochs) |
134 | |
135 | prboom and zsnes was bumpy sometimes because our select() didnt set |
136 | the struct timeval *tvp to the time the select call did not slept. |
137 | |
138 | I stat function pointer was removed from the Ufile struct and all the *dev.c |
139 | files. I have no need to return custom stats from the devices right now |
140 | (except for /dev/zero (mode & 0222)) so i move the only case where its |
141 | needed into the hackish dir2statmode function in p9dev.c. Here is also |
142 | an fd field added to the generic Ufile scruct because most of all devices |
143 | use plan9 filedescriptors at some point and we use it in fstat(). Saves some |
144 | casting and fstat can use the fd (when its available) to make a dirstat() and |
145 | convert to linux format. |
146 | |
147 | For the postnote stuff mentiond in the last changes entry, here is a global |
148 | flag in main.c (notehack = 1) to enable/disable the work arround. |
149 | |
150 | |
151 | 2008-09-21 |
152 | atime/mtime, AT_CLKTCK |
153 | |
154 | new syscalls |
155 | - sys_utime |
156 | - sys_utimes |
157 | - sys_times |
158 | |
159 | the AT_CLKTCK entry in exec is set to _tos->cyclefreq |
160 | now. |
161 | |
162 | |
163 | 2008-10-05 |
164 | faster death proc detection |
165 | |
166 | Using linuxemu from terminal caused huge network load |
167 | because we did a lookup of /proc/# on every timer round. |
168 | |
169 | now we keep open filedescriptors for /proc/#/args and |
170 | /proc/#/note in the proc structure and only check for |
171 | dead procs every second. |
172 | |
173 | |
174 | 2008-10-05 |
175 | sound (/dev/dsp) |
176 | |
177 | OSS sound implemented, its only tested with some SDL |
178 | apps (zsnes, prboom). |
179 | |
180 | The output frequency is hardcoded at 44100 Hz and 2 |
181 | channels stereo at the moment. |
182 | |
183 | |
184 | 2008-10-20 |
185 | dsp, stat, mkfile, -d, dns, fs |
186 | |
187 | dspdev detects output frequency now and implement more |
188 | ioctls. |
189 | |
190 | here is an universal Ustat and Udirent structs to separate |
191 | the linux formats from driver code. |
192 | |
193 | big chnage in all devices, added indirection layer fs.c that |
194 | has some kind of mapping from path -> device and forwards |
195 | filesystem calls to device drivers. now drivers can return |
196 | correct stat information. |
197 | |
198 | this is needed for implementing /dev/pts later. |
199 | |
200 | removed the /etc/(hosts resolve.conf) generation code from |
201 | linuxemu.rc because they dont work in some cases and |
202 | cause maintence nightmares. |
203 | |
204 | use the -d switch for turning on trace to stderr. so we dont |
205 | need to always change the if(0) from trace.c and recompile. |
206 | |
207 | force compiler flags in mkfile, the -T from new mkone breaks |
208 | build on current distribution. |
209 | |
210 | |
211 | 2008-10-27 |
212 | lots of fixes |
213 | |
214 | - off by one error basepath() |
215 | - chmod used access which resolves always to link target |
216 | - runlink |
217 | - the note hack broke sigprocmask, and sometimes failed |
218 | to interrupt a sleepproc(). this is now handled in |
219 | interruptproc(). (this makes drawterm work on linuxemu) |
220 | - write() to pty was not synchronized/not blocking that |
221 | caused some apps to spin in write() or others to drop |
222 | characters (curses). |
223 | |
224 | |
225 | 2008-10-28 |
226 | grow filedescriptor table in dup2 |
227 | |
228 | - if the new fd supplied is out if range, dont return error but |
229 | grow the fdtab so it fits in. (this make configure work) |
230 | |
231 | 2008-11-15 |
232 | lots of changes |
233 | |
234 | - Updated HOWTO |
235 | |
236 | - included <ureg.h> in some modules. this fixed the type |
237 | signature errors of 8l when compiling with -T flag. |
238 | |
239 | - fixed bug in exec() |
240 | exec needs to run outside the the note context, because it |
241 | is deleting memory segments and that can cause the removal |
242 | of the stack segment as well. we have to set current->syscall |
243 | to nil to avoid getting a note posted that could interrupt us in |
244 | the middle of some malloc() or something. |
245 | |
246 | - sys_pipe() FD_CLOEXEC |
247 | sys_pipe() create the filedescriptors with FD_CLOEXEC bit |
248 | set as open() does. this is wrong and caused gimp plugins |
249 | to fail. |
250 | |
251 | - new signal handling code |
252 | signal.c has changed a bit. now CLONE_THREAD procs |
253 | share a signal queue and proc() uses wantsignal() to |
254 | figure out what process to interrupt. |
255 | |
256 | - restartable syscalls |
257 | re process SA_RESTART flag now and are able to restart syscalls |
258 | that got interrupted by such signals. sleepproc() returns -ERESTART |
259 | by default now. sys_poll() and sys_sleep() will return -EINTR in |
260 | any case. |
261 | |
262 | - fs reorganized, [sg]etxattr added, p9cwd added as an optimization |
263 | to avoid walks(). |
264 | |
265 | - ptydev emits SIGINTR to process group, added tty to Uproc. |
266 | |
267 | - added fddev (/dev/fd) |
268 | |
269 | - exitproc() now emits SIGCHLD. |
270 | |
271 | - mem.c: addrok() now takes a prot flags parameter so we can test |
272 | for expected memory protection too. |
273 | |
274 | - profme(): profiling support for child processes added |
275 | |
276 | - initialization completly moved in main() |
277 | |
278 | - fchmod, fchown, ftruncate moved to file.c |
279 | |
280 | |
281 | 2008-10-19 |
282 | just code dressing... |
283 | |
284 | renamed some files, added typedef for Ureg, abstracted syscall specific |
285 | code in linuxcall.c, more tracing... |
286 | |
287 | |
288 | 2009-02-06 |
289 | Fixed the opera fork() no more threads bug |
290 | |
291 | There was a problem of dns resolver zombie processes created by |
292 | operseemed that used up all the process table due to incomplete |
293 | implementation of clone(). Linux specified a exit signal in the lower |
294 | byte of the clone- flags parameter to tell if the process should hang |
295 | arround as zombie so that the parent can wait for it. If no signal is |
296 | specified here, then the process should exit without becoming a |
297 | zombie. Here is also the case that the parent ignores the SIGCHLD |
298 | signal or has SA_NOCHLDWAIT flags on the SIGCHLD set. In that case |
299 | the child should also purge itself. I implemented reparenting, |
300 | because i suspected the bug there but this was not the case. |
301 | |
302 | Here is a new uprocs() acid function that dumps the proctab. |
303 | |
304 | |
305 | 2009-02-18 |
306 | Minjor changes |
307 | |
308 | Added anonymous area merging to reduce the area count and removed |
309 | redundant clearmem calls. Changed Uwaitq lock from QLock to normal |
310 | spinlock. Removed some trace() calls. |
311 | |
312 | The biggest change is that linuxemu.rc now is able to start equis. This |
313 | simplyfies writing wrapper scripts to start a browser or other X11 apps. |
314 | |
315 | |
316 | 2009-03-25 |
317 | Simplyfied area merging in memory manager |
318 | |
319 | Areas are doubly linked now so its easier to get the previous area for |
320 | mergearea(). |
321 | |
322 | |
323 | 2009-03-30 |
324 | Fixed man-bug. (Restarting syscalls) |
325 | |
326 | Restarting syscalls failed if the singal that was send to the interrupted |
327 | process was blocked. This is fixed now. |
328 | |
329 | |
330 | 2009-04-01 |
331 | fixed awd-bug (use builtin cd), make errors more verbose in exec.c |
332 | |
333 | bla |
334 | |
335 | 2009-05-11 |
336 | fix pipeseek, added pread64, pwrite64 syscalls. |
337 | |
338 | forgot to return -ESPIPE on seekpipe. |
339 | implemented pread64/pwrite64 (needed by git). |
340 | |
341 | |
342 | 2009-07-25 |
343 | random stuff |
344 | |
345 | - incred bufproc read and queuesize to 4K/64K (fixes links2 -g hang) |
346 | - reuse buffers in bufproc |
347 | - cleanup timer stuff, introduce 5ms min sleep time, avoid interrupt note |
348 | - fix sys_select() to always modify tv |
349 | - fix format mismatch in nextsignal |
350 | - dont combine in sys_readv/sys_writev |
351 | - fix open in devdsp.c |
352 | - s/memcpy/memmove/g |
353 | - dont reset segment registers for signal handlers |
354 | - possibly more that i forgot... use history(1) |
355 | |
356 | |
357 | 2009-07-27 |
358 | fixed audio delay |
359 | |
360 | keeping track of how many samples (time) has been submitted |
361 | to /dev/audio already and wait when the buffer grows over some |
362 | treshold. this removes the audio delay from games :) |
363 | |
364 | |
365 | 2009-07-29 |
366 | doc |
367 | |
368 | put documentation in doc subdirectory. |
369 | |
370 | |
371 | 2009-07-31 |
372 | mremap, segbrk shrinking, pagesize, doc |
373 | |
374 | rewrote mremap implementation to correctly clear area for shrinking. |
375 | handles more error cases and checks for overlap. this fixes the gimp |
376 | invalid pointer bug. |
377 | |
378 | removed segment shrinking with segbrk as this feature may be removed |
379 | in newer kernel versions as it introduced a bug where it is possible to |
380 | unmap pages while the kernel touches them and cause a panic. |
381 | |
382 | removed the ROUNDPAGE() macro from dat.h. heres a pagealign() |
383 | function in mem.c now and the global variable pagesize that is initialized |
384 | in main. |
385 | |
386 | some documentation cleanups. |
387 | |
388 | |
389 | 2009-08-24 |
390 | dspdev improvements. |
391 | |
392 | do some linear interpolation in audio resampling to get better sound quality. |
393 | avoid copy when no resampling is required. reflect queue full in |
394 | GETOSPACE ioctl. cleanup code to avoid vlong calculations. |
395 | |
396 | |
397 | 2009-08-26 |
398 | bugs |
399 | |
400 | fixed uninitialized values in stat wich caused -EOVERFLOW on linux |
401 | kernel build. removed wakeableproc() (changes in signal.c, ptydev.c, |
402 | bufproc.c, poll.c). fixed sigsuspend race. simpler waitq code (uses |
403 | lesser memory too). fixed waitpid race. added /dev/dsp0 to dspdev |
404 | (makes mikmod work). fixed rfork/notify crash. |
405 | |
406 | |
407 | 2009-08-30 |
408 | mplayer, bb, audacity play cursor, bugs |
409 | |
410 | refactored timers, alarm and deadproccheck into one timerproc and |
411 | removed timer.c. every Uproc has a timeout field now that is the |
412 | time in nanoseconds when the timeout expires. on expiration, the |
413 | timerproc sets the value to zero and does a wakeup on the |
414 | timed out process. a process sets/resets its timeout with |
415 | settimeout(delta). the remaining time in ms can be queried with |
416 | timeoutremain(). |
417 | |
418 | fixed missing protection flags in setupstack. |
419 | |
420 | more acurate GETOSPACE (mplayer, bb) and new GETOPTR |
421 | ioctl (needed for audacity play cursor) in dspdev.c. |
422 | |
423 | handle kill note as SIGKILL in trap.c. |
424 | |
425 | handle illegal instruction as SIGILL as pass/restore sigcontext |
426 | (needed for mplayer runtime SSE check). |
427 | |
428 | sys_sigreturn now uses current->ureg->sp to find the restore |
429 | information. |
430 | |
431 | preallocate all Uprocs. |
432 | |
433 | |
434 | 2009-09-06 |
435 | cleanup |
436 | |
437 | removed dev argument from fdgetfile() |
438 | |
439 | return correct -ENOSOCK in socketcall() |
440 | |
441 | fixed pread/pwrite, dev->read/dev-write now take a offset |
442 | argument. |
443 | |
444 | fixed time diff overflow in dspdev |
445 | |
446 | |
447 | 2009-09-08 |
448 | fuckup, O_TRUNC, restaring syscalls, rc, getdents |
449 | |
450 | fucked up: |
451 | - seek didnt work for whence == 1 as the plan9 seek pointer was |
452 | never moved in read due to change to pread. this caused cp to |
453 | corrupt the output file when it skipped null blocks. |
454 | - basepath in fs.c was broken |
455 | - readv/writev didnt increment the file offset |
456 | |
457 | what we have now is that file.c does all the offset tracking, and |
458 | devices provide a size() function that returns the actual file size. |
459 | |
460 | added O_TRUNC for open. |
461 | |
462 | signal restarting sometimes resulted in returning -ERESTART to |
463 | userspace. this could happen when another thread had stolen |
464 | our signal. we now restart the syscall in nextsignal() even if |
465 | here was no signal pending for us. |
466 | |
467 | removed the exitsig function from linuxemu.rc as we can use |
468 | the -terminate option of the xserver to get it shutdown. |
469 | |
470 | read the whole directory, then calculate file offset for directory |
471 | entries. |
472 | |
473 | |
474 | 2009-09-12 |
475 | signal handling changes, acid, rc |
476 | |
477 | |
478 | 2009-09-20 |
479 | sockets, basepath, alarm |
480 | |
481 | fixed error in basepath (*ps vs ps) and implemented nonblocking connect, |
482 | server sockets, socketpair, sys_alarm |
483 | |
484 | |
485 | 2009-10-13 |
486 | lots of changes |
487 | |
488 | simplified locking by making process wakeup non blocking. |
489 | to not miss wakeups, the to be suspended proc should call wakeme(1) |
490 | before it goes to sleep. |
491 | |
492 | timers for alarm/itimer have been moved to the per "process" signal |
493 | data. current->timeout is still local to the current "thread". |
494 | |
495 | sys_kill() now makes sure we only send one signal per "process". |
496 | |
497 | syscall restarting now can use the Urestart (current->restart) |
498 | structure to remember state. (implemented for nanosleep, poll and |
499 | select) |
500 | |
501 | changed default to non tracing. |
502 | |
503 | pty now handles winsize changes. fixing current tty changing. (ssh bug, |
504 | rxvt bug) |
505 | |
506 | added /dev/random and /dev/urandom to miscdev. |
507 | |
508 | more ioctls for dspdev. |
509 | |
510 | enforce non reentancy for traps. |
511 | |
512 | |
513 | 2009-10-15 |
514 | fixed sys_brk() |
515 | |
516 | we now use a separate segment for the BSS and dont intermix mmap and brk. |
517 | thanks jibanes for reporting! |
518 | |
519 | |
520 | 2010-02-27 |
521 | futex, TLS, mprotect |
522 | |
523 | implemented sys_futex() finally |
524 | |
525 | changed tls to use the new /dev/gdt interface to change its |
526 | process segment descriptors |
527 | |
528 | fixed mprotect |
529 | |
530 | |
531 | 20010-04-30 |
532 | linuxemu.rc gone, documentation |
533 | |
534 | removed linuxemu.rc and replaced it with linux. |
535 | |
536 | usage: linux [-h] [-d...] [-u uid] [-g gid] [-startx] [-display :n] [-e emubin] [-r linuxroot] command [args ...] |
537 | |
538 | linuxroot is now an optional parameter (-r). it will default to /sys/lib/linux. |
539 | |
540 | dont hide /lib/tls anymore and bind devarch. if you dont want to |
541 | patch your kernel with the segdescr patch and use mroot[-linuxemu].tbz |
542 | you can rename /lib/tls to /lib/_tls_disabled_. |
543 | |
544 | |
545 | 2010-05-02 |
546 | exit_group, exec, futex, waitpid, quoted arguments |
547 | |
548 | properly implement exit_group and zap all threads. notify |
549 | all parent threads. |
550 | |
551 | zap threads in exec. |
552 | |
553 | implement FUTEX_REQUEUE and FUTEX_CMP_REQUEUE. |
554 | |
555 | handle WALL, WCLONE and WNOHANG in waitpid. |
556 | |
557 | preserve quoted arguments to linux. |
558 | |
559 | |
560 | 2010-05-11 |
561 | select/poll and EBADF, execve malloc, set_thread_area, initproc, SIGSTOP/SIGCONT, |
562 | tty, getsid, getpeeraddr, /proc |
563 | |
564 | select and poll never return -EBADF but ignore the offending |
565 | filedescriptor. this is wrong in the manpage! (this was needed |
566 | to survive the python configure script) |
567 | |
568 | handle malloc errors in execve and dont panic when elf |
569 | loading fails but kill the process. |
570 | |
571 | detect empty descriptors in set_thread_area so descriptors |
572 | can be freed. |
573 | |
574 | move some of the initialization from main to initproc. |
575 | |
576 | SIGSTOP/SIGCONT handling now works for thread groups. for this |
577 | we now have stopproc() and contproc() that are called from the |
578 | signal code when SIGSTOP or SIGCONT signal is received. each Uproc |
579 | now has a traceproc callback that is called when we enter or |
580 | exit the kernel. zapthreads() and stopproc() use this to get all threads |
581 | in the wanted state. for stopped procs, waiting happens in |
582 | the signal code so calling handlesignals() of a stopped proc will |
583 | block until it gets killed or continued. |
584 | |
585 | new fields in Uproc: |
586 | traceproc, tracearg - called when entering or exiting the kernel |
587 | wstate - current wait state of this process. WEXITED, WSTOPPED, WCONTINUED. |
588 | wevent - like wstate, but reset by waitpid |
589 | comm - double null terminated string array. first entry is the full exe name |
590 | followd by the exeve arguments. |
591 | |
592 | heres a new format %S for signal numbers. |
593 | |
594 | the per thread tty is gone. the tty is now in the per process signal queue. |
595 | gettty() and settty() can be used to modify it. ptydev now allows opening |
596 | the slave tty multiple times. (fixes midnight commander error) |
597 | |
598 | implemented sys_getsid(). |
599 | |
600 | fix AF_INET padding and byte order for getpeername socketcall. |
601 | |
602 | implemented /proc (procdev). fddev is gone. /dev/tty handled by |
603 | ptydev now. this makes pkill, ps, top and inkscape work! |
604 | |
605 | |
606 | 2010-05-28 |
607 | fixed pipe filedescriptor leak in AF_UNIX |
608 | |
609 | we leaked the sock->other descriptor when failing to connect |
610 | a AF_UNIX socket. thanks yarikos for reporting! |
611 | |
612 | |
613 | 2011-08-05 |
614 | rename to existing symlink target bug, profine -> profile |
615 | |
616 | renaming a symlink to a existing symlink would cause the |
617 | file file to be renamed to .udir.L.udir.L.... |
618 | |
619 | fix profine/profile typo |
620 | |
621 | 2014-11-20 |
622 | change uname release to 3.2.1 to make debian 7.0 not complain |
623 | (thanks henesy) |