* 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 3cc611713c652ed5c44807bc973181603ea86f2f..50d83444763e382411443a3b0f6f026cb14f854a 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 2f5ad586ab2c87d0bac80d8cd1f016d72a8a5f38..18c2fd8aeb62b73b4ed27740fd85c74e8278e87e 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 38de927cf61ba369c9da110ad3f82516bb5b65b0..ecb767cfabc70aafb255d2873c8b96c2db5f3654 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 9496ce5fdea826747e15d89c9ff10c56795e4c6d..160f28bfe38c3b530d1040b3a009c744f8c469af 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 */