mirror of
https://github.com/pmret/gcc-papermario.git
synced 2024-11-08 11:53:01 +01:00
966 lines
42 KiB
Plaintext
966 lines
42 KiB
Plaintext
|
This is Info file gcc.info, produced by Makeinfo version 1.67 from the
|
|||
|
input file gcc.texi.
|
|||
|
|
|||
|
This file documents the use and the internals of the GNU compiler.
|
|||
|
|
|||
|
Published by the Free Software Foundation 59 Temple Place - Suite 330
|
|||
|
Boston, MA 02111-1307 USA
|
|||
|
|
|||
|
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
|||
|
Free Software Foundation, Inc.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
Permission is granted to copy and distribute modified versions of
|
|||
|
this manual under the conditions for verbatim copying, provided also
|
|||
|
that the sections entitled "GNU General Public License," "Funding for
|
|||
|
Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
|
|||
|
included exactly as in the original, and provided that the entire
|
|||
|
resulting derived work is distributed under the terms of a permission
|
|||
|
notice identical to this one.
|
|||
|
|
|||
|
Permission is granted to copy and distribute translations of this
|
|||
|
manual into another language, under the above conditions for modified
|
|||
|
versions, except that the sections entitled "GNU General Public
|
|||
|
License," "Funding for Free Software," and "Protect Your Freedom--Fight
|
|||
|
`Look And Feel'", and this permission notice, may be included in
|
|||
|
translations approved by the Free Software Foundation instead of in the
|
|||
|
original English.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Misc, Prev: Cross-compilation, Up: Target Macros
|
|||
|
|
|||
|
Miscellaneous Parameters
|
|||
|
========================
|
|||
|
|
|||
|
Here are several miscellaneous parameters.
|
|||
|
|
|||
|
`PREDICATE_CODES'
|
|||
|
Define this if you have defined special-purpose predicates in the
|
|||
|
file `MACHINE.c'. This macro is called within an initializer of an
|
|||
|
array of structures. The first field in the structure is the name
|
|||
|
of a predicate and the second field is an array of rtl codes. For
|
|||
|
each predicate, list all rtl codes that can be in expressions
|
|||
|
matched by the predicate. The list should have a trailing comma.
|
|||
|
Here is an example of two entries in the list for a typical RISC
|
|||
|
machine:
|
|||
|
|
|||
|
#define PREDICATE_CODES \
|
|||
|
{"gen_reg_rtx_operand", {SUBREG, REG}}, \
|
|||
|
{"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
|
|||
|
|
|||
|
Defining this macro does not affect the generated code (however,
|
|||
|
incorrect definitions that omit an rtl code that may be matched by
|
|||
|
the predicate can cause the compiler to malfunction). Instead, it
|
|||
|
allows the table built by `genrecog' to be more compact and
|
|||
|
efficient, thus speeding up the compiler. The most important
|
|||
|
predicates to include in the list specified by this macro are
|
|||
|
those used in the most insn patterns.
|
|||
|
|
|||
|
`CASE_VECTOR_MODE'
|
|||
|
An alias for a machine mode name. This is the machine mode that
|
|||
|
elements of a jump-table should have.
|
|||
|
|
|||
|
`CASE_VECTOR_PC_RELATIVE'
|
|||
|
Define this macro if jump-tables should contain relative addresses.
|
|||
|
|
|||
|
`CASE_DROPS_THROUGH'
|
|||
|
Define this if control falls through a `case' insn when the index
|
|||
|
value is out of range. This means the specified default-label is
|
|||
|
actually ignored by the `case' insn proper.
|
|||
|
|
|||
|
`CASE_VALUES_THRESHOLD'
|
|||
|
Define this to be the smallest number of different values for
|
|||
|
which it is best to use a jump-table instead of a tree of
|
|||
|
conditional branches. The default is four for machines with a
|
|||
|
`casesi' instruction and five otherwise. This is best for most
|
|||
|
machines.
|
|||
|
|
|||
|
`WORD_REGISTER_OPERATIONS'
|
|||
|
Define this macro if operations between registers with integral
|
|||
|
mode smaller than a word are always performed on the entire
|
|||
|
register. Most RISC machines have this property and most CISC
|
|||
|
machines do not.
|
|||
|
|
|||
|
`LOAD_EXTEND_OP (MODE)'
|
|||
|
Define this macro to be a C expression indicating when insns that
|
|||
|
read memory in MODE, an integral mode narrower than a word, set the
|
|||
|
bits outside of MODE to be either the sign-extension or the
|
|||
|
zero-extension of the data read. Return `SIGN_EXTEND' for values
|
|||
|
of MODE for which the insn sign-extends, `ZERO_EXTEND' for which
|
|||
|
it zero-extends, and `NIL' for other modes.
|
|||
|
|
|||
|
This macro is not called with MODE non-integral or with a width
|
|||
|
greater than or equal to `BITS_PER_WORD', so you may return any
|
|||
|
value in this case. Do not define this macro if it would always
|
|||
|
return `NIL'. On machines where this macro is defined, you will
|
|||
|
normally define it as the constant `SIGN_EXTEND' or `ZERO_EXTEND'.
|
|||
|
|
|||
|
`SHORT_IMMEDIATES_SIGN_EXTEND'
|
|||
|
Define this macro if loading short immediate values into registers
|
|||
|
sign extends.
|
|||
|
|
|||
|
`IMPLICIT_FIX_EXPR'
|
|||
|
An alias for a tree code that should be used by default for
|
|||
|
conversion of floating point values to fixed point. Normally,
|
|||
|
`FIX_ROUND_EXPR' is used.
|
|||
|
|
|||
|
`FIXUNS_TRUNC_LIKE_FIX_TRUNC'
|
|||
|
Define this macro if the same instructions that convert a floating
|
|||
|
point number to a signed fixed point number also convert validly
|
|||
|
to an unsigned one.
|
|||
|
|
|||
|
`EASY_DIV_EXPR'
|
|||
|
An alias for a tree code that is the easiest kind of division to
|
|||
|
compile code for in the general case. It may be `TRUNC_DIV_EXPR',
|
|||
|
`FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four
|
|||
|
division operators differ in how they round the result to an
|
|||
|
integer. `EASY_DIV_EXPR' is used when it is permissible to use
|
|||
|
any of those kinds of division and the choice should be made on
|
|||
|
the basis of efficiency.
|
|||
|
|
|||
|
`MOVE_MAX'
|
|||
|
The maximum number of bytes that a single instruction can move
|
|||
|
quickly between memory and registers or between two memory
|
|||
|
locations.
|
|||
|
|
|||
|
`MAX_MOVE_MAX'
|
|||
|
The maximum number of bytes that a single instruction can move
|
|||
|
quickly between memory and registers or between two memory
|
|||
|
locations. If this is undefined, the default is `MOVE_MAX'.
|
|||
|
Otherwise, it is the constant value that is the largest value that
|
|||
|
`MOVE_MAX' can have at run-time.
|
|||
|
|
|||
|
`SHIFT_COUNT_TRUNCATED'
|
|||
|
A C expression that is nonzero if on this machine the number of
|
|||
|
bits actually used for the count of a shift operation is equal to
|
|||
|
the number of bits needed to represent the size of the object
|
|||
|
being shifted. When this macro is non-zero, the compiler will
|
|||
|
assume that it is safe to omit a sign-extend, zero-extend, and
|
|||
|
certain bitwise `and' instructions that truncates the count of a
|
|||
|
shift operation. On machines that have instructions that act on
|
|||
|
bitfields at variable positions, which may include `bit test'
|
|||
|
instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
|
|||
|
deletion of truncations of the values that serve as arguments to
|
|||
|
bitfield instructions.
|
|||
|
|
|||
|
If both types of instructions truncate the count (for shifts) and
|
|||
|
position (for bitfield operations), or if no variable-position
|
|||
|
bitfield instructions exist, you should define this macro.
|
|||
|
|
|||
|
However, on some machines, such as the 80386 and the 680x0,
|
|||
|
truncation only applies to shift operations and not the (real or
|
|||
|
pretended) bitfield operations. Define `SHIFT_COUNT_TRUNCATED' to
|
|||
|
be zero on such machines. Instead, add patterns to the `md' file
|
|||
|
that include the implied truncation of the shift instructions.
|
|||
|
|
|||
|
You need not define this macro if it would always have the value
|
|||
|
of zero.
|
|||
|
|
|||
|
`TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)'
|
|||
|
A C expression which is nonzero if on this machine it is safe to
|
|||
|
"convert" an integer of INPREC bits to one of OUTPREC bits (where
|
|||
|
OUTPREC is smaller than INPREC) by merely operating on it as if it
|
|||
|
had only OUTPREC bits.
|
|||
|
|
|||
|
On many machines, this expression can be 1.
|
|||
|
|
|||
|
When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
|
|||
|
modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
|
|||
|
If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
|
|||
|
such cases may improve things.
|
|||
|
|
|||
|
`STORE_FLAG_VALUE'
|
|||
|
A C expression describing the value returned by a comparison
|
|||
|
operator with an integral mode and stored by a store-flag
|
|||
|
instruction (`sCOND') when the condition is true. This
|
|||
|
description must apply to *all* the `sCOND' patterns and all the
|
|||
|
comparison operators whose results have a `MODE_INT' mode.
|
|||
|
|
|||
|
A value of 1 or -1 means that the instruction implementing the
|
|||
|
comparison operator returns exactly 1 or -1 when the comparison is
|
|||
|
true and 0 when the comparison is false. Otherwise, the value
|
|||
|
indicates which bits of the result are guaranteed to be 1 when the
|
|||
|
comparison is true. This value is interpreted in the mode of the
|
|||
|
comparison operation, which is given by the mode of the first
|
|||
|
operand in the `sCOND' pattern. Either the low bit or the sign
|
|||
|
bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are
|
|||
|
used by the compiler.
|
|||
|
|
|||
|
If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
|
|||
|
generate code that depends only on the specified bits. It can also
|
|||
|
replace comparison operators with equivalent operations if they
|
|||
|
cause the required bits to be set, even if the remaining bits are
|
|||
|
undefined. For example, on a machine whose comparison operators
|
|||
|
return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
|
|||
|
`0x80000000', saying that just the sign bit is relevant, the
|
|||
|
expression
|
|||
|
|
|||
|
(ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
|
|||
|
|
|||
|
can be converted to
|
|||
|
|
|||
|
(ashift:SI X (const_int N))
|
|||
|
|
|||
|
where N is the appropriate shift count to move the bit being
|
|||
|
tested into the sign bit.
|
|||
|
|
|||
|
There is no way to describe a machine that always sets the
|
|||
|
low-order bit for a true value, but does not guarantee the value
|
|||
|
of any other bits, but we do not know of any machine that has such
|
|||
|
an instruction. If you are trying to port GNU CC to such a
|
|||
|
machine, include an instruction to perform a logical-and of the
|
|||
|
result with 1 in the pattern for the comparison operators and let
|
|||
|
us know (*note How to Report Bugs: Bug Reporting.).
|
|||
|
|
|||
|
Often, a machine will have multiple instructions that obtain a
|
|||
|
value from a comparison (or the condition codes). Here are rules
|
|||
|
to guide the choice of value for `STORE_FLAG_VALUE', and hence the
|
|||
|
instructions to be used:
|
|||
|
|
|||
|
* Use the shortest sequence that yields a valid definition for
|
|||
|
`STORE_FLAG_VALUE'. It is more efficient for the compiler to
|
|||
|
"normalize" the value (convert it to, e.g., 1 or 0) than for
|
|||
|
the comparison operators to do so because there may be
|
|||
|
opportunities to combine the normalization with other
|
|||
|
operations.
|
|||
|
|
|||
|
* For equal-length sequences, use a value of 1 or -1, with -1
|
|||
|
being slightly preferred on machines with expensive jumps and
|
|||
|
1 preferred on other machines.
|
|||
|
|
|||
|
* As a second choice, choose a value of `0x80000001' if
|
|||
|
instructions exist that set both the sign and low-order bits
|
|||
|
but do not define the others.
|
|||
|
|
|||
|
* Otherwise, use a value of `0x80000000'.
|
|||
|
|
|||
|
Many machines can produce both the value chosen for
|
|||
|
`STORE_FLAG_VALUE' and its negation in the same number of
|
|||
|
instructions. On those machines, you should also define a pattern
|
|||
|
for those cases, e.g., one matching
|
|||
|
|
|||
|
(set A (neg:M (ne:M B C)))
|
|||
|
|
|||
|
Some machines can also perform `and' or `plus' operations on
|
|||
|
condition code values with less instructions than the corresponding
|
|||
|
`sCOND' insn followed by `and' or `plus'. On those machines,
|
|||
|
define the appropriate patterns. Use the names `incscc' and
|
|||
|
`decscc', respectively, for the patterns which perform `plus' or
|
|||
|
`minus' operations on condition code values. See `rs6000.md' for
|
|||
|
some examples. The GNU Superoptizer can be used to find such
|
|||
|
instruction sequences on other machines.
|
|||
|
|
|||
|
You need not define `STORE_FLAG_VALUE' if the machine has no
|
|||
|
store-flag instructions.
|
|||
|
|
|||
|
`FLOAT_STORE_FLAG_VALUE'
|
|||
|
A C expression that gives a non-zero floating point value that is
|
|||
|
returned when comparison operators with floating-point results are
|
|||
|
true. Define this macro on machine that have comparison
|
|||
|
operations that return floating-point values. If there are no
|
|||
|
such operations, do not define this macro.
|
|||
|
|
|||
|
`Pmode'
|
|||
|
An alias for the machine mode for pointers. On most machines,
|
|||
|
define this to be the integer mode corresponding to the width of a
|
|||
|
hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
|
|||
|
machines. On some machines you must define this to be one of the
|
|||
|
partial integer modes, such as `PSImode'.
|
|||
|
|
|||
|
The width of `Pmode' must be at least as large as the value of
|
|||
|
`POINTER_SIZE'. If it is not equal, you must define the macro
|
|||
|
`POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
|
|||
|
`Pmode'.
|
|||
|
|
|||
|
`FUNCTION_MODE'
|
|||
|
An alias for the machine mode used for memory references to
|
|||
|
functions being called, in `call' RTL expressions. On most
|
|||
|
machines this should be `QImode'.
|
|||
|
|
|||
|
`INTEGRATE_THRESHOLD (DECL)'
|
|||
|
A C expression for the maximum number of instructions above which
|
|||
|
the function DECL should not be inlined. DECL is a
|
|||
|
`FUNCTION_DECL' node.
|
|||
|
|
|||
|
The default definition of this macro is 64 plus 8 times the number
|
|||
|
of arguments that the function accepts. Some people think a larger
|
|||
|
threshold should be used on RISC machines.
|
|||
|
|
|||
|
`SCCS_DIRECTIVE'
|
|||
|
Define this if the preprocessor should ignore `#sccs' directives
|
|||
|
and print no error message.
|
|||
|
|
|||
|
`NO_IMPLICIT_EXTERN_C'
|
|||
|
Define this macro if the system header files support C++ as well
|
|||
|
as C. This macro inhibits the usual method of using system header
|
|||
|
files in C++, which is to pretend that the file's contents are
|
|||
|
enclosed in `extern "C" {...}'.
|
|||
|
|
|||
|
`HANDLE_PRAGMA (STREAM, NODE)'
|
|||
|
Define this macro if you want to implement any pragmas. If
|
|||
|
defined, it is a C expression whose value is 1 if the pragma was
|
|||
|
handled by the function. The argument STREAM is the stdio input
|
|||
|
stream from which the source text can be read. NODE is the tree
|
|||
|
node for the identifier after the `#pragma'.
|
|||
|
|
|||
|
It is generally a bad idea to implement new uses of `#pragma'. The
|
|||
|
only reason to define this macro is for compatibility with other
|
|||
|
compilers that do support `#pragma' for the sake of any user
|
|||
|
programs which already use it.
|
|||
|
|
|||
|
`VALID_MACHINE_DECL_ATTRIBUTE (DECL, ATTRIBUTES, IDENTIFIER, ARGS)'
|
|||
|
If defined, a C expression whose value is nonzero if IDENTIFIER
|
|||
|
with arguments ARGS is a valid machine specific attribute for DECL.
|
|||
|
The attributes in ATTRIBUTES have previously been assigned to DECL.
|
|||
|
|
|||
|
`VALID_MACHINE_TYPE_ATTRIBUTE (TYPE, ATTRIBUTES, IDENTIFIER, ARGS)'
|
|||
|
If defined, a C expression whose value is nonzero if IDENTIFIER
|
|||
|
with arguments ARGS is a valid machine specific attribute for TYPE.
|
|||
|
The attributes in ATTRIBUTES have previously been assigned to TYPE.
|
|||
|
|
|||
|
`COMP_TYPE_ATTRIBUTES (TYPE1, TYPE2)'
|
|||
|
If defined, a C expression whose value is zero if the attributes on
|
|||
|
TYPE1 and TYPE2 are incompatible, one if they are compatible, and
|
|||
|
two if they are nearly compatible (which causes a warning to be
|
|||
|
generated).
|
|||
|
|
|||
|
`SET_DEFAULT_TYPE_ATTRIBUTES (TYPE)'
|
|||
|
If defined, a C statement that assigns default attributes to newly
|
|||
|
defined TYPE.
|
|||
|
|
|||
|
`DOLLARS_IN_IDENTIFIERS'
|
|||
|
Define this macro to control use of the character `$' in identifier
|
|||
|
names. 0 means `$' is not allowed by default; 1 means it is
|
|||
|
allowed. 1 is the default; there is no need to define this macro
|
|||
|
in that case. This macro controls the compiler proper; it does
|
|||
|
not affect the preprocessor.
|
|||
|
|
|||
|
`NO_DOLLAR_IN_LABEL'
|
|||
|
Define this macro if the assembler does not accept the character
|
|||
|
`$' in label names. By default constructors and destructors in
|
|||
|
G++ have `$' in the identifiers. If this macro is defined, `.' is
|
|||
|
used instead.
|
|||
|
|
|||
|
`NO_DOT_IN_LABEL'
|
|||
|
Define this macro if the assembler does not accept the character
|
|||
|
`.' in label names. By default constructors and destructors in G++
|
|||
|
have names that use `.'. If this macro is defined, these names
|
|||
|
are rewritten to avoid `.'.
|
|||
|
|
|||
|
`DEFAULT_MAIN_RETURN'
|
|||
|
Define this macro if the target system expects every program's
|
|||
|
`main' function to return a standard "success" value by default
|
|||
|
(if no other value is explicitly returned).
|
|||
|
|
|||
|
The definition should be a C statement (sans semicolon) to
|
|||
|
generate the appropriate rtl instructions. It is used only when
|
|||
|
compiling the end of `main'.
|
|||
|
|
|||
|
`HAVE_ATEXIT'
|
|||
|
Define this if the target system supports the function `atexit'
|
|||
|
from the ANSI C standard. If this is not defined, and
|
|||
|
`INIT_SECTION_ASM_OP' is not defined, a default `exit' function
|
|||
|
will be provided to support C++.
|
|||
|
|
|||
|
`EXIT_BODY'
|
|||
|
Define this if your `exit' function needs to do something besides
|
|||
|
calling an external function `_cleanup' before terminating with
|
|||
|
`_exit'. The `EXIT_BODY' macro is only needed if neither
|
|||
|
`HAVE_ATEXIT' nor `INIT_SECTION_ASM_OP' are defined.
|
|||
|
|
|||
|
`INSN_SETS_ARE_DELAYED (INSN)'
|
|||
|
Define this macro as a C expression that is nonzero if it is safe
|
|||
|
for the delay slot scheduler to place instructions in the delay
|
|||
|
slot of INSN, even if they appear to use a resource set or
|
|||
|
clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GNU
|
|||
|
CC knows that every `call_insn' has this behavior. On machines
|
|||
|
where some `insn' or `jump_insn' is really a function call and
|
|||
|
hence has this behavior, you should define this macro.
|
|||
|
|
|||
|
You need not define this macro if it would always return zero.
|
|||
|
|
|||
|
`INSN_REFERENCES_ARE_DELAYED (INSN)'
|
|||
|
Define this macro as a C expression that is nonzero if it is safe
|
|||
|
for the delay slot scheduler to place instructions in the delay
|
|||
|
slot of INSN, even if they appear to set or clobber a resource
|
|||
|
referenced in INSN. INSN is always a `jump_insn' or an `insn'.
|
|||
|
On machines where some `insn' or `jump_insn' is really a function
|
|||
|
call and its operands are registers whose use is actually in the
|
|||
|
subroutine it calls, you should define this macro. Doing so
|
|||
|
allows the delay slot scheduler to move instructions which copy
|
|||
|
arguments into the argument registers into the delay slot of INSN.
|
|||
|
|
|||
|
You need not define this macro if it would always return zero.
|
|||
|
|
|||
|
`MACHINE_DEPENDENT_REORG (INSN)'
|
|||
|
In rare cases, correct code generation requires extra machine
|
|||
|
dependent processing between the second jump optimization pass and
|
|||
|
delayed branch scheduling. On those machines, define this macro
|
|||
|
as a C statement to act on the code starting at INSN.
|
|||
|
|
|||
|
`MULTIPLE_SYMBOL_SPACES'
|
|||
|
Define this macro if in some cases global symbols from one
|
|||
|
translation unit may not be bound to undefined symbols in another
|
|||
|
translation unit without user intervention. For instance, under
|
|||
|
Microsoft Windows symbols must be explicitly imported from shared
|
|||
|
libraries (DLLs).
|
|||
|
|
|||
|
`GIV_SORT_CRITERION (GIV1, GIV2)'
|
|||
|
In some cases, the strength reduction optimization pass can
|
|||
|
produce better code if this is defined. This macro controls the
|
|||
|
order that induction variables are combined. This macro is
|
|||
|
particularly useful if the target has limited addressing modes.
|
|||
|
For instance, the SH target has only positive offsets in
|
|||
|
addresses. Thus sorting to put the smallest address first allows
|
|||
|
the most combinations to be found.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Config, Next: Fragments, Prev: Target Macros, Up: Top
|
|||
|
|
|||
|
The Configuration File
|
|||
|
**********************
|
|||
|
|
|||
|
The configuration file `xm-MACHINE.h' contains macro definitions
|
|||
|
that describe the machine and system on which the compiler is running,
|
|||
|
unlike the definitions in `MACHINE.h', which describe the machine for
|
|||
|
which the compiler is producing output. Most of the values in
|
|||
|
`xm-MACHINE.h' are actually the same on all machines that GNU CC runs
|
|||
|
on, so large parts of all configuration files are identical. But there
|
|||
|
are some macros that vary:
|
|||
|
|
|||
|
`USG'
|
|||
|
Define this macro if the host system is System V.
|
|||
|
|
|||
|
`VMS'
|
|||
|
Define this macro if the host system is VMS.
|
|||
|
|
|||
|
`FATAL_EXIT_CODE'
|
|||
|
A C expression for the status code to be returned when the compiler
|
|||
|
exits after serious errors.
|
|||
|
|
|||
|
`SUCCESS_EXIT_CODE'
|
|||
|
A C expression for the status code to be returned when the compiler
|
|||
|
exits without serious errors.
|
|||
|
|
|||
|
`HOST_WORDS_BIG_ENDIAN'
|
|||
|
Defined if the host machine stores words of multi-word values in
|
|||
|
big-endian order. (GNU CC does not depend on the host byte
|
|||
|
ordering within a word.)
|
|||
|
|
|||
|
`HOST_FLOAT_WORDS_BIG_ENDIAN'
|
|||
|
Define this macro to be 1 if the host machine stores `DFmode',
|
|||
|
`XFmode' or `TFmode' floating point numbers in memory with the
|
|||
|
word containing the sign bit at the lowest address; otherwise,
|
|||
|
define it to be zero.
|
|||
|
|
|||
|
This macro need not be defined if the ordering is the same as for
|
|||
|
multi-word integers.
|
|||
|
|
|||
|
`HOST_FLOAT_FORMAT'
|
|||
|
A numeric code distinguishing the floating point format for the
|
|||
|
host machine. See `TARGET_FLOAT_FORMAT' in *Note Storage Layout::
|
|||
|
for the alternatives and default.
|
|||
|
|
|||
|
`HOST_BITS_PER_CHAR'
|
|||
|
A C expression for the number of bits in `char' on the host
|
|||
|
machine.
|
|||
|
|
|||
|
`HOST_BITS_PER_SHORT'
|
|||
|
A C expression for the number of bits in `short' on the host
|
|||
|
machine.
|
|||
|
|
|||
|
`HOST_BITS_PER_INT'
|
|||
|
A C expression for the number of bits in `int' on the host machine.
|
|||
|
|
|||
|
`HOST_BITS_PER_LONG'
|
|||
|
A C expression for the number of bits in `long' on the host
|
|||
|
machine.
|
|||
|
|
|||
|
`ONLY_INT_FIELDS'
|
|||
|
Define this macro to indicate that the host compiler only supports
|
|||
|
`int' bit fields, rather than other integral types, including
|
|||
|
`enum', as do most C compilers.
|
|||
|
|
|||
|
`OBSTACK_CHUNK_SIZE'
|
|||
|
A C expression for the size of ordinary obstack chunks. If you
|
|||
|
don't define this, a usually-reasonable default is used.
|
|||
|
|
|||
|
`OBSTACK_CHUNK_ALLOC'
|
|||
|
The function used to allocate obstack chunks. If you don't define
|
|||
|
this, `xmalloc' is used.
|
|||
|
|
|||
|
`OBSTACK_CHUNK_FREE'
|
|||
|
The function used to free obstack chunks. If you don't define
|
|||
|
this, `free' is used.
|
|||
|
|
|||
|
`USE_C_ALLOCA'
|
|||
|
Define this macro to indicate that the compiler is running with the
|
|||
|
`alloca' implemented in C. This version of `alloca' can be found
|
|||
|
in the file `alloca.c'; to use it, you must also alter the
|
|||
|
`Makefile' variable `ALLOCA'. (This is done automatically for the
|
|||
|
systems on which we know it is needed.)
|
|||
|
|
|||
|
If you do define this macro, you should probably do it as follows:
|
|||
|
|
|||
|
#ifndef __GNUC__
|
|||
|
#define USE_C_ALLOCA
|
|||
|
#else
|
|||
|
#define alloca __builtin_alloca
|
|||
|
#endif
|
|||
|
|
|||
|
so that when the compiler is compiled with GNU CC it uses the more
|
|||
|
efficient built-in `alloca' function.
|
|||
|
|
|||
|
`FUNCTION_CONVERSION_BUG'
|
|||
|
Define this macro to indicate that the host compiler does not
|
|||
|
properly handle converting a function value to a
|
|||
|
pointer-to-function when it is used in an expression.
|
|||
|
|
|||
|
`MULTIBYTE_CHARS'
|
|||
|
Define this macro to enable support for multibyte characters in the
|
|||
|
input to GNU CC. This requires that the host system support the
|
|||
|
ANSI C library functions for converting multibyte characters to
|
|||
|
wide characters.
|
|||
|
|
|||
|
`POSIX'
|
|||
|
Define this if your system is POSIX.1 compliant.
|
|||
|
|
|||
|
`NO_SYS_SIGLIST'
|
|||
|
Define this if your system *does not* provide the variable
|
|||
|
`sys_siglist'.
|
|||
|
|
|||
|
Some systems do provide this variable, but with a different name
|
|||
|
such as `_sys_siglist'. On these systems, you can define
|
|||
|
`sys_siglist' as a macro which expands into the name actually
|
|||
|
provided.
|
|||
|
|
|||
|
Autoconf normally defines `SYS_SIGLIST_DECLARED' when it finds a
|
|||
|
declaration of `sys_siglist' in the system header files. However,
|
|||
|
when you define `sys_siglist' to a different name autoconf will
|
|||
|
not automatically define `SYS_SIGLIST_DECLARED'. Therefore, if
|
|||
|
you define `sys_siglist', you should also define
|
|||
|
`SYS_SIGLIST_DECLARED'.
|
|||
|
|
|||
|
`USE_PROTOTYPES'
|
|||
|
Define this to be 1 if you know that the host compiler supports
|
|||
|
prototypes, even if it doesn't define __STDC__, or define it to be
|
|||
|
0 if you do not want any prototypes used in compiling GNU CC. If
|
|||
|
`USE_PROTOTYPES' is not defined, it will be determined
|
|||
|
automatically whether your compiler supports prototypes by
|
|||
|
checking if `__STDC__' is defined.
|
|||
|
|
|||
|
`NO_MD_PROTOTYPES'
|
|||
|
Define this if you wish suppression of prototypes generated from
|
|||
|
the machine description file, but to use other prototypes within
|
|||
|
GNU CC. If `USE_PROTOTYPES' is defined to be 0, or the host
|
|||
|
compiler does not support prototypes, this macro has no effect.
|
|||
|
|
|||
|
`MD_CALL_PROTOTYPES'
|
|||
|
Define this if you wish to generate prototypes for the `gen_call'
|
|||
|
or `gen_call_value' functions generated from the machine
|
|||
|
description file. If `USE_PROTOTYPES' is defined to be 0, or the
|
|||
|
host compiler does not support prototypes, or `NO_MD_PROTOTYPES'
|
|||
|
is defined, this macro has no effect. As soon as all of the
|
|||
|
machine descriptions are modified to have the appropriate number
|
|||
|
of arguments, this macro will be removed.
|
|||
|
|
|||
|
`NO_STAB_H'
|
|||
|
Define this if your system does not have the include file
|
|||
|
`stab.h'. If `USG' is defined, `NO_STAB_H' is assumed.
|
|||
|
|
|||
|
`PATH_SEPARATOR'
|
|||
|
Define this macro to be a C character constant representing the
|
|||
|
character used to separate components in paths. The default value
|
|||
|
is the colon character
|
|||
|
|
|||
|
`DIR_SEPARATOR'
|
|||
|
If your system uses some character other than slash to separate
|
|||
|
directory names within a file specification, define this macro to
|
|||
|
be a C character constant specifying that character. When GNU CC
|
|||
|
displays file names, the character you specify will be used. GNU
|
|||
|
CC will test for both slash and the character you specify when
|
|||
|
parsing filenames.
|
|||
|
|
|||
|
`OBJECT_SUFFIX'
|
|||
|
Define this macro to be a C string representing the suffix for
|
|||
|
object files on your machine. If you do not define this macro,
|
|||
|
GNU CC will use `.o' as the suffix for object files.
|
|||
|
|
|||
|
`EXECUTABLE_SUFFIX'
|
|||
|
Define this macro to be a C string representing the suffix for
|
|||
|
executable files on your machine. If you do not define this
|
|||
|
macro, GNU CC will use the null string as the suffix for object
|
|||
|
files.
|
|||
|
|
|||
|
`COLLECT_EXPORT_LIST'
|
|||
|
If defined, `collect2' will scan the individual object files
|
|||
|
specified on its command line and create an export list for the
|
|||
|
linker. Define this macro for systems like AIX, where the linker
|
|||
|
discards object files that are not referenced from `main' and uses
|
|||
|
export lists.
|
|||
|
|
|||
|
In addition, configuration files for system V define `bcopy',
|
|||
|
`bzero' and `bcmp' as aliases. Some files define `alloca' as a macro
|
|||
|
when compiled with GNU CC, in order to take advantage of the benefit of
|
|||
|
GNU CC's built-in `alloca'.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Fragments, Next: Funding, Prev: Config, Up: Top
|
|||
|
|
|||
|
Makefile Fragments
|
|||
|
******************
|
|||
|
|
|||
|
When you configure GNU CC using the `configure' script (*note
|
|||
|
Installation::.), it will construct the file `Makefile' from the
|
|||
|
template file `Makefile.in'. When it does this, it will incorporate
|
|||
|
makefile fragment files from the `config' directory, named `t-TARGET'
|
|||
|
and `x-HOST'. If these files do not exist, it means nothing needs to
|
|||
|
be added for a given target or host.
|
|||
|
|
|||
|
* Menu:
|
|||
|
|
|||
|
* Target Fragment:: Writing the `t-TARGET' file.
|
|||
|
* Host Fragment:: Writing the `x-HOST' file.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments
|
|||
|
|
|||
|
The Target Makefile Fragment
|
|||
|
============================
|
|||
|
|
|||
|
The target makefile fragment, `t-TARGET', defines special target
|
|||
|
dependent variables and targets used in the `Makefile':
|
|||
|
|
|||
|
`LIBGCC1'
|
|||
|
The rule to use to build `libgcc1.a'. If your target does not
|
|||
|
need to use the functions in `libgcc1.a', set this to empty.
|
|||
|
*Note Interface::.
|
|||
|
|
|||
|
`CROSS_LIBGCC1'
|
|||
|
The rule to use to build `libgcc1.a' when building a cross
|
|||
|
compiler. If your target does not need to use the functions in
|
|||
|
`libgcc1.a', set this to empty. *Note Cross Runtime::.
|
|||
|
|
|||
|
`LIBGCC2_CFLAGS'
|
|||
|
Compiler flags to use when compiling `libgcc2.c'.
|
|||
|
|
|||
|
`LIB2FUNCS_EXTRA'
|
|||
|
A list of source file names to be compiled or assembled and
|
|||
|
inserted into `libgcc.a'.
|
|||
|
|
|||
|
`CRTSTUFF_T_CFLAGS'
|
|||
|
Special flags used when compiling `crtstuff.c'. *Note
|
|||
|
Initialization::.
|
|||
|
|
|||
|
`CRTSTUFF_T_CFLAGS_S'
|
|||
|
Special flags used when compiling `crtstuff.c' for shared linking.
|
|||
|
Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
|
|||
|
*Note Initialization::.
|
|||
|
|
|||
|
`MULTILIB_OPTIONS'
|
|||
|
For some targets, invoking GNU CC in different ways produces
|
|||
|
objects that can not be linked together. For example, for some
|
|||
|
targets GNU CC produces both big and little endian code. For
|
|||
|
these targets, you must arrange for multiple versions of
|
|||
|
`libgcc.a' to be compiled, one for each set of incompatible
|
|||
|
options. When GNU CC invokes the linker, it arranges to link in
|
|||
|
the right version of `libgcc.a', based on the command line options
|
|||
|
used.
|
|||
|
|
|||
|
The `MULTILIB_OPTIONS' macro lists the set of options for which
|
|||
|
special versions of `libgcc.a' must be built. Write options that
|
|||
|
are mutually incompatible side by side, separated by a slash.
|
|||
|
Write options that may be used together separated by a space. The
|
|||
|
build procedure will build all combinations of compatible options.
|
|||
|
|
|||
|
For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
|
|||
|
msoft-float', `Makefile' will build special versions of `libgcc.a'
|
|||
|
using the sets of options `-m68000', `-m68020', `-msoft-float',
|
|||
|
`-m68000 -msoft-float', and `-m68020 -msoft-float'.
|
|||
|
|
|||
|
`MULTILIB_DIRNAMES'
|
|||
|
If `MULTILIB_OPTIONS' is used, this variable specifies the
|
|||
|
directory names that should be used to hold the various libraries.
|
|||
|
Write one element in `MULTILIB_DIRNAMES' for each element in
|
|||
|
`MULTILIB_OPTIONS'. If `MULTILIB_DIRNAMES' is not used, the
|
|||
|
default value will be `MULTILIB_OPTIONS', with all slashes treated
|
|||
|
as spaces.
|
|||
|
|
|||
|
For example, if `MULTILIB_OPTIONS' is specified as `m68000/m68020
|
|||
|
msoft-float', then the default value of `MULTILIB_DIRNAMES' is
|
|||
|
`m68000 m68020 msoft-float'. You may specify a different value if
|
|||
|
you desire a different set of directory names.
|
|||
|
|
|||
|
`MULTILIB_MATCHES'
|
|||
|
Sometimes the same option may be written in two different ways.
|
|||
|
If an option is listed in `MULTILIB_OPTIONS', GNU CC needs to know
|
|||
|
about any synonyms. In that case, set `MULTILIB_MATCHES' to a
|
|||
|
list of items of the form `option=option' to describe all relevant
|
|||
|
synonyms. For example, `m68000=mc68000 m68020=mc68020'.
|
|||
|
|
|||
|
`MULTILIB_EXCEPTIONS'
|
|||
|
Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
|
|||
|
specified, there are combinations that should not be built. In
|
|||
|
that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
|
|||
|
exceptions in shell case syntax that should not be built.
|
|||
|
|
|||
|
For example, in the PowerPC embedded ABI support, it was not
|
|||
|
desirable to build libraries that compiled with the
|
|||
|
`-mcall-aixdesc' option and either of the `-mcall-aixdesc' or
|
|||
|
`-mlittle' options at the same time, and therefore
|
|||
|
`MULTILIB_EXCEPTIONS' is set to `*mrelocatable/*mcall-aixdesc*
|
|||
|
*mlittle/*mcall-aixdesc*'.
|
|||
|
|
|||
|
`MULTILIB_EXTRA_OPTS'
|
|||
|
Sometimes it is desirable that when building multiple versions of
|
|||
|
`libgcc.a' certain options should always be passed on to the
|
|||
|
compiler. In that case, set `MULTILIB_EXTRA_OPTS' to be the list
|
|||
|
of options to be used for all builds.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments
|
|||
|
|
|||
|
The Host Makefile Fragment
|
|||
|
==========================
|
|||
|
|
|||
|
The host makefile fragment, `x-HOST', defines special host dependent
|
|||
|
variables and targets used in the `Makefile':
|
|||
|
|
|||
|
`CC'
|
|||
|
The compiler to use when building the first stage.
|
|||
|
|
|||
|
`CLIB'
|
|||
|
Additional host libraries to link with.
|
|||
|
|
|||
|
`OLDCC'
|
|||
|
The compiler to use when building `libgcc1.a' for a native
|
|||
|
compilation.
|
|||
|
|
|||
|
`OLDAR'
|
|||
|
The version of `ar' to use when building `libgcc1.a' for a native
|
|||
|
compilation.
|
|||
|
|
|||
|
`INSTALL'
|
|||
|
The install program to use.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Funding, Next: Look and Feel, Prev: Fragments, Up: Top
|
|||
|
|
|||
|
Funding Free Software
|
|||
|
*********************
|
|||
|
|
|||
|
If you want to have more free software a few years from now, it makes
|
|||
|
sense for you to help encourage people to contribute funds for its
|
|||
|
development. The most effective approach known is to encourage
|
|||
|
commercial redistributors to donate.
|
|||
|
|
|||
|
Users of free software systems can boost the pace of development by
|
|||
|
encouraging for-a-fee distributors to donate part of their selling price
|
|||
|
to free software developers--the Free Software Foundation, and others.
|
|||
|
|
|||
|
The way to convince distributors to do this is to demand it and
|
|||
|
expect it from them. So when you compare distributors, judge them
|
|||
|
partly by how much they give to free software development. Show
|
|||
|
distributors they must compete to be the one who gives the most.
|
|||
|
|
|||
|
To make this approach work, you must insist on numbers that you can
|
|||
|
compare, such as, "We will donate ten dollars to the Frobnitz project
|
|||
|
for each disk sold." Don't be satisfied with a vague promise, such as
|
|||
|
"A portion of the profits are donated," since it doesn't give a basis
|
|||
|
for comparison.
|
|||
|
|
|||
|
Even a precise fraction "of the profits from this disk" is not very
|
|||
|
meaningful, since creative accounting and unrelated business decisions
|
|||
|
can greatly alter what fraction of the sales price counts as profit.
|
|||
|
If the price you pay is $50, ten percent of the profit is probably less
|
|||
|
than a dollar; it might be a few cents, or nothing at all.
|
|||
|
|
|||
|
Some redistributors do development work themselves. This is useful
|
|||
|
too; but to keep everyone honest, you need to inquire how much they do,
|
|||
|
and what kind. Some kinds of development make much more long-term
|
|||
|
difference than others. For example, maintaining a separate version of
|
|||
|
a program contributes very little; maintaining the standard version of a
|
|||
|
program for the whole community contributes much. Easy new ports
|
|||
|
contribute little, since someone else would surely do them; difficult
|
|||
|
ports such as adding a new CPU to the GNU C compiler contribute more;
|
|||
|
major new features or packages contribute the most.
|
|||
|
|
|||
|
By establishing the idea that supporting further development is "the
|
|||
|
proper thing to do" when distributing free software for a fee, we can
|
|||
|
assure a steady flow of resources into making more free software.
|
|||
|
|
|||
|
Copyright (C) 1994 Free Software Foundation, Inc.
|
|||
|
Verbatim copying and redistribution of this section is permitted
|
|||
|
without royalty; alteration is not permitted.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Look and Feel, Next: Copying, Prev: Funding, Up: Top
|
|||
|
|
|||
|
Protect Your Freedom--Fight "Look And Feel"
|
|||
|
*******************************************
|
|||
|
|
|||
|
This section is a political message from the League for Programming
|
|||
|
Freedom to the users of GNU CC. We have included it here because
|
|||
|
the issue of interface copyright is important to the GNU project.
|
|||
|
|
|||
|
Apple, Lotus, and now CDC have tried to create a new form of legal
|
|||
|
monopoly: a copyright on a user interface.
|
|||
|
|
|||
|
An interface is a kind of language--a set of conventions for
|
|||
|
communication between two entities, human or machine. Until a few years
|
|||
|
ago, the law seemed clear: interfaces were outside the domain of
|
|||
|
copyright, so programmers could program freely and implement whatever
|
|||
|
interface the users demanded. Imitating de-facto standard interfaces,
|
|||
|
sometimes with improvements, was standard practice in the computer
|
|||
|
field. These improvements, if accepted by the users, caught on and
|
|||
|
became the norm; in this way, much progress took place.
|
|||
|
|
|||
|
Computer users, and most software developers, were happy with this
|
|||
|
state of affairs. However, large companies such as Apple and Lotus
|
|||
|
would prefer a different system--one in which they can own interfaces
|
|||
|
and thereby rid themselves of all serious competitors. They hope that
|
|||
|
interface copyright will give them, in effect, monopolies on major
|
|||
|
classes of software.
|
|||
|
|
|||
|
Other large companies such as IBM and Digital also favor interface
|
|||
|
monopolies, for the same reason: if languages become property, they
|
|||
|
expect to own many de-facto standard languages. But Apple and Lotus are
|
|||
|
the ones who have actually sued. Apple's lawsuit was defeated, for
|
|||
|
reasons only partly related to the general issue of interface copyright.
|
|||
|
|
|||
|
Lotus won lawsuits against two small companies, which were thus put
|
|||
|
out of business. Then Lotus sued Borland; Lotus won in the trial court
|
|||
|
(no surprise, since it was the same court that had ruled for Lotus twice
|
|||
|
before), but the court of appeals ruled in favor of Borland, which was
|
|||
|
assisted by a friend-of-the-court brief from the League for Programming
|
|||
|
Freedom.
|
|||
|
|
|||
|
Lotus appealed the case to the Supreme Court, which heard the case
|
|||
|
but was unable to reach a decision. This failure means that the appeals
|
|||
|
court decision stands, in one portion of the United States, and may
|
|||
|
influence the other appeals courts, but it does not set a nationwide
|
|||
|
precedent. The battle is not over, and it is not limited to the United
|
|||
|
States.
|
|||
|
|
|||
|
The battle is extending into other areas of software as well. In
|
|||
|
1995 a company that produced a simulator for a CDC computer was shut
|
|||
|
down by a copyright lawsuit, in which CDC charged that the simulator
|
|||
|
infringed the copyright on the manuals for the computer.
|
|||
|
|
|||
|
If the monopolists get their way, they will hobble the software
|
|||
|
field:
|
|||
|
|
|||
|
* Gratuitous incompatibilities will burden users. Imagine if each
|
|||
|
car manufacturer had to design a different way to start, stop, and
|
|||
|
steer a car.
|
|||
|
|
|||
|
* Users will be "locked in" to whichever interface they learn; then
|
|||
|
they will be prisoners of one supplier, who will charge a
|
|||
|
monopolistic price.
|
|||
|
|
|||
|
* Large companies have an unfair advantage wherever lawsuits become
|
|||
|
commonplace. Since they can afford to sue, they can intimidate
|
|||
|
smaller developers with threats even when they don't really have a
|
|||
|
case.
|
|||
|
|
|||
|
* Interface improvements will come slower, since incremental
|
|||
|
evolution through creative partial imitation will no longer occur.
|
|||
|
|
|||
|
If interface monopolies are accepted, other large companies are
|
|||
|
waiting to grab theirs:
|
|||
|
|
|||
|
* Adobe is expected to claim a monopoly on the interfaces of various
|
|||
|
popular application programs, if Lotus ultimately wins the case
|
|||
|
against Borland.
|
|||
|
|
|||
|
* Open Computing magazine reported a Microsoft vice president as
|
|||
|
threatening to sue people who imitate the interface of Windows.
|
|||
|
|
|||
|
Users invest a great deal of time and money in learning to use
|
|||
|
computer interfaces. Far more, in fact, than software developers
|
|||
|
invest in developing *and even implementing* the interfaces. Whoever
|
|||
|
can own an interface, has made its users into captives, and
|
|||
|
misappropriated their investment.
|
|||
|
|
|||
|
To protect our freedom from monopolies like these, a group of
|
|||
|
programmers and users have formed a grass-roots political organization,
|
|||
|
the League for Programming Freedom.
|
|||
|
|
|||
|
The purpose of the League is to oppose monopolistic practices such as
|
|||
|
interface copyright and software patents. The League calls for a return
|
|||
|
to the legal policies of the recent past, in which programmers could
|
|||
|
program freely. The League is not concerned with free software as an
|
|||
|
issue, and is not affiliated with the Free Software Foundation.
|
|||
|
|
|||
|
The League's activities include publicizing the issues, as is being
|
|||
|
done here, and filing friend-of-the-court briefs on behalf of
|
|||
|
defendants sued by monopolists.
|
|||
|
|
|||
|
The League's membership rolls include Donald Knuth, the foremost
|
|||
|
authority on algorithms, John McCarthy, inventor of Lisp, Marvin Minsky,
|
|||
|
founder of the MIT Artificial Intelligence lab, Guy L. Steele, Jr.,
|
|||
|
author of well-known books on Lisp and C, as well as Richard Stallman,
|
|||
|
the developer of GNU CC. Please join and add your name to the list.
|
|||
|
Membership dues in the League are $42 per year for programmers, managers
|
|||
|
and professionals; $10.50 for students; $21 for others.
|
|||
|
|
|||
|
Activist members are especially important, but members who have no
|
|||
|
time to give are also important. Surveys at major ACM conferences have
|
|||
|
indicated a vast majority of attendees agree with the League on both
|
|||
|
issues (interface copyrights and software patents). If just ten percent
|
|||
|
of the programmers who agree with the League join the League, we will
|
|||
|
probably triumph.
|
|||
|
|
|||
|
To join, or for more information, send electronic mail to the
|
|||
|
address `lpf@uunet.uu.net' or write to:
|
|||
|
|
|||
|
League for Programming Freedom
|
|||
|
1 Kendall Square #143
|
|||
|
P.O. Box 9171
|
|||
|
Cambridge, MA 02139
|
|||
|
|
|||
|
In addition to joining the League, here are some suggestions from the
|
|||
|
League for other things you can do to protect your freedom to write
|
|||
|
programs:
|
|||
|
|
|||
|
* Tell your friends and colleagues about this issue and how it
|
|||
|
threatens to ruin the computer industry.
|
|||
|
|
|||
|
* Mention that you are a League member in your `.signature', and
|
|||
|
mention the League's email address for inquiries.
|
|||
|
|
|||
|
* Ask the companies you consider working for or working with to make
|
|||
|
statements against software monopolies, and give preference to
|
|||
|
those that do.
|
|||
|
|
|||
|
* When employers ask you to sign contracts giving them copyright on
|
|||
|
your work, insist on a clause saying they will not claim the
|
|||
|
copyright covers imitating the interface.
|
|||
|
|
|||
|
* When employers ask you to sign contracts giving them patent rights,
|
|||
|
insist on clauses saying they can use these rights only
|
|||
|
defensively. Don't rely on "company policy," since that can
|
|||
|
change at any time; don't rely on an individual executive's
|
|||
|
private word, since that person may be replaced. Get a commitment
|
|||
|
just as binding as the commitment they get from you.
|
|||
|
|
|||
|
* Write to Congress to explain the importance of these issues.
|
|||
|
|
|||
|
House Subcommittee on Intellectual Property
|
|||
|
2137 Rayburn Bldg
|
|||
|
Washington, DC 20515
|
|||
|
|
|||
|
Senate Subcommittee on Patents, Trademarks and Copyrights
|
|||
|
United States Senate
|
|||
|
Washington, DC 20510
|
|||
|
|
|||
|
(These committees have received lots of mail already; let's give
|
|||
|
them even more.)
|
|||
|
|
|||
|
Democracy means nothing if you don't use it. Stand up and be
|
|||
|
counted!
|
|||
|
|