[llvm] r344321 - [llvm-objcopy] Add -F|--target compatibility
Jordan Rupprecht via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 11 17:36:01 PDT 2018
Author: rupprecht
Date: Thu Oct 11 17:36:01 2018
New Revision: 344321
URL: http://llvm.org/viewvc/llvm-project?rev=344321&view=rev
Log:
[llvm-objcopy] Add -F|--target compatibility
Summary:
This change adds support for the GNU --target flag, which sets both --input-target and --output-target.
GNU objcopy doesn't do any checking for whether both --target and --{input,output}-target are used, and so it allows both, e.g. "--target A --output-target B" is equivalent to "--input-target A --output-target B" since the later command line flag would override earlier ones. This may be error prone, so I chose to implement it as an error if both are used. I'm not sure if anyone is actually using both.
Reviewers: jakehehrlich, jhenderson, alexshap
Reviewed By: jakehehrlich, alexshap
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D53029
Added:
llvm/trunk/test/tools/llvm-objcopy/input-output-target.test
Modified:
llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp
llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td
Added: llvm/trunk/test/tools/llvm-objcopy/input-output-target.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/input-output-target.test?rev=344321&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/input-output-target.test (added)
+++ llvm/trunk/test/tools/llvm-objcopy/input-output-target.test Thu Oct 11 17:36:01 2018
@@ -0,0 +1,22 @@
+# RUN: echo abcd > %t.txt
+
+# Preserve input to verify it is not modified
+# RUN: cp %t.txt %t-copy.txt
+
+# -F <target> is equivalent to -I <target> -O <target>
+# RUN: llvm-objcopy -F binary -B i386:x86-64 %t.txt %t.2.txt
+# RUN: cmp %t-copy.txt %t.2.txt
+
+# --target <target> is equivalent to --input-target <target> --output-target <target>
+# RUN: llvm-objcopy --target binary -B i386:x86-64 %t.txt %t.3.txt
+# RUN: cmp %t-copy.txt %t.3.txt
+
+# TODO: check --target and --input-target/--output-target are incompatible
+# RUN: not llvm-objcopy --target binary --input-target binary -B i386:x86-64 \
+# RUN: %t.txt %t.4.txt 2>&1 \
+# RUN: | FileCheck %s --check-prefix=BAD-FLAG
+# RUN: not llvm-objcopy --target binary --output-target binary -B i386:x86-64 \
+# RUN: %t.txt %t.4.txt 2>&1 \
+# RUN: | FileCheck %s --check-prefix=BAD-FLAG
+
+# BAD-FLAG: --target cannot be used with --input-target or --output-target.
Modified: llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp?rev=344321&r1=344320&r2=344321&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp (original)
+++ llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp Thu Oct 11 17:36:01 2018
@@ -247,8 +247,18 @@ DriverConfig parseObjcopyOptions(ArrayRe
CopyConfig Config;
Config.InputFilename = Positional[0];
Config.OutputFilename = Positional[Positional.size() == 1 ? 0 : 1];
- Config.InputFormat = InputArgs.getLastArgValue(OBJCOPY_input_target);
- Config.OutputFormat = InputArgs.getLastArgValue(OBJCOPY_output_target);
+ if (InputArgs.hasArg(OBJCOPY_target) &&
+ (InputArgs.hasArg(OBJCOPY_input_target) ||
+ InputArgs.hasArg(OBJCOPY_output_target)))
+ error("--target cannot be used with --input-target or --output-target");
+
+ if (InputArgs.hasArg(OBJCOPY_target)) {
+ Config.InputFormat = InputArgs.getLastArgValue(OBJCOPY_target);
+ Config.OutputFormat = InputArgs.getLastArgValue(OBJCOPY_target);
+ } else {
+ Config.InputFormat = InputArgs.getLastArgValue(OBJCOPY_input_target);
+ Config.OutputFormat = InputArgs.getLastArgValue(OBJCOPY_output_target);
+ }
if (Config.InputFormat == "binary") {
auto BinaryArch = InputArgs.getLastArgValue(OBJCOPY_binary_architecture);
if (BinaryArch.empty())
Modified: llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td?rev=344321&r1=344320&r2=344321&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td (original)
+++ llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td Thu Oct 11 17:36:01 2018
@@ -10,6 +10,10 @@ defm binary_architecture : Eq<"binary-ar
HelpText<"Used when transforming an architecture-less format (such as binary) to another format">;
def B : JoinedOrSeparate<["-"], "B">,
Alias<binary_architecture>;
+defm target : Eq<"target">,
+ HelpText<"Format of the input and output file">,
+ Values<"binary">;
+def F : JoinedOrSeparate<[ "-" ], "F">, Alias<target>;
defm input_target : Eq<"input-target">,
HelpText<"Format of the input file">,
Values<"binary">;
More information about the llvm-commits
mailing list