diff options
author | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
commit | be8b04496302184c6e8f04d6179f9c3afc50aeb6 (patch) | |
tree | 726e2468c0c07add773c0dbd86ab6386844259ae /gcc/proto-man |
initial commit
Diffstat (limited to 'gcc/proto-man')
-rwxr-xr-x | gcc/proto-man | 904 |
1 files changed, 904 insertions, 0 deletions
diff --git a/gcc/proto-man b/gcc/proto-man new file mode 100755 index 0000000..bd1a3e2 --- /dev/null +++ b/gcc/proto-man @@ -0,0 +1,904 @@ +#ifndef UNPRO +#define THISPROG PROTOIZE +#define thisprog protoize +#define Thisprog Protoize +#define otherprog unprotoize +#define from_convention varargs +#define to_convention stdarg +#else +#define THISPROG UNPROTOIZE +#define thisprog unprotoize +#define Thisprog Unprotoize +#define otherprog protoize +#define from_convention stdarg +#define to_convention varargs +#endif +.\" Man page file for the thisprog program. +.\" This is badly out of date, especially concerning +.\" the way of deciding which files to convert. +.\" Really all this information should be updated and put in gcc.texinfo. +.\" +.\" Written by Ron Guilmette (rfg@mcc.com). +.\" +.\" Copyright (C) 1989, 1990 Free Software Foundation, Inc. +.\" +.\" This file is part of GNU CC. +.\" +.\" GNU CC is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 1, or (at your option) +.\" any later version. +.\" +.\" GNU CC is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with GNU CC; see the file COPYING. If not, write to +.\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +.\" +.TH THISPROG 1 "21 January 1990" "" +.SH NAME +#ifndef UNPRO +thisprog \- convert K&R C source code to ANSI C prototype format +#else +thisprog \- convert ANSI C source code to K&R C (unprototyped) format +#endif +.SH SYNOPSIS +.B thisprog +[ +#ifndef UNPRO +.B -VqfnkNlgC +] [ +.B -B +.I <dir> +#else +.B -VqfnkN +] [ +.B -i +.I <str> +#endif +] [ +.B -c +.I <cc opts> +] [ +.I file\c +\&... ] +.SH DESCRIPTION +.fi +.ad b +.I Thisprog +aids in the conversion of +#ifndef UNPRO +K&R C source code files to ANSI C source code files with function prototypes. +This conversion is useful for eliciting more complete +interface checking from ANSI C compilers, or as +a preliminary step in the conversion of C programs to C++. +#else +ANSI C source code files to K&R C source code files without function prototypes +. +This conversion is useful for porting ANSI C programs to +machines for which no ANSI C compiler is available. +#endif +.PP +.I Thisprog +is designed to be used in conjunction +with the GNU C compiler. The GNU C compiler does preliminary +.I "information gathering" +about functions by analyzing the files to be converted. +The GNU C compiler may be invoked automatically as a result of +running +.I thisprog +so it is important to have it properly installed before attempting +to convert source files via +.I thisprog. +#ifndef UNPRO +.PP +.I Thisprog +actually has two primary functions. First, It converts +existing function declarations and definitions +to prototype form. +Second, for cases in which functions +are called before they have been declared +(i.e. points of +.I implicit +function declarations), +.I thisprog +can be instructed to +insert new prototype style function declarations +into the source code. +For implicit function declarations, +.I thisprog +can either +insert the new (explicit) function declaration +at the very beginning of the block which contains +the implicit declaration, or (at the user\'s option) +these explicit declarations can be inserted near the tops of the +source files where the implicit declarations occurred. +The insertion of these new (explicit) function +declarations (by thisprog) assures that +.B all +function calls in your source files will be +checked for the correct +number and types of parameters +during subsequent compilations. +#endif +.PP +.I Thisprog +supports the conversion of both large and small systems of C source +code to +#ifndef UNPRO +prototype +#else +unprototyped +#endif +form. +.I Thisprog +can perform the conversion of an +entire program in one (batch) step. +#ifndef UNPRO +.PP +.I Thisprog +is able to convert entire systems of C source code because +it knows how to use information (gleaned by the C compiler) from one +source file to convert +function definitions and declarations in that same source file or in +other source files (as required). +#endif +.PP +Each conversion of a system of source code to +#ifndef UNPRO +prototyped +#else +unprototyped +#endif +format consists of two major steps. First, there is an +.I "information gathering" +step. In this step, +all of the source files that make up a given +executable program are recompiled using the GNU C compiler and using the +.B -fgen-aux-info +option. +These recompilations will be performed automatically by +.I thisprog +on an +.I as needed +basis. +.PP +As individual compilation steps are performed, you may notice +that a side-effect of these compilations is to create files with a +.B .X +suffix in the same directory with the original +.I base +source files being compiled. +During compilation with +.B -fgen-aux-info, +one such +.B .X +file is created for +each +.I base +source file compiled. These files contain +information about function definitions and declarations and +additional coded information which can be used by +.I thisprog +to convert your source code +automatically to +#ifndef UNPRO +prototyped +#else +unprototyped +#endif +format. +.PP +After a full set of +.B .X +files corresponding to all of the +.B .c +(i.e. +.I base +source) files for an individual +program +have been created, +.I thisprog +performs the actual conversion step. +.PP +Execution of the +.I thisprog +program causes your original source files to be converted such that both +their function declarations and their function definitions are in +#ifndef UNPRO +prototyped +#else +unprototyped +#endif +format. +After the conversion of your system, you will be +left with a set of similar (but converted) source files +with the same names as your original files. +.PP +Before it writes each converted file back to disk, +.I thisprog +attempts to rename the original file, giving it a +.B .save +suffix. +It then creates a new output file +with the same name that the original file had. +This ensures that if there were any hard links to the original +input files, these will not be altered by the conversion process. +.PP +WARNING! If for any given original file, a save file already exists, +.I thisprog +will assume that the existing save file contains a backup of the +original file as it existed before any conversions were applied. +Thus, if there is an existing save file, +.I thisprog +will not overwrite this existing save file, and no new backup of +that particular original file will be made during that run of +.I thisprog. +.PP +An important safety feature of +.I thisprog +is that it normally only tries to convert files for which you have both +read and write permissions. Also, +.I thisprog +will normally only convert files located in directories that you +have both search and write permissions for. +.PP +Another safety feature is that +.I thisprog +will not normally convert files which +are located in +.I system +include directories. +A +.I system +include directory is defined by +.I thisprog +as either +.B /usr/include +(or any of its subdirectories) +or a directory whose full absolute pathname includes +either +.B gcc-include +or +.B g++-include. +.PP +Most of the above safety features can be overridden by using the +.B \-f +(force) option (see below), +but even when +.B \-f +is used, you cannot force the conversion of files for which you +do not at least have read permission, or files in directories that you do not +at least have write permission for. +.PP +Note that +.I thisprog +will make no attempt to convert definitions +#ifndef UNPRO +or declarations +#endif +of functions which accept a variable number of arguments +and which are written using the +.I from_convention +conventions. +All such function definitions +#ifndef UNPRO +and declarations +#endif +must be converted manually to the +.I to_convention +conventions. +Warnings are automatically issued for +.I from_convention +function definitions +#ifndef UNPRO +and declarations +#endif +which are left unconverted by +.I thisprog. +.SH OPTIONS +.I Thisprog +recognizes the following options: +.TP +.B \-V +Version number. Causes the current version number to be +printed on stderr. +.TP +.B \-q +Quiet mode. +Normally, +.I thisprog +may issue many verbose warnings concerning noteworthy conditions. +These warnings can often be helpful to the overall conversion effort. +Users who prefer not to see such messages can use the +.B \-q +option which suppresses most such warnings. +.TP +.B \-f +Force mode. +Use of this option overrides the normal safety +features of +.I thisprog. +It allows for attempts to convert system include files, +and files not writable by you. +These conversions are still subject to all normal +file protections provided by the operating system. +This option should be used only with extreme caution. +It can be especially dangerous to use this option when logged on as +.I root. +Note that when this option is used, you are allowed to convert even files +that you do not have write access to. So long as you have write access +to the containing directory, conversion may occur. +.TP +.B \-n +No convert mode. Do not actually perform any conversions on base source files +or on include files. Rather, simply do all steps leading up to conversion +and then print a list (to stdout) of the names of all files which would +actually be modified if the conversions were actually performed. This option +may be useful to you if you are converting a system of source files +that you are unfamiliar with. In such cases, you may need to verify +ahead of time that include files which belong to other people or to +other projects will not be modified by running +.I thisprog. +Use of this option also implicitly enables +.I keep mode. +(See the +.B \-k +option below.) +.TP +.B \-k +Keep mode. Normally, +.I thisprog +reads the information in the +.B .X +files created by the GNU C compiler, and then +immediately deletes these files (since they will no longer be +valid or useful after conversion). When the +.B \-k +option is used however, the +.B .X +files are not deleted during conversion. +.TP +.B -N +No save mode. When this option is used, no attempt is made to +make backups of original files (by renaming them such that they have +an added +.B .save +suffix). +Use this option with extreme caution, and +only when you have previously backed up +all of the files that might be converted +by running +.I thisprog. +(See the +.B -n +option above.) +.TP +.B \-c <cc opts> +Specify compile options. The +.B \-c +option can be used as a means of passing on important compilation +options to the C compiler. It may often be necessary to use this option +to pass command line preprocessor definitions on to the compilation step. +Note that The compile options must be given as a single argument to +.I thisprog. +If you have more than one +compilation option, you will have to quote the entire set of +compilation options in order to keep the shell from treating +them as separate arguments to +.I thisprog. +Note also that certain options are automatically suppressed by +.I thisprog +and cannot be passed on to the compiler (i.e. +.B "-g, -O, -c, -S," +and +.B "-o" +are suppressed). +#ifndef UNPRO +.TP +.B \-C +C++ conversion mode. +Normally, +.I thisprog +writes its (converted) output files back to files of the same names +as the original (unconverted) input files. +In C++ conversion mode, +after each output file is written, +a check is made to see if the given output file has a +.B .c +suffix. If it does, then the given file is renamed, and its suffix +is changed to +.B .C. +This makes the output file +acceptable as a C++ input file for either the GNU C++ compiler or +for the Cfront translator. +.TP +.B \-l +Add explicit local declarations. This option causes +.I thisprog +to insert +explicit declarations for functions that were only implicitly declared +in the original source code. When the +.B \-l +option is used, lists of additional new +explicit function declarations are inserted near the +starts of blocks where explicit function declarations took place. +(See also the +.B \-g +option below.) +.TP +.B \-g +Add explicit global declarations. This option causes +.I thisprog +to insert +explicit declarations for functions that were only implicitly declared +in your original source code. When the +.B \-g +option is used, a list of additional new +explicit function declarations is inserted just before the +first function definition in each individual source file that previously +contained implicit declarations. +(See also the +.B \-l +option above.) +.TP +.B \-B <dir> +Alternate library directory option. Use this option to specify that +.I thisprog +should attempt to find the file +.B SYSCALLS.c.X +in the alternate directory indicated in the option. +#else +.TP +.B \-i <str> +Indent string option. +This option can be used to specify a string to use when indenting +lines containing declarations for formal parameter variables. +The default indentation string for such lines is a sequence of five spaces +(i.e.\ GNU style indentation) but you may use this option to specify +any other string that you like (e.g.\ a tab character). +Note that +the shell has its own interpretations for blanks and tabs, so you +will generally have to quotes the argument given in the +.B -i +option. +#endif +.SH EXAMPLES +Assume that you have +a directory with +all of the files for your system in it. Also +assume that your system consists of two +executable programs, one built from the files +.B s1.c, s2.c, +and +.B s3.c, +and the other built from the files +.B s4.c +and +.B s5.c. +Finally, assume that these source files share some common include files. +.PP +In order to properly convert such a system of programs, you +would need to perform the steps shown below. +.sp 1 +.in +0.5i +.ft B +thisprog s1.c s2.c s3.c +.br +thisprog s4.c s5.c +.sp 1 +.ft R +.in -0.5i +.PP +In the example above, the first invocation of +.I thisprog +causes three +.B .X +files (called +.B s1.c.X, s2.c.X, +and +.B s3.c.X) +to be created. +These files are generated automatically by +.I thisprog +(which invokes the GNU C compiler to create them). +These files contain information about function definitions and declarations +.I both +for their corresponding +.B .c +files and for any files +which are included by these +.I base +.B .c +files. +.PP +After +.I thisprog +has invoked the compiler for each of the files which make up +.I prog1, +it performs the actual conversion of these base files (and +may perform some conversion of their include files +depending upon the information available in the +.B .X +files). +Finally, after performing all necessary conversions, +.I thisprog +automatically deletes the files +.B s1.c.X, s2.c.X, +and +.B s3.c.X. +.PP +After performing the conversion for +.I prog1, +(as illustrated above) +you would then +request +.I thisprog +to convert all of the files which make up +.I prog2 +in a similar fashion. +This step would create two more +.B .X +files (called +.B s4.c.X +and +.B s5.c.X). +As with the conversion of +.I prog1, +.I thisprog +will automatically generate any needed +.B .X +files (by invoking the GNU C compiler), +will perform the conversion of all of the given +.I base +source files (and possibly do some conversion on include files), +and will finish up by +automatically deleting the +.B .X +files that were generated during this run. +.PP +You may occasionally find that you need to convert a +particular program which +consists of several +.I base +source files, some of which must be compiled +with unusual options. +In such cases, you can still convert the program via +a special mechanism. +For each +.I base +source file which requires special compilation options, +you can create a corresponding +.B .X +file for the +.I base +file +.I (before +invoking +.I thisprog). +You would do this by invoking the GNU C compiler directly +with the required special options, and with the +.B -fgen-aux-info +option. +.I Thisprog +is smart enough to use existing +.B .X +files (when they are available and when they are up to date) so creating +.B .X +files ahead of time with the GNU C compiler +is an easy way to accommodate unusual compilation options for individual +.I base +files. +.PP +Note that +.I thisprog +checks each preexisting +.B .X +file before it tries to use it in order +to insure that it is up-to-date +with respect to all of the source files +that it contains information about. +If this check fails, +.I thisprog +will automatically +invoke the GNU C compiler (with default options) to recreate the needed +.B .X file. +.SH CAVEATS +#ifndef UNPRO +The +.I thisprog +program doesn\'t just get information from your own +.B .X +files. Every time +.I thisprog +executes, it also reads a file +.B SYSCALLS.c.X +from some standard installation directory +(if it exists) to obtain a pre-written set of function prototypes for +various standard system-supplied functions. These prototypes are effectively +added to the set of prototypes which +.I thisprog +can use to perform prototype substitutions on your source files. +If the source code for any individual programs that you are converting +contains its own definitions +for functions with the same names as standard system-supplied functions, +.I thisprog +is intelligent enough to allow the parameter typing from your own +function definitions to take precedence over the information +contained in the +.B SYSCALLS.c.X +file. +.PP +.I Thisprog +changes +#ifndef UNPRO +(and possibly adds to) +#endif +your original source code +in ways which may require you to rearrange the placement of other +items in your code. Specifically, it is often necessary to move +around type definitions or declarations for +.B "enum, struct," +and +.B union +types. +#ifndef UNPRO +.PP +Usage of +.I thisprog +may cause source lines to grow quite long and thereby become difficult +to read and to edit. Fortunately, +.I thisprog +is intelligent enough to automatically break up very long lines containing +newly inserted function prototypes whenever the length of +any given output line would otherwise exceed 79 columns (including tabs +to standard UNIX tab stops). +.PP +Note that in traditional (K&R) C, it was not possible to declare +parameter types for +.B "function pointer" +parameters and variables. +Such function pointer variables could only be +declared with empty parameter lists in traditional C. Unfortunately, +this means that +.I thisprog +typically +has no adequate source of information from which to manufacture +appropriate (prototyped) formal argument lists for such function pointer +variables. Thus, declarations of function pointer variables and +parameters will not be properly converted by +.I thisprog. +In the case of function pointer variables, +.I thisprog +currently performs no conversion whatsoever. +In the case of function pointer parameters however, +.I thisprog +will attempt to do half-hearted conversions by +manufacturing formal parameter lists for such parameters. +These manufactured formal parameter lists will look +like \`\.\.\.\'. +#endif +.PP +#endif +It is naive to assume that the conversions performed by +.I thisprog +are sufficient to make your source code completely compatible with +#ifndef UNPRO +ANSI C or C++. +#else +K&R C. +#endif +The automatic conversion of your source files via +.I thisprog +is only one step (albeit a big one) towards +full conversion. A full conversion may also require +lots of editing "by hand". +.PP +.I Thisprog +only converts function declarations and definitions. No conversion of +.I types +(such as function types and pointer-to-function types) +contained in +.B typedef +statements is attempted. These must be converted manually. +#ifdef UNPRO +.PP +Naive conversion of source code via +.I thisprog +may introduce bugs into the resulting (converted) code unless you are very +careful. The reason for this is rather subtle. +Basically, when a call is made to a prototyped function, the types of +some of the parameter values in the call may be implicitly converted +to the types of the corresponding formal parameters (as declared in the +function prototype). These implicit conversions can (occasionally) involve +changes of representation for the passed values (for instance from int +to float). Unfortunately, once your code has been converted via +.I thisprog, +these implicit conversions will no longer take place within the function +calls which require them. +.PP +The only remedy for this problem (currently) is for users of +.I thisprog +to make sure that explicit casts are inserted into calls which will force +these type conversions to occur even in the absence of function +prototypes. Users can determine the exact set of places where such explicit +casts may be required by compiling all code to be converted using the +.B -Wconversion +option to GCC prior to conversion. The warnings produced by +.B -Wconversion +will indicate those places in the original source code where explicit +casts must be inserted. Once these explicit casts have been manually +inserted (and the warnings from +.B -Wconversion +eliminated), conversion may be performed without any possibility of +generating code which is incorrect due to missed type conversions. +#else +.PP +When converting to full prototype format, it may often be the case that +complete information regarding the types of function parameters is not +actually available in the original (K&R) code. +This will almost always be the case for parameters whose types are +pointer-to-function types. +For pointer-to-function parameters, it it customary (in K&R C) to +omit the types of the arguments which the pointed-to function expects +to receive. +In cases where the argument types for function pointer parameters are +not present in the original source code, +.I thisprog +notes this lack of complete information in a useful (but harmless) +way. After conversion, the (prototyped) parameter lists for +pointer-to-function parameters are represented in the converted +files as comments which contain the string "???". You can easily +locate all such strings after conversion (using your favorite editor) +and replace them with more complete information regarding the +true parameter profile of the pointed-to functions. +#endif +.SH WARNINGS +There are numerous possible warning and error messages which +.I thisprog +may issue for strange circumstances (e.g.\ missing input +files, etc.) or for noteworthy conditions in the source code being converted. +These should all be self-explanatory. +If any message is not self-explanatory, it\'s a bug. Please report it. +.SH FILES +.ta 3.0i +/usr/local/bin/gcc GNU C compiler +.br +/usr/local/bin/thisprog the thisprog program +#ifndef UNPRO +.br +/usr/local/lib/SYSCALLS.c.X aux info file for system functions +#endif +.SH "SEE ALSO" +gcc(1), g++(1), otherprog(1) +.SH BUGS +.I Thisprog +can easily be confused by +source code which has +macro calls in the +vicinity of something which it has to convert. +Fortunately, such cases seem to be rare in practice. +This is an inherent problem with the compiler +based approach to information gathering and will likely never be fixed. +When it does become confused, +.I thisprog +will still proceed to convert the file it is working on as much as +possible. Only the particularly confusing function definitions and +declarations will fail to be converted. These can subsequently be converted +manually. +.PP +Due to the method currently used to gather information, +.I thisprog +will fail to convert function declarations and definitions which +are located in conditional compilation sections which were +.I "preprocessed out" +during the creation of the +.B .X +files used for conversion. +You can generally work around this problem by doing +repeated conversion steps using +.I thisprog, +each with a different set of compilation options (i.e.\ preprocessor +symbol definitions) but assuring complete conversion can +currently only be done by visual inspection. +Currently, +.I thisprog +attempts to find function definitions which were +.I "preprocessed out" +and to issues warnings for such cases. +A later revision of +.I thisprog +#ifndef UNPRO +may also be able to detect cases where function declarations +have been +.I "preprocessed out" +and to issue appropriate warnings for those cases also. +#else +may be able to convert both function declarations and function +definitions which have been +.I "preprocessed out." +#endif +.PP +Currently, +.I thisprog +makes no attempt to convert declarations of +.I "pointer to function" +types, variables, or fields. +#ifdef UNPRO +A later version of +.I thisprog +may attempt to perform conversions of these +declarative items also. +#endif +.PP +Currently, +.I from_convention +functions definitions +#ifndef UNPRO +and declarations +#endif +must be converted by hand to use the +.I to_convention +convention. +It is possible that a subsequent version of +.I thisprog +will make some attempt to do these conversions automatically. +.PP +.I Thisprog +may get confused if it finds that it has to convert a function +declaration or definition in a region of source code where +there is more than one formal parameter list present. +Thus, attempts to convert code containing +multiple (conditionally compiled) versions of a single +function header (in the same vicinity) may not produce +the desired (or expected) results. +If you plan on converting source files which contain +such code, it is recommended that you first make sure +that each conditionally compiled region of source +code which contains an alternative function header +also contains at least one additional follower token +(past the final right parenthesis of the function header). +This should circumvent the problem. +#ifdef UNPRO +.PP +.I Thisprog +can become confused when trying to convert a function +definition or declaration +which contains a declaration for a +.I pointer-to-function +formal argument +which has the same name as the function being defined or +declared. +Such unfortunate choices of formal parameter names are discouraged. +#endif +.PP +Bugs (and requests for reasonable enhancements) should be reported to +bug-gcc@prep.ai.mit.edu. Bugs may actually be fixed if they can be easily +reproduced, so it is in your interest to report them +in such a way that reproduction is easy. +.SH COPYING +Copyright (c) 1989, 1990 Free Software Foundation, Inc. +.sp 1 +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. +.sp 1 +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +.sp 1 +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.SH AUTHORS +Written by Ronald F.\ Guilmette at the Microelectronics and Computer Technology +Corporation (MCC). Generously donated by MCC to the Free Software +Foundation. +.sp 1 +See the GNU C Compiler Manual for a list of contributors to GNU C. |