[llvm] r315117 - [llvm-rc] Serialize user-defined resources to .res files.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 9 13:15:37 PDT 2017


Hmm, I thought I had fixed these.  Sorry about that.  Taking a look now.

On Mon, Oct 9, 2017 at 1:12 PM Bill Seurer <seurer at linux.vnet.ibm.com>
wrote:

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


More information about the llvm-commits mailing list