summaryrefslogtreecommitdiff
path: root/tools-src/gnu/mipsel-linux-cross-toolchain-building.txt
blob: 6b76d85acb8b309cdf89fea6ad9552087ad8e556 (plain)
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
Building a Modern MIPS Cross-Toolchain for Linux

Bradley D. LaRonde

brad@ltc.com

Revision History                                                               
Revision 2.4              2002-09-25            Revised by: bdl                
Update to gcc 3.2, binutils 2.13, glibc 2.2.5.                                 
Revision 2.3              2002-07-15            Revised by: bdl                
Update to gcc 3.0.4, binutils 2.12. Drop back to glibc 2.2.3.                  
Revision 2.2              2002-02-18            Revised by: bdl                
Update to binutils-2.11.92.0.12.3, gcc 3.0.3, and glibc-2.2.4. Use --prefix=/  
usr for glibc's special Linux support. Use --disable-sanity-checks for building
glibc-2.2.4 with gcc 3.0.3.                                                    
Revision 2.1              2001-11-05            Revised by: bdl                
Make it a little less endian-biased.                                           
Revision 2.0              2001-11-02            Revised by: bdl                
Convert to docbook. Correct some typos. GFDL license. Note about endianness.   
Revision 1.9              2001-09-26            Revised by: bdl                
Clarify which libc.so to edit and provide example. Corrected spelling of       
Canadian (Geoffrey Espin). Add wget commands (Geoffrey Espin). Clarify         
$LINUX_SRC (Geoffrey Espin). Correct glibc tar file name (Geoffrey Espin).     
Revision 1.8              2001-09-09            Revised by: bdl                
Add source locations.                                                          
Revision 1.7              2001-09-06            Revised by: bdl                
Correct a typo in the final gcc configure.                                     
Revision 1.6              2001-08-22            Revised by: bdl                
Clarify basic tool list.                                                       
Revision 1.5              2001-08-22            Revised by: bdl                
Upgrade gcc 3.0 branch to gcc 3.0.1 release.                                   
Revision 1.4              2001-08-14            Revised by: bdl                
gcc 3.0 release is broken for C++; use cvs 3.0 branch version.                 
Revision 1.3              2001-08-13            Revised by: bdl                
Slightly adjust step 6 now that I've tested it.                                
Revision 1.2              2001-08-12            Revised by: bdl                
Correct glibc patch info. Correct glibc prefix advice, twice.                  
Revision 1.1              2001-08-11            Revised by: bdl                
Add information about toolchain --prefix failures. Add information about glibc 
--prefix versus install_root. Add warning about installing cross-built stuff.  
Revision 1.0              2001-08-09            Revised by: bdl                
Correct binutils version inconsistency. s/cd cd/cd in final compiler step.     

This document shows the reader how to build a modern MIPS cross-toolchain for
Linux from scratch. It includes valuable tips and step-by-step procedures.

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

Introduction

The main problem with building a a cross-toolchain (or any toolchain, to a
lesser degree) is that it takes so long to figure out that you did something
wrong. 

This document is mainly a way for me to remember how I did it once so I can do
it again later. Maybe it will help someone else too. 

During this process, I explored the "minimum required configuration" for
building a modern MIPS cross-toolchain for Linux. What I mean by "minimum
required configuration" is something akin to the "minimum amount of typing". I
went as light as I knew how on the configure arguments, and only brought in
patches when something was obviously broken. This was a personal exploration of
mine, and by no means do I mean to imply that the "minimum" I've "found" is the
best; only it is the minimum that I've found that works (thus far). It might
help mitigate some of the configuration mystery that surrounds the scant
information about cross-building that I dug up, beged for, stumbled across,
etc. Yet even as simple as I've reduced it, the whole remains sufficiently
mysterious. 

-------------------------------------------------------------------------------

Copyright Information

Copyright (c) 2001 Bradley D. LaRonde

Permission is granted to copy, distribute and/or modify this document under the
terms of the GNU Free Documentation License, Version 1.1 or any later version
published by the Free Software Foundation; with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is
included in the section entitled "GNU Free Documentation License".

-------------------------------------------------------------------------------

Disclaimer

No liability for the contents of this documents can be accepted. Use the
concepts, examples and other content at your own risk. As this is a new edition
of this document, there may be errors and inaccuracies, that may of course be
damaging to your system. Proceed with caution, and although this is highly
unlikely, the author(s) do not take any responsibility for that.

