[LLVMdev] Questions before moving the new debug info hierarchy into place (original) (raw)
Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Feb 20 10:56:33 PST 2015
- Previous message: [LLVMdev] Questions before moving the new debug info hierarchy into place
- Next message: [LLVMdev] Questions before moving the new debug info hierarchy into place
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Okay, thanks Adrian and Eric. I'll move forward with the Flag* constants.
On 2015-Feb-20, at 08:55, Eric Christopher <echristo at gmail.com> wrote:
I agree with Adrian here, and SGTM. Thanks for all of your very hard work Duncan! -eric On Thu Feb 19 2015 at 7:49:39 PM Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote: I'm getting close to executing the transition to the new debug info hierarchy. For reference, I've attached two WIP patches (which would be squashed before commit) and the WIP upgrade script I'm using. - transition-code.patch: Change the
DIDescriptor
hierarchy to lightweight wrappers around the subclasses ofDebugNode
(instead of rather heavier wrappers aroundMDTuple
), and updateDIBuilder
to generate the right things. - transition-testcases.patch: Upgrade of testcases, entirely generated from the upgrade script (so far). - upgrade-specialized-nodes.sh: Script to upgrade LLVM assembly. (Feel free to have a look, but I haven't updated LangRef, I don't quite havemake check
passing, and I haven't even started onmake_ _check-clang
(I imagine that'll all be done by hand).) There are two outstanding issues I'd like some feedback on. Pretty-printing the flags ========================= I've noticed theflags:
field is harder to read in the new assembly: !MDDerivedType(flags: 16384, ...) than the pretty-printed comments in the old: !{!"...\0016384", ...} ; ... [public] [rvalue reference] I don't want to regress here. InDIDescriptor
, the flags are described in an enum bitfield: FlagAccessibility = 1 << 0 | 1 << 1, FlagPrivate = 1, FlagProtected = 2, FlagPublic = 3, FlagFwdDecl = 1 << 2, FlagAppleBlock = 1 << 3, FlagBlockByrefStruct = 1 << 4, FlagVirtual = 1 << 5, FlagArtificial = 1 << 6, FlagExplicit = 1 << 7, FlagPrototyped = 1 << 8, FlagObjcClassComplete = 1 << 9, FlagObjectPointer = 1 << 10, FlagVector = 1 << 11, FlagStaticMember = 1 << 12, FlagLValueReference = 1 << 13, FlagRValueReference = 1 << 14 I think the right short-term solution is to use these names directly in assembly, giving us: !MDDerivedType(flags: FlagPublic | FlagRValueReference, ...) This is easy to implement and easy to CHECK against. Sound good? (Eventually, I'd like to use theDWAT
symbols that each of these corresponds to, butFlagStaticMember
doesn't seem to line up with any suchDWAT
so that will take some refactoring (and I don't think it makes sense for that to block moving the hierarchy into place).) Merging the two types of files ============================== In the old format, we have two types of files -- an untagged file node, and a DIFile/DWTAGfiletype/0x29 which references the untagged node. !0 = !{!"path/to/file", !"/path/to/dir"} !1 = !{!"0x29", !0} In the actual metadata graph, most file references use !0, but in DIBuilder !1 is always passed in and the !0 is extracted from it. I've been planning to merge these into: !1 = !MDFile(filename: "path/to/file", directory: "/path/to/dir") Anyone see a problem with that? Why? If not, I'd like to roll that change into the same patch in order to reduce testcase churn. (I've discovered that it won't complicate the code patch at all.)
- Previous message: [LLVMdev] Questions before moving the new debug info hierarchy into place
- Next message: [LLVMdev] Questions before moving the new debug info hierarchy into place
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]