<div dir="ltr">Hmm, I thought I had fixed these. Sorry about that. Taking a look now.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 9, 2017 at 1:12 PM Bill Seurer <<a href="mailto:seurer@linux.vnet.ibm.com">seurer@linux.vnet.ibm.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This doesn't work right on powerpc64 (big endian). See<br>
<a href="http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/11422" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/11422</a><br>
<br>
/home/buildbots/ppc64be-clang-test/clang-ppc64be/llvm/test/tools/llvm-rc/tag-user.test:18:15:<br>
error: expected string not found in input<br>
; CHECK-NEXT: 0000: 01000200 03000400 05006461 74617700 |..........dataw.|<br>
^<br>
<stdin>:11:2: note: scanning from here<br>
0000: 00010002 00030004 00056461 74617700 |..........dataw.|<br>
<br>
Yup, that's an endian issue.<br>
<br>
There are some additional tag-xxxx tests added in later revisions that<br>
also fail on on big endian.<br>
<br>
On 10/06/2017 04:52 PM, Zachary Turner via llvm-commits wrote:<br>
> Author: zturner<br>
> Date: Fri Oct 6 14:52:15 2017<br>
> New Revision: 315117<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=315117&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=315117&view=rev</a><br>
> Log:<br>
> [llvm-rc] Serialize user-defined resources to .res files.<br>
><br>
> This allows rc to serialize user-defined resources, as<br>
> documented at:<br>
><br>
> <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa381054.aspx" rel="noreferrer" target="_blank">msdn.microsoft.com/en-us/library/windows/desktop/aa381054.aspx</a><br>
><br>
> Escape sequences are yet unavailable, and are to be added in one of<br>
> child patches.<br>
><br>
> Patch by: Marek Sokolowski<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D38423" rel="noreferrer" target="_blank">https://reviews.llvm.org/D38423</a><br>
><br>
> Added:<br>
> llvm/trunk/test/tools/llvm-rc/Inputs/bitmap.bmp (with props)<br>
> llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc<br>
> llvm/trunk/test/tools/llvm-rc/tag-user.test<br>
> Modified:<br>
> llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp<br>
> llvm/trunk/tools/llvm-rc/ResourceFileWriter.h<br>
> llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h<br>
> llvm/trunk/tools/llvm-rc/ResourceVisitor.h<br>
><br>
> Added: llvm/trunk/test/tools/llvm-rc/Inputs/bitmap.bmp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/bitmap.bmp?rev=315117&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/bitmap.bmp?rev=315117&view=auto</a><br>
> ==============================================================================<br>
> Binary file - no diff available.<br>
><br>
> Propchange: llvm/trunk/test/tools/llvm-rc/Inputs/bitmap.bmp<br>
> ------------------------------------------------------------------------------<br>
> svn:mime-type = application/octet-stream<br>
><br>
> Added: llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc?rev=315117&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc?rev=315117&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc (added)<br>
> +++ llvm/trunk/test/tools/llvm-rc/Inputs/tag-user.rc Fri Oct 6 14:52:15 2017<br>
> @@ -0,0 +1,8 @@<br>
> +500 500 {<br>
> + 1, 2, 3, 4, 5, "data", L"wide data", 0xABCD, 0xABCDEF01L<br>
> +}<br>
> +<br>
> +NAME1 NAME2 {}<br>
> +<br>
> +600 600 "bitmap.bmp"<br>
> +<br>
><br>
> Added: llvm/trunk/test/tools/llvm-rc/tag-user.test<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-user.test?rev=315117&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-user.test?rev=315117&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/llvm-rc/tag-user.test (added)<br>
> +++ llvm/trunk/test/tools/llvm-rc/tag-user.test Fri Oct 6 14:52:15 2017<br>
> @@ -0,0 +1,53 @@<br>
> +; RUN: rm -rf %t<br>
> +; RUN: mkdir %t<br>
> +; RUN: cd %t<br>
> +; RUN: cp %p/Inputs/bitmap.bmp .<br>
> +; RUN: llvm-rc /FO %t/tag-user.res %p/Inputs/tag-user.rc<br>
> +; RUN: llvm-readobj %t/tag-user.res | FileCheck %s<br>
> +<br>
> +; CHECK: Resource type (int): 500<br>
> +; CHECK-NEXT: Resource name (int): 500<br>
> +; CHECK-NEXT: Data version: 0<br>
> +; CHECK-NEXT: Memory flags: 0x30<br>
> +; CHECK-NEXT: Language ID: 1033<br>
> +; CHECK-NEXT: Version (major): 0<br>
> +; CHECK-NEXT: Version (minor): 0<br>
> +; CHECK-NEXT: Characteristics: 0<br>
> +; CHECK-NEXT: Data size: 38<br>
> +; CHECK-NEXT: Data: (<br>
> +; CHECK-NEXT: 0000: 01000200 03000400 05006461 74617700 |..........dataw.|<br>
> +; CHECK-NEXT: 0010: 69006400 65002000 64006100 74006100 |i.d.e. .d.a.t.a.|<br>
> +; CHECK-NEXT: 0020: CDAB01EF CDAB |......|<br>
> +; CHECK-NEXT: )<br>
> +<br>
> +; CHECK-DAG: Resource type (string): NAME2<br>
> +; CHECK-NEXT: Resource name (string): NAME1<br>
> +; CHECK-NEXT: Data version: 0<br>
> +; CHECK-NEXT: Memory flags: 0x30<br>
> +; CHECK-NEXT: Language ID: 1033<br>
> +; CHECK-NEXT: Version (major): 0<br>
> +; CHECK-NEXT: Version (minor): 0<br>
> +; CHECK-NEXT: Characteristics: 0<br>
> +; CHECK-NEXT: Data size: 0<br>
> +; CHECK-NEXT: Data:: ()<br>
> +<br>
> +; CHECK-DAG: Resource type (int): 600<br>
> +; CHECK-NEXT: Resource name (int): 600<br>
> +; CHECK-NEXT: Data version: 0<br>
> +; CHECK-NEXT: Memory flags: 0x30<br>
> +; CHECK-NEXT: Language ID: 1033<br>
> +; CHECK-NEXT: Version (major): 0<br>
> +; CHECK-NEXT: Version (minor): 0<br>
> +; CHECK-NEXT: Characteristics: 0<br>
> +; CHECK-NEXT: Data size: 110<br>
> +; CHECK-NEXT: Data: (<br>
> +; CHECK-NEXT: 0000: 424D6E00 00000000 00003600 00002800 |BMn.......6...(.|<br>
> +; CHECK-NEXT: 0010: 00000200 00000700 00000100 18000000 |................|<br>
> +; CHECK-NEXT: 0020: 00003800 00000000 00000000 00000000 |..8.............|<br>
> +; CHECK-NEXT: 0030: 00000000 00005BB3 855BB385 0000FFFF |......[..[......|<br>
> +; CHECK-NEXT: 0040: FFFFFFFF 0000FFFF FFFFFFFF 0000FFFF |................|<br>
> +; CHECK-NEXT: 0050: FFFFFFFF 00005BB3 85FFFFFF 0000FFFF |......[.........|<br>
> +; CHECK-NEXT: 0060: FF0EC9FF 0000241C EDFFFFFF 0000 |......$.......|<br>
> +; CHECK-NEXT: )<br>
> +<br>
> +<br>
><br>
> Modified: llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp?rev=315117&r1=315116&r2=315117&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp?rev=315117&r1=315116&r2=315117&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-rc/ResourceFileWriter.cpp Fri Oct 6 14:52:15 2017<br>
> @@ -298,6 +298,10 @@ Error ResourceFileWriter::visitStringTab<br>
> return Error::success();<br>
> }<br>
><br>
> +Error ResourceFileWriter::visitUserDefinedResource(const RCResource *Res) {<br>
> + return writeResource(Res, &ResourceFileWriter::writeUserDefinedBody);<br>
> +}<br>
> +<br>
> Error ResourceFileWriter::visitVersionInfoResource(const RCResource *Res) {<br>
> return writeResource(Res, &ResourceFileWriter::writeVersionInfoBody);<br>
> }<br>
> @@ -1048,6 +1052,43 @@ Error ResourceFileWriter::dumpAllStringT<br>
> return Error::success();<br>
> }<br>
><br>
> +// --- UserDefinedResource helpers. --- //<br>
> +<br>
> +Error ResourceFileWriter::writeUserDefinedBody(const RCResource *Base) {<br>
> + auto *Res = cast<UserDefinedResource>(Base);<br>
> +<br>
> + if (Res->IsFileResource)<br>
> + return appendFile(Res->FileLoc);<br>
> +<br>
> + for (auto &Elem : Res->Contents) {<br>
> + if (Elem.isInt()) {<br>
> + RETURN_IF_ERROR(<br>
> + checkRCInt(Elem.getInt(), "Number in user-defined resource"));<br>
> + writeRCInt(Elem.getInt());<br>
> + continue;<br>
> + }<br>
> +<br>
> + SmallVector<UTF16, 128> ProcessedString;<br>
> + bool IsLongString;<br>
> + RETURN_IF_ERROR(processString(Elem.getString(),<br>
> + NullHandlingMethod::UserResource,<br>
> + IsLongString, ProcessedString));<br>
> +<br>
> + for (auto Ch : ProcessedString) {<br>
> + if (IsLongString) {<br>
> + writeObject(ulittle16_t(Ch));<br>
> + continue;<br>
> + }<br>
> +<br>
> + RETURN_IF_ERROR(checkNumberFits<uint8_t>(<br>
> + Ch, "Character in narrow string in user-defined resoutce"));<br>
> + writeObject(uint8_t(Ch));<br>
> + }<br>
> + }<br>
> +<br>
> + return Error::success();<br>
> +}<br>
> +<br>
> // --- VersionInfoResourceResource helpers. --- //<br>
><br>
> Error ResourceFileWriter::writeVersionInfoBlock(const VersionInfoBlock &Blk) {<br>
><br>
> Modified: llvm/trunk/tools/llvm-rc/ResourceFileWriter.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceFileWriter.h?rev=315117&r1=315116&r2=315117&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceFileWriter.h?rev=315117&r1=315116&r2=315117&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-rc/ResourceFileWriter.h (original)<br>
> +++ llvm/trunk/tools/llvm-rc/ResourceFileWriter.h Fri Oct 6 14:52:15 2017<br>
> @@ -38,6 +38,7 @@ public:<br>
> Error visitMenuResource(const RCResource *) override;<br>
> Error visitVersionInfoResource(const RCResource *) override;<br>
> Error visitStringTableResource(const RCResource *) override;<br>
> + Error visitUserDefinedResource(const RCResource *) override;<br>
><br>
> Error visitCaptionStmt(const CaptionStmt *) override;<br>
> Error visitCharacteristicsStmt(const CharacteristicsStmt *) override;<br>
> @@ -127,6 +128,9 @@ private:<br>
> Error insertStringIntoBundle(StringTableInfo::Bundle &Bundle,<br>
> uint16_t StringID, StringRef String);<br>
><br>
> + // User defined resource<br>
> + Error writeUserDefinedBody(const RCResource *);<br>
> +<br>
> // VersionInfoResource<br>
> Error writeVersionInfoBody(const RCResource *);<br>
> Error writeVersionInfoBlock(const VersionInfoBlock &);<br>
><br>
> Modified: llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h?rev=315117&r1=315116&r2=315117&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h?rev=315117&r1=315116&r2=315117&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h (original)<br>
> +++ llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h Fri Oct 6 14:52:15 2017<br>
> @@ -591,18 +591,29 @@ public:<br>
> // * a link to the file, e.g. NAME TYPE "filename",<br>
> // * or contains a list of integers and strings, e.g. NAME TYPE {1, "a", 2}.<br>
> class UserDefinedResource : public RCResource {<br>
> +public:<br>
> IntOrString Type;<br>
> StringRef FileLoc;<br>
> std::vector<IntOrString> Contents;<br>
> bool IsFileResource;<br>
><br>
> -public:<br>
> UserDefinedResource(IntOrString ResourceType, StringRef FileLocation)<br>
> : Type(ResourceType), FileLoc(FileLocation), IsFileResource(true) {}<br>
> UserDefinedResource(IntOrString ResourceType, std::vector<IntOrString> &&Data)<br>
> : Type(ResourceType), Contents(std::move(Data)), IsFileResource(false) {}<br>
><br>
> raw_ostream &log(raw_ostream &) const override;<br>
> + IntOrString getResourceType() const override { return Type; }<br>
> + Twine getResourceTypeName() const override { return Type; }<br>
> + uint16_t getMemoryFlags() const override { return MfPure | MfMoveable; }<br>
> +<br>
> + Error visit(Visitor *V) const override {<br>
> + return V->visitUserDefinedResource(this);<br>
> + }<br>
> + ResourceKind getKind() const override { return RkUser; }<br>
> + static bool classof(const RCResource *Res) {<br>
> + return Res->getKind() == RkUser;<br>
> + }<br>
> };<br>
><br>
> // -- VERSIONINFO resource and its helper classes --<br>
><br>
> Modified: llvm/trunk/tools/llvm-rc/ResourceVisitor.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceVisitor.h?rev=315117&r1=315116&r2=315117&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceVisitor.h?rev=315117&r1=315116&r2=315117&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-rc/ResourceVisitor.h (original)<br>
> +++ llvm/trunk/tools/llvm-rc/ResourceVisitor.h Fri Oct 6 14:52:15 2017<br>
> @@ -38,6 +38,7 @@ public:<br>
> virtual Error visitIconResource(const RCResource *) = 0;<br>
> virtual Error visitMenuResource(const RCResource *) = 0;<br>
> virtual Error visitStringTableResource(const RCResource *) = 0;<br>
> + virtual Error visitUserDefinedResource(const RCResource *) = 0;<br>
> virtual Error visitVersionInfoResource(const RCResource *) = 0;<br>
><br>
> virtual Error visitCaptionStmt(const CaptionStmt *) = 0;<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
><br>
<br>
<br>
--<br>
<br>
-Bill Seurer<br>
<br>
</blockquote></div>