brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · fa73fc4 Raw
50 lines · c
1//===- ExportTrie.h ---------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLD_MACHO_EXPORT_TRIE_H10#define LLD_MACHO_EXPORT_TRIE_H11 12#include "llvm/ADT/ArrayRef.h"13#include "llvm/ADT/STLExtras.h"14 15#include <vector>16 17namespace lld::macho {18 19struct TrieNode;20class Symbol;21 22class TrieBuilder {23public:24  ~TrieBuilder();25  void setImageBase(uint64_t addr) { imageBase = addr; }26  void addSymbol(const Symbol &sym) { exported.push_back(&sym); }27  // Returns the size in bytes of the serialized trie.28  size_t build();29  void writeTo(uint8_t *buf) const;30 31private:32  TrieNode *makeNode();33  void sortAndBuild(llvm::MutableArrayRef<const Symbol *> vec, TrieNode *node,34                    size_t lastPos, size_t pos);35 36  uint64_t imageBase = 0;37  std::vector<const Symbol *> exported;38  std::vector<TrieNode *> nodes;39};40 41using TrieEntryCallback =42    llvm::function_ref<void(const llvm::Twine & /*name*/, uint64_t /*flags*/)>;43 44void parseTrie(const std::string &fileName, const uint8_t *buf, size_t size,45               const TrieEntryCallback &);46 47} // namespace lld::macho48 49#endif50