From f3ae9589caa47c5bcc38b3f8587aa8a7d9cb403c Mon Sep 17 00:00:00 2001 From: Jordan Rupprecht Date: Wed, 30 Jan 2019 18:13:30 +0000 Subject: [PATCH] [llvm-objcopy][NFC] More error propagation (linkToBuildIdDir) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@352640 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 34 +++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/tools/llvm-objcopy/ELF/ELFObjcopy.cpp index cbdad77cda7..e77361e285a 100644 --- a/tools/llvm-objcopy/ELF/ELFObjcopy.cpp +++ b/tools/llvm-objcopy/ELF/ELFObjcopy.cpp @@ -157,13 +157,15 @@ findBuildID(const object::ELFObjectFileBase &In) { llvm_unreachable("Bad file format"); } -static void linkToBuildIdDir(const CopyConfig &Config, StringRef ToLink, - StringRef Suffix, ArrayRef BuildIdBytes) { +static Error linkToBuildIdDir(const CopyConfig &Config, StringRef ToLink, + StringRef Suffix, + ArrayRef BuildIdBytes) { SmallString<128> Path = Config.BuildIdLinkDir; sys::path::append(Path, llvm::toHex(BuildIdBytes[0], /*LowerCase*/ true)); if (auto EC = sys::fs::create_directories(Path)) - error("cannot create build ID link directory " + Path + ": " + - EC.message()); + return createFileError( + Path.str(), + createStringError(EC, "cannot create build ID link directory")); sys::path::append(Path, llvm::toHex(BuildIdBytes.slice(1), /*LowerCase*/ true)); @@ -174,8 +176,10 @@ static void linkToBuildIdDir(const CopyConfig &Config, StringRef ToLink, sys::fs::remove(Path); EC = sys::fs::create_hard_link(ToLink, Path); if (EC) - error("cannot link " + ToLink + " to " + Path + ": " + EC.message()); + return createStringError(EC, "cannot link %s to %s", ToLink.data(), + Path.data()); } + return Error::success(); } static Error splitDWOToFile(const CopyConfig &Config, const Reader &Reader, @@ -588,10 +592,12 @@ Error executeObjcopyOnBinary(const CopyConfig &Config, "build ID is smaller than two bytes.")); } - if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkInput) { - linkToBuildIdDir(Config, Config.InputFilename, - Config.BuildIdLinkInput.getValue(), BuildIdBytes); - } + if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkInput) + if (Error E = + linkToBuildIdDir(Config, Config.InputFilename, + Config.BuildIdLinkInput.getValue(), BuildIdBytes)) + return E; + if (Error E = handleArgs(Config, *Obj, Reader, OutputElfType)) return E; std::unique_ptr Writer = @@ -600,10 +606,12 @@ Error executeObjcopyOnBinary(const CopyConfig &Config, return E; if (Error E = Writer->write()) return E; - if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkOutput) { - linkToBuildIdDir(Config, Config.OutputFilename, - Config.BuildIdLinkOutput.getValue(), BuildIdBytes); - } + if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkOutput) + if (Error E = + linkToBuildIdDir(Config, Config.OutputFilename, + Config.BuildIdLinkOutput.getValue(), BuildIdBytes)) + return E; + return Error::success(); } -- 2.50.1