Skip to content

Commit fe80465

Browse files
committed
[Offload] Use new error code handling mechanism
This removes the old ErrorCode-less error method and requires every user to provide a concrete error code. All calls have been updated.
1 parent 8066fb2 commit fe80465

File tree

15 files changed

+332
-148
lines changed

15 files changed

+332
-148
lines changed

offload/include/Shared/OffloadErrcodes.inc

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,36 @@
1616

1717
OFFLOAD_ERRC(SUCCESS, "Success", 0)
1818
OFFLOAD_ERRC(UNKNOWN, "Unknown or internal error", 1)
19+
OFFLOAD_ERRC(HOST_IO, "I/O error on host", 2)
20+
OFFLOAD_ERRC(INVALID_BINARY, "A provided binary image is malformed", 3)
1921
OFFLOAD_ERRC(INVALID_NULL_POINTER,
20-
"A pointer argument is null when it should not be", 2)
21-
OFFLOAD_ERRC(INVALID_ARGUMENT, "An argument is invalid", 3)
22-
OFFLOAD_ERRC(OUT_OF_RESOURCES, "Out of resources", 4)
23-
OFFLOAD_ERRC(UNSUPPORTED,
24-
"generic error code for unsupported features and enums", 5)
22+
"A pointer argument is null when it should not be", 4)
23+
OFFLOAD_ERRC(INVALID_ARGUMENT, "An argument is invalid", 5)
24+
OFFLOAD_ERRC(NOT_FOUND, "Requested object was not found in the binary image", 6)
25+
OFFLOAD_ERRC(OUT_OF_RESOURCES, "Out of resources", 7)
2526
OFFLOAD_ERRC(
2627
INVALID_SIZE,
2728
"invalid size or dimensions (e.g., must not be zero, or is out of bounds)",
28-
6)
29-
OFFLOAD_ERRC(INVALID_ENUMERATION, "enumerator argument is not valid", 7)
30-
OFFLOAD_ERRC(INVALID_KERNEL_NAME,
31-
"Named kernel not found in the program binary", 8)
32-
OFFLOAD_ERRC(INVALID_VALUE, "Invalid Value", 9)
33-
OFFLOAD_ERRC(INVALID_PLATFORM, "Invalid platform", 10)
34-
OFFLOAD_ERRC(INVALID_DEVICE, "Invalid device", 11)
35-
OFFLOAD_ERRC(INVALID_QUEUE, "Invalid queue", 12)
36-
OFFLOAD_ERRC(INVALID_EVENT, "Invalid event", 13)
37-
OFFLOAD_ERRC(INVALID_NULL_HANDLE, "handle argument is not valid", 14)
29+
8)
30+
OFFLOAD_ERRC(INVALID_ENUMERATION, "enumerator argument is not valid", 9)
31+
OFFLOAD_ERRC(HOST_TOOL_NOT_FOUND,
32+
"A required binary (linker, etc.) was not found on the host", 10)
33+
OFFLOAD_ERRC(INVALID_VALUE, "Invalid Value", 11)
34+
OFFLOAD_ERRC(UNIMPLEMENTED,
35+
"Generic error code for features currently unimplemented by the "
36+
"device/backend",
37+
12)
38+
OFFLOAD_ERRC(
39+
UNSUPPORTED,
40+
"Generic error code for features unsupported by the device/backend", 13)
41+
OFFLOAD_ERRC(ASSEMBLE_FAILURE,
42+
"Assembler failure while processing binary image", 14)
43+
OFFLOAD_ERRC(LINK_FAILURE, "Linker failure while processing binary image", 15)
44+
OFFLOAD_ERRC(BACKEND_FAILURE,
45+
"The plugin backend is in an invalid or unsupported state", 16)
46+
OFFLOAD_ERRC(INVALID_NULL_HANDLE,
47+
"A handle argument is null when it should not be", 17)
48+
OFFLOAD_ERRC(INVALID_PLATFORM, "Invalid platform", 18)
49+
OFFLOAD_ERRC(INVALID_DEVICE, "Invalid device", 19)
50+
OFFLOAD_ERRC(INVALID_QUEUE, "Invalid queue", 20)
51+
OFFLOAD_ERRC(INVALID_EVENT, "Invalid event", 21)

