source: trunk/doc/ReleaseNotes.os2@ 1640

Last change on this file since 1640 was 1640, checked in by bird, 21 years ago

Release notes for GCC 3.3.5 / LIBC v0.6 alpha3.

  • Property cvs2svn:cvs-rev set to 1.22
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 24.1 KB
Line 
1
2
3 R e l e a s e N o t e s G C C f o r O S / 2
4 +----------------------------------------------------+
5
6
7(C)'2003-2004 InnoTek Systemberatung GmbH
8http://www.innotek.de
9(C)'2004 Knut St. Osmundsen
10
11
12GCC v3.3.5 / LIBC v0.6 - Alpha 3:
13---------------------------------
14
15 This release have been timebombed and will stop working at the
16 end of December 2004. The reason for this is that data structures
17 shared between LIBC 0.6 and all future LIBC versions are not yet
18 quite finalized. (For your comfort the timebomb will go away when
19 the betas start, and this is the last planned LIBC v0.6 alpha.)
20
21
22 New Features:
23
24 o Updated GCC to version 3.3.5.
25
26 o Replaced the signal implementation. The new implementation
27 is much closer to the POSIX specs and implements a lot of
28 new interfaces.
29
30 o Experimental delayed loading import libraries. emximp have
31 a new -l option for generating such libraries. At present
32 emximp can only generate a.out libraries of this kind - so
33 use emxomf to convert to OMF.
34
35 o The dlfcn.h functions are in LIBC now.
36
37 o New functions:
38 getgrouplist(), initgroups(), memalign(), valloc(),
39 mprotect(), _signal_os2(), _signal_sysv(),
40 __sigpause_bsd(), bsd_signal(), killpg(), psignal(),
41 sigaltstack(), sigblock(), sighold(), sigignore(),
42 siginterrupt(), sigpause(), sigrelse(), sigsetmask(),
43 sigtimedwait(), sigvec(), sigwait(), sigwaitinfo(),
44 sigqueue(), sigset(), getgrgid(), getpwnam(),
45 getpwuid(), setegid(), seteuid(), setregid(),
46 setresgid(), setresuid(), setreuid(),
47 setrgid(), setruid(), waitid(), wait3(),
48 wait4() and getopt_long_only().
49
50
51 Bug fixes;
52
53 o Sockets were broken on some systems. Hopefully, this
54 should be corrected now.
55
56 o stat() failed on a file open for writing.
57
58 o fork() didn't work for processes which allocated lot's
59 of memory. Fixed incorrect syncing of memory objects.
60
61 o ...
62
63
64 Known Limitiations/Problems:
65
66 o Static linking not possible - will be fixed.
67
68 o alarm() is still missing. Code is 80% done but didn't
69 make it for the release.
70
71 o Job control will only be applied to thread 1 in a process.
72 This won't change.
73
74 o Missing some process group interfaces required for
75 job control. They'll show up soon.
76
77
78
79GCC v3.3.4 / LIBC v0.6 - Alpha 2:
80---------------------------------
81
82 This release have been timebombed and will stop work at the
83 end of October 2004. The reason for this is that data structures
84 shared between LIBC 0.6 and all future LIBC versions are not yet
85 finalized.
86
87
88 New Features:
89
90 o Updated GCC to version 3.3.4.
91
92 o 2nd fork() implementation.
93 All binaries are by default forkable, use the link option
94 -Zno-fork to disable this.
95 The fork implementation rendered _rmutex useless and it
96 has been removed.
97
98 o Symlinks using EAs. This is work in progress. One of the
99 limitiations is that readir will not report DT_LNK yet.
100
101 o Unix compartment using chroot(). This offers a
102 redirection of '/' to the chroot'ed root. The entrance
103 to the compartment is the '/'. The exits are drive letters.
104 The unix compartment is inherited by LIBC child processes.
105
106 o getcwd() will now return the driveletter too (as VAC does)
107 when not inside the unix compartement.
108 _getcwdux() has been provided for porters which requires
109 behaviour like the old getcwd() implementation.
110
111 o Paths to unix files #defined in headers are now prefixed
112 with "/@unixroot" which will be redirected to where the
113 environment variable UNIXROOT points. After calling
114 chroot() the target of "/@unixroot" will be changed too.
115
116 o LIBC specific path rewriting (redirection). Built in is
117 "/dev/null", "/dev/tty" and "/@unixroot".
118 The environment variable LIBC_PATHREWRITERS is examined
119 during init and DLLs specified in it are loaded and called.
120 See src/emx/src/sys/pathrewrite.c for more details.
121
122 o Non-unix like mode - link option -Zno-unix.
123 This affects slashes and various other Unix-like features
124 like for instance fork and symlinks.
125
126 o Printf et al. have been extended to support some new format
127 specifiers. (It's still lacking a bit to be SuS comforming.)
128
129 o Sockets handles are now inherited by LIBC child processes.
130
131 o LIBC specific filehandle flags are now inherited by LIBC
132 child processes.
133
134 o The GCCxyz.DLL is no longer needed when LIBC is used.
135 However it is still shipped for special cases where LIBC
136 isn't needed.
137
138 o A good bunch of 'new' functions both from the SuS and from
139 various Unix flavors, even one or two PC functions have been
140 added. Accompanying these are new headers and header updates.
141 Here are most of the new function names:
142 __strverscmp(), _atfork_callback(), _getcwdux(),
143 _getdcwd(), _nsdbtaddsrc(), _nsdbtput(), _nsdispatch(),
144 _realrealpath(), canonicalize_file_name(), catclose(),
145 catgets(), catopen(), chown(), chroot(), eaccess(),
146 endgrent(), endnetgrent(), endusershell(), fchown(),
147 fstatfs(), fstatvfs(), getdtablesize(), getfsstat(),
148 getgrent(), getgrent_r(), getgrgid_r(), getgrnam_r(),
149 getloadavg(), getmntinfo(), getnetgrent(),
150 getpwent_r(), getpwnam_r(), getpwuid_r(), getrlimit(),
151 getusershell(), innetgr(), lchown(), link(), mknod(),
152 readlink(), setgrent(), setgroupent(), setgroups(),
153 setnetgrent(), setpassent(), setrlimit(),
154 setusershell(), sl_add(), sl_find(), sl_free(),
155 sl_init(), statfs(), statvfs(), strmode(), strtok_r(),
156 symlink() and sync().
157
158
159 Bug fixes:
160
161 o setlocale() have been rewritten. The code page is now
162 taken from the locale rather than OS/2. Old behaviour
163 is used if environment variable LIBC_SETLOCALE_OLDSTYLE
164 is defined.
165
166 o Buggy strspn() replaced by BSD implementation.
167
168 o Thread backend have been reworked fixing certain
169 problems when LIBC was loaded and initialized in threads
170 other than the primary one. A LIBC specific TLS api
171 was created during this effort.
172
173 o Fixed a missing export from GCCxyz.dll which was causing
174 incorrect behaviour of C++ exceptions in all previous
175 releases.
176
177 o Fixed a buffer overrun in iconv_open() which caused a
178 corruption of the FS selector register, thus crashing
179 the processing.
180
181 o ...
182
183
184 Known limitations and bugs:
185
186 o mktime() works incorrectly for exterme values causing
187 configure test to fail.
188
189 o NSS probably doesn't work.
190
191 o Trailing slashes of a path specification are not
192 handled correctly after the rewrite of the path
193 handling.
194
195 o New path handling is not DBCS ready.
196
197 o Socket handle duplication have not been implemented yet.
198
199 o The __<syscall> function are in the process of being
200 removed.
201
202 o Not tested with mozilla.
203
204
205
206v3.2.2 Beta 4 CSD 1:
207--------------------
208
209 Bug fixes:
210
211 o Fixed crash in file stream allocation code.
212
213 o Fixed incorrect time on machines which had DATETIME::timezone
214 set. This fix changes the time granularity from hundredths of
215 a second to milliseconds.
216
217 o Added the SPBCDATA struct, the defines FCF_CLOSEBUTTON and
218 BS_NOTEBOOKBUTTON and infosegment structs to os2emx.h
219
220 o Fixed bug in sys/locale.h where it hid the lconv struct.
221
222 o Fixed missing error number translations in getsockopt() and
223 setsockopt().
224
225 o Fixed potential conflict caused by sys/types.h not defining
226 _KEY_T with the key_t typedef.
227
228 o Fixed missing 64bit I/O support in ftell(), fstat() and stat().
229
230 o Fixed UCS-2 codepage mappings.
231
232 o Fixed problem with emxbind not recognizing option -e and
233 a problem with case sensitivity in the export checking.
234
235
236v3.2.2 Beta 4:
237--------------
238
239 (The changelog is removed, thus the release notes are more detailed.)
240
241 New features and fixes:
242
243 o Filehandle rewrite. Files, pipes and sockets now share the same
244 handle space.
245
246 o Updated binutils from v2.11.2 to v2.14 adding as-elf.exe and
247 ld-elf.exe as goodies for the adventurous.
248
249 o GCC defines __INNOTEK_LIBC__=0x005.
250 The value reflects the LIBC version, form: 0xGMM
251 Where G=major version and MM=middle version numbers.
252
253 o Changed library search algorithms for the linkers (emxomfld
254 and ld). Three variations, static, shared and shared+dll.
255 (The options indicated corresponds to what binutils 2.12.x
256 documents.)
257 static: (-Bstatic, -non_shared, -dn, -static)
258 1. libfoo_s.a
259 2. foo_s.a
260 3. libfoo.a
261 4. foo.a
262 shared: (default, -Bshared, -call_shared, -dy)
263 1. libfoo_dll.a
264 2. foo_dll.a
265 3. libfoo.a
266 4. foo.a
267 5. libfoo_s.a
268 6. foo_s.a
269 shared+dll: (-Zdll-search with -Bshared, -call_shared, -dy)
270 1. libfoo_dll.a
271 2. foo_dll.a
272 3. libfoo.a
273 4. foo.a
274 5. foo.dll
275 6. libfoo_s.a
276 7. foo_s.a
277
278 o Added some deadlock checking/termination checks to semphores.
279
280 o Added macros to os2emx.h for preserving FPU control word and
281 applied these to certain read and write operations in LIBC.
282
283 o Added feature to emxomfld to automatically convert a.out
284 libraries and objects to OMF (using temporary files). Enabled
285 by default but can be disabled by the option -Zno-autoconv.
286
287 o Added support to emximp for dlls.
288
289 o Added support for automatic conversion of dlls to temporary
290 import libraries emxomfld and ld.
291
292 o Added getopt_long() and changed getopt() to FreeBSD
293 implementations.
294
295 o Added a few more code page aliases.
296
297 o Added optional breakpoint in abort. The presense of the env.var.
298 LIBC_BREAKPOINT_ABORT triggers the breakpoint instruction.
299
300 o Added syslog interfaces (contrib from Yuri Dario).
301
302 o Added to libc and updated BSD db code to FreeBSD 5.1 level.
303
304 o Added to libc and updated regex code to FreeBSD 5.1 level.
305
306 o Ported the posix spawn api from GLIBC v2.3.2.
307
308 o Updated with os2emx.h flags for DosQueryMemState().
309
310 o Changed size_t to unsigned int (from unsigned long int) and
311 ptrdiff_t to signed int (from signed long int) to comply with
312 most of the other i386 environments.
313
314 o Changed abort and default signal termination messages to say
315 which process it's printed from.
316
317 o Changed the glob() and globfree() implemenation with a port of
318 the FreeBSD 5.1 implemenation.
319
320 o Changed so_ioctl() to os2_ioctl() to better match the toolkit.
321
322 o Changed time_t to be signed as in BSD & linux.
323 (Negative values means date/time before epoc.)
324
325 o Changed to FreeBSD implementation of difftime().
326
327 o Increased default stream buffer size to 2 pages.
328
329 o Workaround for DosSetFileLocksL() on non JFS volumes.
330
331 o Workaround for bad FIL_STANDARDL buffer handling in os2krnl.
332
333 o Fixed waitpid() to respect the WNOHANG flag.
334
335 o Fixed strerror() to set errno if an invalid error number is
336 specified.
337
338 o Fixed problem with emxexp emitting ordinal without being told.
339
340 o Fixed broken setenv().
341
342 o Fixed errno value for read() and write() when the handle isn't
343 opened for that operation.
344
345 o Fixed a bad record length problem in emxomf.
346
347 o Fixed type_tag too long issue in emxomf.
348
349 o Fixed repetition of main source file in HLL debuginfo (emxomf).
350
351 o Fixed weakld problem with selfrefering aliases.
352
353 o Fixed weakld problem with PUBLIC and COMM clash.
354
355 o Fixed problem with streams not being flushed on termination.
356
357 o Fixed define clash in float.h when in C99 mode.
358
359 o Fixed abend in GCC if TMPDIR or TMP was ending with a slash.
360
361 o Fixed crash in ld when having fixups to weak symbols.
362
363 o Fixed bad conversion of dll0*.o to OMF, the OMF version got an
364 unwanted stack object.
365
366 o New functions:
367 isblank(), ishexnumber(), isnumber(), mempcpy(), realpath(),
368 strnlen(), asctime_r(), ctime_r(), gmtime_r(), localtime_r(),
369 strerror_r(), usleep().
370
371 o New functions & globals (from FreeBSD 5.1):
372 imaxabs(), imaxdiv(), strtoimax(), strtoumax(), hcreate(),
373 hdestroy(), hsearch(), insque(), lfind(), lsearch(),
374 remque(), tdelete(), tfind(), tsearch(), twalk(), reallocf(),
375 strsignal(), sys_signame, sys_siglist, sys_nsig, regcomp(),
376 regerror(), regexec(), regfree(), + bsd db functions.
377
378 o New functions (from GLIBC 2.3.2):
379 error(), error_at_line(), strndup(), argz_add(),
380 argz_add_sep(), argz_append(), argz_count(), argz_create(),
381 argz_create_sep(), argz_delete(), argz_extract(),
382 argz_insert(), argz_next(), argz_replace(), argz_stringify(),
383 posix_spawnp() posix_spawn(), posix_spawnattr_destroy(),
384 posix_spawnattr_getflags(), posix_spawnattr_getpgroup(),
385 posix_spawnattr_getschedparam(),
386 posix_spawnattr_getschedpolicy(),
387 posix_spawnattr_getsigdefault(),
388 posix_spawnattr_getsigmask(), posix_spawnattr_init(),
389 posix_spawnattr_setflags(), posix_spawnattr_setpgroup(),
390 posix_spawnattr_setschedparam(),
391 posix_spawnattr_setschedpolicy(),
392 posix_spawnattr_setsigdefault(),
393 posix_spawnattr_setsigmask(),
394 posix_spawn_file_actions_addclose(),
395 posix_spawn_file_actions_adddup2(),
396 posix_spawn_file_actions_addopen(),
397 posix_spawn_file_actions_destroy(),
398 posix_spawn_file_actions_init()
399
400 o New headers:
401 nerrno.h (toolkit compatability).
402
403 o New headers (from FreeBSD 5.1):
404 search.h, sys/queue.h, net/if_types.h.
405
406 o New headers (from GLIBC 2.3.2):
407 features.h (somewhat crippled),
408 sys/gnu/cdefs.h (included from BSD styled sys/cdefs.h).
409
410 o Updated headers:
411 stddef.h (FreeBSD, sys/stddef.h (FreeBSD),
412 ulsitem.h (missing defines), os2emx.h, ...
413
414 o What I forgot...
415
416
417v3.2.2 Beta 3 Fix 1 (private build):
418------------------------------------
419
420 Fixes to LIBC:
421
422 o Crash if calloc was called before main().
423
424 o TZ parsing of timezones such as PST8EDT.
425
426 o sigsetjmp() and siglongjmp() visibility.
427
428
429v3.2.2 Beta 3:
430--------------
431
432 A few new features and fixes.
433
434 o Fixed a bunch of debug info problems.
435
436 o Added large file support.
437
438 o Enabled high memory support for LIBC. Two new options to GCC:
439 -Zhigh-mem and -Zhigh-low. If the program is to be enabled for
440 high memory use, specify -Zhigh-mem when linking.
441
442 Note that socket is not high memory enabled yet.
443
444 o Made LIBC preserve the FS selector.
445
446 o Added random() and *rand48() from BSD.
447
448 o Fixed crash with link386 and unresolved symbols.
449
450
451v3.2.2 Beta 2:
452--------------
453
454 A few bugfixes and a some new features (as usual).
455
456 o Added file locking support to LIBC.
457
458 o Fixed _System and _Optlink bugs and made _Optlink support
459 floating point argument passing in registers.
460
461 o Header updates related to limits and file locking primarily.
462
463 o Timezone fixes.
464
465 o Fixed some CRT init trouble in regards to getenv and putenv.
466
467 o And some other minor stuff..
468
469
470v3.2.2 Beta 1:
471--------------
472
473 A few bugfixes and a some new features.
474
475 o Locale support in libc.
476
477 o Implemented a different approach to OMF and weak symbols. This
478 new hack performs pre-linking before invoking the OMF linker
479 generating new .def files if needed and an extra object file with
480 aliases to resolve the weak symbols correctly.
481 The old approach will be used used when GCC_WEAKSYMS is present in
482 the environment.
483
484 Please note that due to a bug in BFD, weak symbols don't work
485 100% correctly. This will be addressed as soon as we have
486 performed the switch to a more recent version of binutils.
487
488 o A couple of new functions in libc, and a few corrections to
489 existing in respect to namespaces.
490
491 o Addressed issues with calling conventions. We now detect
492 incompatible calling conventions, emitting warnings and errors
493 where appropriate.
494
495 o _Optlink is much better, but there are still some issues
496 left. Passing prototyped floating point parameters to
497 _Optlink doesn't work. Mixing of parameters which go into
498 registers (eax, edx, ecx) and parameters which
499 don't - void foo(int eax, struct sss s, int edx) - doesn't
500 work. All these issues are being addressed and are expected
501 to be fixed in the next build.
502
503 o Changed GCC to link with shared libc by default. This means
504 that in order to link with the static libc one has to specify
505 -static. It also means that -Zmtd or -Zcrtdll are no longer
506 required for linking with shared libc and can be removed from
507 all makescripts.
508
509 o Changed EMXOMFLD defaults to ilink from Visual Age for C++
510 v3.6.5 or later (preferably later). The emxomfld usage output
511 will instruct you on how to use older linkers. For VAC308 and
512 VAC365 linkers /dbgpack is specified if debuginfo is to be
513 generated. Emxomf checks for EMXOMFLD_TYPE=link386 when choosing
514 debug info level.
515
516 o Shipping three extra libc dlls:
517 libc02.dbg: Unstripped version of libc02.dll. This is
518 identical except from the presense of debug
519 info.
520 libc02.prf: Linked together from profiled enabled
521 libraries using kProfiler.
522 libc02.elh: Standard libc but linked with an external
523 electrical fence heap from kLibDbg.
524 These libc02.* dlls can be used instead of libc02.dll. kLibDbg
525 and kProfiler is available in separate zip files at same
526 location as the rest of the InnoTek GCC suite. However these
527 external tools are provided as is. (I might actually not find
528 time to put them out yet.)
529
530 o Distribution is splitted into several zips:
531 -core.zip: All you really need.
532 -dbg.zip: Map files, unstripped tools and libs, and
533 libc02.elh.
534 -prf.zip: Profiling libraries and libc02.prf.
535 libc.zip: The runtime libraries. (included in core.)
536 The big zip is everything.
537
538v3.2.2 Alpha 3:
539---------------
540
541 Primarily bugfixes.
542
543 o Changed code generator for floating point truncations (double
544 to int casts and such) so PM can freely mess up the fpu status.
545
546 o We were using the wrong float.h in two sense. We're now using
547 the correct one which includes all the PC defines and
548 prototypes.
549
550 o Fixed a few issues with error defines and tcpip.
551 Note that some of the error defines have changed value in the
552 process so we could become compatible with the tcpip stack
553 and FreeBSD.
554
555 o Corrected bugs in a number of headers.
556
557 o Added more OS/2 prototypes and imports. There is still work
558 left on the header part,
559
560 o Optimized emxomf debug info conversion.
561
562 o Wrapped bsdselect for BSD 4.4 header mode to implement
563 bsdselect().
564
565 o .... what did we forget...
566
567
568v3.2.2 Alpha 2:
569---------------
570
571 A few bugfixes and a couple of new features.
572
573 o The TCP/IP headers and libraries scheme have been changed.
574 The default is the current OS/2 tcpip toolkit (BSD 4.4 based).
575 To target the older OS/2 tcpip stack (BSD 4.3 based) you must
576 define TCPV40HDRS before including any TCP/IP headers and make
577 sure usr/lib/tcpipv4 is searched before usr/lib (this is to
578 get the right libsocket). It is recommended to use the -D
579 compiler option for the define and either the LIBRARY_PATH or
580 the -L compiler/linker option for the library.
581
582 o There are a couple of new and updated based on FreeBSD 5.1.
583 sys\stdint.h and inttypes.h (and a few internal once) are new.
584 sys\types.h and unistd.h are the ones most heavily updated.
585 We're working on getting the headers and libc in a better
586 shape standardwise to easy compatability and portability.
587
588 o A infinite loop in emxomf has been fixed.
589
590 o Linker error on sopen() has been corrected.
591
592 o .... what did we forget...
593
594
595v3.2.2 Alpha 1:
596---------------
597
598 This is the first release from InnoTek, and it contains the InnoTek LIBC.
599 In addition to the new LIBC there is a number of other major changes:
600
601 o Name mangling in OMF mode have changed.
602 Until this release emxomf used to pretty much strip one leading '_'
603 from symbols when converting them to omf. This is now longer done
604 chiefly in order to correctly support mangling calling conventions
605 like __stdcall and __cdecl. This change have the following side
606 effects:
607 - _System and __cdecl no longer produces the same names and hence
608 all OS/2 API which are _System must be declared as _System in
609 order to link.
610 - Assembly code might need an extra underscore to work, or
611 perhaps change the prototypes to _System.
612 - Global variables are prepended and underscore, so mixing VAC and
613 GCC, or accessing globals from asm, take care.
614 (MSC v6.0 does this too, so it's not any uncommon practise.)
615
616 The OS/2 headers which are included are all updated to use _System.
617
618 o TCPIP headers are updated a quite a bit to match the toolkit ones
619 and to reflect the fact that the new libc does not a having common
620 handle space for files and sockets. These changes aren't 100%
621 completed yet, and usage probably will uncover some issues left in
622 there. Also for the programmer there is the following changes in
623 the apis provided:
624 - TCPV40HDRS are supported and should work like with the toolkit
625 headers. It will alias all functions to tcpip40_ editions
626 (using #defines) so we get the right imports thru -llibsocket.
627 - There is no support for sockets in select(). To do select on
628 sockets you will have to use bsdselect() or os2_select().
629 bsdselect() is only available for TCPV40HDRS. For
630 !defined(TCPV40HDRS) fd_set is in the emx/bsd format and not the
631 OS/2 tcpip v5.0 format.
632 - Socket IOCTLs are not supported by the ioctl() libc function
633 because of the separate handle space for sockets. For sockets
634 so_ioctl() and os2_ioctl() are used. os2_ioctl() is not available
635 when TCPV40HDRS is defined. According to the tcpref in v5.0
636 so_ioctl() only supports BSD ioctls.
637 - writev() and readv() also clashes with libc. For socket handles
638 use so_writev() and so_readv().
639
640 o The prefered OMF linker is now ilink. link386 will fail with an odd
641 error message if you tell gcc/g++ to make debug info. Set the
642 EMXOMFLD_LINKER environment variable to value ilink in order to use
643 ilink as OMF linker.
644 It likely that we will change the default OMF linker to ilink in an
645 later version of the GCC suite.
646
647 o .... what did we forget...
Note: See TracBrowser for help on using the repository browser.