~ubuntu-branches/ubuntu/raring/boost-build/raring

« back to all changes in this revision

Viewing changes to jam_src/boehm_gc/doc/README.amiga

  • Committer: Bazaar Package Importer
  • Author(s): Steve M. Robbins
  • Date: 2008-08-06 00:38:31 UTC
  • mfrom: (4.1.1 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080806003831-zr65893244swds0b
Tags: 2.0-m12-2
* debian/rules: Do not install /etc/user-config.jam.
* debian/site-config.jam: New.  Install into /etc instead of empty
  example.  Closes: #493323.

* debian/control: Update homepage.  Update description.  Closes:
  #493510.  Update Standards-Version to 3.8.0; no changes.

* debian/compat: New.  Set compat level to 7.
* debian/rules: Remove DH_COMPAT setting.
* debian/control: Change debhelper build-dep to version >= 7.

* debian/control: Remove docbook-to-man, bison from build-deps.

* debian/rules: Clean up upstream source by removing debian/conffiles.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
===========================================================================
 
2
            Kjetil S. Matheussen's notes (28-11-2000)
 
3
===========================================================================
 
4
Compiles under SAS/C again. Should allso still compile under other
 
5
amiga compilers without big changes. I haven't checked if it still
 
6
works under gcc, because I don't have gcc for amiga. But I have
 
7
updated 'Makefile', and hope it compiles fine.
 
8
 
 
9
 
 
10
WHATS NEW:
 
11
 
 
12
1.
 
13
   Made a pretty big effort in preventing GCs allocating-functions from returning
 
14
   chip-mem.
 
15
 
 
16
   The lower part of the new file AmigaOS.c does this in various ways, mainly by
 
17
   wrapping GC_malloc, GC_malloc_atomic, GC_malloc_uncollectable,
 
18
   GC_malloc_atomic_uncollectable, GC_malloc_stubborn, GC_malloc_ignore_off_page
 
19
   and GC_malloc_atomic_ignore_off_page. GC_realloc is allso wrapped, but
 
20
   doesn't do the same effort in preventing to return chip-mem.
 
21
   Other allocating-functions (f.ex. GC_*_typed_) can probably be
 
22
   used without any problems, but beware that the warn hook will not be called.
 
23
   In case of problems, don't define GC_AMIGA_FASTALLOC.
 
24
 
 
25
   Programs using more time actually using the memory allocated
 
26
   (instead of just allocate and free rapidly) have
 
27
   the most to earn on this, but even gctest now normally runs twice
 
28
   as fast and uses less memory, on my poor 8MB machine.
 
29
 
 
30
   The changes have only effect when there is no more
 
31
   fast-mem left. But with the way GC works, it
 
32
   could happen quite often. Beware that an atexit handler had to be added,
 
33
   so using the abort() function will make a big memory-loss.
 
34
   If you absolutely must call abort() instead of exit(), try calling
 
35
   the GC_amiga_free_all_mem function before abort().
 
36
 
 
37
   New amiga-spesific compilation flags:
 
38
 
 
39
   GC_AMIGA_FASTALLOC - By NOT defining this option, GC will work like before,
 
40
                        it will not try to force fast-mem out of the OS, and
 
41
                        it will use normal calloc for allocation, and the rest
 
42
                        of the following flags will have no effect.
 
43
 
 
44
   GC_AMIGA_ONLYFAST - Makes GC never to return chip-mem. GC_AMIGA_RETRY have
 
45
                       no effect if this flag is set.
 
46
 
 
47
   GC_AMIGA_GC - If gc returns NULL, do a GC_gcollect, and try again. This
 
48
                 usually is a success with the standard GC configuration. 
 
49
                 It is allso the most important flag to set to prevent
 
50
                 GC from returning chip-mem. Beware that it slows down a lot
 
51
                 when a program is rapidly allocating/deallocating when
 
52
                 theres either very little fast-memory left or verly little
 
53
                 chip-memory left. Its not a very common situation, but gctest
 
54
                 sometimes (very rare) use many minutes because of this.
 
55
 
 
56
   GC_AMIGA_RETRY - If gc succeed allocating memory, but it is chip-mem,
 
57
                    try again and see if it is fast-mem. Most of the time,
 
58
                    it will actually return fast-mem for the second try.
 
59
                    I have set max number of retries to 9 or size/5000. You
 
60
                    can change this if you like. (see GC_amiga_rec_alloc())
 
61
 
 
62
   GC_AMIGA_PRINTSTATS - Gather some statistics during the execution of a
 
63
                         program, and prints out the info when the atexit-handler
 
64
                         is called.
 
65
 
 
66
   My reccomendation is to set all this flags, except GC_AMIGA_PRINTSTATS and
 
67
   GC_AMIGA_ONLYFAST.
 
68
 
 
69
   If your program demands high response-time, you should
 
70
   not define GC_AMIGA_GC, and possible allso define GC_AMIGA_ONLYFAST.
 
71
   GC_AMIGA_RETRY does not seem to slow down much.
 
72
 
 
73
   Allso, when compiling up programs, and GC_AMIGA_FASTALLOC was not defined when
 
74
   compilling gc, you can define GC_AMIGA_MAKINGLIB to avoid having these allocation-
 
75
   functions wrapped. (see gc.h)
 
76
 
 
77
   Note that GC_realloc must not be called before any of
 
78
   the other above mentioned allocating-functions have been called. (shouldn't be
 
79
   any programs doing so either, I hope).
 
80
 
 
81
   Another note. The allocation-function is wrapped when defining
 
82
   GC_AMIGA_FASTALLOC by letting the function go thru the new
 
83
   GC_amiga_allocwrapper_do function-pointer (see gc.h). Means that
 
84
   sending function-pointers, such as GC_malloc, GC_malloc_atomic, etc.,
 
85
   for later to be called like f.ex this, (*GC_malloc_functionpointer)(size),
 
86
   will not wrap the function. This is normally not a big problem, unless
 
87
   all allocation function is called like this, which will cause the
 
88
   atexit un-allocating function never to be called. Then you either
 
89
   have to manually add the atexit handler, or call the allocation-
 
90
   functions function-pointer functions like this;
 
91
   (*GC_amiga_allocwrapper_do)(size,GC_malloc_functionpointer).
 
92
   There are probably better ways this problem could be handled, unfortunately,
 
93
   I didn't find any without rewriting or replacing a lot of the GC-code, which
 
94
   I really didn't want to. (Making new GC_malloc_* functions, and just
 
95
   define f.ex GC_malloc as GC_amiga_malloc should allso work).
 