offload/liboffload/API/Common.td

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,21 +91,28 @@ def ErrorCode : Enum {
9191

9292
// Universal errors
9393
Etor<"UNKNOWN", "Unknown or internal error">,
94+
Etor<"HOST_IO", "I/O error on host">,
95+
Etor<"INVALID_BINARY", "A provided binary image is malformed">,
9496
Etor<"INVALID_NULL_POINTER", "A pointer argument is null when it should not be">,
9597
Etor<"INVALID_ARGUMENT", "An argument is invalid">,
98+
Etor<"NOT_FOUND", "Requested object was not found in the binary image">,
9699
Etor<"OUT_OF_RESOURCES", "Out of resources">,
97-
Etor<"UNSUPPORTED", "generic error code for unsupported features and enums">,
98100
Etor<"INVALID_SIZE", "invalid size or dimensions (e.g., must not be zero, or is out of bounds)">,
99101
Etor<"INVALID_ENUMERATION", "enumerator argument is not valid">,
100-
Etor<"INVALID_KERNEL_NAME", "Named kernel not found in the program binary">,
102+
Etor<"HOST_TOOL_NOT_FOUND", "A required binary (linker, etc.) was not found on the host">,
103+
Etor<"INVALID_VALUE", "Invalid Value">,
104+
Etor<"UNIMPLEMENTED", "Generic error code for features currently unimplemented by the device/backend">,
105+
Etor<"UNSUPPORTED", "Generic error code for features unsupported by the device/backend">,
106+
Etor<"ASSEMBLE_FAILURE", "Assembler failure while processing binary image">,
107+
Etor<"LINK_FAILURE", "Linker failure while processing binary image">,
108+
Etor<"BACKEND_FAILURE", "The plugin backend is in an invalid or unsupported state">,
101109

102110
// Handle related errors - only makes sense for liboffload
103-
Etor<"INVALID_VALUE", "Invalid Value">,
111+
Etor<"INVALID_NULL_HANDLE", "A handle argument is null when it should not be">,
104112
Etor<"INVALID_PLATFORM", "Invalid platform">,
105113
Etor<"INVALID_DEVICE", "Invalid device">,
106114
Etor<"INVALID_QUEUE", "Invalid queue">,
107115
Etor<"INVALID_EVENT", "Invalid event">,
108-
Etor<"INVALID_NULL_HANDLE", "handle argument is not valid">
109116
];
110117
}
111118