All copyrights are held by their by their respective owners, unless
specifically noted otherwise. Use of a term in this document should not be
regarded as affecting the validity of any trademark or service mark.

Naming of particular products or brands should not be seen as endorsements.

You are strongly recommended to take a backup of your system before major
installation and backups at regular intervals.

-------------------------------------------------------------------------------

New Versions

I will keep the latest versions of this document updated on my my website in a
variety of formats: 

  * single HTML file: http://www.ltc.com/~brad/mips/mips-cross-toolchain.html 
   
  * HTML file per section: http://www.ltc.com/~brad/mips/mips-cross-toolchain/ 
   
  * Plain text: http://www.ltc.com/~brad/mips/mips-cross-toolchain.txt 
   
  * SGML source: http://www.ltc.com/~brad/mips/mips-cross-toolchain.sgml 
   
 

-------------------------------------------------------------------------------

Credits

  * Geoffrey Espin for several imrovements and corrections.
   
  * Ian Chilton for helping me prove it works.
   
  * Ralf Bächle for his ongoing contribution to linux-mips.
   
  * The greater linux-mips community for the tools themselves.
   
 

-------------------------------------------------------------------------------

Feedback

I value your feedback. Please e-mail me at <brad@ltc.com>.  

-------------------------------------------------------------------------------

Foundation

Understanding Build, Host, and Target Systems

When cross-compiling, you are dealing with at least two systems. One is the
"build" system; i.e. the system used to build the cross-tools. Another is the
"target" system, which is the system the cross-tools will produce code for. 

Then there is the "host" system, which is the system the cross-tools will run
on. Commonly the "build" and "host" systems are the same. That's the situaion
I've covered in this document. When they aren't, you end up in a "Canadian
Cross" situaion, which I won't cover here (and know little to nothing about,
despite the fact that I have a Canadian work visa). 

-------------------------------------------------------------------------------

Building Cross-Toolchains

The general idea is to use the "build" system to create binutils and gcc for
the "host" system that produce code for the "target" system. As I said before,
In my case, the "build" and "host" systems are the same (both i386-linux), and
the "target" system is mipsel-linux or mips-linux (depending on little or big
endian). 

Once you have the binutils and gcc, you can cross-build glibc. Here's the catch
though - you need parts of glibc to build all of gcc. Ugh. So, you need to
build gcc in two steps. First you have to build just the static C compiler,
then after glibc is built and installed, you can build the final C and C++
compilers. 

-------------------------------------------------------------------------------

About --prefix

I messed around with --prefix for quite a while before I realized what I was
doing. I wanted to install the toolchain to it's "own" directory. What I didn't
realize at first is the difference between the cross-tools (cross-binutils and
cross-gcc) and the cross-built glibc. This led to some confusion about where
the cross-built glibc libraries should go. 

What I settled on is this: let the cross-tools go where they like to go - in /
usr/local. They won't overwrite anything else there. They will put the
MIPS-specific stuff in /usr/local/mips[el]-linux automatically. Then, install
the cross-built glibc libraries into /usr/local/mips[el]-linux, which is where
the cross-build tools expect to find them. 

I guess the summary of all of this is: the --prefix for the cross-build tools
isn't the same as the prefix for the cross-built glibc, and there is no harm in
just letting the cross-build tools go where they want to go, but be careful
with glibc.  

-------------------------------------------------------------------------------

Building

I've written out a fairly complete set of steps, including all the mundane cd
and tar commands, but really the configure command is the most interesting, so
I've separated those commands with some vertical space. 

These steps describe how to build a mipsel cross-toolchain. mipsel stands for
"MIPS-endian-little", or in other words, little-endian MIPS. If you want to
build a big-endian toolchain, modify the steps below by substituting mips-linux
for mipsel-linux. I've done this, but I haven't double-checked this document
for endian issues. It should work with maybe minor adjustments. 

-------------------------------------------------------------------------------

Get binutils, gcc, and glibc

Which versions to get? Currently, it seems that the recipe for building a
modern mipsel cross-toolchain isn't widely known. I've gathered that it is
because of problems with mips binutils. 

Here is the configuration I currently use:

  * binutils-2.13 release
   
  * gcc-3.2 release
   
  * glibc-2.2.5 release plus linuxthreads
   
 

This configuration works well for me. 