96
 
 
97
 
 
98
   New amiga-spesific function:
 
99
 
 
100
     void GC_amiga_set_toany(void (*func)(void));
 
101
 
 
102
   'func' is a function that will be called right before gc has to change
 
103
   allocation-method from MEMF_FAST to MEMF_ANY. Ie. when it is likely
 
104
   it will return chip-mem.
 
105
 
 
106
 
 
107
2. A few small compiler-spesific additions to make it compile with SAS/C again.
 
108
 
 
109
3. Updated and rewritten the smakefile, so that it works again and that
 
110
   the "unnecesarry" 'SCOPTIONS' files could be removed. Allso included
 
111
   the cord-smakefile stuff in the main smakefile, so that the cord smakefile
 
112
   could be removed too. By writing smake -f Smakefile.smk, both gc.lib and
 
113
   cord.lib will be made.
 
114
 
 
115
 
 
116
 
 
117
STILL MISSING:
 
118
 
 
119
Programs can not be started from workbench, at least not for SAS/C. (Martin
 
120
Tauchmanns note about that it now works with workbench is definitely wrong
 
121
when concerning SAS/C). I guess it works if you use the old "#if 0'ed"-code,
 
122
but I haven't tested it. I think the reason for MT to replace the
 
123
"#if 0'ed"-code was only because it was a bit to SAS/C-spesific. But I
 
124
don't know. An iconx-script solves this problem anyway.
 
125
 
 
126
 
 
127
BEWARE!
 
128
 
 
129
-To run gctest, set the stack to around 200000 bytes first.
 
130
-SAS/C-spesific: cord will crash if you compile gc.lib with
 
131
 either parm=reg or parm=both. (missing legal prototypes for
 
132
 function-pointers someplace is the reason I guess.).
 
133
 
 
134
 
 
135
tested with software: Radium, http://www.stud.ifi.uio.no/~ksvalast/radium/
 
136
 
 
137
tested with hardware: MC68060
 
