Skip to content

Commit

Permalink
[WebAssembly] Use bitfield types in wasm YAML representation
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D41202

llvm-svn: 320642
  • Loading branch information
sbc100 committed Dec 13, 2017
1 parent 580bc3c commit 0fc5599
Show file tree
Hide file tree
Showing 17 changed files with 90 additions and 53 deletions.
21 changes: 18 additions & 3 deletions llvm/include/llvm/ObjectYAML/WasmYAML.h
Expand Up @@ -34,13 +34,16 @@ LLVM_YAML_STRONG_TYPEDEF(int32_t, SignatureForm)
LLVM_YAML_STRONG_TYPEDEF(uint32_t, ExportKind)
LLVM_YAML_STRONG_TYPEDEF(uint32_t, Opcode)
LLVM_YAML_STRONG_TYPEDEF(uint32_t, RelocType)
LLVM_YAML_STRONG_TYPEDEF(uint32_t, SymbolFlags);
LLVM_YAML_STRONG_TYPEDEF(uint32_t, SegmentFlags);
LLVM_YAML_STRONG_TYPEDEF(uint32_t, LimitFlags);

struct FileHeader {
yaml::Hex32 Version;
};

struct Limits {
yaml::Hex32 Flags;
LimitFlags Flags;
yaml::Hex32 Initial;
yaml::Hex32 Maximum;
};
Expand Down Expand Up @@ -113,7 +116,7 @@ struct SegmentInfo {
uint32_t Index;
StringRef Name;
uint32_t Alignment;
uint32_t Flags;
SegmentFlags Flags;
};

