summaryrefslogtreecommitdiff
path: root/m68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi
diff options
context:
space:
mode:
Diffstat (limited to 'm68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi')
-rw-r--r--m68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi1116
1 files changed, 0 insertions, 1116 deletions
diff --git a/m68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi b/m68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi
deleted file mode 100644
index 481c676..0000000
--- a/m68k-unknown-amigaos/recipes/files/gcc/gcc/doc/gcc-amigaos.texi
+++ /dev/null
@@ -1,1116 +0,0 @@
-\input texinfo.tex @c -*-texinfo-*-
-@c %**start of header
-@setfilename gcc-amigaos.info
-@settitle AmigaOS-only features of GCC
-@set lastupdate Nov 5th, 2003
-@c %**end of header
-
-@ifinfo
-This document describes implementation specific features of the GCC
-compiler collection port for the AmigaOS.
-
-@copying
-Copyright @copyright{} 1996, 1997 Kamil Iskra
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-@end copying
-@end ifinfo
-
-@titlepage
-@sp 10
-@center @titlefont{GCC Amiga}
-@subtitle Description of the AmigaOS-only features of GCC
-@subtitle @value{lastupdate}
-@author Kamil Iskra
-@page
-@end titlepage
-
-@ifinfo
-@node Top, Introduction, (dir), (dir)
-This document describes the AmigaOS-only features of the @samp{GCC}
-compiler collection.
-
-Last updated @value{lastupdate}.
-@end ifinfo
-
-@menu
-* Introduction:: Purpose of this document.
-
-* Invocation:: Command line options.
-* Attributes:: Variable and function attributes.
-* Defines:: Preprocessor symbols.
-* Miscellaneous:: Uncategorizable.
-
-* Index:: Concept index.
-@end menu
-
-@node Introduction, Invocation, Top, Top
-@chapter Introduction
-@cindex Introduction
-@cindex Purpose of this document
-
-This document is supposed to be an addendum to the baseline @samp{GCC}
-documentation.
-Note that given email addresses and urls might be obsolete!
-
-It focuses on the features that are visible by users and are important
-to them. It is not supposed to document the internals of the AmigaOS
-port of @samp{GCC}.
-
-It describes features implemented in the @samp{Geek Gadgets GCC} port.
-For more information about @samp{Geek Gadgets}, please refer to:
-
-@format
-http://www.geekgadgets.org/
-ftp://ftp.geekgadgets.org/pub/geekgadgets/README
-@end format
-
-This document focuses on @samp{GCC}. It does not describe the
-AmigaOS-only features of other @samp{GNU} packages, such as
-@samp{binutils}, unless they are very closely connected to @samp{GCC}.
-
-This means, that, unless stated otherwise, when we talk about the
-``compiler'', we mean the @file{gcc}, @file{cpp} and @file{cc1}
-executables, i.e., the executables that convert @samp{C} source code
-to assembly source code. The assembler and linker are generally beyond
-the scope of this document.
-
-The primary source of information used to create this document was the
-@samp{GCC} source code. Some parts of this document are based on:
-
-@itemize @bullet
-@item
-The @samp{LibNIX} manual, written by Matthias Fleischer and Gunther
-Nikl:
-
-@format
-fleischr@@izfm.uni-stuttgart.de
-gnikl@@informatik.uni-rostock.de
-@end format
-
-@item
-The @samp{A2IXLibrary} manual, written by Hans Verkuil:
-
-@format
-hans@@wyst.hobby.nl
-@end format
-
-@item
-The @samp{README} file, maintained by Rask Ingemann Lambertsen:
-
-@format
-gc948374@@gbar.dtu.dk
-http://www.gbar.dtu.dk/~c948374/GNU/
-@end format
-
-@item
-The @samp{Geek Gadgets FAQ}, maintained by Lynn Winebarger:
-
-@format
-owinebar@@indiana.edu
-http://nickel.ucs.indiana.edu/~owinebar/interests/amiga/amiga.html
-@end format
-
-@item
-The @samp{FAQ for g++ and libg++}, written by Joe Buck:
-
-@format
-jbuck@@synopsys.com
-http://www.cygnus.com/misc/g++FAQ_toc.html
-@end format
-
-@item
-Discussions on the @samp{Geek Gadgets} mailing list:
-
-@format
-gg@@geekgadgets.org
-@end format
-@end itemize
-
-This document was created by Kamil Iskra. Please email any questions,
-suggestions etc. to <iskra@@student.uci.agh.edu.pl> or, even better,
-to the <gg@@geekgadgets.org> mailing list.
-
-The author would like to thank Kriton Kyrimis <kyrimis@@cti.gr> and
-Lars Hecking <lhecking@@nmrc.ucc.ie> for correcting an awful lot of
-language mistakes in this document.
-
-@node Invocation, Attributes, Introduction, Top
-@chapter Invocation
-@cindex Invocation
-@cindex Command line options
-
-The AmigaOS port of @samp{GCC} supports the following non-standard
-command line options:
-
-@menu
-* -noixemul:: Link with @samp{LibNIX}.
-
-* -fbaserel:: Produce @samp{a4}-relative data.
-* -resident:: Produce a @samp{pure} executable.
-* -fbaserel32:: Produce @samp{a4}-relative data with no size limits.
-* -resident32:: Produce a @samp{pure} executable with no size limits.
-* -msmall-code:: Produce @samp{PC}-relative code.
-
-* -mstackcheck:: Produce stack-checking code.
-* -mstackextend:: Produce stack-extending code.
-* -mfixedstack:: Produce plain code.
-
-* -mrestore-a4:: Reload @samp{a4} in public functions.
-* -malways-restore-a4:: Reload @samp{a4} in all functions.
-
-* -mregparm:: Pass function arguments in registers.
-
-* -frepo:: Enable @samp{C++} Template Repository.
-@end menu
-
-Accordingly, the AmigaOS port of @samp{GCC} supports several flavors
-of linker libraries. @xref{Library flavors, Relation between library
-flavors and compile-time options}.
-
-@node -noixemul, -fbaserel, Invocation, Invocation
-@section -noixemul
-@cindex -noixemul
-@cindex Link with LibNIX
-
-@cindex IXEmul
-By default, the executables created with @samp{GCC} require
-@samp{ixemul.library} to run. This has its advantages (easy porting of
-@samp{UN*X} programs, resource tracking, debugging, profiling, etc)
-and disadvantages (@samp{UN*X}-style pathnames, large shared library,
-etc).
-
-@cindex LibNIX
-If @samp{-noixemul} is specified on the @samp{GCC} command line, the
-executable created will not require @samp{ixemul.library} --- it will
-use the static linker library @samp{LibNIX} instead. This library is
-very Amiga-like and @samp{SAS/C}-like, so it is convenient for the
-AmigaOS-specific development.
-
-@quotation
-@emph{Note}: There is no great mystery about the @samp{-noixemul}
-option. It has absolutely no effect on the code generated by the
-compiler, only instructing the @samp{gcc} driver to pass different
-options to the linker and preprocessor (@pxref{Options information},
-@pxref{Library flavors}).
-
-This option has no negative form.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -fbaserel, -resident, -noixemul, Invocation
-@section -fbaserel
-@cindex -fbaserel
-@cindex Produce a4-relative data
-
-By default, the code generated by @samp{GCC} references data using
-32-bit, absolute addressing.
-
-@cindex a4
-@cindex 64 KB data limit
-The @samp{-fbaserel} option will make @samp{GCC} generate code that
-references data with 16 bit offsets relative to the @samp{a4} address
-register. This makes executables smaller and faster. Unfortunately,
-the size of the data section cannot exceed 64 KB, so this option
-cannot be used for large programs, like @samp{GCC} itself.
-
-@quotation
-@emph{Note}: For a base-relative executable, @samp{-fbaserel} needs to
-be specified for compiling @emph{and} linking. Base-relative programs
-require special startup code and special versions of linker libraries.
-Since not all linker libraries are available in both plain and base
-relative versions, the usefulness of this option is limited. It is
-important to note that when the base-relative library is missing, the
-linker will attempt to use the plain one. This might result in strange
-link-time or even run-time errors.
-
-@cindex -fpic
-This option is the AmigaOS equivalent of the standard @samp{GCC}
-option @samp{-fpic}, which is not supported by the AmigaOS port.
-@samp{-fpic} generates code that references data indirectly, through a
-@dfn{global offset table}. The special addressing modes available on
-the @samp{m68k} processor family allow for a much more efficient
-implementation with @samp{-fbaserel}.
-
-The negative form of @samp{-fbaserel} is @samp{-fno-baserel}, and is
-on by default.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -resident, -fbaserel32, -fbaserel, Invocation
-@section -resident
-@cindex -resident
-@cindex Produce a pure executable
-
-Executables produced with the @samp{-resident} option are @dfn{pure},
-so they can be made @dfn{resident} using the AmigaShell
-@samp{resident} command. @samp{resident} executables are loaded to
-memory just once, and several concurrent instances share the code
-section.
-
-@quotation
-@emph{Note}: The compiler generates the same code for @samp{-resident}
-as for @samp{-fbaserel} (@pxref{-fbaserel}). Only the linking stage is
-different (special startup code is linked).
-
-This option has no negative form.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -fbaserel32, -resident32, -resident, Invocation
-@section -fbaserel32
-@cindex -fbaserel32
-@cindex Produce a4-relative data with no size limits
-
-The difference between the @samp{-fbaserel32} and @samp{-fbaserel}
-options (@pxref{-fbaserel}) is the same as between the standard
-@samp{GCC} options @samp{-fPIC} and @samp{-fpic}.
-
-Code generated with @samp{-fbaserel32} references data with 32 bit
-offsets relative to the @samp{a4} address register. In contrast to the
-@samp{-fbaserel} (@pxref{-fbaserel}) option, there is no 64 KB size
-limit. Unfortunately, the addressing modes with 32 bit offsets are
-only available on 68020 and higher processors. Therefore, it is
-necessary to specify @samp{-m68020} or higher to use this option.
-
-@quotation
-@emph{Note}: This option used to be called @samp{-flarge-baserel}
-before @samp{Geek Gadgets} snapshot @samp{970109}. Since it was not
-functional then, this should not cause any compatibility problems.
-
-The negative form of @samp{-fbaserel32} is @samp{-fno-baserel32}, and
-is on by default.
-@end quotation
-
-@node -resident32, -msmall-code, -fbaserel32, Invocation
-@section -resident32
-@cindex -resident32
-@cindex Produce a pure executable with no size limits
-
-This option is an improved version of @samp{-resident}
-(@pxref{-resident}) --- it does not impose any limits on data section
-size. Unfortunately, just like @samp{-fbaserel32}
-(@pxref{-fbaserel32}), it is only available for 68020 or higher
-processors. Therefore, it is necessary to specify @samp{-m68020} or
-higher to use this option.
-
-@quotation
-@emph{Note}: This option was first made available in the @samp{GCC}
-2.7.2.1, @samp{Geek Gadgets} snapshot @samp{970109}.
-
-This option has no negative form.
-@end quotation
-
-@node -msmall-code, -mstackcheck, -resident32, Invocation
-@section -msmall-code
-@cindex -msmall-code
-@cindex Produce PC-relative code
-
-By default, the code generated by the compiler references functions
-using 32-bit, absolute addressing.
-
-@cindex 32 KB code limit
-Code generated by @samp{GCC} with the @samp{-msmall-code} option
-references symbols in the code section with 16 bit offsets, relative
-to the @samp{PC} (@dfn{program counter}). This makes executables
-smaller and faster. Unfortunately, the size of the code section is
-generally limited to 32 KB, so this option can only be used for
-relatively small programs.
-
-@quotation
-@emph{Note}: Actually, the compiler always generates 32-bit code
-references. If the assembler can calculate the offset between the
-referencing instruction and the referenced symbol (in other words, if
-the referenced symbol is in the same source file), it replaces the
-32-bit reference with the @samp{PC}-relative one. External references
-are left intact, unless @samp{-msmall-code} is used, in which case the
-assembler generates @samp{PC}-relative references, and the exact
-offsets are calculated by the linker.
-
-This option has no negative form.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -mstackcheck, -mstackextend, -msmall-code, Invocation
-@section -mstackcheck
-@cindex -mstackcheck
-@cindex Produce stack-checking code
-
-By default, the code generated by @samp{GCC} does not check if there
-is enough stack available before performing stack-consuming
-operations. This is generally not necessary on @samp{UN*X} systems,
-where the stack is extended automagically whenever needed.
-
-Unfortunately, the AmigaOS provides tasks with a static, fixed size
-stack.
-
-However, if a program is compiled with @samp{-mstackcheck}, it will
-check if there is enough stack available before performing any
-stack-hungry operations. If there is a danger of stack overflow, the
-program will abort and the user will be notified.
-
-Needless to say, stack checking increases the executable size and the
-execution time.
-
-@quotation
-@emph{Note}: Stack checking cannot be used for functions that might be
-called from outside your task. This includes interrupt handlers,
-shared library functions, hooks etc. In such cases, you should either
-avoid using @samp{-mstackcheck} for files containing such functions,
-or use @code{__attribute__((interrupt))} (@pxref{interrupt}).
-
-It is safe to call a function that performs stack checking from one
-that does not, and vice versa.
-
-The negative form of @samp{-mstackcheck} is @samp{-mno-stackcheck},
-and is on by default.
-
-@emph{Warning}: @samp{-mno-stackcheck} used to be called
-@samp{-mnostackcheck} before @samp{Geek Gadgets} snapshot
-@samp{961012}.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -mstackextend, -mfixedstack, -mstackcheck, Invocation
-@section -mstackextend
-@cindex -mstackextend
-@cindex Produce stack-extending code
-
-@samp{-mstackextend} is very similar to @samp{-mstackcheck}
-(@pxref{-mstackcheck}).
-
-The main difference is that when a program runs out of stack, it is
-not aborted, but a new stack area is allocated and the program
-continues to run.
-
-@quotation
-@emph{Note}: Stack extension can slow down programs significantly. It
-is advised that programs are written in such a way that they do not
-require too much stack. This can generally be achieved by explicitly
-allocating memory for large structures and arrays using functions like
-@samp{malloc()} or @samp{AllocMem()}, instead of creating them as
-local variables. Another method is replacing recursion with iteration.
-In addition, it might be considered to use stack extension only for
-selected, ``dangerous'' functions (@pxref{stackext}), not for all
-functions in a given program.
-
-The negative form of @samp{-mstackextend} is @samp{-mno-stackextend},
-and is on by default.
-
-@emph{Warning}: @samp{-mno-stackextend} used to be called
-@samp{-mnostackextend} before @samp{Geek Gadgets} snapshot
-@samp{961012}.
-@end quotation
-
-For more information, please refer to the @samp{LibNIX} documentation.
-
-@node -mfixedstack, -mrestore-a4, -mstackextend, Invocation
-@section -mfixedstack
-@cindex -mfixedstack
-@cindex Produce plain code
-
-This option makes @samp{GCC} generate plain code, that does neither
-stack checking nor extension. Since this is the default, there is
-generally no need to use this option.
-
-@quotation
-@emph{Note}: This option has no negative form.
-@end quotation
-
-@node -mrestore-a4, -malways-restore-a4, -mfixedstack, Invocation
-@section -mrestore-a4
-@cindex -mrestore-a4
-@cindex Reload a4 in public functions
-
-This option is used to create the @samp{IXEmul} shared libraries
-(those @file{*.ixlibrary} files).
-
-It sets @samp{a4} to the appropriate value in the prologues of all
-public functions (i.e., functions with external linkage). This is
-necessary if these functions are called from the code of application.
-
-@quotation
-@emph{Note}: This option should not be used except for the creation of
-an @samp{IXEmul} shared library.
-
-This option was first made available in the @samp{GCC} 2.7.2,
-@samp{Geek Gadgets} snapshot @samp{960902}. It used to be called
-@samp{-frestore-a4}, and was relabeled to its current name in the
-@samp{GCC} 2.7.2.1, @samp{Geek Gadgets} snapshot @samp{961012}.
-
-The negative form of @samp{-mrestore-a4} is @samp{-mno-restore-a4},
-and is on by default.
-@end quotation
-
-For more information, please refer to the @samp{A2IXLibrary}
-documentation.
-
-@node -malways-restore-a4, -mregparm, -mrestore-a4, Invocation
-@section -malways-restore-a4
-@cindex -malways-restore-a4
-@cindex Reload a4 in all functions
-
-This option is very similar to @samp{-mrestore-a4}
-(@pxref{-mrestore-a4}).
-
-The only difference is that it sets @samp{a4} in all functions,
-including private ones (i.e., functions with internal linkage,
-@samp{static}). This is safer than @samp{-mrestore-a4}
-(@pxref{-mrestore-a4}), but is also slower.
-
-@quotation
-@emph{Note}: This option should not be used except for the creation of
-an @samp{IXEmul} shared library.
-
-This option was first made available in the @samp{GCC} 2.7.2,
-@samp{Geek Gadgets} snapshot @samp{960902}. It used to be called
-@samp{-falways-restore-a4}, and was relabeled to its current name in
-the @samp{GCC} 2.7.2.1, @samp{Geek Gadgets} snapshot @samp{961012}.
-
-The negative form of @samp{-malways-restore-a4} is
-@samp{-mno-always-restore-a4}, and is on by default.
-@end quotation
-
-For more information, please refer to the @samp{A2IXLibrary}
-documentation.
-
-@node -mregparm, -frepo, -malways-restore-a4, Invocation
-@section -mregparm
-@cindex -mregparm
-@cindex Pass function arguments in registers
-
-On the @samp{m68k} architecture, @samp{GCC} passes function arguments
-on the stack by default.
-
-@samp{-mregparm} allows for passing arguments in registers. This can
-be slightly faster than the standard method of passing arguments on
-the stack.
-
-The full syntax of this option is:
-
-@format
--mregparm[=<value>]
-@end format
-
-@samp{value} should be an integer ranging from 1 to 4. If no
-@samp{value} is provided, 2 will be used.
-
-Four types of function arguments are recognized:
-
-@table @samp
-@item Integer
-Integer numbers (this includes enumerations, small structures and
-@samp{bool} in @samp{C++}, but excludes @samp{long long}, which is too
-large). They are passed in data registers, starting from @samp{d0}.
-
-@item Pointer
-Pointers to objects or functions (this includes @samp{C++} references
-and the implicit @samp{this} argument). They are passed in address
-registers, starting from @samp{a0}.
-
-@item Float
-Floating point numbers. If the floating point code generation is
-enabled, they are passed in floating point registers, starting from
-@samp{fp0}. Otherwise, they are handled like the next type.
-
-@item Other
-All the other types of arguments, like large structures, pointers to
-class methods in @samp{C++}, etc. They are always passed on the stack.
-@end table
-
-The value given for @samp{-mregparm} indicates how many arguments of
-each of the above first three types should be passed in registers.
-
-Example: @samp{GCC} is invoked with @samp{-mregparm} (without any
-value, so 2 will be used) to compile a source containing the function:
-
-@example
-void fun(int a, char *str, char b, int c);
-@end example
-
-@samp{a} and @samp{b} will be passed in @samp{d0} and @samp{d1},
-respectively, @samp{str} will be passed in @samp{a0}, and @samp{c}
-will be passed on the stack.
-
-@quotation
-@emph{Note}: To use this option properly, it is very important that
-all sources are fully prototyped. There may be very serious problems
-if they are not, since @samp{GCC} will have to ``guess'' where to put
-arguments, potentially making a wrong decission. Example:
-
-@example
-[in file1.c]
-void f(void)
-@{
- g(0); /* Call to a function with no prototype. The argument
- will be put in d0, since it is an integer. */
-@}
-
-[in file2.c]
-void g(char *a) /* The argument is expected in a0, since it is
- a pointer. */
-@{
-@}
-@end example
-
-@samp{-Wimplicit -Wstrict-prototypes} should be used to ensure that
-there are no prototypes missing.
-
-In case of @samp{stdargs} functions, such as @samp{printf}, all
-arguments are passed on the stack.
-
-As of this writing, @samp{-mregparm} is supported by neither
-@samp{IXEmul} nor @samp{LibNIX}, so its usefulness is very limited.
-
-This option was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-The negative form of @samp{-mregparm} is @samp{-mno-regparm}, and is
-on by default.
-@end quotation
-
-@node -frepo, , -mregparm, Invocation
-@section -frepo
-@cindex -frepo
-@cindex Enable C++ Template Repository
-
-The AmigaOS port of @samp{GCC} includes @samp{C++} @dfn{Template
-Repository} patch, so-called @samp{repo} patch.
-
-In order to activate it, please compile @samp{C++} source files with
-@samp{-frepo}. The compiler will not generate unnecessary
-@samp{template} code, and will create @samp{.rpo} files that contain
-information about @samp{template} symbols used in each source file.
-Afterwards, during linking stage, a special tool called
-@samp{collect2} will make sure that every required instantiation of
-each @samp{template} is linked into the executable, recompiling some
-source files if necessary.
-
-@quotation
-@emph{Note}: This option was first made available in the @samp{GCC}
-2.7.2.1, @samp{Geek Gadgets} snapshot @samp{970109}.
-
-This option is not specific to the AmigaOS port of
-@samp{GCC}, nevertheless it is not fully supported in the baseline
-sources.
-
-This patch has been created in Cygnus Support, a company that is a
-major contributor to the @samp{GNU} project. It has not been
-integrated into the baseline sources due to design disagreements.
-
-The negative form of @samp{-frepo} is @samp{-fno-repo}, and is on by
-default.
-@end quotation
-
-For more information, please refer to the @samp{G++ FAQ}.
-
-@node Attributes, Defines, Invocation, Top
-@chapter Attributes
-@cindex Attributes
-@cindex Variable and function attributes
-
-The following non-standard attributes are available in the AmigaOS
-port of @samp{GCC}:
-
-@menu
-Variable attributes:
-* chip:: Put object in @samp{chip} memory.
-
-Function attributes:
-* saveds:: Reload @samp{a4}.
-* interrupt:: Do not mess with the stack.
-* stackext:: Generate stack extension.
-* regparm:: Pass arguments in registers.
-* stkparm:: Pass arguments on the stack.
-@end menu
-
-@node chip, saveds, Attributes, Attributes
-@section chip
-@cindex chip
-@cindex Put object in chip memory
-
-Amiga hardware requires some data to be located in @samp{chip} memory.
-
-Typically, if an initialized buffer is required (containing a picture
-bitmap, for example), a plain, statically initialized buffer is used,
-and the data is copied into a dynamically allocated @samp{MEMF_CHIP}
-buffer.
-
-This is not necessary with the @samp{chip} attribute. If this
-attribute is specified for an initialized, static variable, it will be
-allocated in @samp{chip} memory automagically by the AmigaOS.
-
-A small example:
-
-@example
-UWORD __attribute__((chip)) bitmap1[] = @{ ... @};
-@end example
-
-@quotation
-@emph{Note}: For compatibility with other AmigaOS @samp{C} compilers,
-a preprocessor symbol @samp{__chip} is available, which expands to
-@code{__attribute__((chip))} (@pxref{Keyword macros}).
-
-All the @samp{chip} attribute does is specifying that data should go
-to a section called @samp{.datachip}. Therefore, the standard
-@samp{GCC} feature @code{__attribute__((section(".datachip")))} can be
-used instead.
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{970328}.
-
-For proper operation, this attribute requires a special version of the
-assembler, which generates standard AmigaOS object files. This version
-is not yet available in @samp{Geek Gadgets} in binary form, since
-support for this object files format is not yet complete.
-@end quotation
-
-@format
-This attribute is not supported with @samp{GCC} 3.3 or newer!
-@end format
-
-@node saveds, interrupt, chip, Attributes
-@section saveds
-@cindex saveds
-@cindex Reload a4
-
-This attribute is ignored, unless base-relative data
-(@pxref{-fbaserel}) is compiled.
-
-To improve speed, programs compiled with the AmigaOS port of
-@samp{GCC} set the @samp{a4} register to the appropriate value only
-once, in the startup code. Code generated with the standard @samp{GCC}
-option @samp{-fpic}, in contrast, sets the @samp{a4} register in every
-function which references global data.
-
-This is only safe as long as all function calls are performed from
-within your own code. Things become ``tricky'' if callback functions,
-like the AmigaOS hooks, interrupt handlers etc. are used. If global
-data is referenced in such functions, @samp{a4} has to be set
-properly.
-
-This is exactly what the @samp{saveds} attribute does: it initializes
-@samp{a4} in the function prologue, and restores it to its original
-value in the function epilogue.
-
-@quotation
-@emph{Note}: For compatibility with other AmigaOS @samp{C} compilers,
-a preprocessor symbol @samp{__saveds} is available, which expands to
-@code{__attribute__((saveds))} (@pxref{Keyword macros}).
-
-Please do not use this attribute in pure executables
-(@pxref{-resident}, @pxref{-resident32}). This is because several
-invocations of pure executables can run concurrently, each one having
-its own data section, and there is no way to find out to which of
-these sections should @samp{a4} be set.
-
-The @samp{saveds} attribute is not necessary in function declarations
-(prototypes).
-@end quotation
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node interrupt, stackext, saveds, Attributes
-@section interrupt
-@cindex interrupt
-@cindex Do not mess with the stack
-
-This attribute should be used for any kind of callback functions that
-can be called from outside your task. This includes interrupt
-handlers, shared library functions, etc.
-
-Most often, the @samp{interrupt} attribute is only necessary if a
-program is compiled with stack checking or extension
-(@pxref{-mstackcheck}, @pxref{-mstackextend}). It will prevent the
-compiler from generating stack checking or extension code for the
-function it was specified for.
-
-Additionally, it will set @samp{CC} (@dfn{condition codes register})
-in the function epilogue to return value, by performing @code{tstl
-d0}.
-
-@quotation
-@emph{Note}: For compatibility with other AmigaOS @samp{C} compilers,
-a preprocessor symbol @samp{__interrupt} is available, which expands
-to @code{__attribute__((interrupt))} (@pxref{Keyword macros}).
-
-The @samp{interrupt} attribute is mutually exclusive with the
-@samp{stackext} attribute (@pxref{stackext}).
-
-This attribute is not necessary in function declarations (prototypes).
-@end quotation
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node stackext, regparm, interrupt, Attributes
-@section stackext
-@cindex stackext
-@cindex Generate stack extension
-
-This attribute makes @samp{GCC} generate stack extension code for the
-function for which it was used (@pxref{-mstackextend}). This makes it
-possible to use stack extension selectively, only for the
-``dangerous'' functions --- recursive functions, functions with large
-local variables, etc.
-
-@quotation
-@emph{Note}: For compatibility with other AmigaOS @samp{C} compilers,
-a preprocessor symbol @samp{__stackext} is available, which expands to
-@code{__attribute__((stackext))} (@pxref{Keyword macros}).
-
-The @samp{stackext} attribute is mutually exclusive with the
-@samp{interrupt} attribute (@pxref{interrupt}).
-
-This attribute is not necessary in function declarations (prototypes).
-@end quotation
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node regparm, stkparm, stackext, Attributes
-@section regparm
-@cindex regparm
-@cindex Pass arguments in registers
-
-The @samp{regparm} attribute, together with the @samp{stkparm}
-attribute (@pxref{stkparm}), can be used to fine-tune the way
-arguments are passed. It makes @samp{GCC} pass arguments in registers
-for the function for which it was used, regardless of whether the
-global @samp{-mregparm} option was used or not (@pxref{-mregparm}).
-
-An optional integer argument ranging from 1 to 4 indicates how many
-arguments of each type should be passed in registers
-(@pxref{-mregparm}). The syntax is the following:
-
-@example
-void __attribute__((regparm(3))) fun(int a, char *str, char b, int c);
-@end example
-
-This will make @samp{GCC} pass @samp{a}, @samp{b} and @samp{c} in
-@samp{d0}, @samp{d1} and @samp{d2}, respectively, and @samp{str} in
-@samp{a0}.
-
-If the argument is not provided, the value given for @samp{-mregparm}
-will be used (or 2 if that option was not specified,
-@pxref{-mregparm}).
-
-@quotation
-@emph{Note}: There is generally no need to use this attribute unless
-files compiled with different calling conventions are linked together.
-
-For compatibility with other AmigaOS @samp{C} compilers, a
-preprocessor symbol @samp{__regargs} is available, which expands to
-@code{__attribute__((regparm))} (@pxref{Keyword macros}).
-
-The @samp{regparm} attribute is mutually exclusive with the
-@samp{stkparm} attribute (@pxref{stkparm}).
-
-This attribute is necessary both in function declarations (prototypes)
-and definitions (function code).
-@end quotation
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node stkparm, , regparm, Attributes
-@section stkparm
-@cindex stkparm
-@cindex Pass arguments on the stack
-
-The @samp{stkparm} attribute, together with the @samp{regparm}
-attribute (@pxref{regparm}), can be used to fine-tune the way
-arguments are passed. It makes @samp{GCC} pass arguments on stack for
-the function for which it was used, regardless of whether the global
-@samp{-mregparm} option was used or not (@pxref{-mregparm}).
-
-@quotation
-@emph{Note}: There is generally no need to use this attribute unless
-files compiled with different calling conventions are linked together.
-
-For compatibility with other AmigaOS @samp{C} compilers, a
-preprocessor symbol @samp{__stdargs} is available, which expands to
-@code{__attribute__((stkparm))} (@pxref{Keyword macros}).
-
-The @samp{stkparm} attribute is mutually exclusive with the
-@samp{regparm} attribute (@pxref{regparm}).
-
-This attribute is necessary both in function declarations (prototypes)
-and definitions (function code).
-@end quotation
-
-This attribute was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node Defines, Miscellaneous, Attributes, Top
-@chapter Defines
-@cindex Defines
-@cindex Preprocessor symbols
-
-The AmigaOS-specific preprocessor symbols available in @samp{GCC} can
-be divided into three groups:
-
-@menu
-* Identifying machine:: What machine is this?
-* Options information:: Which options have been specified?
-* Keyword macros:: Compatibility with other compilers.
-@end menu
-
-@node Identifying machine, Options information, Defines, Defines
-@section Symbols identifying machine
-@cindex Symbols identifying machine
-@cindex What machine is this
-
-The following machine-identifying preprocessor symbols are available:
-
-@table @samp
-@item mc68000
-This macro identifies the machine as having a CPU from the Motorola
-68000 family.
-
-@item amiga
-@item amigaos
-@item amigados
-These macros identify the machine as being an Amiga, running the
-AmigaOS.
-
-@item AMIGA
-@item MCH_AMIGA
-These macros are provided for compatibility with other AmigaOS
-@samp{C} compilers.
-@end table
-
-@quotation
-@emph{Note}: These symbols are available in three groups: plain (as
-specified above), with two leading underscores, and with two leading
-and two tailing underscores. The plain ones are not available when
-compiling with the @samp{-ansi} option.
-
-The @samp{amigados} symbol is obsolete and will be removed in future.
-Please use @samp{amigaos}, which was first made available in the
-@samp{GCC} 2.7.2.1, @samp{Geek Gadgets} snapshot @samp{961012}.
-@end quotation
-
-@node Options information, Keyword macros, Identifying machine, Defines
-@section Symbols identifying specified options
-@cindex Symbols identifying specified options
-@cindex Symbols identifying CPU
-@cindex Symbols identifying ixemul
-@cindex Which CPU model options have been specified
-
-@samp{GCC} has several options to choose the CPU model that the code
-should be generated for. The following preprocessor symbols identify
-which options have been specified on the command line:
-
-@table @samp
-@item mc68020
-Either one of @samp{-m68020}, @samp{-mc68020} or @samp{-mc68020-40}
-has been specified.
-
-@item mc68030
-@samp{-m68030} has been specified.
-
-@item mc68040
-@samp{-m68040} has been specified.
-
-@item mc68060
-@samp{-m68060} @emph{[EXPERIMENTAL]} has been specified.
-
-@item __HAVE_68881__
-@samp{-m68881} has been specified.
-@end table
-
-@quotation
-@emph{Note}: The symbols beginning with @samp{mc} are available in
-three groups: plain (as specified above), with two leading
-underscores, and with two leading and two tailing underscores. The
-plain ones are not available when compiling with the @samp{-ansi}
-option. The ``underscored'' ones were first made available in the
-@samp{GCC} 2.7.2.1, @samp{Geek Gadgets} snapshot @samp{970109}.
-
-@samp{mc68000} is defined regardless of which @samp{-m680x0} options
-have been used.
-@end quotation
-
-In addition to the above, a preprocessor symbol @samp{ixemul}
-(together with the ``underscored'' versions) is available when not
-compiling with @samp{-noixemul} (@pxref{-noixemul}) and identifies the
-runtime environment as @samp{IXEmul}. This symbol was first made
-available in the @samp{GCC} 2.7.2.1, @samp{Geek Gadgets} snapshot
-@samp{970328}.
-
-@node Keyword macros, , Options information, Defines
-@section ``Keyword'' macros
-@cindex Keyword macros
-@cindex Compatibility with other compilers
-
-Most AmigaOS-specific @samp{C} compilers have special ``custom
-keywords'', which make the AmigaOS-specific development easier.
-Unfortunately, the idea of ``custom keywords'' is not available in
-@samp{GCC}. However, @samp{attributes} are available, and they provide
-virtually identical functionality. For compatibility with other
-AmigaOS @samp{C} compilers, preprocessor symbols are provided, which
-expand to the appropriate @samp{attributes} (@pxref{Attributes}).
-
-@table @samp
-@item __chip
-@xref{chip}.
-
-@item __saveds
-@xref{saveds}.
-
-@item __interrupt
-@xref{interrupt}.
-
-@item __stackext
-@xref{stackext}.
-
-@item __regargs
-@xref{regparm}.
-
-@item __stdargs
-@xref{stkparm}.
-
-@item __aligned
-This expands to the standard @samp{GCC}
-@samp{__attribute__((aligned(4)))}.
-@end table
-
-@quotation
-@emph{Note}: With @samp{SAS/C}, these keywords may be specified either
-before or after the type, so the following declaration is correct:
-
-@example
-__saveds void func(void);
-@end example
-
-Unfortunately, the syntax rules of @samp{GCC} 2.7.2.1 do not allow to
-specify the attributes before the type, so the above example must be
-changed to:
-
-@example
-void __saveds func(void);
-@end example
-
-This will be fixed in @samp{GCC} 2.8.0.
-@end quotation
-
-@node Miscellaneous, Index, Defines, Top
-@chapter Miscellaneous
-@cindex Miscellaneous
-@cindex Uncategorizable
-
-The following ``hard to categorize'' features are available in the
-AmigaOS port of @samp{GCC}:
-
-@menu
-* Explicit register specification:: Specify registers for arguments.
-* Case sensitive CPP:: <String.h> is not the same as <string.h>
-* Library flavors:: Linker libraries.
-@end menu
-
-@node Explicit register specification, Case sensitive CPP, Miscellaneous, Miscellaneous
-@section Explicit register specification
-@cindex Explicit register specification
-@cindex Specify registers for arguments
-
-In certain situations, like writing callback hooks, ``patchers'',
-standard shared libraries, etc., functions have to receive arguments
-in particular registers.
-
-@samp{-mregparm} (@pxref{-mregparm}) is not appropriate in this case,
-since it does not give the programmer enough control on @emph{which}
-registers will be used.
-
-To overcome this problem in the AmigaOS port of @samp{GCC}, explicit
-register specification has been extended to be available for function
-arguments, as well:
-
-@example
-void myhook(struct Hook* hook __asm("a0"), APTR object __asm("a2"),
- APTR message __asm("a1"))
-@{
- ...
-@}
-@end example
-
-@quotation
-@emph{Note}: This feature is currently not available in @samp{G++}.
-
-Only the @samp{ANSI}-style declarations (prototypes) are supported.
-
-Registers have to be specified both in function declarations
-(prototypes) and definitions (function code).
-@end quotation
-
-This feature was first made available in the @samp{GCC} 2.7.2.1,
-@samp{Geek Gadgets} snapshot @samp{961012}.
-
-@node Case sensitive CPP, Library flavors, Explicit register specification, Miscellaneous
-@section Case sensitive CPP
-@cindex Case sensitive CPP
-@cindex <String.h> is not the same as <string.h>
-
-The preprocessor available in the AmigaOS port of @samp{GCC} is case
-sensitive. This means, that the header names provided in the
-@code{#include} directives have to be correct, including upper and
-lower case letters. This affects only the way the preprocessor works.
-Currently available native AmigaOS file systems are case insensitive.
-
-@quotation
-@emph{Note}: This might seem like a horrible hack and a crazy attempt
-to implement a ``ridiculous'' UNIX feature on Amiga. However, this
-feature has been introduced to terminate the endless @samp{G++}
-problems with a standard @samp{ANSI C} header @file{string.h}: under
-the AmigaOS, a @samp{C++} header @file{String.h} would be included,
-instead.
-@end quotation
-
-@node Library flavors, , Case sensitive CPP, Miscellaneous
-@section Library flavors
-@cindex Library flavors
-@cindex Linker libraries
-
-The AmigaOS port of @samp{GCC} may use different linker libraries
-depending upon the options used while invoking the compiler. These
-libraries reside in subdirectories of the standard locations, such as
-@file{GG:lib/} or, with @samp{GCC} 2.7.2.1,
-@file{GG:lib/gcc-lib/m68k-amigaos/2.7.2.1/}.
-
-If you invoke @code{gcc} with @samp{-v}, you'll see the precise flavor
-of libraries used as a @samp{-fl} option in the @code{ld} invocation.
-Here is a list of the available flavors (and hence the subdirectories
-names):
-
-@itemize @bullet
-@item
-@file{libb} corresponds to the @ref{-fbaserel} option.
-@item
-@file{libb32} corresponds to the @ref{-fbaserel32} option.
-@item
-@file{libm020} corresponds to the @samp{-m68020} (or higher) options.
-@item
-@file{libm881} corresponds to the @samp{-m68881} option.
-@item
-@file{libnix} corresponds to the @ref{-noixemul} option.
-@end itemize
-
-More than one flavor can be specified simultaneously. For example,
-when both @ref{-fbaserel} and @samp{-m68020} are specified, the
-libraries will be searched in @file{libb/libm020} subdirectory (as
-well as in @file{libb} subdirectory and in the standard location).
-
-@node Index, , Miscellaneous, Top
-@chapter Index
-@printindex cp
-
-@contents
-@bye