1249259Sdim//===- Error.h - system_error extensions for llvm-readobj -------*- C++ -*-===// 2249259Sdim// 3249259Sdim// The LLVM Compiler Infrastructure 4249259Sdim// 5249259Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//===----------------------------------------------------------------------===// 9249259Sdim// 10249259Sdim// This declares a new error_category for the llvm-readobj tool. 11249259Sdim// 12249259Sdim//===----------------------------------------------------------------------===// 13249259Sdim 14249259Sdim#ifndef LLVM_READOBJ_ERROR_H 15249259Sdim#define LLVM_READOBJ_ERROR_H 16249259Sdim 17249259Sdim#include "llvm/Support/system_error.h" 18249259Sdim 19249259Sdimnamespace llvm { 20249259Sdim 21249259Sdimconst error_category &readobj_category(); 22249259Sdim 23249259Sdimstruct readobj_error { 24249259Sdim enum _ { 25249259Sdim success = 0, 26249259Sdim file_not_found, 27249259Sdim unsupported_file_format, 28249259Sdim unrecognized_file_format, 29249259Sdim unsupported_obj_file_format, 30249259Sdim unknown_symbol 31249259Sdim }; 32249259Sdim _ v_; 33249259Sdim 34249259Sdim readobj_error(_ v) : v_(v) {} 35249259Sdim explicit readobj_error(int v) : v_(_(v)) {} 36249259Sdim operator int() const {return v_;} 37249259Sdim}; 38249259Sdim 39249259Sdiminline error_code make_error_code(readobj_error e) { 40249259Sdim return error_code(static_cast<int>(e), readobj_category()); 41249259Sdim} 42249259Sdim 43249259Sdimtemplate <> struct is_error_code_enum<readobj_error> : true_type { }; 44249259Sdimtemplate <> struct is_error_code_enum<readobj_error::_> : true_type { }; 45249259Sdim 46249259Sdim} // namespace llvm 47249259Sdim 48249259Sdim#endif 49