OSDN Git Service

* objcopy.c (use_alt_mach_code): New variable.
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 24 Aug 2001 13:56:11 +0000 (13:56 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Fri, 24 Aug 2001 13:56:11 +0000 (13:56 +0000)
(OPTION_ALT_MACH_CODE): Define.
(copy_options): Added --alt-machine-code.
(copy_main): Handle it.
(copy_object): Switch to alternate machine code if requested.
* doc/binutils.texi: Document new option.
* NEWS: Likewise.

binutils/ChangeLog
binutils/NEWS
binutils/doc/binutils.texi
binutils/objcopy.c

index 3cc6117..50d8344 100644 (file)
@@ -1,3 +1,13 @@
+2001-08-24  Alexandre Oliva  <aoliva@redhat.com>
+
+       * objcopy.c (use_alt_mach_code): New variable.
+       (OPTION_ALT_MACH_CODE): Define.
+       (copy_options): Added --alt-machine-code.
+       (copy_main): Handle it.
+       (copy_object): Switch to alternate machine code if requested.
+       * doc/binutils.texi: Document new option.
+       * NEWS: Likewise.
+
 2001-08-22  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
 
        * readelf.c (get_machine_flags): Add detection of EF_MIPS_UCODE.
index 2f5ad58..18c2fd8 100644 (file)
 
 * Support for OpenRISC by Johan Rydberg.
 
+* New command line switch to objcopy --alt-machine-code which creates a binary
+  with an alternate machine code if one is defined in the architecture
+  description.  Only supported for ELF targets.  By Alexandre Oliva.
+
 * New command line switch to objcopy -B (or --binary-architecture) which sets
   the architecture of the output file to the given argument.  This option only
   makes sense, if the input target is binary.  Otherwise it is ignored.
index 38de927..ecb767c 100644 (file)
@@ -954,6 +954,7 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
         [@option{--keep-global-symbols=}@var{filename}]
         [@option{--localize-symbols=}@var{filename}]
         [@option{--weaken-symbols=}@var{filename}]
+        [@option{--alt-machine-code=@var{index}}]
         [@option{-v}|@option{--verbose}]
         [@option{-V}|@option{--version}]  
         [@option{--help}]
@@ -1306,6 +1307,13 @@ Apply @option{--weaken-symbol} option to each symbol listed in the file
 name per line.  Line comments may be introduced by the hash character.
 This option may be given more than once.
 
+@item --alt-machine-code=@var{index}
+If the output architecture has alternate machine codes, use the
+@var{index}th code instead of the default one.  This is useful in case
+a machine is assigned an official code and the tool-chain adopts the 
+new code, but other applications still depend on the original code
+being used.
+
 @item -V
 @itemx --version
 Show the version number of @command{objcopy}.
index 9496ce5..160f28b 100644 (file)
@@ -171,6 +171,9 @@ static bfd_byte gap_fill = 0;
 static boolean pad_to_set = false;
 static bfd_vma pad_to;
 
+/* Use alternate machine code?  */
+static int use_alt_mach_code = 0;
+
 /* List of sections to add.  */
 struct section_add
 {
@@ -240,6 +243,7 @@ static boolean weaken = false;
 #define OPTION_KEEPGLOBAL_SYMBOLS (OPTION_LOCALIZE_SYMBOLS + 1)
 #define OPTION_WEAKEN_SYMBOLS (OPTION_KEEPGLOBAL_SYMBOLS + 1)
 #define OPTION_RENAME_SECTION (OPTION_WEAKEN_SYMBOLS + 1)
+#define OPTION_ALT_MACH_CODE (OPTION_RENAME_SECTION + 1)
 
 /* Options to handle if running as "strip".  */
 
@@ -326,6 +330,7 @@ static struct option copy_options[] =
   {"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},
+  {"alt-machine-code", required_argument, 0, OPTION_ALT_MACH_CODE},
   {0, no_argument, 0, 0}
 };
 
@@ -408,6 +413,7 @@ copy_usage (stream, exit_status)
      --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\
+     --alt-machine-code <index>    Use alternate machine code for output\n\
   -v --verbose                     List all object files modified\n\
   -V --version                     Display this program's version number\n\
   -h --help                        Display this output\n\
@@ -1244,6 +1250,15 @@ copy_object (ibfd, obfd)
       status = 1;
       return;
     }
+
+  /* Switch to the alternate machine code.  We have to do this at the
+     very end, because we only initialize the header when we create
+     the first section.  */
+  if (use_alt_mach_code != 0)
+    {
+      if (!bfd_alt_mach_code (obfd, use_alt_mach_code))
+       non_fatal (_("unknown alternate machine code, ignored"));
+    }
 }
 
 /* Read each archive element in turn from IBFD, copy the
@@ -2462,6 +2477,12 @@ copy_main (argc, argv)
          add_specific_symbols (optarg, &weaken_specific_list);
          break;
 
+       case OPTION_ALT_MACH_CODE:
+         use_alt_mach_code = atoi (optarg);
+         if (use_alt_mach_code <= 0)
+           fatal (_("alternate machine code index must be positive"));
+         break;
+
        case 0:
          break;                /* we've been given a long option */