1e4446923SMichael J. Spencer //===- Error.cpp - system_error extensions for Object -----------*- C++ -*-===// 2e4446923SMichael J. Spencer // 3e4446923SMichael J. Spencer // The LLVM Compiler Infrastructure 4e4446923SMichael J. Spencer // 5e4446923SMichael J. Spencer // This file is distributed under the University of Illinois Open Source 6e4446923SMichael J. Spencer // License. See LICENSE.TXT for details. 7e4446923SMichael J. Spencer // 8e4446923SMichael J. Spencer //===----------------------------------------------------------------------===// 9e4446923SMichael J. Spencer // 10e4446923SMichael J. Spencer // This defines a new error_category for the Object library. 11e4446923SMichael J. Spencer // 12e4446923SMichael J. Spencer //===----------------------------------------------------------------------===// 13e4446923SMichael J. Spencer 14e4446923SMichael J. Spencer #include "llvm/Object/Error.h" 15e4446923SMichael J. Spencer #include "llvm/Support/ErrorHandling.h" 16e4446923SMichael J. Spencer 17e4446923SMichael J. Spencer using namespace llvm; 18e4446923SMichael J. Spencer using namespace object; 19e4446923SMichael J. Spencer 20e4446923SMichael J. Spencer namespace { 21e3bfdc4eSJustin Bogner class _object_error_category : public error_category { 22e4446923SMichael J. Spencer public: 23*f5d07fa5SRafael Espindola const char* name() const LLVM_NOEXCEPT override; 24e3bfdc4eSJustin Bogner std::string message(int ev) const override; 25*f5d07fa5SRafael Espindola error_condition default_error_condition(int ev) const LLVM_NOEXCEPT override; 26e4446923SMichael J. Spencer }; 27e4446923SMichael J. Spencer } 28e4446923SMichael J. Spencer 29e4446923SMichael J. Spencer const char *_object_error_category::name() const { 30e4446923SMichael J. Spencer return "llvm.object"; 31e4446923SMichael J. Spencer } 32e4446923SMichael J. Spencer 33e00fec8fSRafael Espindola std::string _object_error_category::message(int EV) const { 34e00fec8fSRafael Espindola object_error E = static_cast<object_error>(EV); 35e107ade3SRafael Espindola switch (E) { 36e4446923SMichael J. Spencer case object_error::success: return "Success"; 37e6388e62SAlexey Samsonov case object_error::arch_not_found: 38e6388e62SAlexey Samsonov return "No object file for requested architecture"; 39e4446923SMichael J. Spencer case object_error::invalid_file_type: 40e4446923SMichael J. Spencer return "The file was not recognized as a valid object file"; 41e4446923SMichael J. Spencer case object_error::parse_failed: 42e4446923SMichael J. Spencer return "Invalid data was encountered while parsing the file"; 431d6167fdSMichael J. Spencer case object_error::unexpected_eof: 441d6167fdSMichael J. Spencer return "The end of the file was unexpectedly encountered"; 45e107ade3SRafael Espindola } 46e4446923SMichael J. Spencer llvm_unreachable("An enumerator of object_error does not have a message " 47e4446923SMichael J. Spencer "defined."); 48e4446923SMichael J. Spencer } 49e4446923SMichael J. Spencer 50e00fec8fSRafael Espindola error_condition _object_error_category::default_error_condition(int EV) const { 51e00fec8fSRafael Espindola if (static_cast<object_error>(EV) == object_error::success) 52a3f2e3f0SRafael Espindola return error_condition(); 53e4446923SMichael J. Spencer return errc::invalid_argument; 54e4446923SMichael J. Spencer } 55e4446923SMichael J. Spencer 56e4446923SMichael J. Spencer const error_category &object::object_category() { 57e4446923SMichael J. Spencer static _object_error_category o; 58e4446923SMichael J. Spencer return o; 59e4446923SMichael J. Spencer } 60