diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2001-08-24 13:56:11 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2001-08-24 13:56:11 +0000 |
commit | 1ae8b3d2a04d1064a403ce6adf997831e1a55300 (patch) | |
tree | ed4a8b91313b19370fe89dc88dde648e29abe49e /binutils | |
parent | 8c98ec7dcccbe45bed00b04e04c3d7cac8f7b744 (diff) | |
download | binutils-1ae8b3d2a04d1064a403ce6adf997831e1a55300.zip binutils-1ae8b3d2a04d1064a403ce6adf997831e1a55300.tar.gz binutils-1ae8b3d2a04d1064a403ce6adf997831e1a55300.tar.bz2 |
* 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.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 10 | ||||
-rw-r--r-- | binutils/NEWS | 4 | ||||
-rw-r--r-- | binutils/doc/binutils.texi | 8 | ||||
-rw-r--r-- | binutils/objcopy.c | 21 |
4 files changed, 43 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 3cc6117..50d8344 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -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. diff --git a/binutils/NEWS b/binutils/NEWS index 2f5ad58..18c2fd8 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -11,6 +11,10 @@ * 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. diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 38de927..ecb767c 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -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}. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 9496ce5..160f28b 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -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 */ |