]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add command line options to objcopy to specify symbols as lists in files
authorNick Clifton <nickc@redhat.com>
Wed, 30 May 2001 10:49:03 +0000 (10:49 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 30 May 2001 10:49:03 +0000 (10:49 +0000)
binutils/ChangeLog
binutils/NEWS
binutils/binutils.texi
binutils/objcopy.1
binutils/objcopy.c

index a6a0ff6a6c9e40ae7b8a989021ca13304463bed0..36c00cf7a50ef147785e759fa19629b8b5f67dd3 100644 (file)
@@ -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>
index 62f858f59b7a0420eb6a77d7038d8f3d2e458a52..8f5028c648efd310a90b27aeb0cd62f9019b79df 100644 (file)
@@ -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.
 
index 41146635c19bf96c2770d3c8dcc26ec13ce72b2f..9fc11bc313ad8ebca614a2c86560c3888fa80716 100644 (file)
@@ -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}.
index d2eed151478613dd38d48606a7f2301bc082fd9c..a6aa1815fa80521b0954c7b4ab03980bd23f2ba3 100644 (file)
-.\" 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".
index cae66fc87fbaae7674281cf476216939521052d5..bc2e4026b9ae0a5a1cd879204bc3a81a4b58186a 100644 (file)
@@ -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 */