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