diff options
author | Jan Beulich <jbeulich@novell.com> | 2004-12-16 13:16:33 +0000 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2004-12-16 13:16:33 +0000 |
commit | bcf32829aff66021b9309b1f738d54f24dfa6a8e (patch) | |
tree | 6146f65e84fd4af302e4779d149d456f7577e61b /binutils/objcopy.c | |
parent | 5b9d23c67a826f866199a297cabcc4aa1ca38e69 (diff) | |
download | gdb-bcf32829aff66021b9309b1f738d54f24dfa6a8e.zip gdb-bcf32829aff66021b9309b1f738d54f24dfa6a8e.tar.gz gdb-bcf32829aff66021b9309b1f738d54f24dfa6a8e.tar.bz2 |
binutils/
2004-12-15 Jan Beulich <jbeulich@novell.com>
* doc/binutils.texi: Document --strip-unneeded-symbol and
--strip-unneeded-symbols.
* objcopy.c (strip_unneeded_list): New.
(enum command_line_switch): Add OPTION_STRIP_UNNEEDED_SYMBOL
and OPTION_STRIP_UNNEEDED_SYMBOLS.
(copy_options): Add --strip-unneeded-symbol and
--strip-unneeded-symbols.
(copy_usage): Likewise.
(filter_symbols): Suppress copying of symbol if in strip_unneeded_list
and the symbol is not needed.
(copy_main): Handle OPTION_STRIP_UNNEEDED_SYMBOL and
OPTION_STRIP_UNNEEDED_SYMBOLS.
Diffstat (limited to 'binutils/objcopy.c')
-rw-r--r-- | binutils/objcopy.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/binutils/objcopy.c b/binutils/objcopy.c index d5931b8..c516f79 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -192,6 +192,7 @@ static bfd_boolean wildcard = FALSE; /* List of symbols to strip, keep, localize, keep-global, weaken, or redefine. */ static struct symlist *strip_specific_list = NULL; +static struct symlist *strip_unneeded_list = NULL; static struct symlist *keep_specific_list = NULL; static struct symlist *localize_specific_list = NULL; static struct symlist *keepglobal_specific_list = NULL; @@ -231,6 +232,8 @@ enum command_line_switch OPTION_SREC_LEN, OPTION_SREC_FORCES3, OPTION_STRIP_SYMBOLS, + OPTION_STRIP_UNNEEDED_SYMBOL, + OPTION_STRIP_UNNEEDED_SYMBOLS, OPTION_KEEP_SYMBOLS, OPTION_LOCALIZE_SYMBOLS, OPTION_KEEPGLOBAL_SYMBOLS, @@ -340,6 +343,8 @@ static struct option copy_options[] = {"strip-all", no_argument, 0, 'S'}, {"strip-debug", no_argument, 0, 'g'}, {"strip-unneeded", no_argument, 0, OPTION_STRIP_UNNEEDED}, + {"strip-unneeded-symbol", required_argument, 0, OPTION_STRIP_UNNEEDED_SYMBOL}, + {"strip-unneeded-symbols", required_argument, 0, OPTION_STRIP_UNNEEDED_SYMBOLS}, {"strip-symbol", required_argument, 0, 'N'}, {"strip-symbols", required_argument, 0, OPTION_STRIP_SYMBOLS}, {"target", required_argument, 0, 'F'}, @@ -405,6 +410,9 @@ copy_usage (FILE *stream, int exit_status) -g --strip-debug Remove all debugging symbols & sections\n\ --strip-unneeded Remove all symbols not needed by relocations\n\ -N --strip-symbol <name> Do not copy symbol <name>\n\ + --strip-unneeded-symbol <name>\n\ + Do not copy symbol <name> unless needed by\n\ + relocations\n\ --only-keep-debug Strip everything but the debug information\n\ -K --keep-symbol <name> Only copy symbol <name>\n\ -L --localize-symbol <name> Force symbol <name> to be marked as a local\n\ @@ -443,6 +451,9 @@ copy_usage (FILE *stream, int exit_status) --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\ + --strip-unneeded-symbols <file>\n\ + --strip-unneeded-symbol for all symbols listed\n\ + 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\ @@ -903,6 +914,10 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (keep && is_specified_symbol (name, strip_specific_list)) keep = 0; + if (keep + && !(flags & BSF_KEEP) + && is_specified_symbol (name, strip_unneeded_list)) + keep = 0; if (!keep && is_specified_symbol (name, keep_specific_list)) keep = 1; if (keep && is_strip_section (abfd, bfd_get_section (sym))) @@ -2525,6 +2540,10 @@ copy_main (int argc, char *argv[]) add_specific_symbol (optarg, &strip_specific_list); break; + case OPTION_STRIP_UNNEEDED_SYMBOL: + add_specific_symbol (optarg, &strip_unneeded_list); + break; + case 'L': add_specific_symbol (optarg, &localize_specific_list); break; @@ -2858,6 +2877,10 @@ copy_main (int argc, char *argv[]) add_specific_symbols (optarg, &strip_specific_list); break; + case OPTION_STRIP_UNNEEDED_SYMBOLS: + add_specific_symbols (optarg, &strip_unneeded_list); + break; + case OPTION_KEEP_SYMBOLS: add_specific_symbols (optarg, &keep_specific_list); break; |