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