struct Signature {
Expand All @@ -125,7 +128,7 @@ struct Signature {

struct SymbolInfo {
StringRef Name;
uint32_t Flags;
SymbolFlags Flags;
};

struct Section {
Expand Down Expand Up @@ -334,6 +337,18 @@ template <> struct MappingTraits<WasmYAML::Global> {
static void mapping(IO &IO, WasmYAML::Global &Global);
};

template <> struct ScalarBitSetTraits<WasmYAML::LimitFlags> {
static void bitset(IO &IO, WasmYAML::LimitFlags &Value);
};

template <> struct ScalarBitSetTraits<WasmYAML::SymbolFlags> {
static void bitset(IO &IO, WasmYAML::SymbolFlags &Value);
};

template <> struct ScalarBitSetTraits<WasmYAML::SegmentFlags> {
static void bitset(IO &IO, WasmYAML::SegmentFlags &Value);
};

template <> struct ScalarEnumerationTraits<WasmYAML::SectionType> {
static void enumeration(IO &IO, WasmYAML::SectionType &Type);
};
Expand Down
22 changes: 22 additions & 0 deletions llvm/lib/ObjectYAML/WasmYAML.cpp
Expand Up @@ -365,6 +365,28 @@ void MappingTraits<WasmYAML::SymbolInfo>::mapping(IO &IO,
IO.mapRequired("Flags", Info.Flags);
}

void ScalarBitSetTraits<WasmYAML::LimitFlags>::bitset(
IO &IO, WasmYAML::LimitFlags &Value) {
#define BCase(X) IO.bitSetCase(Value, #X, wasm::WASM_LIMITS_FLAG_##X)
BCase(HAS_MAX);
#undef BCase
}

void ScalarBitSetTraits<WasmYAML::SegmentFlags>::bitset(
IO &IO, WasmYAML::SegmentFlags &Value) {
}

void ScalarBitSetTraits<WasmYAML::SymbolFlags>::bitset(
IO &IO, WasmYAML::SymbolFlags &Value) {
#define BCaseMask(M, X) IO.maskedBitSetCase(Value, #X, wasm::WASM_SYMBOL_##X, wasm::WASM_SYMBOL_##M)
//BCaseMask(BINDING_MASK, BINDING_GLOBAL);
BCaseMask(BINDING_MASK, BINDING_WEAK);
BCaseMask(BINDING_MASK, BINDING_LOCAL);
//BCaseMask(VISIBILITY_MASK, VISIBILITY_DEFAULT);
BCaseMask(VISIBILITY_MASK, VISIBILITY_HIDDEN);
#undef BCaseMask
}

void ScalarEnumerationTraits<WasmYAML::ValueType>::enumeration(
IO &IO, WasmYAML::ValueType &Type) {
#define ECase(X) IO.enumCase(Type, #X, wasm::WASM_TYPE_##X);
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/MC/WebAssembly/array-fill.ll
Expand Up @@ -17,10 +17,10 @@ target triple = "wasm32-unknown-unknown-wasm"
; CHECK-NEXT: DataSize: 2
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: gBd
; CHECK-NEXT: Flags: 4
; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; CHECK-NEXT: SegmentInfo:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .data
; CHECK-NEXT: Alignment: 1
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: ...
8 changes: 4 additions & 4 deletions llvm/test/MC/WebAssembly/bss.ll
Expand Up @@ -76,17 +76,17 @@
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .bss.g0
; CHECK-NEXT: Alignment: 4
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: .bss.g1
; CHECK-NEXT: Alignment: 4
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: .bss.foo
; CHECK-NEXT: Alignment: 1
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: .bss.bar
; CHECK-NEXT: Alignment: 1
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: ...
6 changes: 3 additions & 3 deletions llvm/test/MC/WebAssembly/explicit-sections.ll
Expand Up @@ -71,13 +71,13 @@
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .data.global0
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: .sec1
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: .sec2
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: ...
6 changes: 3 additions & 3 deletions llvm/test/MC/WebAssembly/init-fini-array.ll
Expand Up @@ -92,14 +92,14 @@ declare void @func2()
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .data.global1
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: .init_array
; CHECK-NEXT: Alignment: 4
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: .fini_array
; CHECK-NEXT: Alignment: 4
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: ...

12 changes: 6 additions & 6 deletions llvm/test/MC/WebAssembly/unnamed-data.ll
Expand Up @@ -81,24 +81,24 @@
; CHECK-NEXT: DataSize: 28
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: .L.str1
; CHECK-NEXT: Flags: 2
; CHECK-NEXT: Flags: [ BINDING_LOCAL ]
; CHECK-NEXT: - Name: .L.str2
; CHECK-NEXT: Flags: 2
; CHECK-NEXT: Flags: [ BINDING_LOCAL ]
; CHECK-NEXT: SegmentInfo:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .rodata..L.str1
; CHECK-NEXT: Alignment: 1
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: .rodata..L.str2
; CHECK-NEXT: Alignment: 1
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: .data.a
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: .data.b
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK_NEXT: ...
2 changes: 1 addition & 1 deletion llvm/test/MC/WebAssembly/visibility.ll
Expand Up @@ -19,5 +19,5 @@ entry:
; CHECK-NEXT: DataSize: 0
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: hiddenVis
; CHECK-NEXT: Flags: 4
; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; CHECK-NEXT: ...
12 changes: 6 additions & 6 deletions llvm/test/MC/WebAssembly/weak-alias.ll
Expand Up @@ -109,22 +109,22 @@ entry:
; CHECK-NEXT: DataSize: 12
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: call_alias
; CHECK-NEXT: Flags: 4
; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; CHECK-NEXT: - Name: foo
; CHECK-NEXT: Flags: 4
; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
; CHECK-NEXT: - Name: foo_alias
; CHECK-NEXT: Flags: 5
; CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN ]
; CHECK-NEXT: - Name: bar_alias
; CHECK-NEXT: Flags: 5
; CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN ]
; CHECK-NEXT: SegmentInfo:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: .data.bar
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: .data.bar_alias_address
; CHECK-NEXT: Alignment: 8
; CHECK-NEXT: Flags: 0
; CHECK-NEXT: Flags: [ ]
; CHECK-NEXT: ...

; CHECK-SYMS: SYMBOL TABLE:
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/MC/WebAssembly/weak.ll
Expand Up @@ -33,7 +33,7 @@ entry:
; CHECK-NEXT: DataSize: 0
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: weak_external_data
; CHECK-NEXT: Flags: 1
; CHECK-NEXT: Flags: [ BINDING_WEAK ]
; CHECK-NEXT: - Name: weak_function
; CHECK-NEXT: Flags: 5
; CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN ]
; CHECK-NEXT: ...
2 changes: 1 addition & 1 deletion llvm/test/ObjectYAML/wasm/elem_section.yaml
Expand Up @@ -7,7 +7,7 @@ Sections:
Tables:
- ElemType: ANYFUNC
Limits:
Flags: 0x00000001
Flags: [ HAS_MAX ]
Initial: 0x00000010
Maximum: 0x00000011
- Type: ELEM
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/ObjectYAML/wasm/import_section.yaml
Expand Up @@ -23,7 +23,7 @@ Sections:
Field: imported_memory
Kind: MEMORY
Memory:
Flags: 0x00000001
Flags: [ HAS_MAX ]
Initial: 0x00000010
Maximum: 0x00000011
- Module: foo
Expand All @@ -32,7 +32,7 @@ Sections:
Table:
ElemType: ANYFUNC
Limits:
Flags: 0x00000001
Flags: [ HAS_MAX ]
Initial: 0x00000020
Maximum: 0x00000022
...
Expand All @@ -55,7 +55,7 @@ Sections:
# CHECK: Field: imported_memory
# CHECK: Kind: MEMORY
# CHECK: Memory:
# CHECK: Flags: 0x00000001
# CHECK: Flags: [ HAS_MAX ]
# CHECK: Initial: 0x00000010
# CHECK: Maximum: 0x00000011
# CHECK: - Module: foo
Expand All @@ -64,7 +64,7 @@ Sections:
# CHECK: Table:
# CHECK: ElemType: ANYFUNC
# CHECK: Limits:
# CHECK: Flags: 0x00000001
# CHECK: Flags: [ HAS_MAX ]
# CHECK: Initial: 0x00000020
# CHECK: Maximum: 0x00000022
# CHECK: ...
12 changes: 6 additions & 6 deletions llvm/test/ObjectYAML/wasm/linking_section.yaml
Expand Up @@ -31,30 +31,30 @@ Sections:
DataSize: 999
SymbolInfo:
- Name: bar
Flags: 1
Flags: [ BINDING_WEAK ]
SegmentInfo:
- Index: 0
Alignment: 4
Flags: 0
Flags: [ ]
Name: mydata
- Index: 1
Alignment: 2
Flags: 1
Flags: [ ]
Name: moredata
...
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: linking
# CHECK-NEXT: DataSize: 999
# CHECK-NEXT: SymbolInfo:
# CHECK-NEXT: - Name: bar
# CHECK-NEXT: Flags: 1
# CHECK-NEXT: Flags: [ BINDING_WEAK ]
# CHECK-NEXT: SegmentInfo:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Name: mydata
# CHECK-NEXT: Alignment: 4
# CHECK-NEXT: Flags: 0
# CHECK-NEXT: Flags: [ ]
# CHECK-NEXT: - Index: 1
# CHECK-NEXT: Name: moredata
# CHECK-NEXT: Alignment: 2
# CHECK-NEXT: Flags: 1
# CHECK-NEXT: Flags: [ ]
# CHECK-NEXT: ...
4 changes: 2 additions & 2 deletions llvm/test/ObjectYAML/wasm/memory_section.yaml
Expand Up @@ -5,7 +5,7 @@ FileHeader:
Sections:
- Type: MEMORY
Memories:
- Flags: 0x00000001
- Flags: [ HAS_MAX ]
Initial: 0x00000002
Maximum: 0x000000FF
- Initial: 0x00000003
Expand All @@ -16,7 +16,7 @@ Sections:
# CHECK: Sections:
# CHECK: - Type: MEMORY
# CHECK: Memories:
# CHECK: - Flags: 0x00000001
# CHECK: - Flags: [ HAS_MAX ]
# CHECK: Initial: 0x00000002
# CHECK: Maximum: 0x000000FF
# CHECK: - Initial: 0x00000003
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/ObjectYAML/wasm/table_section.yaml
Expand Up @@ -7,7 +7,7 @@ Sections:
Tables:
- ElemType: ANYFUNC
Limits:
Flags: 0x00000001
Flags: [ HAS_MAX ]
Initial: 0x00000010
Maximum: 0x00000011
...
Expand All @@ -19,7 +19,7 @@ Sections:
# CHECK: Tables:
# CHECK: - ElemType: ANYFUNC
# CHECK: Limits:
# CHECK: Flags: 0x00000001
# CHECK: Flags: [ HAS_MAX ]
# CHECK: Initial: 0x00000010
# CHECK: Maximum: 0x00000011
# CHECK: ...
8 changes: 4 additions & 4 deletions llvm/test/ObjectYAML/wasm/weak_symbols.yaml
Expand Up @@ -29,9 +29,9 @@ Sections:
DataSize: 10
SymbolInfo:
- Name: function_export
Flags: 1
Flags: [ BINDING_WEAK ]
- Name: global_export
Flags: 1
Flags: [ BINDING_WEAK ]
...
# CHECK: --- !WASM
# CHECK: FileHeader:
Expand All @@ -50,6 +50,6 @@ Sections:
# CHECK: DataSize: 10
# CHECK: SymbolInfo:
# CHECK: - Name: function_export
# CHECK: Flags: 1
# CHECK: Flags: [ BINDING_WEAK ]
# CHECK: - Name: global_export
# CHECK: Flags: 1
# CHECK: Flags: [ BINDING_WEAK ]
8 changes: 4 additions & 4 deletions llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml
Expand Up @@ -55,13 +55,13 @@ Sections:
DataSize: 0
SymbolInfo:
- Name: weak_global_func
Flags: 1
Flags: [ BINDING_WEAK ]
- Name: weak_global_data
Flags: 1
Flags: [ BINDING_WEAK ]
- Name: weak_import_func
Flags: 1
Flags: [ BINDING_WEAK ]
- Name: weak_import_data
Flags: 1
Flags: [ BINDING_WEAK ]

# CHECK: 00000400 W weak_global_data
# CHECK: 00000004 W weak_global_func
Expand Down

0 comments on commit 0fc5599

Please sign in to comment.