This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>> The --strip-all case is out of question, but my concern is primarily
>> with the combination of --strip-symbol/--strip-symbols and -w, but
to
>> some degree also with the plain use of
--strip-symbol/--strip-symbols:
>> When trying to cut down the number of symbols in the linux kernel
>> (subject to kallsyms lookup) I'm trying to eliminate all non-text
>> symbols. Finding them is not a problem, but filtering out those used
in
>> relocations is, which is why I'd want objcopy to do this for me.
Since
>> I'm of the general opinion that --strip-symbol for symbols used in
>> relocations for non-discarded sections (which I would hope already
don't
>> get the BSF_KEEP flag set) will result in a broken output file, I'd
like
>> to make objcopy smart enough to deal with that situation (possibly
>> through a new option --keep-needed or --force-strip-needed,
depending on
>> what the desirable default would be and whether keeping the current
>> behavior is a requirement).
>
>OK - I see your point. My original thinking was that if the user had
>specified --strip-symbol=foo on the objcopy command line then that
meant
>that they definitely wanted "foo" stripped out, even if it was used in
a
>reloc, and that they knew what they were doing.
>
>Given that we are dealing with the binutils here, where you are
allowed
>to shoot yourself in the foot if you do not know what you are doing, I
>think that this behaviour of the --strip-symbol switch should be
>retained. I would have no objections however to a patch which added
>another switch, say --strip-unused-symbol=<>, or indeed the
>--keep-needed switch you suggested, in order to provide a safer
>environment for stripping symbols.
So I chose the more fine-grained method with
--strip-unneeded-symbol[s].
Built and tested on i686-pc-linux-gnu.
Jan
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.
---
/home/jbeulich/src/binutils/mainline/2004-12-03.13.35/binutils/doc/binutils.texi 2004-11-18
15:05:13.000000000 +0100
+++ 2004-12-03.13.35/binutils/doc/binutils.texi 2004-12-15
16:35:20.514605416 +0100
@@ -947,6 +947,7 @@ objcopy [@option{-F} @var{bfdname}|@opti
[@option{-g}|@option{--strip-debug}]
[@option{-K}
@var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
[@option{-N}
@var{symbolname}|@option{--strip-symbol=}@var{symbolname}]
+ [@option{--strip-unneeded-symbol=}@var{symbolname}]
[@option{-G}
@var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}]
[@option{-L}
@var{symbolname}|@option{--localize-symbol=}@var{symbolname}]
[@option{-W}
@var{symbolname}|@option{--weaken-symbol=}@var{symbolname}]
@@ -978,6 +979,7 @@ objcopy [@option{-F} @var{bfdname}|@opti
[@option{--weaken}]
[@option{--keep-symbols=}@var{filename}]
[@option{--strip-symbols=}@var{filename}]
+ [@option{--strip-unneeded-symbols=}@var{filename}]
[@option{--keep-global-symbols=}@var{filename}]
[@option{--localize-symbols=}@var{filename}]
[@option{--weaken-symbols=}@var{filename}]
@@ -1106,6 +1108,10 @@ be given more than once.
Do not copy symbol @var{symbolname} from the source file. This
option
may be given more than once.
+@item --strip-unneeded-symbol=@var{symbolname}
+Do not copy symbol @var{symbolname} from the source file unless it is
needed
+by a relocation. 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
@@ -1347,6 +1353,12 @@ Apply @option{--strip-symbol} option to
name per line. Line comments may be introduced by the hash
character.
This option may be given more than once.
+@item --strip-unneeded-symbols=@var{filename}
+Apply @option{--strip-unneeded-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 @option{--keep-global-symbol} option to each symbol listed in
the
file @var{filename}. @var{filename} is simply a flat file, with one
---
/home/jbeulich/src/binutils/mainline/2004-12-03.13.35/binutils/objcopy.c 2004-11-02
17:16:02.000000000 +0100
+++ 2004-12-03.13.35/binutils/objcopy.c 2004-12-15
16:26:32.097936960 +0100
@@ -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_statu
-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_statu
--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, as
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;
Attachment:
binutils-mainline-strip-unneeded-symbols.patch
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |