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.
This commit is contained in:
Jan Beulich
2004-12-16 13:16:33 +00:00
parent 5b9d23c67a
commit bcf32829af
4 changed files with 55 additions and 0 deletions

View File

@ -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;