Is there some reason we can’t define vendors, environments, arches, and oses for all supported use cases? That way “there is no os” would not ever be a thing. On Thu, Dec 6, 2018 at 3:37 PM Jason Molenda via lldb-dev < lldb-dev@lists.llvm.org> wrote:
> I think the confusing thing is when "unspecified" means "there is no OS" > or "there is no vendor" versus "vendor/OS is unspecified". > > Imagine debugging a firmware environment where we have a cpu arch, and we > may have a vendor, but we specifically do not have an OS. Say > armv7-apple-none (I make up "none", I don't think that's valid). If lldb > is looking for a binary and it finds one with armv7-apple-ios, it should > reject that binary, they are incompatible. > > As opposed to a triple of "armv7-*-*" saying "I know this is an armv7 > system target, but I don't know anything about the vendor or the OS" in > which case an armv7-apple-ios binary is compatible. > > My naive reading of "arm64-*-*" means vendor & OS are unspecified and > should match anything. > > My naive reading of "arm64" is that it is the same as "arm64-*-*". > > I don't know what a triple string looks like where we specify "none" for a > field. Is it armv7-apple-- ? I know Triple has Unknown enums, but > "Unknown" is ambiguous between "I don't know it yet" versus "It not any > Vendor/OS". > > Some of the confusion is the textual representation of the triples, some > of it is the llvm Triple class not having a way to express (afaik) "do not > match this field against anything" aka "none". > > > > > On Dec 6, 2018, at 3:19 PM, Adrian Prantl via lldb-dev < > lldb-dev@lists.llvm.org> wrote: > > > > I was puzzled by the behavior of ArchSpec::IsExactMatch() and > IsCompatibleMatch() yesterday, so I created a couple of unit tests to > document the current behavior. Most of the tests make perfect sense, but a > few edge cases really don't behave like I would have expected them to. > > > >> { > >> ArchSpec A("arm64-*-*"); > >> ArchSpec B("arm64-apple-ios"); > >> ASSERT_FALSE(A.IsExactMatch(B)); > >> // FIXME: This looks unintuitive and we should investigate whether > >> // this is the desired behavior. > >> ASSERT_FALSE(A.IsCompatibleMatch(B)); > >> } > >> { > >> ArchSpec A("x86_64-*-*"); > >> ArchSpec B("x86_64-apple-ios-simulator"); > >> ASSERT_FALSE(A.IsExactMatch(B)); > >> // FIXME: See above, though the extra environment complicates things. > >> ASSERT_FALSE(A.IsCompatibleMatch(B)); > >> } > >> { > >> ArchSpec A("x86_64"); > >> ArchSpec B("x86_64-apple-macosx10.14"); > >> // FIXME: The exact match also looks unintuitive. > >> ASSERT_TRUE(A.IsExactMatch(B)); > >> ASSERT_TRUE(A.IsCompatibleMatch(B)); > >> } > >> > > > > Particularly, I believe that: > > - ArchSpec("x86_64-*-*") and ArchSpec("x86_64") should behave the same. > > - ArchSpec("x86_64").IsExactMatch("x86_64-apple-macosx10.14") should be > false. > > - ArchSpec("x86_64-*-*").IsCompatibleMath("x86_64-apple-macosx") should > be true. > > > > Does anyone disagree with any of these statements? > > > > I fully understand that changing any of these behaviors will undoubtedly > break one or the other edge case, but I think it would be important to > build on a foundation that actually makes sense if we want to be able to > reason about the architecture matching logic at all. > > > > let me know what you think! > > -- adrian > > _______________________________________________ > > lldb-dev mailing list > > lldb-dev@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev