Annotation of OpenXM/src/kan96xx/gc-4.14/README.amiga, Revision 1.1.1.1
1.1 maekawa 1:
2: ===========================================================================
3: Michel Schinz's notes
4: ===========================================================================
5: WHO DID WHAT
6:
7: The original Amiga port was made by Jesper Peterson. I (Michel Schinz)
8: modified it slightly to reflect the changes made in the new official
9: distributions, and to take advantage of the new SAS/C 6.x features. I also
10: created a makefile to compile the "cord" package (see the cord
11: subdirectory).
12:
13: TECHNICAL NOTES
14:
15: In addition to Jesper's notes, I have the following to say:
16:
17: - Starting with version 4.3, gctest checks to see if the code segment is
18: added to the root set or not, and complains if it is. Previous versions
19: of this Amiga port added the code segment to the root set, so I tried to
20: fix that. The only problem is that, as far as I know, it is impossible to
21: know which segments are code segments and which are data segments (there
22: are indeed solutions to this problem, like scanning the program on disk
23: or patch the LoadSeg functions, but they are rather complicated). The
24: solution I have chosen (see os_dep.c) is to test whether the program
25: counter is in the segment we are about to add to the root set, and if it
26: is, to skip the segment. The problems are that this solution is rather
27: awkward and that it works only for one code segment. This means that if
28: your program has more than one code segment, all of them but one will be
29: added to the root set. This isn't a big problem in fact, since the
30: collector will continue to work correctly, but it may be slower.
31:
32: Anyway, the code which decides whether to skip a segment or not can be
33: removed simply by not defining AMIGA_SKIP_SEG. But notice that if you do
34: so, gctest will complain (it will say that "GC_is_visible produced wrong
35: failure indication"). However, it may be useful if you happen to have
36: pointers stored in a code segment (you really shouldn't).
37:
38: If anyone has a good solution to the problem of finding, when a program
39: is loaded in memory, whether a segment is a code or a data segment,
40: please let me know.
41:
42: PROBLEMS
43:
44: If you have any problem with this version, please contact me at
45: schinz@alphanet.ch (but do *not* send long files, since we pay for
46: every mail!).
47:
48: ===========================================================================
49: Jesper Peterson's notes
50: ===========================================================================
51:
52: ADDITIONAL NOTES FOR AMIGA PORT
53:
54: These notes assume some familiarity with Amiga internals.
55:
56: WHY I PORTED TO THE AMIGA
57:
58: The sole reason why I made this port was as a first step in getting
59: the Sather(*) language on the Amiga. A port of this language will
60: be done as soon as the Sather 1.0 sources are made available to me.
61: Given this motivation, the garbage collection (GC) port is rather
62: minimal.
63:
64: (*) For information on Sather read the comp.lang.sather newsgroup.
65:
66: LIMITATIONS
67:
68: This port assumes that the startup code linked with target programs
69: is that supplied with SAS/C versions 6.0 or later. This allows
70: assumptions to be made about where to find the stack base pointer
71: and data segments when programs are run from WorkBench, as opposed
72: to running from the CLI. The compiler dependent code is all in the
73: GC_get_stack_base() and GC_register_data_segments() functions, but
74: may spread as I add Amiga specific features.
75:
76: Given that SAS/C was assumed, the port is set up to be built with
77: "smake" using the "SMakefile". Compiler options in "SCoptions" can
78: be set with "scopts" program. Both "smake" and "scopts" are part of
79: the SAS/C commercial development system.
80:
81: In keeping with the porting philosophy outlined above, this port
82: will not behave well with Amiga specific code. Especially not inter-
83: process comms via messages, and setting up public structures like
84: Intuition objects or anything else in the system lists. For the
85: time being the use of this library is limited to single threaded
86: ANSI/POSIX compliant or near-complient code. (ie. Stick to stdio
87: for now). Given this limitation there is currently no mechanism for
88: allocating "CHIP" or "PUBLIC" memory under the garbage collector.
89: I'll add this after giving it considerable thought. The major
90: problem is the entire physical address space may have to me scanned,
91: since there is no telling who we may have passed memory to.
92:
93: If you allocate your own stack in client code, you will have to
94: assign the pointer plus stack size to GC_stackbottom.
95:
96: The initial stack size of the target program can be compiled in by
97: setting the __stack symbol (see SAS documentaion). It can be over-
98: ridden from the CLI by running the AmigaDOS "stack" program, or from
99: the WorkBench by setting the stack size in the tool types window.
100:
101: SAS/C COMPILER OPTIONS (SCoptions)
102:
103: You may wish to check the "CPU" code option is appropriate for your
104: intended target system.
105:
106: Under no circumstances set the "StackExtend" code option in either
107: compiling the library or *ANY* client code.
108:
109: All benign compiler warnings have been suppressed. These mainly
110: involve lack of prototypes in the code, and dead assignments
111: detected by the optimizer.
112:
113: THE GOOD NEWS
114:
115: The library as it stands is compatible with the GigaMem commercial
116: virtual memory software, and probably similar PD software.
117:
118: The performance of "gctest" on an Amiga 2630 (68030 @ 25Mhz)
119: compares favourably with an HP9000 with similar architecture (a 325
120: with a 68030 I think).
121:
122: -----------------------------------------------------------------------
123:
124: The Amiga port has been brought to you by:
125:
126: Jesper Peterson.
127:
128: jep@mtiame.mtia.oz.au (preferred, but 1 week turnaround)
129: jep@orca1.vic.design.telecom.au (that's orca<one>, 1 day turnaround)
130:
131: At least one of these addresses should be around for a while, even
132: though I don't work for either of the companies involved.
133:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>