1326938Sdim//===- llvm-objcopy.h -------------------------------------------*- C++ -*-===// 2326938Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6326938Sdim// 7326938Sdim//===----------------------------------------------------------------------===// 8326938Sdim 9326938Sdim#ifndef LLVM_TOOLS_OBJCOPY_OBJCOPY_H 10326938Sdim#define LLVM_TOOLS_OBJCOPY_OBJCOPY_H 11326938Sdim 12326938Sdim#include "llvm/ADT/Twine.h" 13326938Sdim#include "llvm/Support/Compiler.h" 14326938Sdim#include "llvm/Support/Error.h" 15326938Sdim#include "llvm/Support/raw_ostream.h" 16326938Sdim#include <string> 17326938Sdim 18326938Sdimnamespace llvm { 19341825Sdimnamespace objcopy { 20326938Sdim 21326938SdimLLVM_ATTRIBUTE_NORETURN extern void error(Twine Message); 22353358SdimLLVM_ATTRIBUTE_NORETURN extern void error(Error E); 23341825SdimLLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File, Error E); 24341825SdimLLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File, 25341825Sdim std::error_code EC); 26326938Sdim 27326938Sdim// This is taken from llvm-readobj. 28326938Sdim// [see here](llvm/tools/llvm-readobj/llvm-readobj.h:38) 29326938Sdimtemplate <class T> T unwrapOrError(Expected<T> EO) { 30326938Sdim if (EO) 31326938Sdim return *EO; 32326938Sdim std::string Buf; 33326938Sdim raw_string_ostream OS(Buf); 34344779Sdim logAllUnhandledErrors(EO.takeError(), OS); 35326938Sdim OS.flush(); 36326938Sdim error(Buf); 37326938Sdim} 38326938Sdim 39341825Sdim} // end namespace objcopy 40326938Sdim} // end namespace llvm 41326938Sdim 42326938Sdim#endif // LLVM_TOOLS_OBJCOPY_OBJCOPY_H 43