Look for toolchain sources at the following locations:

  * binutils: ftp://ftp.gnu.org/gnu/binutils/
   
  * gcc: ftp://ftp.gnu.org/gnu/gcc/
   
  * glibc: ftp://ftp.gnu.org/gnu/glibc/
   
 

Here are some wgets you can copy and paste, courtesy Geoffrey Espin:

wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.13.tar.gz
wget ftp://ftp.gnu.org/gnu/gcc/gcc-3.2.tar.gz
wget ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz
wget ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz
 

When I reference these tar files below, I leave off the version numbers (so I
don't have as much editing to do when I change to a new version of one of the
packages). Please add the version numbers back to the tar file names and to the
unpacked directory names. 

Some stuff that won't work:

  * glibc 2.2.4 - executables failed left and right with "Bus error" and other
    obscure gasps.
   
  * gcc 3.1 - comfigures, builds, and stuff runs, but gcc 3.1 defaults to
    DWARF2 and mips binutils lacks support.
   
 

-------------------------------------------------------------------------------

Build the cross-binutils

As I understand it, cross-binutils prefers not to be given a --prefix (caveat
emptor: my understanding of these matters is clearly meager). However, without
--prefix, the x86 libbfd and libopcodes in /usr/lib get overwritten. That's the
reason for the included --libdir. Steven Langasek suggested it, since it
prevents the conflict and still allows them to be "used by cross-binutils
thanks to the RPATH tag being set appropriately in ELF headers by libtool." 

This ends up putting the cross-binutils in /usr/local. 

tar -xzf binutils.tar.gz
mkdir mipsel-binutils
cd mipsel-binutils

../binutils/configure --target=mipsel-linux \
  --libdir='${exec_prefix}'/mipsel-linux/i386-linux/lib

make
make install
cd ..
 

-------------------------------------------------------------------------------

Build the C cross-compiler

I don't think you can build all of cross-gcc at once; at least I haven't been
able to. One big problem is that you need glibc installed in order to do it,
but you haven't built glibc yet. To get around this, build just the static C
cross-compiler, then you can use that to cross-build glibc, and come back to
the rest of cross-gcc later. 

This ends up putting cross-gcc executables in /usr/local/bin/ and "copies"
(hard links) in /usr/local/mipsel-linux/bin/. The libraries end up in /usr/
local/lib/lib/gcc-lib/mipsel-linux/3.0/. It does however stick a libiberty.a in
/usr/local/lib/ that I'm not entirely comfortable with, but maybe it is just
fine. 

The --with-headers causes configure to make a copy of the headers at the
specified location into /usr/local/mipsel-linux/sys-includes and to run
fixincludes on them. These headers are then used by xgcc during the
cross-building of libgcc.a (which is part of building the static C compiler).
This means that you'll need some MIPS host headers laying around somewhere,
including the linux and asm subdirectories from the Linux kernel. Maybe you
have them from your previous cross-compiler installation. If not, there are
various creative ways of obtaining them, including grabbing them from some MIPS
distribution. There is also the dubious hack of using your hosts's headers
(--with-headers=/usr/include) instead. The key word here is "dubious"; you have
been warned. 

tar -xzf gcc.tar.gz
mkdir mipsel-gcc
cd mipsel-gcc

../gcc/configure --target=mipsel-linux --enable-languages=c \
  --disable-shared --with-headers=/usr/local/mipsel-linux/include

make
make install
cd ..
 

-------------------------------------------------------------------------------

Cross-build glibc

Caution: When installing the cross-built glibc (or other cross-built stuff) if
you don't get it right you can overwrite your host copies of possibly very
critical stuff like libc. Ouch. Best to do cross-building and installing as
non-root for protection. 

You must specify both the "build" and "host" system when cross-building glibc,
since if you just specify "host", glibc assumes the build system is the same as
the host system. 

The right way to do this is to cross-build gcc with the same configuration as
you would for a native build. The main reason for this is that ld.so.1 has the
initial library search path compiled into it. The goal is to get ld.so.1 to
look for libraries in /lib/. If you don't get this right, ld.so.1 will end up
not looking in /lib/ for, say, libc.so.6, which won't allow init=/bin/sh if sh
is dymaically linked against libc.so.6. 

As Jay Carlson pointed out to me, there is (suprise) a trick to this. glibc
sees --prefix=/usr as a special case for Linux. When it sees it, it will sort
things out properly into /lib and /usr/lib, /usr/bin, etc. 

