Re: [PATCH v3 7/9] liblockdep: Support using LD_PRELOAD

From: Peter Zijlstra
Date: Fri May 10 2013 - 07:47:49 EST


On Fri, May 10, 2013 at 01:17:19PM +0200, Peter Zijlstra wrote:
> On Thu, May 09, 2013 at 11:58:07AM -0400, Sasha Levin wrote:
> > + /*
> > + * Some programs attempt to initialize and use locks in their
> > + * allocation path. This means that a call to malloc() would
> > + * result in locks being initialized and locked.
> > + *
> > + * Why is it an issue for us? dlsym() below will try allocating to
> > + * give us the original function. Since this allocation will result
> > + * in a locking operations, we have to let pthread deal with it,
> > + * but we can't! we don't have the pointer to the original API
> > + * since we're inside dlsym() trying to get it :(
> > + *
> > + * We can work around it by telling the program that locking was
> > + * really okay, and just initialize those locks when we're fully
> > + * up and running (this is ok because this all happens during
> > + * initialization phase, when we have just one thread). But
> > + * this is a big TODO at this point.
> > + */
> > + if (preload_started) {
> > + printf(
> > + "LOCKDEP error: It seems that the program you are trying to "
> > + "debug is initializing locks in it's allocation path.\n"
> > + "This means that liblockdep cannot reliably analyze this "
> > + "program since we need the allocator to work before we can "
> > + "debug locks.\nSorry!\n");
> > +
> > + exit(1);
> > + }
>
>
> Would something like the below cure things? Obviously this hasn't been near a
> compiler for the entire thing still isn't wanting to compile for me.

OK, that won't do indeed. Not being able to malloc is only part of the problem.

/me goes stare at it more
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/