diff options
author | Nick Clifton <nickc@redhat.com> | 2001-05-30 10:49:03 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2001-05-30 10:49:03 +0000 |
commit | 5eb91f56ebfcb055675348198a4bebb416ad9d3b (patch) | |
tree | d4629c17942131d8933dc597c9f3d71aa396040f /binutils | |
parent | faa8a7a1547439216e93b1f5bf78c8b3e908857a (diff) | |
download | gdb-5eb91f56ebfcb055675348198a4bebb416ad9d3b.zip gdb-5eb91f56ebfcb055675348198a4bebb416ad9d3b.tar.gz gdb-5eb91f56ebfcb055675348198a4bebb416ad9d3b.tar.bz2 |
Add command line options to objcopy to specify symbols as lists in files
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 9 | ||||
-rw-r--r-- | binutils/NEWS | 4 | ||||
-rw-r--r-- | binutils/binutils.texi | 42 | ||||
-rw-r--r-- | binutils/objcopy.1 | 1172 | ||||
-rw-r--r-- | binutils/objcopy.c | 175 |
5 files changed, 737 insertions, 665 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index a6a0ff6..36c00cf 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +2001-05-30 Honda Hiroki <hhonda@kobe-catv.ne.jp> + + * objcopy.c: Add new switches: --keep-global-symbol, + --keep-symbols, --localize-symbols, --keep-global-symbols and + --weaken-symbols. + * binutils.texi: Document new switches. + * objcopy.1: Regenerate. + * NEWS: Announce new feature. + 2001-05-28 Philip Blundell <philb@gnu.org> From 2001-05-28 Andreas Jaeger <aj@suse.de> diff --git a/binutils/NEWS b/binutils/NEWS index 62f858f..8f5028c 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -1,5 +1,9 @@ -*- text -*- +* New command line switches added to objcopy to allow symbols to be kept as + global symbols, and also to specify files containing lists of such symbols. + by Honda Hiroki. + * Add support for ARM v5t and v5te architectures and Intel's XScale ARM extenstions. diff --git a/binutils/binutils.texi b/binutils/binutils.texi index 4114663..9fc11bc 100644 --- a/binutils/binutils.texi +++ b/binutils/binutils.texi @@ -877,6 +877,7 @@ objcopy [ -F @var{bfdname} | --target=@var{bfdname} ] [ -S | --strip-all ] [ -g | --strip-debug ] [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ] [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ] + [ -G @var{symbolname} | --keep-global-symbol=@var{symbolname}] [ -L @var{symbolname} | --localize-symbol=@var{symbolname} ] [ -W @var{symbolname} | --weaken-symbol=@var{symbolname} ] [ -x | --discard-all ] [ -X | --discard-locals ] @@ -897,6 +898,11 @@ objcopy [ -F @var{bfdname} | --target=@var{bfdname} ] [ --change-leading-char ] [ --remove-leading-char ] [ --srec-len=@var{ival} ] [ --srec-forceS3 ] [ --redefine-sym @var{old}=@var{new} ] [ --weaken ] + [ --keep-symbols=@var{filename} ] + [ --strip-symbols=@var{filename} ] + [ --keep-global-symbols=@var{filename} ] + [ --localize-symbols=@var{filename} ] + [ --weaken-symbols=@var{filename} ] [ -v | --verbose ] [ -V | --version ] [ --help ] @var{infile} [@var{outfile}] @end smallexample @@ -993,6 +999,12 @@ be given more than once. Do not copy symbol @var{symbolname} from the source file. This option may be given more than once. +@item -G @var{symbolname} +@itemx --keep-global-symbol=@var{symbolname} +Keep only symbol @var{symbolname} global. Make all other symbols local +to the file, so that they are not visible externally. This option may +be given more than once. + @item -L @var{symbolname} @itemx --localize-symbol=@var{symbolname} Make symbol @var{symbolname} local to the file, so that it is not @@ -1176,6 +1188,36 @@ when building an object which will be linked against other objects using the @code{-R} option to the linker. This option is only effective when using an object file format which supports weak symbols. +@item --keep-symbols=@var{filename} +Apply @samp{--keep-symbol} option to each symbol listed in the file +@var{filename}. @var{filename} is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. + +@item --strip-symbols=@var{filename} +Apply @samp{--strip-symbol} option to each symbol listed in the file +@var{filename}. @var{filename} is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. + +@item --keep-global-symbols=@var{filename} +Apply @samp{--keep-global-symbol} option to each symbol listed in the +file @var{filename}. @var{filename} is simply a flat file, with one +symbol name per line. Line comments may be introduced by the hash +character. This option may be given more than once. + +@item --localize-symbols=@var{filename} +Apply @samp{--localize-symbol} option to each symbol listed in the file +@var{filename}. @var{filename} is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. + +@item --weaken-symbols=@var{filename} +Apply @samp{--weaken-symbol} option to each symbol listed in the file +@var{filename}. @var{filename} is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. + @item -V @itemx --version Show the version number of @code{objcopy}. diff --git a/binutils/objcopy.1 b/binutils/objcopy.1 index d2eed15..a6aa181 100644 --- a/binutils/objcopy.1 +++ b/binutils/objcopy.1 @@ -1,700 +1,548 @@ -.\" Copyright (c) 1991, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH objcopy 1 "05 April 2000" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** +.\" Automatically generated by Pod::Man version 1.02 +.\" Wed May 30 12:24:28 2001 +.\" +.\" Standard preamble: +.\" ====================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP .. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Ip \" List item +.br +.ie \\n(.$>=3 .ne \\$3 +.el .ne 3 +.IP "\\$1" \\$2 +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R -.SH NAME -objcopy \- copy and translate object files - -.SH SYNOPSIS +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used +.\" to do unbreakable dashes and therefore won't be available. \*(C` and +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` ` +. ds C' ' +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and +.\" index entries marked with X<> in POD. Of course, you'll have to process +.\" the output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +. . +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it +.\" makes way too many mistakes in technical documents. .hy 0 -.na -.TP -.B objcopy -.RB "[\|" \-F\ \fIbfdname\fR\ |\ \fB\-\-target=\fIbfdname\fR "\|]" -.RB "[\|" \-I\ \fIbfdname\fR\ |\ \fB\-\-input\-target=\fIbfdname\fR "\|]" -.RB "[\|" \-O\ \fIbfdname\fR\ |\ \fB\-\-output\-target=\fIbfdname\fR "\|]" -.RB "[\|" \-j\ \fIsectionname\fR\ |\ \fB\-\-only\-section=\fIsectionname\fR "\|]" -.RB "[\|" \-R\ \fIsectionname\fR\ |\ \fB\-\-remove\-section=\fIsectionname\fR "\|]" -.RB "[\|" \-S\fR\ |\ \fB\-\-strip\-all\fR "\|]" -.RB "[\|" \-g\fR\ |\ \fB\-\-strip\-debug\fR "\|]" -.RB "[\|" \-\-strip\-unneeded\fR "\|]" -.RB "[\|" \-K\ \fIsymbolname\fR\ |\ \fB\-\-keep\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-N\ \fIsymbolname\fR\ |\ \fB\-\-strip\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-L\ \fIsymbolname\fR\ |\ \fB\-\-localize\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-W\ \fIsymbolname\fR\ |\ \fB\-\-weaken\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-x\fR\ |\ \fB\-\-discard\-all\fR "\|]" -.RB "[\|" \-X\fR\ |\ \fB\-\-discard\-locals\fR "\|]" -.RB "[\|" \-b\ \fIbyte\fR\ |\ \fB\-\-byte=\fIbyte\fR "\|]" -.RB "[\|" \-i\ \fIinterleave\fR\ |\ \fB\-\-interleave=\fIinterleave\fR "\|]" -.RB "[\|" \-p\fR\ |\ \fB\-\-preserve\-dates\fR "\|]" -.RB "[\|" \-\-debugging "\|]" -.RB "[\|" \-\-gap\-fill=\fIval\fR "\|]" -.RB "[\|" \-\-pad\-to=\fIaddress\fR "\|]" -.RB "[\|" \-\-set\-start=\fIval\fR "\|]" -.RB "[\|" \-\-change\-start=\fIincr\fR "\|]" -.RB "[\|" \-\-change\-addresses=\fIincr\fR "\|]" -.RB "[\|" \-\-change\-section\-address\ \fIsection{=,+,-}val\fR "\|]" -.RB "[\|" \-\-change\-section\-lma\ \fIsection{=,+,-}val\fR "\|]" -.RB "[\|" \-\-change\-section\-vma\ \fIsection{=,+,-}val\fR "\|]" -.RB "[\|" \-\-change\-warnings\fR "\|]" -.RB "[\|" \-\-no\-change\-warnings\fR "\|]" -.RB "[\|" \-\-set\-section\-flags\ \fIsection=flags\fR "\|]" -.RB "[\|" \-\-add\-section\ \fIsectionname=filename\fR "\|]" -.RB "[\|" \-\-change\-leading\-char\fR "\|]" -.RB "[\|" \-\-remove\-leading\-char\fR "\|]" -.RB "[\|" \-\-srec\-len=\fIval\fR "\|]" -.RB "[\|" \-\-srec\-forceS3\fR "\|]" -.RB "[\|" \-\-redefine\-sym\ \fIold=new\fR "\|]" -.RB "[\|" \-\-weaken\fR "\|]" -.RB "[\|" \-v\ |\ \-\-verbose\fR "\|]" -.RB "[\|" \-V\ |\ \-\-version\fR "\|]" -.RB "[\|" \-\-help\fR "\|]" -.B infile -.RB "[\|" outfile\fR "\|]" -.SH DESCRIPTION -The GNU -.B objcopy -utility copies the contents of an object file to another. -.B objcopy -uses the GNU BFD Library to read and write the object files. It can -write the destination object file in a format different from that of -the source object file. The exact behavior of -.B objcopy -is controlled by command-line options. +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +.bd B 3 +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ====================================================================== +.\" +.IX Title "OBJCOPY.1 1" +.TH OBJCOPY.1 1 "binutils-2.11.90" "2001-05-30" "GNU" +.UC +.SH "NAME" +objcopy \- copy and translate object files +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +objcopy [ \-F \fIbfdname\fR | \-\-target=\fIbfdname\fR ] + [ \-I \fIbfdname\fR | \-\-input-target=\fIbfdname\fR ] + [ \-O \fIbfdname\fR | \-\-output-target=\fIbfdname\fR ] + [ \-B \fIbfdarch\fR | \-\-binary-architecture=\fIbfdarch\fR ] + [ \-S | \-\-strip-all ] [ \-g | \-\-strip-debug ] + [ \-K \fIsymbolname\fR | \-\-keep-symbol=\fIsymbolname\fR ] + [ \-N \fIsymbolname\fR | \-\-strip-symbol=\fIsymbolname\fR ] + [ \-G \fIsymbolname\fR | \-\-keep-global-symbol=\fIsymbolname\fR] + [ \-L \fIsymbolname\fR | \-\-localize-symbol=\fIsymbolname\fR ] + [ \-W \fIsymbolname\fR | \-\-weaken-symbol=\fIsymbolname\fR ] + [ \-x | \-\-discard-all ] [ \-X | \-\-discard-locals ] + [ \-b \fIbyte\fR | \-\-byte=\fIbyte\fR ] + [ \-i \fIinterleave\fR | \-\-interleave=\fIinterleave\fR ] + [ \-j \fIsectionname\fR | \-\-only-section=\fIsectionname\fR ] + [ \-R \fIsectionname\fR | \-\-remove-section=\fIsectionname\fR ] + [ \-p | \-\-preserve-dates ] [ \-\-debugging ] + [ \-\-gap-fill=\fIval\fR ] [ \-\-pad-to=\fIaddress\fR ] + [ \-\-set-start=\fIval\fR ] [ \-\-adjust-start=\fIincr\fR ] + [ \-\-change-addresses=\fIincr\fR ] + [ \-\-change-section-address \fIsection\fR{=,+,\-}\fIval\fR ] + [ \-\-change-section-lma \fIsection\fR{=,+,\-}\fIval\fR ] + [ \-\-change-section-vma \fIsection\fR{=,+,\-}\fIval\fR ] + [ \-\-change-warnings ] [ \-\-no-change-warnings ] + [ \-\-set-section-flags \fIsection\fR=\fIflags\fR ] + [ \-\-add-section \fIsectionname\fR=\fIfilename\fR ] + [ \-\-change-leading-char ] [ \-\-remove-leading-char ] + [ \-\-srec-len=\fIival\fR ] [ \-\-srec-forceS3 ] + [ \-\-redefine-sym \fIold\fR=\fInew\fR ] [ \-\-weaken ] + [ \-\-keep-symbols=\fIfilename\fR ] + [ \-\-strip-symbols=\fIfilename\fR ] + [ \-\-keep-global-symbols=\fIfilename\fR ] + [ \-\-localize-symbols=\fIfilename\fR ] + [ \-\-weaken-symbols=\fIfilename\fR ] + [ \-v | \-\-verbose ] [ \-V | \-\-version ] [ \-\-help ] + \fIinfile\fR [\fIoutfile\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1GNU\s0 \f(CW\*(C`objcopy\*(C'\fR utility copies the contents of an object +file to another. \f(CW\*(C`objcopy\*(C'\fR uses the \s-1GNU\s0 \s-1BFD\s0 Library to +read and write the object files. It can write the destination object +file in a format different from that of the source object file. The +exact behavior of \f(CW\*(C`objcopy\*(C'\fR is controlled by command-line options. +Note that \f(CW\*(C`objcopy\*(C'\fR should be able to copy a fully linked file +between any two formats. However, copying a relocatable object file +between any two formats may not work as expected. .PP -.B objcopy -creates temporary files to do its translations and deletes them -afterward. -.B objcopy -uses BFD to do all its translation work; it knows about all the -formats BFD knows about, and thus is able to recognize most formats -without being told explicitly. +\&\f(CW\*(C`objcopy\*(C'\fR creates temporary files to do its translations and +deletes them afterward. \f(CW\*(C`objcopy\*(C'\fR uses \s-1BFD\s0 to do all its +translation work; it has access to all the formats described in \s-1BFD\s0 +and thus is able to recognize most formats without being told +explicitly. .PP -.B objcopy -can be used to generate S-records by using an output target of -.B srec -(e.g., use -.B -O srec). +\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate S-records by using an output +target of \fBsrec\fR (e.g., use \fB\-O srec\fR). .PP -.B objcopy -can be used to generate a raw binary file by using an output target of -.B binary -(e.g., use -.B -O binary). -When -.B objcopy -generates a raw binary file, it will essentially produce a memory dump -of the contents of the input object file. All symbols and relocation -information will be discarded. The memory dump will start at the -virtual address of the lowest section copied into the output file. +\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate a raw binary file by using an +output target of \fBbinary\fR (e.g., use \fB\-O binary\fR). When +\&\f(CW\*(C`objcopy\*(C'\fR generates a raw binary file, it will essentially produce +a memory dump of the contents of the input object file. All symbols and +relocation information will be discarded. The memory dump will start at +the load address of the lowest section copied into the output file. .PP When generating an S-record or a raw binary file, it may be helpful to -use -.B -S -to remove sections containing debugging information. In some cases -.B -R -will be useful to remove sections which contain information which is -not needed by the binary file. +use \fB\-S\fR to remove sections containing debugging information. In +some cases \fB\-R\fR will be useful to remove sections which contain +information that is not needed by the binary file. .PP -.I infile -and -.I outfile -are the source and output files respectively. If you do not specify -.IR outfile , -.B objcopy -creates a temporary file and destructively renames the result with the -name of the input file. - -.SH OPTIONS -.TP -.B \-I \fIbfdname\fR, \fB\-\-input\-target=\fIbfdname -Consider the source file's object format to be -.IR bfdname , -rather than attempting to deduce it. -.TP -.B \-O \fIbfdname\fR, \fB\-\-output\-target=\fIbfdname -Write the output file using the object format -.IR bfdname . -.TP -.B \-F \fIbfdname\fR, \fB\-\-target=\fIbfdname -Use -.I bfdname -as the object format for both the input and the output file; i.e. -simply transfer data from source to destination with no translation. -.TP -.B \-j \fIsectionname\fR, \fB\-\-only\-section=\fIsectionname -Copy only the named section from the input file to the output file, -discarding all other sections. This option may be given more than -once. Note that using this option inappropriately may make the output -file unusable. -.TP -.B \-R \fIsectionname\fR, \fB\-\-remove-section=\fIsectionname -Remove the named section from the file. This option may be given more -than once. Note that using this option inappropriately may make the -output file unusable. -.TP -.B \-S\fR, \fB\-\-strip\-all +Note \- \f(CW\*(C`objcopy\*(C'\fR is not able to change the endianness of its input +files. If the input format has an endianness, (some formats do not), +\&\f(CW\*(C`objcopy\*(C'\fR can only copy the inputs into file formats that have the +same endianness or which have no endianness (eg \fBsrec\fR). +.SH "OPTIONS" +.IX Header "OPTIONS" +.Ip "\f(CW\*(C`\f(CIinfile\f(CW\*(C'\fR" 4 +.IX Item "infile" +.Ip "\f(CW\*(C`\f(CIoutfile\f(CW\*(C'\fR" 4 +.IX Item "outfile" +The input and output files, respectively. +If you do not specify \fIoutfile\fR, \f(CW\*(C`objcopy\*(C'\fR creates a +temporary file and destructively renames the result with +the name of \fIinfile\fR. +.Ip "\f(CW\*(C`\-I \f(CIbfdname\f(CW \*(C'\fR" 4 +.IX Item "-I bfdname " +.Ip "\f(CW\*(C`\-\-input\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 +.IX Item "--input-target=bfdname" +Consider the source file's object format to be \fIbfdname\fR, rather than +attempting to deduce it. +.Ip "\f(CW\*(C`\-O \f(CIbfdname\f(CW\*(C'\fR" 4 +.IX Item "-O bfdname" +.Ip "\f(CW\*(C`\-\-output\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 +.IX Item "--output-target=bfdname" +Write the output file using the object format \fIbfdname\fR. +.Ip "\f(CW\*(C`\-F \f(CIbfdname\f(CW\*(C'\fR" 4 +.IX Item "-F bfdname" +.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 +.IX Item "--target=bfdname" +Use \fIbfdname\fR as the object format for both the input and the output +file; i.e., simply transfer data from source to destination with no +translation. +.Ip "\f(CW\*(C`\-B \f(CIbfdarch\f(CW\*(C'\fR" 4 +.IX Item "-B bfdarch" +.Ip "\f(CW\*(C`\-\-binary\-architecture=\f(CIbfdarch\f(CW\*(C'\fR" 4 +.IX Item "--binary-architecture=bfdarch" +Useful when transforming a raw binary input file into an object file. +In this case the output architecture can be set to \fIbfdarch\fR. This +option will be ignored if the input file has a known \fIbfdarch\fR. You +can access this binary data inside a program by referencing the special +symbols that are created by the conversion process. These symbols are +called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and +_binary_\fIobjfile\fR_size. e.g. you can transform a picture file into +an object file and then access it in your code using these symbols. +.Ip "\f(CW\*(C`\-j \f(CIsectionname\f(CW\*(C'\fR" 4 +.IX Item "-j sectionname" +.Ip "\f(CW\*(C`\-\-only\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 +.IX Item "--only-section=sectionname" +Copy only the named section from the input file to the output file. +This option may be given more than once. Note that using this option +inappropriately may make the output file unusable. +.Ip "\f(CW\*(C`\-R \f(CIsectionname\f(CW\*(C'\fR" 4 +.IX Item "-R sectionname" +.Ip "\f(CW\*(C`\-\-remove\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 +.IX Item "--remove-section=sectionname" +Remove any section named \fIsectionname\fR from the output file. This +option may be given more than once. Note that using this option +inappropriately may make the output file unusable. +.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 +.IX Item "-S" +.Ip "\f(CW\*(C`\-\-strip\-all\*(C'\fR" 4 +.IX Item "--strip-all" Do not copy relocation and symbol information from the source file. -.TP -.B \-g\fR, \fB\-\-strip\-debug +.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 +.IX Item "-g" +.Ip "\f(CW\*(C`\-\-strip\-debug\*(C'\fR" 4 +.IX Item "--strip-debug" Do not copy debugging symbols from the source file. -.TP -.B \-\-strip\-unneeded +.Ip "\f(CW\*(C`\-\-strip\-unneeded\*(C'\fR" 4 +.IX Item "--strip-unneeded" Strip all symbols that are not needed for relocation processing. -.TP -.B \-K \fIsymbolname\fR, \fB\-\-keep\-symbol=\fIsymbolname -Copy only symbol \fIsymbolname\fP from the source file. This option -may be given more than once. -.TP -.B \-N \fIsymbolname\fR, \fB\-\-strip\-symbol=\fIsymbolname -Do not copy symbol \fIsymbolname\fP from the source file. This option +.Ip "\f(CW\*(C`\-K \f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "-K symbolname" +.Ip "\f(CW\*(C`\-\-keep\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "--keep-symbol=symbolname" +Copy only symbol \fIsymbolname\fR from the source file. This option may +be given more than once. +.Ip "\f(CW\*(C`\-N \f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "-N symbolname" +.Ip "\f(CW\*(C`\-\-strip\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "--strip-symbol=symbolname" +Do not copy symbol \fIsymbolname\fR from the source file. This option may be given more than once. -.TP -.B \-L \fIsymbolname\fR, \fB\-\-localize\-symbol=\fIsymbolname -Make symbol \fIsymbolname\fP local to the file, so that it is not +.Ip "\f(CW\*(C`\-G \f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "-G symbolname" +.Ip "\f(CW\*(C`\-\-keep\-global\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "--keep-global-symbol=symbolname" +Keep only symbol \fIsymbolname\fR global. Make all other symbols local +to the file, so that they are not visible externally. This option may +be given more than once. +.Ip "\f(CW\*(C`\-L \f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "-L symbolname" +.Ip "\f(CW\*(C`\-\-localize\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "--localize-symbol=symbolname" +Make symbol \fIsymbolname\fR local to the file, so that it is not visible externally. This option may be given more than once. -.TP -.B \-W \fIsymbolname\fR, \fB\-\-weaken\-symbol=\fIsymbolname -Make symbol \fIsymbolname\fP weak. This option may be given more than once. -.TP -.B \-x\fR, \fB\-\-discard\-all +.Ip "\f(CW\*(C`\-W \f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "-W symbolname" +.Ip "\f(CW\*(C`\-\-weaken\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 +.IX Item "--weaken-symbol=symbolname" +Make symbol \fIsymbolname\fR weak. This option may be given more than once. +.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 +.IX Item "-x" +.Ip "\f(CW\*(C`\-\-discard\-all\*(C'\fR" 4 +.IX Item "--discard-all" Do not copy non-global symbols from the source file. -.TP -.B \-X\fR, \fB\-\-discard\-locals -Do not copy compiler-generated local symbols. (These usually start -with "L" or "."). -.TP -.B \-b \fIbyte\fR, \fB\-\-byte=\fIbyte -Keep only every \fIbyte\fPth byte of the input file (header data is -not affected). \fIbyte\fP can be in the range from 0 to the -interleave-1. This option is useful for creating files to program -ROMs. It is typically used with an srec output target. -.TP -.B \-i \fIinterleave\fR, \fB\-\-interleave=\fIinterleave -Only copy one out of every \fIinterleave\fP bytes. Which one to copy is -selected by the \fB\-b\fP or \fB\-\-byte\fP option. The default is 4. -The interleave is ignored if neither \fB\-b\fP nor \fB\-\-byte\fP is given. -.TP -.B \-p\fR, \fB\-\-preserve\-dates +.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 +.IX Item "-X" +.Ip "\f(CW\*(C`\-\-discard\-locals\*(C'\fR" 4 +.IX Item "--discard-locals" +Do not copy compiler-generated local symbols. +(These usually start with \fBL\fR or \fB.\fR.) +.Ip "\f(CW\*(C`\-b \f(CIbyte\f(CW\*(C'\fR" 4 +.IX Item "-b byte" +.Ip "\f(CW\*(C`\-\-byte=\f(CIbyte\f(CW\*(C'\fR" 4 +.IX Item "--byte=byte" +Keep only every \fIbyte\fRth byte of the input file (header data is not +affected). \fIbyte\fR can be in the range from 0 to \fIinterleave\fR\-1, +where \fIinterleave\fR is given by the \fB\-i\fR or \fB\*(--interleave\fR +option, or the default of 4. This option is useful for creating files +to program \s-1ROM\s0. It is typically used with an \f(CW\*(C`srec\*(C'\fR output +target. +.Ip "\f(CW\*(C`\-i \f(CIinterleave\f(CW\*(C'\fR" 4 +.IX Item "-i interleave" +.Ip "\f(CW\*(C`\-\-interleave=\f(CIinterleave\f(CW\*(C'\fR" 4 +.IX Item "--interleave=interleave" +Only copy one out of every \fIinterleave\fR bytes. Select which byte to +copy with the \fI\-b\fR or \fB\*(--byte\fR option. The default is 4. +\&\f(CW\*(C`objcopy\*(C'\fR ignores this option if you do not specify either \fB\-b\fR or +\&\fB\*(--byte\fR. +.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 +.IX Item "-p" +.Ip "\f(CW\*(C`\-\-preserve\-dates\*(C'\fR" 4 +.IX Item "--preserve-dates" Set the access and modification dates of the output file to be the same as those of the input file. -.TP -.B \-\-debugging +.Ip "\f(CW\*(C`\-\-debugging\*(C'\fR" 4 +.IX Item "--debugging" Convert debugging information, if possible. This is not the default because only certain debugging formats are supported, and the conversion process can be time consuming. -.TP -.B \-\-gap\-fill=\fIval -Fill gaps between sections with \fIval\fP. This operation applies to -the \fIload address\fP (LMA) of the sections. It is done by increasing +.Ip "\f(CW\*(C`\-\-gap\-fill \f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--gap-fill val" +Fill gaps between sections with \fIval\fR. This operation applies to +the \fIload address\fR (\s-1LMA\s0) of the sections. It is done by increasing the size of the section with the lower address, and filling in the extra -space created with \fIval\fP. -.TP -.B \-\-pad\-to=\fIaddress -Pad the output file up to the load address \fIaddress\fP. This is +space created with \fIval\fR. +.Ip "\f(CW\*(C`\-\-pad\-to \f(CIaddress\f(CW\*(C'\fR" 4 +.IX Item "--pad-to address" +Pad the output file up to the load address \fIaddress\fR. This is done by increasing the size of the last section. The extra space is -filled in with the value specified by \fB\-\-gap\-fill\fP (default -zero). -.TP -.B \fB\-\-set\-start=\fIval -Set the start address of the new file to \fIval\fP. Not all object -file formats support setting the start address. -.TP -.B \fB\-\-change\-start=\fIincr\fR, \fB\-\-adjust\-start=\fIincr -Changes the start address by adding \fIincr\fP. Not all object file +filled in with the value specified by \fB\*(--gap-fill\fR (default zero). +.Ip "\f(CW\*(C`\-\-set\-start \f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--set-start val" +Set the start address of the new file to \fIval\fR. Not all object file formats support setting the start address. -.TP -.B \fB\-\-change\-addresses=\fIincr\fR, \fB\-\-adjust\-vma=\fIincr -Changes the address of all sections, as well as the start address, by -adding \fIincr\fP. Some object file formats do not permit section -addresses to be changed arbitrarily. Note that this does not relocate -the sections; if the program expects sections to be loaded at a +.Ip "\f(CW\*(C`\-\-change\-start \f(CIincr\f(CW\*(C'\fR" 4 +.IX Item "--change-start incr" +.Ip "\f(CW\*(C`\-\-adjust\-start \f(CIincr\f(CW\*(C'\fR" 4 +.IX Item "--adjust-start incr" +Change the start address by adding \fIincr\fR. Not all object file +formats support setting the start address. +.Ip "\f(CW\*(C`\-\-change\-addresses \f(CIincr\f(CW\*(C'\fR" 4 +.IX Item "--change-addresses incr" +.Ip "\f(CW\*(C`\-\-adjust\-vma \f(CIincr\f(CW\*(C'\fR" 4 +.IX Item "--adjust-vma incr" +Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start +address, by adding \fIincr\fR. Some object file formats do not permit +section addresses to be changed arbitrarily. Note that this does not +relocate the sections; if the program expects sections to be loaded at a certain address, and this option is used to change the sections such -that they are loaded at a different address, the program may fail. -.TP -.B \fB\-\-change\-section\-address\ \fIsection{=,+,-}val\fR, \fB\-\-adjust\-section\-vma\ \fIsection{=,+,-}val -Set or changes the VMA and LMA addresses of the named \fIsection\fP. -If \fI=\fP is used, the section address is set to \fIval\fP. -Otherwise, \fIval\fP is added to or subtracted from the section -address. See the comments under \fB\-\-change\-addresses\fP, above. If -\fIsection\fP does not exist in the input file, a warning will be -issued, unless \fB\-\-no\-change\-warnings\fP is used. -.TP -.B \fB\-\-change\-section\-lma\ \fIsection{=,+,-}val -Set or change the LMA address of the named \fIsection\fP. If \fI=\fP is -used, the section address is set to \fIval\fP. Otherwise, \fIval\fP -is added to or subtracted from the section address. See the comments -under \fB\-\-change\-addresses\fP, above. If \fIsection\fP does not exist -in the input file, a warning will be issued, unless -\fB\-\-no\-change\-warnings\fP is used. -.TP -.B \fB\-\-change\-section\-vma\ \fIsection{=,+,-}val -Set or change the VMA address of the named \fIsection\fP. If \fI=\fP is -used, the section address is set to \fIval\fP. Otherwise, \fIval\fP -is added to or subtracted from the section address. See the comments -under \fB\-\-change\-addresses\fP, above. If \fIsection\fP does not exist -in the input file, a warning will be issued, unless -\fB\-\-no\-change\-warnings\fP is used. -.TP -.B \fB\-\-change\-warnings\fR, \fB\-\-adjust\-warnings -If \fB\-\-change\-section\-XXX\fP is used, and the named section does -not exist, issue a warning. This is the default. -.TP -.B \fB\-\-no\-change\-warnings\fR, \fB\-\-no\-adjust\-warnings -Do not issue a warning if \fB\-\-change\-section\-XXX\fP is used, even -if the named section does not exist. -.TP -.B \fB\-\-set\-section\-flags\ \fIsection=flags -Set the flags for the named section. The \fIflags\fP argument is a +that they are loaded at a different address, the program may fail. +.Ip "\f(CW\*(C`\-\-change\-section\-address \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--change-section-address section{=,+,-}val" +.Ip "\f(CW\*(C`\-\-adjust\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--adjust-section-vma section{=,+,-}val" +Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of the named +\&\fIsection\fR. If \fB=\fR is used, the section address is set to +\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the +section address. See the comments under \fB\*(--change-addresses\fR, +above. If \fIsection\fR does not exist in the input file, a warning will +be issued, unless \fB\*(--no-change-warnings\fR is used. +.Ip "\f(CW\*(C`\-\-change\-section\-lma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--change-section-lma section{=,+,-}val" +Set or change the \s-1LMA\s0 address of the named \fIsection\fR. The \s-1LMA\s0 +address is the address where the section will be loaded into memory at +program load time. Normally this is the same as the \s-1VMA\s0 address, which +is the address of the section at program run time, but on some systems, +especially those where a program is held in \s-1ROM\s0, the two can be +different. If \fB=\fR is used, the section address is set to +\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the +section address. See the comments under \fB\*(--change-addresses\fR, +above. If \fIsection\fR does not exist in the input file, a warning +will be issued, unless \fB\*(--no-change-warnings\fR is used. +.Ip "\f(CW\*(C`\-\-change\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 +.IX Item "--change-section-vma section{=,+,-}val" +Set or change the \s-1VMA\s0 address of the named \fIsection\fR. The \s-1VMA\s0 +address is the address where the section will be located once the +program has started executing. Normally this is the same as the \s-1LMA\s0 +address, which is the address where the section will be loaded into +memory, but on some systems, especially those where a program is held in +\&\s-1ROM\s0, the two can be different. If \fB=\fR is used, the section address +is set to \fIval\fR. Otherwise, \fIval\fR is added to or subtracted +from the section address. See the comments under +\&\fB\*(--change-addresses\fR, above. If \fIsection\fR does not exist in +the input file, a warning will be issued, unless +\&\fB\*(--no-change-warnings\fR is used. +.Ip "\f(CW\*(C`\-\-change\-warnings\*(C'\fR" 4 +.IX Item "--change-warnings" +.Ip "\f(CW\*(C`\-\-adjust\-warnings\*(C'\fR" 4 +.IX Item "--adjust-warnings" +If \fB\*(--change-section-address\fR or \fB\*(--change-section-lma\fR or +\&\fB\*(--change-section-vma\fR is used, and the named section does not +exist, issue a warning. This is the default. +.Ip "\f(CW\*(C`\-\-no\-change\-warnings\*(C'\fR" 4 +.IX Item "--no-change-warnings" +.Ip "\f(CW\*(C`\-\-no\-adjust\-warnings\*(C'\fR" 4 +.IX Item "--no-adjust-warnings" +Do not issue a warning if \fB\*(--change-section-address\fR or +\&\fB\*(--adjust-section-lma\fR or \fB\*(--adjust-section-vma\fR is used, even +if the named section does not exist. +.Ip "\f(CW\*(C`\-\-set\-section\-flags \f(CIsection\f(CW=\f(CIflags\f(CW\*(C'\fR" 4 +.IX Item "--set-section-flags section=flags" +Set the flags for the named section. The \fIflags\fR argument is a comma separated string of flag names. The recognized names are -\fIalloc\fP, \fIcontents\fP, \fIload\fP, \fInoload\fP, \fIreadonly\fP, -\fIcode\fP, \fIdata\fP, \fIrom\fP, \fIshare\fP, and \fIdebug\fP. Not -all flags are meaningful for all object file formats. -.TP -.B \fB\-\-add\-section\ \fIsectionname=filename +\&\fBalloc\fR, \fBcontents\fR, \fBload\fR, \fBnoload\fR, +\&\fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR, \fBshare\fR, and +\&\fBdebug\fR. You can set the \fBcontents\fR flag for a section which +does not have contents, but it is not meaningful to clear the +\&\fBcontents\fR flag of a section which does have contents\*(--just remove +the section instead. Not all flags are meaningful for all object file +formats. +.Ip "\f(CW\*(C`\-\-add\-section \f(CIsectionname\f(CW=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--add-section sectionname=filename" Add a new section named \fIsectionname\fR while copying the file. The -contents of the new section are taken from the file \fIfilename\fR. -The size of the section will be the size of the file. This option -only works on file formats which can support sections with arbitrary -names. -.TP -.B \-\-change\-leading\-char +contents of the new section are taken from the file \fIfilename\fR. The +size of the section will be the size of the file. This option only +works on file formats which can support sections with arbitrary names. +.Ip "\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR" 4 +.IX Item "--change-leading-char" Some object file formats use special characters at the start of symbols. The most common such character is underscore, which compilers -often add before every symbol. This option tells -.B objcopy -to change the leading character of every symbol when it converts -between object file formats. If the object file formats use the same -leading character, this option has no effect. Otherwise, it will add -a character, or remove a character, or change a character, as +often add before every symbol. This option tells \f(CW\*(C`objcopy\*(C'\fR to +change the leading character of every symbol when it converts between +object file formats. If the object file formats use the same leading +character, this option has no effect. Otherwise, it will add a +character, or remove a character, or change a character, as appropriate. -.TP -.B \-\-remove\-leading\-char +.Ip "\f(CW\*(C`\-\-remove\-leading\-char\*(C'\fR" 4 +.IX Item "--remove-leading-char" If the first character of a global symbol is a special symbol leading character used by the object file format, remove the character. The most common symbol leading character is underscore. This option will -remove a leading underscore from all global symbols. This can be -useful if you want to link together objects of different file formats -with different conventions for symbol names. This is different from -\fB\-\-change\-leading\-char\fP because it always changes the symbol name +remove a leading underscore from all global symbols. This can be useful +if you want to link together objects of different file formats with +different conventions for symbol names. This is different from +\&\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR because it always changes the symbol name when appropriate, regardless of the object file format of the output -.TP -.B \fB\-\-srec\-len=\fIval -Meaningful only for srec output. Set the length of the Srecords to \fIval\fP. -This length covers both the address, data and crc fields. -.TP -.B \fB\-\-srec\-forceS3 -Meaningful only for srec output. Avoid generation of S1/S2 records, creating -S3-only record format. -.TP -.B \-\-redefine\-sym\ \fIold=new -Change the name of symbol \fIold\fR to \fInew\fR. This can be useful +file. +.Ip "\f(CW\*(C`\-\-srec\-len=\f(CIival\f(CW\*(C'\fR" 4 +.IX Item "--srec-len=ival" +Meaningful only for srec output. Set the maximum length of the Srecords +being produced to \fIival\fR. This length covers both address, data and +crc fields. +.Ip "\f(CW\*(C`\-\-srec\-forceS3\*(C'\fR" 4 +.IX Item "--srec-forceS3" +Meaningful only for srec output. Avoid generation of S1/S2 records, +creating S3\-only record format. +.Ip "\f(CW\*(C`\-\-redefine\-sym \f(CIold\f(CW=\f(CInew\f(CW\*(C'\fR" 4 +.IX Item "--redefine-sym old=new" +Change the name of a symbol \fIold\fR, to \fInew\fR. This can be useful when one is trying link two things together for which you have no source, and there are name collisions. -.TP -.B \-\-weaken -Change all global symbols in the file to be weak. -.TP -.B \-v\fR, \fB\-\-verbose +.Ip "\f(CW\*(C`\-\-weaken\*(C'\fR" 4 +.IX Item "--weaken" +Change all global symbols in the file to be weak. This can be useful +when building an object which will be linked against other objects using +the \f(CW\*(C`\-R\*(C'\fR option to the linker. This option is only effective when +using an object file format which supports weak symbols. +.Ip "\f(CW\*(C`\-\-keep\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--keep-symbols=filename" +Apply \fB\*(--keep-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.Ip "\f(CW\*(C`\-\-strip\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--strip-symbols=filename" +Apply \fB\*(--strip-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.Ip "\f(CW\*(C`\-\-keep\-global\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--keep-global-symbols=filename" +Apply \fB\*(--keep-global-symbol\fR option to each symbol listed in the +file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one +symbol name per line. Line comments may be introduced by the hash +character. This option may be given more than once. +.Ip "\f(CW\*(C`\-\-localize\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--localize-symbols=filename" +Apply \fB\*(--localize-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.Ip "\f(CW\*(C`\-\-weaken\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 +.IX Item "--weaken-symbols=filename" +Apply \fB\*(--weaken-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 +.IX Item "-V" +.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 +.IX Item "--version" +Show the version number of \f(CW\*(C`objcopy\*(C'\fR. +.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 +.IX Item "-v" +.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 +.IX Item "--verbose" Verbose output: list all object files modified. In the case of -archives, "\fBobjcopy \-V\fR" lists all members of the archive. -.TP -.B \-V\fR, \fB\-\-version -Show the version number of -.B objcopy -and exit. -.TP -.B \-\-help -Show a summary of the options to -.B objcopy -and exit. +archives, \fBobjcopy \-V\fR lists all members of the archive. +.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 +.IX Item "--help" +Show a summary of the options to \f(CW\*(C`objcopy\*(C'\fR. .SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (June 1993). - -.SH COPYING -Copyright (c) 1993, 94, 95, 96, 97, 98, 1999, 2000 Free Software Foundation, Inc. +.IX Header "SEE ALSO" +\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. .PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH GNU Free Documentation License -\" Version 1.1, March 2000 - -\" Copyright (C) 2000 Free Software Foundation, Inc. -\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -\" Everyone is permitted to copy and distribute verbatim -\" copies of this license document, but changing it is -\" not allowed. -\" .PP -\" 0. PREAMBLE -\" .PP -\" The purpose of this License is to make a manual, textbook, or other -\" written document "free" in the sense of freedom: to assure everyone -\" the effective freedom to copy and redistribute it, with or without -\" modifying it, either commercially or noncommercially. Secondarily, -\" this License preserves for the author and publisher a way to get -\" credit for their work, while not being considered responsible for -\" modifications made by others. -\" .PP -\" This License is a kind of "copyleft", which means that derivative -\" works of the document must themselves be free in the same sense. It -\" complements the GNU General Public License, which is a copyleft -\" license designed for free software. -\" .PP -\" We have designed this License in order to use it for manuals for free -\" software, because free software needs free documentation: a free -\" program should come with manuals providing the same freedoms that the -\" software does. But this License is not limited to software manuals; -\" it can be used for any textual work, regardless of subject matter or -\" whether it is published as a printed book. We recommend this License -\" principally for works whose purpose is instruction or reference. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" This License applies to any manual or other work that contains a -\" notice placed by the copyright holder saying it can be distributed -\" under the terms of this License. The "Document", below, refers to any -\" such manual or work. Any member of the public is a licensee, and is -\" addressed as "you". -\" .PP -\" A "Modified Version" of the Document means any work containing the -\" Document or a portion of it, either copied verbatim, or with -\" modifications and/or translated into another language. -\" .PP -\" A "Secondary Section" is a named appendix or a front-matter section of -\" the Document that deals exclusively with the relationship of the -\" publishers or authors of the Document to the Document's overall subject -\" (or to related matters) and contains nothing that could fall directly -\" within that overall subject. (For example, if the Document is in part a -\" textbook of mathematics, a Secondary Section may not explain any -\" mathematics.) The relationship could be a matter of historical -\" connection with the subject or with related matters, or of legal, -\" commercial, philosophical, ethical or political position regarding -\" them. -\" .PP -\" The "Invariant Sections" are certain Secondary Sections whose titles -\" are designated, as being those of Invariant Sections, in the notice -\" that says that the Document is released under this License. -\" .PP -\" The "Cover Texts" are certain short passages of text that are listed, -\" as Front-Cover Texts or Back-Cover Texts, in the notice that says that -\" the Document is released under this License. -\" .PP -\" A "Transparent" copy of the Document means a machine-readable copy, -\" represented in a format whose specification is available to the -\" general public, whose contents can be viewed and edited directly and -\" straightforwardly with generic text editors or (for images composed of -\" pixels) generic paint programs or (for drawings) some widely available -\" drawing editor, and that is suitable for input to text formatters or -\" for automatic translation to a variety of formats suitable for input -\" to text formatters. A copy made in an otherwise Transparent file -\" format whose markup has been designed to thwart or discourage -\" subsequent modification by readers is not Transparent. A copy that is -\" not "Transparent" is called "Opaque". -\" .PP -\" Examples of suitable formats for Transparent copies include plain -\" ASCII without markup, Texinfo input format, LaTeX input format, SGML -\" or XML using a publicly available DTD, and standard-conforming simple -\" HTML designed for human modification. Opaque formats include -\" PostScript, PDF, proprietary formats that can be read and edited only -\" by proprietary word processors, SGML or XML for which the DTD and/or -\" processing tools are not generally available, and the -\" machine-generated HTML produced by some word processors for output -\" purposes only. -\" .PP -\" The "Title Page" means, for a printed book, the title page itself, -\" plus such following pages as are needed to hold, legibly, the material -\" this License requires to appear in the title page. For works in -\" formats which do not have any title page as such, "Title Page" means -\" the text near the most prominent appearance of the work's title, -\" preceding the beginning of the body of the text. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" You may copy and distribute the Document in any medium, either -\" commercially or noncommercially, provided that this License, the -\" copyright notices, and the license notice saying this License applies -\" to the Document are reproduced in all copies, and that you add no other -\" conditions whatsoever to those of this License. You may not use -\" technical measures to obstruct or control the reading or further -\" copying of the copies you make or distribute. However, you may accept -\" compensation in exchange for copies. If you distribute a large enough -\" number of copies you must also follow the conditions in section 3. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" If you publish printed copies of the Document numbering more than 100, -\" and the Document's license notice requires Cover Texts, you must enclose -\" the copies in covers that carry, clearly and legibly, all these Cover -\" Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -\" the back cover. Both covers must also clearly and legibly identify -\" you as the publisher of these copies. The front cover must present -\" the full title with all words of the title equally prominent and -\" visible. You may add other material on the covers in addition. -\" Copying with changes limited to the covers, as long as they preserve -\" the title of the Document and satisfy these conditions, can be treated -\" as verbatim copying in other respects. -\" .PP -\" If the required texts for either cover are too voluminous to fit -\" legibly, you should put the first ones listed (as many as fit -\" reasonably) on the actual cover, and continue the rest onto adjacent -\" pages. -\" .PP -\" If you publish or distribute Opaque copies of the Document numbering -\" more than 100, you must either include a machine-readable Transparent -\" copy along with each Opaque copy, or state in or with each Opaque copy -\" a publicly-accessible computer-network location containing a complete -\" Transparent copy of the Document, free of added material, which the -\" general network-using public has access to download anonymously at no -\" charge using public-standard network protocols. If you use the latter -\" option, you must take reasonably prudent steps, when you begin -\" distribution of Opaque copies in quantity, to ensure that this -\" Transparent copy will remain thus accessible at the stated location -\" until at least one year after the last time you distribute an Opaque -\" copy (directly or through your agents or retailers) of that edition to -\" the public. -\" .PP -\" It is requested, but not required, that you contact the authors of the -\" Document well before redistributing any large number of copies, to give -\" them a chance to provide you with an updated version of the Document. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" You may copy and distribute a Modified Version of the Document under -\" the conditions of sections 2 and 3 above, provided that you release -\" the Modified Version under precisely this License, with the Modified -\" Version filling the role of the Document, thus licensing distribution -\" and modification of the Modified Version to whoever possesses a copy -\" of it. In addition, you must do these things in the Modified Version: -\" .PP -\" A. Use in the Title Page (and on the covers, if any) a title distinct -\" from that of the Document, and from those of previous versions -\" (which should, if there were any, be listed in the History section -\" of the Document). You may use the same title as a previous version -\" if the original publisher of that version gives permission. -\" .PP -\" B. List on the Title Page, as authors, one or more persons or entities -\" responsible for authorship of the modifications in the Modified -\" Version, together with at least five of the principal authors of the -\" Document (all of its principal authors, if it has less than five). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" F. Include, immediately after the copyright notices, a license notice -\" giving the public permission to use the Modified Version under the -\" terms of this License, in the form shown in the Addendum below. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" I. Preserve the section entitled "History", and its title, and add to -\" it an item stating at least the title, year, new authors, and -\" publisher of the Modified Version as given on the Title Page. If -\" there is no section entitled "History" in the Document, create one -\" stating the title, year, authors, and publisher of the Document as -\" given on its Title Page, then add an item describing the Modified -\" Version as stated in the previous sentence. -\" .PP -\" J. Preserve the network location, if any, given in the Document for -\" public access to a Transparent copy of the Document, and likewise -\" the network locations given in the Document for previous versions -\" it was based on. These may be placed in the "History" section. -\" You may omit a network location for a work that was published at -\" least four years before the Document itself, or if the original -\" publisher of the version it refers to gives permission. -\" .PP -\" K. In any section entitled "Acknowledgements" or "Dedications", -\" preserve the section's title, and preserve in the section all the -\" substance and tone of each of the contributor acknowledgements -\" and/or dedications given therein. -\" .PP -\" L. Preserve all the Invariant Sections of the Document, -\" unaltered in their text and in their titles. Section numbers -\" or the equivalent are not considered part of the section titles. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" If the Modified Version includes new front-matter sections or -\" appendices that qualify as Secondary Sections and contain no material -\" copied from the Document, you may at your option designate some or all -\" of these sections as invariant. To do this, add their titles to the -\" list of Invariant Sections in the Modified Version's license notice. -\" These titles must be distinct from any other section titles. -\" .PP -\" You may add a section entitled "Endorsements", provided it contains -\" nothing but endorsements of your Modified Version by various -\" parties--for example, statements of peer review or that the text has -\" been approved by an organization as the authoritative definition of a -\" standard. -\" .PP -\" You may add a passage of up to five words as a Front-Cover Text, and a -\" passage of up to 25 words as a Back-Cover Text, to the end of the list -\" of Cover Texts in the Modified Version. Only one passage of -\" Front-Cover Text and one of Back-Cover Text may be added by (or -\" through arrangements made by) any one entity. If the Document already -\" includes a cover text for the same cover, previously added by you or -\" by arrangement made by the same entity you are acting on behalf of, -\" you may not add another; but you may replace the old one, on explicit -\" permission from the previous publisher that added the old one. -\" .PP -\" The author(s) and publisher(s) of the Document do not by this License -\" give permission to use their names for publicity for or to assert or -\" imply endorsement of any Modified Version. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" You may combine the Document with other documents released under this -\" License, under the terms defined in section 4 above for modified -\" versions, provided that you include in the combination all of the -\" Invariant Sections of all of the original documents, unmodified, and -\" list them all as Invariant Sections of your combined work in its -\" license notice. -\" .PP -\" The combined work need only contain one copy of this License, and -\" multiple identical Invariant Sections may be replaced with a single -\" copy. If there are multiple Invariant Sections with the same name but -\" different contents, make the title of each such section unique by -\" adding at the end of it, in parentheses, the name of the original -\" author or publisher of that section if known, or else a unique number. -\" Make the same adjustment to the section titles in the list of -\" Invariant Sections in the license notice of the combined work. -\" .PP -\" In the combination, you must combine any sections entitled "History" -\" in the various original documents, forming one section entitled -\" "History"; likewise combine any sections entitled "Acknowledgements", -\" and any sections entitled "Dedications". You must delete all sections -\" entitled "Endorsements." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" You may make a collection consisting of the Document and other documents -\" released under this License, and replace the individual copies of this -\" License in the various documents with a single copy that is included in -\" the collection, provided that you follow the rules of this License for -\" verbatim copying of each of the documents in all other respects. -\" .PP -\" You may extract a single document from such a collection, and distribute -\" it individually under this License, provided you insert a copy of this -\" License into the extracted document, and follow this License in all -\" other respects regarding verbatim copying of that document. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" A compilation of the Document or its derivatives with other separate -\" and independent documents or works, in or on a volume of a storage or -\" distribution medium, does not as a whole count as a Modified Version -\" of the Document, provided no compilation copyright is claimed for the -\" compilation. Such a compilation is called an "aggregate", and this -\" License does not apply to the other self-contained works thus compiled -\" with the Document, on account of their being thus compiled, if they -\" are not themselves derivative works of the Document. -\" .PP -\" If the Cover Text requirement of section 3 is applicable to these -\" copies of the Document, then if the Document is less than one quarter -\" of the entire aggregate, the Document's Cover Texts may be placed on -\" covers that surround only the Document within the aggregate. -\" Otherwise they must appear on covers around the whole aggregate. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" Translation is considered a kind of modification, so you may -\" distribute translations of the Document under the terms of section 4. -\" Replacing Invariant Sections with translations requires special -\" permission from their copyright holders, but you may include -\" translations of some or all Invariant Sections in addition to the -\" original versions of these Invariant Sections. You may include a -\" translation of this License provided that you also include the -\" original English version of this License. In case of a disagreement -\" between the translation and the original English version of this -\" License, the original English version will prevail. -\" .PP - -\" 9. TERMINATION -\" .PP -\" You may not copy, modify, sublicense, or distribute the Document except -\" as expressly provided for under this License. Any other attempt to -\" copy, modify, sublicense or distribute the Document is void, and will -\" automatically terminate your rights under this License. However, -\" parties who have received copies, or rights, from you under this -\" License will not have their licenses terminated so long as such -\" parties remain in full compliance. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" The Free Software Foundation may publish new, revised versions -\" of the GNU Free Documentation License from time to time. Such new -\" versions will be similar in spirit to the present version, but may -\" differ in detail to address new problems or concerns. See -\" http://www.gnu.org/copyleft/. -\" .PP -\" Each version of the License is given a distinguishing version number. -\" If the Document specifies that a particular numbered version of this -\" License "or any later version" applies to it, you have the option of -\" following the terms and conditions either of that specified version or -\" of any later version that has been published (not as a draft) by the -\" Free Software Foundation. If the Document does not specify a version -\" number of this License, you may choose any version ever published (not -\" as a draft) by the Free Software Foundation. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" To use this License in a document you have written, include a copy of -\" the License in the document and put the following copyright and -\" license notices just after the title page: -\" .PP -\" Copyright (c) YEAR YOUR NAME. -\" Permission is granted to copy, distribute and/or -\" modify this document under the terms of the GNU -\" Free Documentation License, Version 1.1 or any later -\" version published by the Free Software Foundation; -\" with the Invariant Sections being LIST THEIR TITLES, -\" with the Front-Cover Texts being LIST, and with the -\" Back-Cover Texts being LIST. A copy of the license -\" is included in the section entitled "GNU Free -\" Documentation License". -\" .PP -\" If you have no Invariant Sections, write "with no Invariant Sections" -\" instead of saying which ones are invariant. If you have no -\" Front-Cover Texts, write "no Front-Cover Texts" instead of -\" "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. -\" .PP -\" If your document contains nontrivial examples of program code, we -\" recommend releasing these examples in parallel under your choice of -\" free software license, such as the GNU General Public License, -\" to permit their use in free software. +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/objcopy.c b/binutils/objcopy.c index cae66fc..bc2e402 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -56,6 +56,7 @@ static void copy_section PARAMS ((bfd *, asection *, PTR)); static void get_sections PARAMS ((bfd *, asection *, PTR)); static int compare_section_lma PARAMS ((const PTR, const PTR)); static void add_specific_symbol PARAMS ((const char *, struct symlist **)); +static void add_specific_symbols PARAMS ((const char *, struct symlist **)); static boolean is_specified_symbol PARAMS ((const char *, struct symlist *)); static boolean is_strip_section PARAMS ((bfd *, asection *)); static unsigned int filter_symbols @@ -183,11 +184,13 @@ static boolean change_leading_char = false; static boolean remove_leading_char = false; -/* List of symbols to strip, keep, localize, weaken, or redefine. */ +/* List of symbols to strip, keep, localize, keep-global, weaken, + or redefine. */ static struct symlist *strip_specific_list = NULL; static struct symlist *keep_specific_list = NULL; static struct symlist *localize_specific_list = NULL; +static struct symlist *keepglobal_specific_list = NULL; static struct symlist *weaken_specific_list = NULL; static struct redefine_node *redefine_sym_list = NULL; @@ -217,6 +220,11 @@ static boolean weaken = false; #define OPTION_REDEFINE_SYM (OPTION_WEAKEN + 1) #define OPTION_SREC_LEN (OPTION_REDEFINE_SYM + 1) #define OPTION_SREC_FORCES3 (OPTION_SREC_LEN + 1) +#define OPTION_STRIP_SYMBOLS (OPTION_SREC_FORCES3 + 1) +#define OPTION_KEEP_SYMBOLS (OPTION_STRIP_SYMBOLS + 1) +#define OPTION_LOCALIZE_SYMBOLS (OPTION_KEEP_SYMBOLS + 1) +#define OPTION_KEEPGLOBAL_SYMBOLS (OPTION_LOCALIZE_SYMBOLS + 1) +#define OPTION_WEAKEN_SYMBOLS (OPTION_KEEPGLOBAL_SYMBOLS + 1) /* Options to handle if running as "strip". */ @@ -278,6 +286,7 @@ static struct option copy_options[] = {"pad-to", required_argument, 0, OPTION_PAD_TO}, {"preserve-dates", no_argument, 0, 'p'}, {"localize-symbol", required_argument, 0, 'L'}, + {"keep-global-symbol", required_argument, 0, 'G'}, {"remove-leading-char", no_argument, 0, OPTION_REMOVE_LEADING_CHAR}, {"remove-section", required_argument, 0, 'R'}, {"set-section-flags", required_argument, 0, OPTION_SET_SECTION_FLAGS}, @@ -294,6 +303,11 @@ static struct option copy_options[] = {"redefine-sym", required_argument, 0, OPTION_REDEFINE_SYM}, {"srec-len", required_argument, 0, OPTION_SREC_LEN}, {"srec-forceS3", no_argument, 0, OPTION_SREC_FORCES3}, + {"keep-symbols", required_argument, 0, OPTION_KEEP_SYMBOLS}, + {"strip-symbols", required_argument, 0, OPTION_STRIP_SYMBOLS}, + {"keep-global-symbols", required_argument, 0, OPTION_KEEPGLOBAL_SYMBOLS}, + {"localize-symbols", required_argument, 0, OPTION_LOCALIZE_SYMBOLS}, + {"weaken-symbols", required_argument, 0, OPTION_WEAKEN_SYMBOLS}, {0, no_argument, 0, 0} }; @@ -335,6 +349,7 @@ copy_usage (stream, exit_status) -N --strip-symbol <name> Do not copy symbol <name>\n\ -K --keep-symbol <name> Only copy symbol <name>\n\ -L --localize-symbol <name> Force symbol <name> to be marked as a local\n\ + -G --keep-global-symbol <name> Localize all symbols except <name>\n\ -W --weaken-symbol <name> Force symbol <name> to be marked as a weak\n\ --weaken Force all global symbols to be marked as weak\n\ -x --discard-all Remove all non-global symbols\n\ @@ -364,6 +379,11 @@ copy_usage (stream, exit_status) --redefine-sym <old>=<new> Redefine symbol name <old> to <new>\n\ --srec-len <number> Restrict the length of generated Srecords\n\ --srec-forceS3 Restrict the type of generated Srecords to S3\n\ + --strip-symbols <file> -N for all symbols listed in <file>\n\ + --keep-symbols <file> -K for all symbols listed in <file>\n\ + --localize-symbols <file> -L for all symbols listed in <file>\n\ + --keep-global-symbols <file> -G for all symbols listed in <file>\n\ + --weaken-symbols <file> -W for all symbols listed in <file>\n\ -v --verbose List all object files modified\n\ -V --version Display this program's version number\n\ -h --help Display this output\n\ @@ -512,6 +532,122 @@ add_specific_symbol (name, list) *list = tmp_list; } +/* Add symbols listed in `filename' to strip_specific_list. */ + +#define IS_WHITESPACE(c) ((c) == ' ' || (c) == '\t') +#define IS_LINE_TERMINATOR(c) ((c) == '\n' || (c) == '\r' || (c) == '\0') + +static void +add_specific_symbols (filename, list) + const char *filename; + struct symlist **list; +{ + struct stat st; + FILE * f; + char * line; + char * buffer; + unsigned int line_count; + + if (stat (filename, & st) < 0) + fatal (_("cannot stat: %s: %s"), filename, strerror (errno)); + if (st.st_size == 0) + return; + + buffer = (char *) xmalloc (st.st_size + 2); + f = fopen (filename, FOPEN_RT); + if (f == NULL) + fatal (_("cannot open: %s: %s"), filename, strerror (errno)); + + if (fread (buffer, 1, st.st_size, f) == 0 || ferror (f)) + fatal (_("%s: fread failed"), filename); + + fclose (f); + buffer [st.st_size] = '\n'; + buffer [st.st_size + 1] = '\0'; + + line_count = 1; + + for (line = buffer; * line != '\0'; line ++) + { + char * eol; + char * name; + char * name_end; + int finished = false; + + for (eol = line;; eol ++) + { + switch (* eol) + { + case '\n': + * eol = '\0'; + /* Cope with \n\r. */ + if (eol[1] == '\r') + ++ eol; + finished = true; + break; + + case '\r': + * eol = '\0'; + /* Cope with \r\n. */ + if (eol[1] == '\n') + ++ eol; + finished = true; + break; + + case 0: + finished = true; + break; + + case '#': + /* Line comment, Terminate the line here, in case a + name is present and then allow the rest of the + loop to find the real end of the line. */ + * eol = '\0'; + break; + + default: + break; + } + + if (finished) + break; + } + + /* A name may now exist somewhere between 'line' and 'eol'. + Strip off leading whitespace and trailing whitespace, + then add it to the list. */ + for (name = line; IS_WHITESPACE (* name); name ++) + ; + for (name_end = name; + (! IS_WHITESPACE (* name_end)) + && (! IS_LINE_TERMINATOR (* name_end)); + name_end ++) + ; + + if (! IS_LINE_TERMINATOR (* name_end)) + { + char * extra; + + for (extra = name_end + 1; IS_WHITESPACE (* extra); extra ++) + ; + + if (! IS_LINE_TERMINATOR (* extra)) + non_fatal (_("Ignoring rubbish found on line %d of %s"), + line_count, filename); + } + + * name_end = '\0'; + + if (name_end > name) + add_specific_symbol (name, list); + + /* Advance line pointer to end of line. The 'eol ++' in the for + loop above will then advance us to the start of the next line. */ + line = eol; + line_count ++; + } +} + /* See whether a symbol should be stripped or kept based on strip_specific_list and keep_symbols. */ @@ -630,6 +766,12 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount) else if (relocatable /* Relocatable file. */ && (flags & (BSF_GLOBAL | BSF_WEAK)) != 0) keep = 1; + else if (bfd_decode_symclass (sym) == 'I') + /* Global symbols in $idata sections need to be retained + even if relocatable is false. External users of the + library containing the $idata section may reference these + symbols. */ + keep = 1; else if ((flags & BSF_GLOBAL) != 0 /* Global symbol. */ || (flags & BSF_WEAK) != 0 || bfd_is_und_section (bfd_get_section (sym)) @@ -659,7 +801,9 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount) sym->flags |= BSF_WEAK; } if (keep && (flags & (BSF_GLOBAL | BSF_WEAK)) - && is_specified_symbol (name, localize_specific_list)) + && (is_specified_symbol (name, localize_specific_list) + || (keepglobal_specific_list != NULL + && ! is_specified_symbol (name, keepglobal_specific_list)))) { sym->flags &= ~(BSF_GLOBAL | BSF_WEAK); sym->flags |= BSF_LOCAL; @@ -971,6 +1115,7 @@ copy_object (ibfd, obfd) || strip_specific_list != NULL || keep_specific_list != NULL || localize_specific_list != NULL + || keepglobal_specific_list != NULL || weaken_specific_list != NULL || sections_removed || sections_copied @@ -1689,7 +1834,7 @@ strip_main (argc, argv) struct section_list *p; char *output_file = NULL; - while ((c = getopt_long (argc, argv, "I:O:F:K:N:R:o:sSpdgxXVv", + while ((c = getopt_long (argc, argv, "b:i:I:j:K:N:s:O:d:F:L:G:R:SpgxXVvW:", strip_options, (int *) 0)) != EOF) { switch (c) @@ -1892,6 +2037,10 @@ copy_main (argc, argv) add_specific_symbol (optarg, &localize_specific_list); break; + case 'G': + add_specific_symbol (optarg, &keepglobal_specific_list); + break; + case 'W': add_specific_symbol (optarg, &weaken_specific_list); break; @@ -2158,6 +2307,26 @@ copy_main (argc, argv) S3Forced = true; break; + case OPTION_STRIP_SYMBOLS: + add_specific_symbols (optarg, &strip_specific_list); + break; + + case OPTION_KEEP_SYMBOLS: + add_specific_symbols (optarg, &keep_specific_list); + break; + + case OPTION_LOCALIZE_SYMBOLS: + add_specific_symbols (optarg, &localize_specific_list); + break; + + case OPTION_KEEPGLOBAL_SYMBOLS: + add_specific_symbols (optarg, &keepglobal_specific_list); + break; + + case OPTION_WEAKEN_SYMBOLS: + add_specific_symbols (optarg, &weaken_specific_list); + break; + case 0: break; /* we've been given a long option */ |