Since glibc configured this way will want to install to "/lib", etc., you have
to use the "install_root" option to cause it to be installed away from your
host's files. After you install glibc out of the way, you can copy the include
and library files to where your cross-build tools expect to find them. 

glibc 2.2.5 doesn't work "out of the box". It requires a small build patch, a
small gmon patch (if you plan to use gprof), and a CFLAGS workaround. I mashed
the patches together into a single patch file and put it at http://www.ltc.com/
~brad/mips/glibc-2.2.5-mips-build-gmon.diff. 

Daniel Jacobowitz <drow@nevyn.them.org> told me about the gmon patch. He also
suggested the -finline-limit workaround below which as I understand it keeps
gcc 3.x from *not* inlining stuff when building ld.so. Without it glibc 2.2.5
ld.so built by gcc 3.x won't work. 

Note: if you mess with --prefix in binutils or gcc, you might end up needing
--with-headers, but I now take this as a sign I've done something screwy. 

tar -xzf glibc.tar.gz
cd glibc
patch -i ../glibc-2.2.5-mips-build-gmon.diff
tar -xzf ../glibc-linuxthreads.tar.gz
cd ..
mkdir mipsel-glibc
cd mipsel-glibc

CFLAGS="-O2 -g -finline-limit=10000" ../glibc/configure --build=i686-linux \
  --host=mipsel-linux --enable-add-ons --prefix=/usr

make
make install install_root=/usr/local/mipsel-linux/glibc
cd ..

