diff options
| author | Zachary Turner <zturner@google.com> | 2017-10-06 21:30:55 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2017-10-06 21:30:55 +0000 |
| commit | da366693bf6060805686b282392e7e92b77e784c (patch) | |
| tree | b20ee17320e4d3d6dee24f42fd203fb4a61fcd65 /llvm/test/tools/llvm-rc | |
| parent | ebaf772204ef76d560b2975277ba33a9c970de1a (diff) | |
| download | bcm5719-llvm-da366693bf6060805686b282392e7e92b77e784c.tar.gz bcm5719-llvm-da366693bf6060805686b282392e7e92b77e784c.zip | |
[llvm-rc] Serialize STRINGTABLE statements to .res file.
This allows llvm-rc to serialize STRINGTABLE resources.
These are output in an unusual way: we locate them at the end of the
file, and strings are merged into bundles of max 16 strings, depending
on their IDs, language, and characteristics.
Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa381050.aspx
Patch by: Marek Sokolowski
Differential Revision: https://reviews.llvm.org/D38420
llvm-svn: 315112
Diffstat (limited to 'llvm/test/tools/llvm-rc')
| -rw-r--r-- | llvm/test/tools/llvm-rc/Inputs/tag-stringtable-basic.rc | 45 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-rc/Inputs/tag-stringtable-same-ids.rc | 5 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-rc/tag-stringtable.test | 170 |
3 files changed, 220 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-basic.rc b/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-basic.rc new file mode 100644 index 00000000000..9847dabb7ca --- /dev/null +++ b/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-basic.rc @@ -0,0 +1,45 @@ +STRINGTABLE +VERSION 32 +CHARACTERISTICS 0x32 { + 0 "a" +} + +STRINGTABLE { + 1 "b" + 16 "bb" +} + +STRINGTABLE +VERSION 100 +LANGUAGE 4, 7 { + 16 "hello" + 17 "world" +} + +STRINGTABLE +VERSION 50 +CHARACTERISTICS 0x32 { + 17 "cc" + 32 "ccc" + 2 "c" +} + +STRINGTABLE { + 3 "d" + 4 "" + 8 "" +} + +STRINGTABLE +VERSION 101 +LANGUAGE 4, 7 { + -1 & 65535 "minus one" +} + +STRINGTABLE +CHARACTERISTICS 10 +LANGUAGE 4, 7 { + 23 "something else" + 65529 "large number" +} + diff --git a/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-same-ids.rc b/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-same-ids.rc new file mode 100644 index 00000000000..c256a32f265 --- /dev/null +++ b/llvm/test/tools/llvm-rc/Inputs/tag-stringtable-same-ids.rc @@ -0,0 +1,5 @@ +STRINGTABLE { + 1 "Hello" + 2 "World" + 1 "Repeat" +}
\ No newline at end of file diff --git a/llvm/test/tools/llvm-rc/tag-stringtable.test b/llvm/test/tools/llvm-rc/tag-stringtable.test new file mode 100644 index 00000000000..43b5f5c9658 --- /dev/null +++ b/llvm/test/tools/llvm-rc/tag-stringtable.test @@ -0,0 +1,170 @@ +; RUN: llvm-rc /FO %t %p/Inputs/tag-stringtable-basic.rc +; RUN: llvm-readobj %t | FileCheck %s + +; CHECK: Resource type (int): 6 +; CHECK-NEXT: Resource name (int): 1 +; CHECK-NEXT: Data version: 0 +; CHECK-NEXT: Memory flags: 0x1030 +; CHECK-NEXT: Language ID: 1033 +; CHECK-NEXT: Version (major): 0 +; CHECK-NEXT: Version (minor): 32 +; CHECK-NEXT: Characteristics: 50 +; CHECK-NEXT: Data size: 40 +; CHECK-NEXT: Data: ( +; CHECK-NEXT: 0000: 01006100 01006200 01006300 01006400 |..a...b...c...d.| +; CHECK-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +; CHECK-NEXT: 0020: 00000000 00000000 |........| +; CHECK-NEXT: ) + +; CHECK-DAG: Resource type (int): 6 +; CHECK-NEXT: Resource name (int): 2 +; CHECK-NEXT: Data version: 0 +; CHECK-NEXT: Memory flags: 0x1030 +; CHECK-NEXT: Language ID: 1033 +; CHECK-NEXT: Version (major): 0 +; CHECK-NEXT: Version (minor): 0 +; CHECK-NEXT: Characteristics: 0 +; CHECK-NEXT: Data size: 40 +; CHECK-NEXT: Data: ( +; CHECK-NEXT: 0000: 02006200 62000200 63006300 00000000 |..b.b...c.c.....| +; CHECK-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +; CHECK-NEXT: 0020: 00000000 00000000 |........| +; CHECK-NEXT: ) + +; CHECK-DAG: Resource type (int): 6 +; CHECK-NEXT: Resource name (int): 2 +; CHECK-NEXT: Data version: 0 +; CHECK-NEXT: Memory flags: 0x1030 +; CHECK-NEXT: Language ID: 7172 +; CHECK-NEXT: Version (major): 0 +; CHECK-NEXT: Version (minor): 100 +; CHECK-NEXT: Characteristics: 0 +; CHECK-NEXT: Data size: 80 +; CHECK-NEXT: Data: ( +; CHECK-NEXT: 0000: 05006800 65006C00 6C006F00 05007700 |..h.e.l.l.o...w.| +; CHECK-NEXT: 0010: 6F007200 6C006400 00000000 00000000 |o.r.l.d.........| +; CHECK-NEXT: 0020: 00000E00 73006F00 6D006500 74006800 |....s.o.m.e.t.h.| +; CHECK-NEXT: 0030: 69006E00 67002000 65006C00 73006500 |i.n.g. .e.l.s.e.| +; CHECK-NEXT: 0040: 00000000 00000000 00000000 00000000 |................| +; CHECK-NEXT: ) + +; CHECK-DAG: Resource type (int): 6 +; CHECK-NEXT: Resource name (int): 3 +; CHECK-NEXT: Data version: 0 +; CHECK-NEXT: Memory flags: 0x1030 +; CHECK-NEXT: Language ID: 1033 +; CHECK-NEXT: Version (major): 0 +; CHECK-NEXT: Version (minor): 50 +; CHECK-NEXT: Characteristics: 50 +; CHECK-NEXT: Data size: 38 +; CHECK-NEXT: Data: ( +; CHECK-NEXT: 0000: 03006300 63006300 00000000 00000000 |..c.c.c.........| +; CHECK-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +; CHECK-NEXT: 0020: 00000000 0000 |......| +; CHECK-NEXT: ) + +; CHECK-DAG: Resource type (int): 6 +; CHECK-NEXT: Resource name (int): 4096 +; CHECK-NEXT: Data version: 0 +; CHECK-NEXT: Memory flags: 0x1030 +; CHECK-NEXT: Language ID: 7172 +; CHECK-NEXT: Version (major): 0 +; CHECK-NEXT: Version (minor): 101 +; CHECK-NEXT: Characteristics: 0 +; CHECK-NEXT: Data size: 74 +; CHECK-NEXT: Data: ( +; CHECK-NEXT: 0000: 00000000 00000000 00000000 00000000 |................| +; CHECK-NEXT: 0010: 00000C00 6C006100 72006700 65002000 |....l.a.r.g.e. .| +; CHECK-NEXT: 0020: 6E007500 6D006200 65007200 00000000 |n.u.m.b.e.r.....| +; CHECK-NEXT: 0030: 00000000 00000900 6D006900 6E007500 |........m.i.n.u.| +; CHECK-NEXT: 0040: 73002000 6F006E00 6500 |s. .o.n.e.| +; CHECK-NEXT: ) + + +; RUN: llvm-rc /N /FO %t0 %p/Inputs/tag-stringtable-basic.rc +; RUN: llvm-readobj %t0 | FileCheck %s --check-prefix=NULL + +; NULL: Resource type (int): 6 +; NULL-NEXT: Resource name (int): 1 +; NULL-NEXT: Data version: 0 +; NULL-NEXT: Memory flags: 0x1030 +; NULL-NEXT: Language ID: 1033 +; NULL-NEXT: Version (major): 0 +; NULL-NEXT: Version (minor): 32 +; NULL-NEXT: Characteristics: 50 +; NULL-NEXT: Data size: 52 +; NULL-NEXT: Data: ( +; NULL-NEXT: 0000: 02006100 00000200 62000000 02006300 |..a.....b.....c.| +; NULL-NEXT: 0010: 00000200 64000000 01000000 00000000 |....d...........| +; NULL-NEXT: 0020: 00000100 00000000 00000000 00000000 |................| +; NULL-NEXT: 0030: 00000000 |....| +; NULL-NEXT: ) + +; NULL-DAG: Resource type (int): 6 +; NULL-NEXT: Resource name (int): 2 +; NULL-NEXT: Data version: 0 +; NULL-NEXT: Memory flags: 0x1030 +; NULL-NEXT: Language ID: 1033 +; NULL-NEXT: Version (major): 0 +; NULL-NEXT: Version (minor): 0 +; NULL-NEXT: Characteristics: 0 +; NULL-NEXT: Data size: 44 +; NULL-NEXT: Data: ( +; NULL-NEXT: 0000: 03006200 62000000 03006300 63000000 |..b.b.....c.c...| +; NULL-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +; NULL-NEXT: 0020: 00000000 00000000 00000000 |............| +; NULL-NEXT: ) + +; NULL-DAG: Resource type (int): 6 +; NULL-NEXT: Resource name (int): 2 +; NULL-NEXT: Data version: 0 +; NULL-NEXT: Memory flags: 0x1030 +; NULL-NEXT: Language ID: 7172 +; NULL-NEXT: Version (major): 0 +; NULL-NEXT: Version (minor): 100 +; NULL-NEXT: Characteristics: 0 +; NULL-NEXT: Data size: 86 +; NULL-NEXT: Data: ( +; NULL-NEXT: 0000: 06006800 65006C00 6C006F00 00000600 |..h.e.l.l.o.....| +; NULL-NEXT: 0010: 77006F00 72006C00 64000000 00000000 |w.o.r.l.d.......| +; NULL-NEXT: 0020: 00000000 00000F00 73006F00 6D006500 |........s.o.m.e.| +; NULL-NEXT: 0030: 74006800 69006E00 67002000 65006C00 |t.h.i.n.g. .e.l.| +; NULL-NEXT: 0040: 73006500 00000000 00000000 00000000 |s.e.............| +; NULL-NEXT: 0050: 00000000 0000 |......| +; NULL-NEXT: ) + +; NULL-DAG: Resource type (int): 6 +; NULL-NEXT: Resource name (int): 3 +; NULL-NEXT: Data version: 0 +; NULL-NEXT: Memory flags: 0x1030 +; NULL-NEXT: Language ID: 1033 +; NULL-NEXT: Version (major): 0 +; NULL-NEXT: Version (minor): 50 +; NULL-NEXT: Characteristics: 50 +; NULL-NEXT: Data size: 40 +; NULL-NEXT: Data: ( +; NULL-NEXT: 0000: 04006300 63006300 00000000 00000000 |..c.c.c.........| +; NULL-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +; NULL-NEXT: 0020: 00000000 00000000 |........| +; NULL-NEXT: ) + +; NULL-DAG: Resource type (int): 6 +; NULL-NEXT: Resource name (int): 4096 +; NULL-NEXT: Data version: 0 +; NULL-NEXT: Memory flags: 0x1030 +; NULL-NEXT: Language ID: 7172 +; NULL-NEXT: Version (major): 0 +; NULL-NEXT: Version (minor): 101 +; NULL-NEXT: Characteristics: 0 +; NULL-NEXT: Data size: 78 +; NULL-NEXT: Data: ( +; NULL-NEXT: 0000: 00000000 00000000 00000000 00000000 |................| +; NULL-NEXT: 0010: 00000D00 6C006100 72006700 65002000 |....l.a.r.g.e. .| +; NULL-NEXT: 0020: 6E007500 6D006200 65007200 00000000 |n.u.m.b.e.r.....| +; NULL-NEXT: 0030: 00000000 00000000 0A006D00 69006E00 |..........m.i.n.| +; NULL-NEXT: 0040: 75007300 20006F00 6E006500 0000 |u.s. .o.n.e...| +; NULL-NEXT: ) + + +; RUN: not llvm-rc /FO %t %p/Inputs/tag-stringtable-same-ids.rc 2>&1 | FileCheck %s --check-prefix SAMEIDS +; SAMEIDS: llvm-rc: Multiple STRINGTABLE strings located under ID 1 |

