int object_list_sections(void) { LLVMMemoryBufferRef MB; LLVMObjectFileRef O; LLVMSectionIteratorRef sect; char *msg = NULL; if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) { fprintf(stderr, "Error reading file: %s\n", msg); exit(1); } O = LLVMCreateObjectFile(MB); if (!O) { fprintf(stderr, "Error reading object\n"); exit(1); } sect = LLVMGetSections(O); while (!LLVMIsSectionIteratorAtEnd(O, sect)) { printf("'%s': @0x%08" PRIx64 " +%" PRIu64 "\n", LLVMGetSectionName(sect), LLVMGetSectionAddress(sect), LLVMGetSectionSize(sect)); LLVMMoveToNextSection(sect); } LLVMDisposeSectionIterator(sect); LLVMDisposeObjectFile(O); return 0; }
int object_list_symbols(void) { LLVMMemoryBufferRef MB; LLVMObjectFileRef O; LLVMSectionIteratorRef sect; LLVMSymbolIteratorRef sym; char *msg = NULL; if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) { fprintf(stderr, "Error reading file: %s\n", msg); exit(1); } O = LLVMCreateObjectFile(MB); if (!O) { fprintf(stderr, "Error reading object\n"); exit(1); } sect = LLVMGetSections(O); sym = LLVMGetSymbols(O); while (!LLVMIsSymbolIteratorAtEnd(O, sym)) { LLVMMoveToContainingSection(sect, sym); printf("%s @0x%08" PRIx64 "/0x%08" PRIx64 " +%" PRIu64 " (%s)\n", LLVMGetSymbolName(sym), LLVMGetSymbolAddress(sym), LLVMGetSymbolFileOffset(sym), LLVMGetSymbolSize(sym), LLVMGetSectionName(sect)); LLVMMoveToNextSymbol(sym); } LLVMDisposeSymbolIterator(sym); LLVMDisposeObjectFile(O); return 0; }
static LLVMModuleRef load_module(bool Lazy, bool New) { LLVMMemoryBufferRef MB; LLVMModuleRef M; char *msg = NULL; if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) { fprintf(stderr, "Error reading file: %s\n", msg); exit(1); } LLVMBool Ret; if (New) { LLVMContextRef C = LLVMGetGlobalContext(); LLVMContextSetDiagnosticHandler(C, diagnosticHandler, NULL); if (Lazy) Ret = LLVMGetBitcodeModule2(MB, &M); else Ret = LLVMParseBitcode2(MB, &M); } else { if (Lazy) Ret = LLVMGetBitcodeModule(MB, &M, &msg); else Ret = LLVMParseBitcode(MB, &M, &msg); } if (Ret) { fprintf(stderr, "Error parsing bitcode: %s\n", msg); LLVMDisposeMemoryBuffer(MB); exit(1); } if (!Lazy) LLVMDisposeMemoryBuffer(MB); return M; }