17
17
namespace llvm {
18
18
namespace orc {
19
19
20
- static std::string objDesc (MemoryBuffer &Obj, const Triple &TT,
20
+ static std::string objDesc (const MemoryBufferRef &Obj, const Triple &TT,
21
21
bool ObjIsSlice) {
22
22
std::string Desc;
23
23
if (ObjIsSlice)
@@ -27,11 +27,10 @@ static std::string objDesc(MemoryBuffer &Obj, const Triple &TT,
27
27
}
28
28
29
29
template <typename HeaderType>
30
- static Expected<std::unique_ptr<MemoryBuffer>>
31
- checkMachORelocatableObject (std::unique_ptr<MemoryBuffer> Obj,
32
- bool SwapEndianness, const Triple &TT,
33
- bool ObjIsSlice) {
34
- StringRef Data = Obj->getBuffer ();
30
+ static Error checkMachORelocatableObject (MemoryBufferRef Obj,
31
+ bool SwapEndianness, const Triple &TT,
32
+ bool ObjIsSlice) {
33
+ StringRef Data = Obj.getBuffer ();
35
34
36
35
HeaderType Hdr;
37
36
memcpy (&Hdr, Data.data (), sizeof (HeaderType));
@@ -40,28 +39,27 @@ checkMachORelocatableObject(std::unique_ptr<MemoryBuffer> Obj,
40
39
swapStruct (Hdr);
41
40
42
41
if (Hdr.filetype != MachO::MH_OBJECT)
43
- return make_error<StringError>(objDesc (* Obj, TT, ObjIsSlice) +
42
+ return make_error<StringError>(objDesc (Obj, TT, ObjIsSlice) +
44
43
" is not a MachO relocatable object" ,
45
44
inconvertibleErrorCode ());
46
45
47
46
auto ObjArch = object::MachOObjectFile::getArch (Hdr.cputype , Hdr.cpusubtype );
48
47
if (ObjArch != TT.getArch ())
49
48
return make_error<StringError>(
50
- objDesc (* Obj, TT, ObjIsSlice) + Triple::getArchTypeName (ObjArch) +
49
+ objDesc (Obj, TT, ObjIsSlice) + Triple::getArchTypeName (ObjArch) +
51
50
" , cannot be loaded into " + TT.str () + " process" ,
52
51
inconvertibleErrorCode ());
53
52
54
- return std::move (Obj );
53
+ return Error::success ( );
55
54
}
56
55
57
- Expected<std::unique_ptr<MemoryBuffer>>
58
- checkMachORelocatableObject (std::unique_ptr<MemoryBuffer> Obj, const Triple &TT,
59
- bool ObjIsSlice) {
60
- StringRef Data = Obj->getBuffer ();
56
+ Error checkMachORelocatableObject (MemoryBufferRef Obj, const Triple &TT,
57
+ bool ObjIsSlice) {
58
+ StringRef Data = Obj.getBuffer ();
61
59
62
60
if (Data.size () < 4 )
63
61
return make_error<StringError>(
64
- objDesc (* Obj, TT, ObjIsSlice) +
62
+ objDesc (Obj, TT, ObjIsSlice) +
65
63
" is not a valid MachO relocatable object file (truncated header)" ,
66
64
inconvertibleErrorCode ());
67
65
@@ -79,12 +77,21 @@ checkMachORelocatableObject(std::unique_ptr<MemoryBuffer> Obj, const Triple &TT,
79
77
std::move (Obj), Magic == MachO::MH_CIGAM_64, TT, ObjIsSlice);
80
78
default :
81
79
return make_error<StringError>(
82
- objDesc (* Obj, TT, ObjIsSlice) +
80
+ objDesc (Obj, TT, ObjIsSlice) +
83
81
" is not a valid MachO relocatable object (bad magic value)" ,
84
82
inconvertibleErrorCode ());
85
83
}
86
84
}
87
85
86
+ Expected<std::unique_ptr<MemoryBuffer>>
87
+ checkMachORelocatableObject (std::unique_ptr<MemoryBuffer> Obj, const Triple &TT,
88
+ bool ObjIsSlice) {
89
+ if (auto Err =
90
+ checkMachORelocatableObject (Obj->getMemBufferRef (), TT, ObjIsSlice))
91
+ return std::move (Err);
92
+ return std::move (Obj);
93
+ }
94
+
88
95
Expected<std::unique_ptr<MemoryBuffer>>
89
96
loadMachORelocatableObject (StringRef Path, const Triple &TT,
90
97
std::optional<StringRef> IdentifierOverride) {
0 commit comments