138
 
 
139
 
 
140
-ksvalast@ifi.uio.no
 
141
 
 
142
 
 
143
===========================================================================
 
144
                           Martin Tauchmann's notes             (1-Apr-99)
 
145
===========================================================================
 
146
 
 
147
Works now, also with the GNU-C compiler V2.7.2.1. <ftp://ftp.unina.it/pub/amiga/geekgadgets/amiga/m68k/snapshots/971125/amiga-bin/>
 
148
Modify the `Makefile`
 
149
CC=cc $(ABI_FLAG)
 
150
to
 
151
CC=gcc $(ABI_FLAG)
 
152
 
 
153
TECHNICAL NOTES
 
154
 
 
155
- `GC_get_stack_base()`, `GC_register_data_segments()` works now with every
 
156
   C compiler; also Workbench.
 
157
 
 
158
- Removed AMIGA_SKIP_SEG, but the Code-Segment must not be scanned by GC.
 
159
 
 
160
 
 
161
PROBLEMS
 
162
- When the Linker, does`t merge all Code-Segments to an single one. LD of GCC
 
163
  do it always.
 
164
 
 
165
- With ixemul.library V47.3, when an GC program launched from another program
 
166
  (example: `Make` or `if_mach M68K AMIGA gctest`), `GC_register_data_segments()`
 
167
  found the Segment-List of the caller program.
 
168
  Can be fixed, if the run-time initialization code (for C programs, usually *crt0*)
 
169
  support `__data` and `__bss`.
 
170
 
 
171
- PowerPC Amiga currently not supported.
 
172
 
 
173
- Dynamic libraries (dyn_load.c) not supported.
 
174
 
 
175
 
 
176
TESTED WITH SOFTWARE
 
177
 
 
178
`Optimized Oberon 2 C` (oo2c) <http://cognac.informatik.uni-kl.de/download/index.html>
 
179
 
 
180
 
 
181
TESTED WITH HARDWARE
 
182
 
 
183
MC68030
 
184
 
 
185
 
 
186
CONTACT
 
187
 
 
188
Please, contact me at <martintauchmann@bigfoot.com>, when you change the
 
189
Amiga port. <http://martintauchmann.home.pages.de>
 
190
 
 
191
===========================================================================
 
192
                           Michel Schinz's notes
 
193
===========================================================================
 
194
WHO DID WHAT
 
195
 
 
196
The original Amiga port was made by Jesper Peterson. I (Michel Schinz)
 
197
modified it slightly to reflect the changes made in the new official
 
198
distributions, and to take advantage of the new SAS/C 6.x features. I also
 
199
created a makefile to compile the "cord" package (see the cord
 
200
subdirectory).
 
201
 
 
202
TECHNICAL NOTES
 
203
 
 
204
In addition to Jesper's notes, I have the following to say:
 
205
 
 
206
- Starting with version 4.3, gctest checks to see if the code segment is
 
207
  added to the root set or not, and complains if it is. Previous versions
 
208
  of this Amiga port added the code segment to the root set, so I tried to
 
209
  fix that. The only problem is that, as far as I know, it is impossible to
 
210
  know which segments are code segments and which are data segments (there
 
211
  are indeed solutions to this problem, like scanning the program on disk
 
212
  or patch the LoadSeg functions, but they are rather complicated). The
 
213
  solution I have chosen (see os_dep.c) is to test whether the program
 
214
  counter is in the segment we are about to add to the root set, and if it
 
215
  is, to skip the segment. The problems are that this solution is rather
 
216
  awkward and that it works only for one code segment. This means that if
 
217
  your program has more than one code segment, all of them but one will be
 
218
  added to the root set. This isn't a big problem in fact, since the
 
219
  collector will continue to work correctly, but it may be slower.
 
220
 
 
221
  Anyway, the code which decides whether to skip a segment or not can be
 
222
  removed simply by not defining AMIGA_SKIP_SEG. But notice that if you do
 
223
  so, gctest will complain (it will say that "GC_is_visible produced wrong
 
224
  failure indication"). However, it may be useful if you happen to have
 
225
  pointers stored in a code segment (you really shouldn't).
 
226
 
 
227
  If anyone has a good solution to the problem of finding, when a program
 
228
  is loaded in memory, whether a segment is a code or a data segment,
 
229
  please let me know.
 
230
 
 
231
PROBLEMS
 
232
 
 
233
If you have any problem with this version, please contact me at
 
234
schinz@alphanet.ch (but do *not* send long files, since we pay for
 
235
every mail!).
 
236
 
 
237
===========================================================================
 
238
                          Jesper Peterson's notes
 
239
===========================================================================
 
240
 
 
241
ADDITIONAL NOTES FOR AMIGA PORT
 
242
 
 
243
These notes assume some familiarity with Amiga internals.
 
244
 
 
245
WHY I PORTED TO THE AMIGA
 
246
 
 
247
The sole reason why I made this port was as a first step in getting
 
248
the Sather(*) language on the Amiga. A port of this language will
 
249
be done as soon as the Sather 1.0 sources are made available to me.
 
250
Given this motivation, the garbage collection (GC) port is rather
 
251
minimal.
 
252
 
 
253
(*) For information on Sather read the comp.lang.sather newsgroup.
 
254
 
 
255
LIMITATIONS
 
256
 
 
257
This port assumes that the startup code linked with target programs
 
258
is that supplied with SAS/C versions 6.0 or later. This allows
 
259
assumptions to be made about where to find the stack base pointer
 
260
and data segments when programs are run from WorkBench, as opposed
 
261
to running from the CLI. The compiler dependent code is all in the
 
262
GC_get_stack_base() and GC_register_data_segments() functions, but
 
263
may spread as I add Amiga specific features.
 
264
 
 
265
Given that SAS/C was assumed, the port is set up to be built with
 
266
"smake" using the "SMakefile". Compiler options in "SCoptions" can
 
267
be set with "scopts" program. Both "smake" and "scopts" are part of
 
268
the SAS/C commercial development system.
 
269
 
 
270
In keeping with the porting philosophy outlined above, this port
 
271
will not behave well with Amiga specific code. Especially not inter-
 
272
process comms via messages, and setting up public structures like
 
273
Intuition objects or anything else in the system lists. For the
 
274
time being the use of this library is limited to single threaded
 
275
ANSI/POSIX  compliant or near-complient code. (ie. Stick to stdio
 
276
for now). Given this limitation there is currently no mechanism for
 
277
allocating "CHIP" or "PUBLIC" memory under the garbage collector.
 
278
I'll add this after giving it considerable thought. The major
 
279
problem is the entire physical address space may have to me scanned,
 
280
since there is no telling who we may have passed memory to.
 
281
 
 
282
If you allocate your own stack in client code, you will have to
 
283
assign the pointer plus stack size to GC_stackbottom.
 
284
 
 
285
The initial stack size of the target program can be compiled in by
 
286
setting the __stack symbol (see SAS documentaion). It can be over-
 
287
ridden from the CLI by running the AmigaDOS "stack" program, or from
 
288
the WorkBench by setting the stack size in the tool types window.
 
289
 
 
290
SAS/C COMPILER OPTIONS (SCoptions)
 
291
 
 
292
You may wish to check the "CPU" code option is appropriate for your
 
293
intended target system.
 
294
 
 
295
Under no circumstances set the "StackExtend" code option in either
 
296
compiling the library or *ANY* client code.
 
297
 
 
298
All benign compiler warnings have been suppressed. These mainly
 
299
involve lack of prototypes in the code, and dead assignments
 
300
detected by the optimizer.
 
301
 
 
302
THE GOOD NEWS
 
303
 
 
304
The library as it stands is compatible with the GigaMem commercial
 
305
virtual memory software, and probably similar PD software.
 
306
 
 
307
The performance of "gctest" on an Amiga 2630 (68030 @ 25Mhz)
 
308
compares favourably with an HP9000 with similar architecture (a 325
 
309
with a 68030 I think).
 
310
 
 
311
-----------------------------------------------------------------------
 
312
 
 
313
The Amiga port has been brought to you by:
 
314
 
 
315
Jesper Peterson.
 
316
 
 
317
jep@mtiame.mtia.oz.au           (preferred, but 1 week turnaround)
 
318
jep@orca1.vic.design.telecom.au (that's orca<one>, 1 day turnaround)
 
319
 
 
320
At least one of these addresses should be around for a while, even
 
321
though I don't work for either of the companies involved.
 
322