1249259Sdim//===- Error.cpp - 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 defines a new error_category for the llvm-readobj tool. 11249259Sdim// 12249259Sdim//===----------------------------------------------------------------------===// 13249259Sdim 14249259Sdim#include "Error.h" 15249259Sdim#include "llvm/Support/ErrorHandling.h" 16249259Sdim 17249259Sdimusing namespace llvm; 18249259Sdim 19249259Sdimnamespace { 20249259Sdimclass _readobj_error_category : public _do_message { 21249259Sdimpublic: 22249259Sdim virtual const char* name() const; 23249259Sdim virtual std::string message(int ev) const; 24249259Sdim virtual error_condition default_error_condition(int ev) const; 25249259Sdim}; 26249259Sdim} // namespace 27249259Sdim 28249259Sdimconst char *_readobj_error_category::name() const { 29249259Sdim return "llvm.readobj"; 30249259Sdim} 31249259Sdim 32249259Sdimstd::string _readobj_error_category::message(int ev) const { 33249259Sdim switch (ev) { 34249259Sdim case readobj_error::success: return "Success"; 35249259Sdim case readobj_error::file_not_found: 36249259Sdim return "No such file."; 37249259Sdim case readobj_error::unsupported_file_format: 38249259Sdim return "The file was not recognized as a valid object file."; 39249259Sdim case readobj_error::unrecognized_file_format: 40249259Sdim return "Unrecognized file type."; 41249259Sdim case readobj_error::unsupported_obj_file_format: 42249259Sdim return "Unsupported object file format."; 43249259Sdim case readobj_error::unknown_symbol: 44249259Sdim return "Unknown symbol."; 45249259Sdim default: 46249259Sdim llvm_unreachable("An enumerator of readobj_error does not have a message " 47249259Sdim "defined."); 48249259Sdim } 49249259Sdim} 50249259Sdim 51249259Sdimerror_condition _readobj_error_category::default_error_condition(int ev) const { 52249259Sdim if (ev == readobj_error::success) 53249259Sdim return errc::success; 54249259Sdim return errc::invalid_argument; 55249259Sdim} 56249259Sdim 57249259Sdimnamespace llvm { 58249259Sdimconst error_category &readobj_category() { 59249259Sdim static _readobj_error_category o; 60249259Sdim return o; 61249259Sdim} 62249259Sdim} // namespace llvm 63