@@ -49,19 +49,33 @@ extern "C" void *LLVMRustGetSymbols(
4949 std::unique_ptr<object::SymbolicFile> Obj;
5050
5151 const file_magic Type = identify_magic (Buf->getBuffer ());
52- if (Type != file_magic::bitcode ) {
53- return ErrorCallback ( " not bitcode " ) ;
52+ if (! object::SymbolicFile::isSymbolicFile (Type, &Context) ) {
53+ return 0 ;
5454 }
55- auto ObjOrErr = object::SymbolicFile::createSymbolicFile (
55+
56+ if (Type == file_magic::bitcode) {
57+ auto ObjOrErr = object::SymbolicFile::createSymbolicFile (
5658 Buf->getMemBufferRef (), file_magic::bitcode, &Context);
57- if (!ObjOrErr) {
58- Error E = ObjOrErr.takeError ();
59- SmallString<0 > ErrorBuf;
60- raw_svector_ostream Error (ErrorBuf);
61- Error << E << ' \0 ' ;
62- return ErrorCallback (Error.str ().data ());
59+ if (!ObjOrErr) {
60+ Error E = ObjOrErr.takeError ();
61+ SmallString<0 > ErrorBuf;
62+ raw_svector_ostream Error (ErrorBuf);
63+ Error << E << ' \0 ' ;
64+ return ErrorCallback (Error.str ().data ());
65+ }
66+ Obj = std::move (*ObjOrErr);
67+ } else {
68+ auto ObjOrErr = object::SymbolicFile::createSymbolicFile (Buf->getMemBufferRef ());
69+ if (!ObjOrErr) {
70+ Error E = ObjOrErr.takeError ();
71+ SmallString<0 > ErrorBuf;
72+ raw_svector_ostream Error (ErrorBuf);
73+ Error << E << ' \0 ' ;
74+ return ErrorCallback (Error.str ().data ());
75+ }
76+ Obj = std::move (*ObjOrErr);
6377 }
64- Obj = std::move (*ObjOrErr);
78+
6579
6680 for (const object::BasicSymbolRef &S : Obj->symbols ()) {
6781 if (!isArchiveSymbol (S))
0 commit comments