1d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===- Error.h - system_error extensions for Object -------------*- C++ -*-===//
2d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
3d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//                     The LLVM Compiler Infrastructure
4d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
5d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// This file is distributed under the University of Illinois Open Source
6d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// License. See LICENSE.TXT for details.
7d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
8d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===----------------------------------------------------------------------===//
9d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
10d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// This declares a new error_category for the Object library.
11d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
12d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===----------------------------------------------------------------------===//
13d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
14d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#ifndef LLVM_OBJECT_ERROR_H
15d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#define LLVM_OBJECT_ERROR_H
16d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
17c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <system_error>
18d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
19d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencernamespace llvm {
20d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencernamespace object {
21d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
22c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesconst std::error_category &object_category();
23d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
24c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesenum class object_error {
256948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  // Error code 0 is absent. Use std::error_code() instead.
266948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  arch_not_found = 1,
27c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  invalid_file_type,
28c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  parse_failed,
2937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  unexpected_eof,
30cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  string_table_non_null_end,
31cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  invalid_section_index,
3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  bitcode_section_not_found,
33cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  elf_invalid_dynamic_table_size,
346948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  macho_small_load_command,
356948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  macho_load_segment_too_many_sections,
366948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  macho_load_segment_too_small,
37d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer};
38d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
39c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesinline std::error_code make_error_code(object_error e) {
40c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  return std::error_code(static_cast<int>(e), object_category());
41d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer}
42d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
43d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer} // end namespace object.
44d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
45c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines} // end namespace llvm.
46d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
47c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesnamespace std {
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestemplate <>
49c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesstruct is_error_code_enum<llvm::object::object_error> : std::true_type {};
50c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines}
51d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
52d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#endif
53