void EdataPass::perform(std::unique_ptr<MutableFile> &file) { dedupExports(_ctx); assignOrdinals(_ctx); std::vector<TableEntry> entries; if (!getExportedAtoms(_ctx, file.get(), entries)) return; if (entries.empty()) return; int ordinalBase, maxOrdinal; std::tie(ordinalBase, maxOrdinal) = getOrdinalBase(entries); std::vector<TableEntry> namedEntries; for (TableEntry &e : entries) if (!e.noname) namedEntries.push_back(e); EdataAtom *table = createExportDirectoryTable(namedEntries, ordinalBase, maxOrdinal); file->addAtom(*table); COFFStringAtom *dllName = new (_alloc) COFFStringAtom(_file, _stringOrdinal++, ".edata", llvm::sys::path::filename(_ctx.outputPath())); file->addAtom(*dllName); addDir32NBReloc(table, dllName, _ctx.getMachineType(), offsetof(export_directory_table_entry, NameRVA)); EdataAtom *addressTable = createAddressTable(entries, ordinalBase, maxOrdinal); file->addAtom(*addressTable); addDir32NBReloc( table, addressTable, _ctx.getMachineType(), offsetof(export_directory_table_entry, ExportAddressTableRVA)); EdataAtom *namePointerTable = createNamePointerTable(_ctx, namedEntries, file.get()); file->addAtom(*namePointerTable); addDir32NBReloc(table, namePointerTable, _ctx.getMachineType(), offsetof(export_directory_table_entry, NamePointerRVA)); EdataAtom *ordinalTable = createOrdinalTable(namedEntries, ordinalBase); file->addAtom(*ordinalTable); addDir32NBReloc(table, ordinalTable, _ctx.getMachineType(), offsetof(export_directory_table_entry, OrdinalTableRVA)); }
/** * \brief Initializes the temperature sensors with a given resolution */ void tempSenosrsInit(const uint8_t resolution){ sensors.begin(); if(resolution >= 9 && resolution <=12){ sensors.setResolution(resolution); Serial.println(F("Setting resolution to ")); Serial.print(resolution); Serial.println(F(" bit")); } else{ //default is 10-bit Serial.println(F("Setting default resolution of temperature sensors")); sensors.setResolution(DEFAULT_RESOLUTION); } Serial.println(F("Create address table for OneWire sensors...")); createAddressTable(); Serial.print(F("Temperature Sensors initialized @ pin ")); Serial.println(ONE_WIRE_BUS_PIN); }