[PATCH] objcopy/strip option to retain file symbols
Jan Beulich
JBeulich@novell.com
Fri Nov 11 11:03:00 GMT 2005
More information about the Binutils mailing list
Fri Nov 11 11:03:00 GMT 2005
- Previous message (by thread): [PATCH] reduce disk space requirements of testsuites
- Next message (by thread): [PATCH] objcopy/strip option to retain file symbols
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In order to be able to qualify static symbols in object files or executables by their source file name regardless of whether unneeded or debugging symbols get stripped, this adds an option to objcopy and strip to retain file symbols in such cases. Built and tested on i686-pc-linux-gnu. Jan binutils/ 2005-11-11 Jan Beulich <jbeulich@novell.com> * objcopy.c (keep_file_symbols): New. (enum command_line_switch): Add OPTION_KEEP_FILE_SYMBOLS. (strip_options): Add --keep-file-symbols. (copy_options): Likewise. (copy_usage): Likewise. (strip_usage): Likewise. (filter_symbols): Act upon keep_file_symbols. (strip_main): Handle OPTION_KEEP_FILE_SYMBOLS. (copy_main): Likewise. * doc/binutils.texi: Document --keep-file-symbols for objcopy and strip. --- /home/jbeulich/src/binutils/mainline/2005-11-09/binutils/doc/binutils.texi 2005-10-12 09:46:23.000000000 +0200 +++ 2005-11-09/binutils/doc/binutils.texi 2005-11-11 10:51:14.542486696 +0100 @@ -991,6 +991,7 @@ objcopy [@option{-F} @var{bfdname}|@opti [@option{--prefix-sections=}@var{string}] [@option{--prefix-alloc-sections=}@var{string}] [@option{--add-gnu-debuglink=}@var{path-to-file}] + [@option{--keep-file-symbols}] [@option{--only-keep-debug}] [@option{--writable-text}] [@option{--readonly-text}] @@ -1428,6 +1429,11 @@ Prefix all the names of all allocated se Creates a .gnu_debuglink section which contains a reference to @var{path-to-file} and adds it to the output file. +@item --keep-file-symbols +When stripping a file, perhaps with @option{--strip-debug} or +@option{--strip-unneeded}, retain any symbols specifying source file names, +which would otherwise get stripped. + @item --only-keep-debug Strip a file, removing contents of any sections that would not be stripped by @option{--strip-debug} and leaving the debugging sections @@ -2223,6 +2229,7 @@ strip [@option{-F} @var{bfdname} |@optio [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}] [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}] [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}] + [@option{--keep-file-symbols}] [@option{--only-keep-debug}] [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}] [@option{--help}] [@option{--info}] @@ -2331,6 +2338,11 @@ Remove non-global symbols. Remove compiler-generated local symbols. (These usually start with @samp{L} or @samp{.}.) +@item --keep-file-symbols +When stripping a file, perhaps with @option{--strip-debug} or +@option{--strip-unneeded}, retain any symbols specifying source file names, +which would otherwise get stripped. + @item --only-keep-debug Strip a file, removing any sections that would be stripped by @option{--strip-debug} and leaving the debugging sections. --- /home/jbeulich/src/binutils/mainline/2005-11-09/binutils/objcopy.c 2005-10-13 16:54:31.000000000 +0200 +++ 2005-11-09/binutils/objcopy.c 2005-11-11 10:57:26.030012008 +0100 @@ -203,6 +203,9 @@ static struct redefine_node *redefine_sy /* If this is TRUE, we weaken global symbols (set BSF_WEAK). */ static bfd_boolean weaken = FALSE; +/* If this is TRUE, we retain BSF_FILE symbols. */ +static bfd_boolean keep_file_symbols = FALSE; + /* Prefix symbols/sections. */ static char *prefix_symbols_string = 0; static char *prefix_sections_string = 0; @@ -249,6 +252,7 @@ enum command_line_switch OPTION_FORMATS_INFO, OPTION_ADD_GNU_DEBUGLINK, OPTION_ONLY_KEEP_DEBUG, + OPTION_KEEP_FILE_SYMBOLS, OPTION_READONLY_TEXT, OPTION_WRITABLE_TEXT, OPTION_PURE, @@ -266,6 +270,7 @@ static struct option strip_options[] = {"info", no_argument, 0, OPTION_FORMATS_INFO}, {"input-format", required_argument, 0, 'I'}, /* Obsolete */ {"input-target", required_argument, 0, 'I'}, + {"keep-file-symbols", no_argument, 0, OPTION_KEEP_FILE_SYMBOLS}, {"keep-symbol", required_argument, 0, 'K'}, {"only-keep-debug", no_argument, 0, OPTION_ONLY_KEEP_DEBUG}, {"output-format", required_argument, 0, 'O'}, /* Obsolete */ @@ -317,6 +322,7 @@ static struct option copy_options[] = {"input-format", required_argument, 0, 'I'}, /* Obsolete */ {"input-target", required_argument, 0, 'I'}, {"interleave", required_argument, 0, 'i'}, + {"keep-file-symbols", no_argument, 0, OPTION_KEEP_FILE_SYMBOLS}, {"keep-global-symbol", required_argument, 0, 'G'}, {"keep-global-symbols", required_argument, 0, OPTION_KEEPGLOBAL_SYMBOLS}, {"keep-symbol", required_argument, 0, 'K'}, @@ -420,6 +426,7 @@ copy_usage (FILE *stream, int exit_statu relocations\n\ --only-keep-debug Strip everything but the debug information\n\ -K --keep-symbol <name> Do not strip symbol <name>\n\ + --keep-file-symbols Do not strip file symbol(s)\n\ -L --localize-symbol <name> Force symbol <name> to be marked as a local\n\ --globalize-symbol <name> Force symbol <name> to be marked as a global\n\ -G --keep-global-symbol <name> Localize all symbols except <name>\n\ @@ -505,6 +512,7 @@ strip_usage (FILE *stream, int exit_stat --only-keep-debug Strip everything but the debug information\n\ -N --strip-symbol=<name> Do not copy symbol <name>\n\ -K --keep-symbol=<name> Do not strip symbol <name>\n\ + --keep-file-symbols Do not strip file symbol(s)\n\ -w --wildcard Permit wildcard in symbol comparison\n\ -x --discard-all Remove all non-global symbols\n\ -X --discard-locals Remove any compiler-generated symbols\n\ @@ -926,7 +934,9 @@ filter_symbols (bfd *abfd, bfd *obfd, as && !(flags & BSF_KEEP) && is_specified_symbol (name, strip_unneeded_list)) keep = 0; - if (!keep && is_specified_symbol (name, keep_specific_list)) + if (!keep + && ((keep_file_symbols && (flags & BSF_FILE)) + || is_specified_symbol (name, keep_specific_list))) keep = 1; if (keep && is_strip_section (abfd, bfd_get_section (sym))) keep = 0; @@ -2460,6 +2470,9 @@ strip_main (int argc, char *argv[]) case OPTION_ONLY_KEEP_DEBUG: strip_symbols = STRIP_NONDEBUG; break; + case OPTION_KEEP_FILE_SYMBOLS: + keep_file_symbols = 1; + break; case 0: /* We've been given a long option. */ break; @@ -2617,6 +2630,10 @@ copy_main (int argc, char *argv[]) strip_symbols = STRIP_NONDEBUG; break; + case OPTION_KEEP_FILE_SYMBOLS: + keep_file_symbols = 1; + break; + case OPTION_ADD_GNU_DEBUGLINK: gnu_debuglink_filename = optarg; break; -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: binutils-mainline-keep-file-symbols.patch URL: <https://sourceware.org/pipermail/binutils/attachments/20051111/d0461b6d/attachment.ksh>
- Previous message (by thread): [PATCH] reduce disk space requirements of testsuites
- Next message (by thread): [PATCH] objcopy/strip option to retain file symbols
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list