[LLVMdev] DebugFactory

Talin viridia at gmail.com
Tue Sep 22 16:49:43 PDT 2009


On Tue, Sep 22, 2009 at 9:21 AM, Devang Patel <devang.patel at gmail.com>wrote:

> On Tue, Sep 22, 2009 at 9:21 AM, Devang Patel <devang.patel at gmail.com>
> wrote:
> > On Tue, Sep 22, 2009 at 12:14 AM, Talin <viridia at gmail.com> wrote:
> >> So, one feature of the late, lamented DebugInfoBuilder that I am missing
> >> quite badly, and which is not available in the current DIFactory, is the
> >> ability to specify structure offsets abstractly. The DebugFactory
> >> requires that you pass in structure offset information as ints, whereas
> >> DebugInfoBuilder had "offsetOf" and "alignOf" methods, similar to the
> >> "sizeOf" trick, that would create the constants for you in a way that
> >> didn't require your front end to know the sizes of things. So far I've
> >> been able to avoid having any references to target machines in my
> >> frontend, but now that I am trying to flesh out my debug info more fully
> >> I'm finding it hard to use DIFactory as-is.
> >>
> >> What I'd like to see is a set of alternative factory methods in
> >> DIFactory, where you pass in an LLVM type, and possibly a GEP index,
> >> plus all of the parameters that it can't figure out from looking at the
> >> type. So you can eliminate the offset, size, and alignment parameters
> >> since those can be figured out from the type.
> >
> > Is it true that DIFactory can figure this out with Target info in all
> cases ?
>
> oops... I meant to say "... without Target info..."
>
> // Calculate the size of the specified LLVM type.
Constant * DebugInfoBuilder::getSize(const Type * type) {
    Constant * one = ConstantInt::get(Type::Int32Ty, 1);
    return ConstantExpr::getPtrToInt(
        ConstantExpr::getGetElementPtr(
            ConstantPointerNull::get(PointerType::getUnqual(type)),
            &one, 1), Type::Int32Ty);
}

Constant * DebugInfoBuilder::getAlignment(const Type * type) {
    // Calculates the alignment of T using "sizeof({i8, T}) - sizeof(T)"
    return ConstantExpr::getSub(
        getSize(StructType::get(Type::Int8Ty, type, NULL)),
        getSize(type));
}

This was code that was checked in before DebugInfoBuilder was replaced by
DIFactory.

-- 
-- Talin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090922/23d0313f/attachment.html>


More information about the llvm-dev mailing list