[PATCH] D64208: [WebAssembly] Reorder Symbol fields to make it smaller
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 4 18:28:19 PDT 2019
MaskRay updated this revision to Diff 208103.
MaskRay added a comment.
Add a size assert
Repository:
rLLD LLVM Linker
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64208/new/
https://reviews.llvm.org/D64208
Files:
wasm/Symbols.h
Index: wasm/Symbols.h
===================================================================
--- wasm/Symbols.h
+++ wasm/Symbols.h
@@ -41,7 +41,7 @@
// The base class for real symbol classes.
class Symbol {
public:
- enum Kind {
+ enum Kind : uint8_t {
DefinedFunctionKind,
DefinedDataKind,
DefinedGlobalKind,
@@ -107,6 +107,33 @@
WasmSymbolType getWasmType() const;
bool isExported() const;
+ const WasmSignature* getSignature() const;
+
+ bool isInGOT() const { return GOTIndex != INVALID_INDEX; }
+
+ uint32_t getGOTIndex() const {
+ assert(GOTIndex != INVALID_INDEX);
+ return GOTIndex;
+ }
+
+ void setGOTIndex(uint32_t Index);
+ bool hasGOTIndex() const { return GOTIndex != INVALID_INDEX; }
+
+protected:
+ Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F)
+ : Name(Name), File(F), Flags(Flags), SymbolKind(K),
+ Referenced(!Config->GcSections), IsUsedInRegularObj(false),
+ ForceExport(false), CanInline(false), Traced(false) {}
+
+ StringRef Name;
+ InputFile *File;
+ uint32_t Flags;
+ uint32_t OutputSymbolIndex = INVALID_INDEX;
+ uint32_t GOTIndex = INVALID_INDEX;
+ Kind SymbolKind;
+ unsigned Referenced : 1;
+
+public:
// True if the symbol was used for linking and thus need to be added to the
// output file's symbol table. This is true for all symbols except for
// unreferenced DSO symbols, lazy (archive) symbols, and bitcode symbols that
@@ -124,32 +151,6 @@
// True if this symbol is specified by --trace-symbol option.
unsigned Traced : 1;
-
- const WasmSignature* getSignature() const;
-
- bool isInGOT() const { return GOTIndex != INVALID_INDEX; }
-
- uint32_t getGOTIndex() const {
- assert(GOTIndex != INVALID_INDEX);
- return GOTIndex;
- }
-
- void setGOTIndex(uint32_t Index);
- bool hasGOTIndex() const { return GOTIndex != INVALID_INDEX; }
-
-protected:
- Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F)
- : IsUsedInRegularObj(false), ForceExport(false), CanInline(false),
- Traced(false), Name(Name), SymbolKind(K), Flags(Flags), File(F),
- Referenced(!Config->GcSections) {}
-
- StringRef Name;
- Kind SymbolKind;
- uint32_t Flags;
- InputFile *File;
- uint32_t OutputSymbolIndex = INVALID_INDEX;
- uint32_t GOTIndex = INVALID_INDEX;
- bool Referenced;
};
class FunctionSymbol : public Symbol {
@@ -474,6 +475,11 @@
alignas(SectionSymbol) char I[sizeof(SectionSymbol)];
};
+// It is important to keep the size of SymbolUnion small for performance and
+// memory usage reasons. 96 bytes is a soft limit based on the size of
+// UndefinedFunction on a 64-bit system.
+static_assert(sizeof(SymbolUnion) <= 96, "SymbolUnion too large");
+
void printTraceSymbol(Symbol *Sym);
void printTraceSymbolUndefined(StringRef Name, const InputFile* File);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64208.208103.patch
Type: text/x-patch
Size: 2833 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190705/a0dd750a/attachment.bin>
More information about the llvm-commits
mailing list