cp -a /usr/local/mipsel-linux/glibc/lib/* /usr/local/mipsel-linux/lib/
cp -a /usr/local/mipsel-linux/glibc/usr/include/* /usr/local/mipsel-linux/include/
cp -a /usr/local/mipsel-linux/glibc/usr/lib/* /usr/local/mipsel-linux/lib/
 

Copying the files isn't quite enough though. You also need to edit /usr/local/
mipsel-linux/lib/libc.so (yes, it is a text file suprisingly enough) to point
to the cross-built glibc files so that the cross-build tools know to use the
mipsel libc and not the host's libc, something like: 

GROUP ( /usr/local/mipsel-linux/lib/libc.so.6 
  /usr/local/mipsel-linux/lib/libc_nonshared.a )
 

-------------------------------------------------------------------------------

Build the final C and C++ cross-compilers

Relax... this part is easy. :-) 

cd mipsel-gcc

../gcc/configure --target=mipsel-linux --enable-languages=c,c++

make
make install
 

-------------------------------------------------------------------------------

A. GNU Free Documentation License

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other written
document "free" in the sense of freedom: to assure everyone the effective
freedom to copy and redistribute it, with or without modifying it, either
commercially or noncommercially. Secondarily, this License preserves for the
author and publisher a way to get credit for their work, while not being
considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the
document must themselves be free in the same sense. It complements the GNU
General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software,
because free software needs free documentation: a free program should come with
manuals providing the same freedoms that the software does. But this License is
not limited to software manuals; it can be used for any textual work,
regardless of subject matter or whether it is published as a printed book. We
recommend this License principally for works whose purpose is instruction or
reference.

-------------------------------------------------------------------------------

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a notice placed
by the copyright holder saying it can be distributed under the terms of this
License. The "Document", below, refers to any such manual or work. Any member
of the public is a licensee, and is addressed as "you".

A "Modified Version" of the Document means any work containing the Document or
a portion of it, either copied verbatim, or with modifications and/or
translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the 
Document that deals exclusively with the relationship of the publishers or
authors of the Document to the Document's overall subject (or to related
matters) and contains nothing that could fall directly within that overall
subject. (For example, if the Document is in part a textbook of mathematics, a
Secondary Section may not explain any mathematics.) The relationship could be a
matter of historical connection with the subject or with related matters, or of
legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are
designated, as being those of Invariant Sections, in the notice that says that
the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed, as
Front-Cover Texts or Back-Cover Texts, in the notice that says that the 
Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy, represented
in a format whose specification is available to the general public, whose
contents can be viewed and edited directly and straightforwardly with generic
text editors or (for images composed of pixels) generic paint programs or (for
drawings) some widely available drawing editor, and that is suitable for input
to text formatters or for automatic translation to a variety of formats
suitable for input to text formatters. A copy made in an otherwise Transparent
file format whose markup has been designed to thwart or discourage subsequent
modification by readers is not Transparent. A copy that is not "Transparent" is
called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without
markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
available DTD, and standard-conforming simple HTML designed for human
modification. Opaque formats include PostScript, PDF, proprietary formats that
can be read and edited only by proprietary word processors, SGML or XML for
which the DTD and/or processing tools are not generally available, and the
machine-generated HTML produced by some word processors for output purposes
only.

The "Title Page" means, for a printed book, the title page itself, plus such
following pages as are needed to hold, legibly, the material this License
requires to appear in the title page. For works in formats which do not have
any title page as such, "Title Page" means the text near the most prominent
appearance of the work's title, preceding the beginning of the body of the
text.

-------------------------------------------------------------------------------

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the
license notice saying this License applies to the Document are reproduced in
all copies, and that you add no other conditions whatsoever to those of this
License. You may not use technical measures to obstruct or control the reading
or further copying of the copies you make or distribute. However, you may
accept compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may
publicly display copies.

-------------------------------------------------------------------------------

3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the copies in
covers that carry, clearly and legibly, all these Cover Texts: Front-Cover
Texts on the front cover, and Back-Cover Texts on the back cover. Both covers
must also clearly and legibly identify you as the publisher of these copies.
The front cover must present the full title with all words of the title equally
prominent and visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve the title
of the Document and satisfy these conditions, can be treated as verbatim
copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you
should put the first ones listed (as many as fit reasonably) on the actual
cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than
100, you must either include a machine-readable Transparent copy along with
each Opaque copy, or state in or with each Opaque copy a publicly-accessible
computer-network location containing a complete Transparent copy of the
Document, free of added material, which the general network-using public has
access to download anonymously at no charge using public-standard network
protocols. If you use the latter option, you must take reasonably prudent
steps, when you begin distribution of Opaque copies in quantity, to ensure that
this Transparent copy will remain thus accessible at the stated location until
at least one year after the last time you distribute an Opaque copy (directly
or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document
well before redistributing any large number of copies, to give them a chance to
provide you with an updated version of the Document.

-------------------------------------------------------------------------------

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the
conditions of sections 2 and 3 above, provided that you release the Modified
Version under precisely this License, with the Modified Version filling the
role of the Document, thus licensing distribution and modification of the
Modified Version to whoever possesses a copy of it. In addition, you must do
these things in the Modified Version:

  * A. Use in the Title Page (and on the covers, if any) a title distinct from
    that of the Document, and from those of previous versions (which should, if
    there were any, be listed in the History section of the Document). You may
    use the same title as a previous version if the original publisher of that
    version gives permission.
   
  * B. List on the Title Page, as authors, one or more persons or entities
    responsible for authorship of the modifications in the Modified Version,
    together with at least five of the principal authors of the Document (all
    of its principal authors, if it has less than five).
   
  * C. State on the Title Page the name of the publisher of the Modified
    Version, as the publisher.
   
  * D. Preserve all the copyright notices of the Document.
   
  * E. Add an appropriate copyright notice for your modifications adjacent to
    the other copyright notices.
   
  * F. Include, immediately after the copyright notices, a license notice
    giving the public permission to use the Modified Version under the terms of
    this License, in the form shown in the Addendum below.
   
  * G. Preserve in that license notice the full lists of Invariant Sections and
    required Cover Texts given in the Document's license notice.
   
  * H. Include an unaltered copy of this License.
   
  * I. Preserve the section entitled "History", and its title, and add to it an
    item stating at least the title, year, new authors, and publisher of the 
    Modified Version as given on the Title Page. If there is no section
    entitled "History" in the Document, create one stating the title, year,
    authors, and publisher of the Document as given on its Title Page, then add
    an item describing the Modified Version as stated in the previous sentence.
   
  * J. Preserve the network location, if any, given in the Document for public
    access to a Transparent copy of the Document, and likewise the network
    locations given in the Document for previous versions it was based on.
    These may be placed in the "History" section. You may omit a network
    location for a work that was published at least four years before the
    Document itself, or if the original publisher of the version it refers to
    gives permission.
   
  * K. In any section entitled "Acknowledgements" or "Dedications", preserve
    the section's title, and preserve in the section all the substance and tone
    of each of the contributor acknowledgements and/or dedications given
    therein.
   
  * L. Preserve all the Invariant Sections of the Document, unaltered in their
    text and in their titles. Section numbers or the equivalent are not
    considered part of the section titles.
   
  * M. Delete any section entitled "Endorsements". Such a section may not be
    included in the Modified Version.
   
  * N. Do not retitle any existing section as "Endorsements" or to conflict in
    title with any Invariant Section.
   
If the Modified Version includes new front-matter sections or appendices that
qualify as Secondary Sections and contain no material copied from the Document,
you may at your option designate some or all of these sections as invariant. To
do this, add their titles to the list of Invariant Sections in the Modified
Version's license notice. These titles must be distinct from any other section
titles.

You may add a section entitled "Endorsements", provided it contains nothing but
endorsements of your Modified Version by various parties--for example,
statements of peer review or that the text has been approved by an organization
as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage
of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts
in the Modified Version. Only one passage of Front-Cover Text and one of
Back-Cover Text may be added by (or through arrangements made by) any one
entity. If the Document already includes a cover text for the same cover,
previously added by you or by arrangement made by the same entity you are
acting on behalf of, you may not add another; but you may replace the old one,
on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give
permission to use their names for publicity for or to assert or imply
endorsement of any Modified Version .

-------------------------------------------------------------------------------

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License,
under the terms defined in section 4 above for modified versions, provided that
you include in the combination all of the Invariant Sections of all of the
original documents, unmodified, and list them all as Invariant Sections of your
combined work in its license notice.

The combined work need only contain one copy of this License, and multiple
identical Invariant Sections may be replaced with a single copy. If there are
multiple Invariant Sections with the same name but different contents, make the
title of each such section unique by adding at the end of it, in parentheses,
the name of the original author or publisher of that section if known, or else
a unique number. Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in the
various original documents, forming one section entitled "History"; likewise
combine any sections entitled "Acknowledgements", and any sections entitled
"Dedications". You must delete all sections entitled "Endorsements."

-------------------------------------------------------------------------------

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this License
in the various documents with a single copy that is included in the collection,
provided that you follow the rules of this License for verbatim copying of each
of the documents in all other respects.

You may extract a single document from such a collection, and dispbibute it
individually under this License, provided you insert a copy of this License
into the extracted document, and follow this License in all other respects
regarding verbatim copying of that document.

-------------------------------------------------------------------------------

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and
independent documents or works, in or on a volume of a storage or distribution
medium, does not as a whole count as a Modified Version of the Document,
provided no compilation copyright is claimed for the compilation. Such a
compilation is called an "aggregate", and this License does not apply to the
other self-contained works thus compiled with the Document , on account of
their being thus compiled, if they are not themselves derivative works of the
Document. If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one quarter of the
entire aggregate, the Document's Cover Texts may be placed on covers that
surround only the Document within the aggregate. Otherwise they must appear on
covers around the whole aggregate.

-------------------------------------------------------------------------------

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute
translations of the Document under the terms of section 4. Replacing Invariant
Sections with translations requires special permission from their copyright
holders, but you may include translations of some or all Invariant Sections in
addition to the original versions of these Invariant Sections. You may include
a translation of this License provided that you also include the original
English version of this License. In case of a disagreement between the
translation and the original English version of this License, the original
English version will prevail.

-------------------------------------------------------------------------------

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as
expressly provided for under this License. Any other attempt to copy, modify,
sublicense or distribute the Document is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.

-------------------------------------------------------------------------------

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in
spirit to the present version, but may differ in detail to address new problems
or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the 
Document specifies that a particular numbered version of this License "or any
later version" applies to it, you have the option of following the terms and
conditions either of that specified version or of any later version that has
been published (not as a draft) by the Free Software Foundation. If the
Document does not specify a version number of this License, you may choose any
version ever published (not as a draft) by the Free Software Foundation.

-------------------------------------------------------------------------------

Addendum

To use this License in a document you have written, include a copy of the
License in the document and put the following copyright and license notices
just after the title page:

    Copyright © YEAR YOUR NAME.
   
    Permission is granted to copy, distribute and/or modify this document under
    the terms of the GNU Free Documentation License, Version 1.1 or any later
    version published by the Free Software Foundation; with the Invariant
    Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST,
    and with the Back-Cover Texts being LIST. A copy of the license is included
    in the section entitled "GNU Free Documentation License".
   
If you have no Invariant Sections, write "with no Invariant Sections" instead
of saying which ones are invariant. If you have no Front-Cover Texts, write "no
Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for 
Back-Cover Texts.

If your document contains nontrivial examples of program code, we recommend
releasing these examples in parallel under your choice of free software
license, such as the GNU General Public License, to permit their use in free
software.