offload/liboffload/include/generated/OffloadAPI.h

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,47 @@ typedef enum ol_errc_t {
2424
OL_ERRC_SUCCESS = 0,
2525
/// Unknown or internal error
2626
OL_ERRC_UNKNOWN = 1,
27+
/// I/O error on host
28+
OL_ERRC_HOST_IO = 2,
29+
/// A provided binary image is malformed
30+
OL_ERRC_INVALID_BINARY = 3,
2731
/// A pointer argument is null when it should not be
28-
OL_ERRC_INVALID_NULL_POINTER = 2,
32+
OL_ERRC_INVALID_NULL_POINTER = 4,
2933
/// An argument is invalid
30-
OL_ERRC_INVALID_ARGUMENT = 3,
34+
OL_ERRC_INVALID_ARGUMENT = 5,
35+
/// Requested object was not found in the binary image
36+
OL_ERRC_NOT_FOUND = 6,
3137
/// Out of resources
32-
OL_ERRC_OUT_OF_RESOURCES = 4,
33-
/// generic error code for unsupported features and enums
34-
OL_ERRC_UNSUPPORTED = 5,
38+
OL_ERRC_OUT_OF_RESOURCES = 7,
3539
/// invalid size or dimensions (e.g., must not be zero, or is out of bounds)
36-
OL_ERRC_INVALID_SIZE = 6,
40+
OL_ERRC_INVALID_SIZE = 8,
3741
/// enumerator argument is not valid
38-
OL_ERRC_INVALID_ENUMERATION = 7,
39-
/// Named kernel not found in the program binary
40-
OL_ERRC_INVALID_KERNEL_NAME = 8,
42+
OL_ERRC_INVALID_ENUMERATION = 9,
43+
/// A required binary (linker, etc.) was not found on the host
44+
OL_ERRC_HOST_TOOL_NOT_FOUND = 10,
4145
/// Invalid Value
42-
OL_ERRC_INVALID_VALUE = 9,
46+
OL_ERRC_INVALID_VALUE = 11,
47+
/// Generic error code for features currently unimplemented by the
48+
/// device/backend
49+
OL_ERRC_UNIMPLEMENTED = 12,
50+
/// Generic error code for features unsupported by the device/backend
51+
OL_ERRC_UNSUPPORTED = 13,
52+
/// Assembler failure while processing binary image
53+
OL_ERRC_ASSEMBLE_FAILURE = 14,
54+
/// Linker failure while processing binary image
55+
OL_ERRC_LINK_FAILURE = 15,
56+
/// The plugin backend is in an invalid or unsupported state
57+
OL_ERRC_BACKEND_FAILURE = 16,
58+
/// A handle argument is null when it should not be
59+
OL_ERRC_INVALID_NULL_HANDLE = 17,
4360
/// Invalid platform
44-
OL_ERRC_INVALID_PLATFORM = 10,
61+
OL_ERRC_INVALID_PLATFORM = 18,
4562
/// Invalid device
46-
OL_ERRC_INVALID_DEVICE = 11,
63+
OL_ERRC_INVALID_DEVICE = 19,
4764
/// Invalid queue
48-
OL_ERRC_INVALID_QUEUE = 12,
65+
OL_ERRC_INVALID_QUEUE = 20,
4966
/// Invalid event
50-
OL_ERRC_INVALID_EVENT = 13,
51-
/// handle argument is not valid
52-
OL_ERRC_INVALID_NULL_HANDLE = 14,
67+
OL_ERRC_INVALID_EVENT = 21,
5368
/// @cond
5469
OL_ERRC_FORCE_UINT32 = 0x7fffffff
5570
/// @endcond

offload/liboffload/include/generated/OffloadPrint.hpp

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,54 @@ inline llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
5252
case OL_ERRC_UNKNOWN:
5353
os << "OL_ERRC_UNKNOWN";
5454
break;
55+
case OL_ERRC_HOST_IO:
56+
os << "OL_ERRC_HOST_IO";
57+
break;
58+
case OL_ERRC_INVALID_BINARY:
59+
os << "OL_ERRC_INVALID_BINARY";
60+
break;
5561
case OL_ERRC_INVALID_NULL_POINTER:
5662
os << "OL_ERRC_INVALID_NULL_POINTER";
5763
break;
5864
case OL_ERRC_INVALID_ARGUMENT:
5965
os << "OL_ERRC_INVALID_ARGUMENT";
6066
break;
67+
case OL_ERRC_NOT_FOUND:
68+
os << "OL_ERRC_NOT_FOUND";
69+
break;
6170
case OL_ERRC_OUT_OF_RESOURCES:
6271
os << "OL_ERRC_OUT_OF_RESOURCES";
6372
break;
64-
case OL_ERRC_UNSUPPORTED:
65-
os << "OL_ERRC_UNSUPPORTED";
66-
break;
6773
case OL_ERRC_INVALID_SIZE:
6874
os << "OL_ERRC_INVALID_SIZE";
6975
break;
7076
case OL_ERRC_INVALID_ENUMERATION:
7177
os << "OL_ERRC_INVALID_ENUMERATION";
7278
break;
73-
case OL_ERRC_INVALID_KERNEL_NAME:
74-
os << "OL_ERRC_INVALID_KERNEL_NAME";
79+
case OL_ERRC_HOST_TOOL_NOT_FOUND:
80+
os << "OL_ERRC_HOST_TOOL_NOT_FOUND";
7581
break;
7682
case OL_ERRC_INVALID_VALUE:
7783
os << "OL_ERRC_INVALID_VALUE";
7884
break;
85+
case OL_ERRC_UNIMPLEMENTED:
86+
os << "OL_ERRC_UNIMPLEMENTED";
87+
break;
88+
case OL_ERRC_UNSUPPORTED:
89+
os << "OL_ERRC_UNSUPPORTED";
90+
break;
91+
case OL_ERRC_ASSEMBLE_FAILURE:
92+
os << "OL_ERRC_ASSEMBLE_FAILURE";
93+
break;
94+
case OL_ERRC_LINK_FAILURE:
95+
os << "OL_ERRC_LINK_FAILURE";
96+
break;
97+
case OL_ERRC_BACKEND_FAILURE:
98+
os << "OL_ERRC_BACKEND_FAILURE";
99+
break;
100+
case OL_ERRC_INVALID_NULL_HANDLE:
101+
os << "OL_ERRC_INVALID_NULL_HANDLE";
102+
break;
79103
case OL_ERRC_INVALID_PLATFORM:
80104
os << "OL_ERRC_INVALID_PLATFORM";
81105
break;
@@ -88,9 +112,6 @@ inline llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
88112
case OL_ERRC_INVALID_EVENT:
89113
os << "OL_ERRC_INVALID_EVENT";
90114
break;
91-
case OL_ERRC_INVALID_NULL_HANDLE:
92-
os << "OL_ERRC_INVALID_NULL_HANDLE";
93-
break;
94115
default:
95116
os << "unknown enumerator";
96117
break;

offload/liboffload/src/OffloadImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ ol_impl_result_t olGetKernel_impl(ol_program_handle_t Program,
482482
auto &Device = Program->Image->getDevice();
483483
auto KernelImpl = Device.constructKernel(KernelName);
484484
if (!KernelImpl)
485-
return OL_ERRC_INVALID_KERNEL_NAME;
485+
return ol_impl_result_t::fromError(KernelImpl.takeError());
486486

487487
auto Err = KernelImpl->init(Device, *Program->Image);
488488
if (Err)

offload/plugins-nextgen/amdgpu/dynamic_hsa/hsa.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ typedef enum {
3030
HSA_STATUS_INFO_BREAK = 0x1,
3131
HSA_STATUS_ERROR = 0x1000,
3232
HSA_STATUS_ERROR_INVALID_CODE_OBJECT = 0x1010,
33+
HSA_STATUS_ERROR_INVALID_SYMBOL_NAME = 0x1013,
3334
HSA_STATUS_ERROR_NOT_INITIALIZED = 0x100B,
3435
HSA_STATUS_ERROR_EXCEPTION = 0x1016,
3536
} hsa_status_t;

0 commit comments

Comments
 (0)