+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.
* 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.
[@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}]
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}.
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
{
#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". */
{"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}
};
--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\
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
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 */