[Pacemaker] Proposing patch for ld --as-needed
Simon Horman
horms at verge.net.au
Wed Jul 21 23:56:28 UTC 2010
On Wed, Jul 21, 2010 at 09:40:10PM +0200, Ultrabug wrote:
> On Wednesday 21 July 2010 03:49:42 Simon Horman wrote:
> > On Tue, Jul 20, 2010 at 05:35:01PM +0200, Ultrabug wrote:
> > > ----- Original Message -----
> > > From: Simon Horman <horms at verge.net.au>
> > > To: The Pacemaker cluster resource manager
> > > <pacemaker at oss.clusterlabs.org> Sent: Tue, 20 Jul 2010 05:10:32 +0200
> > > (CEST)
> > > Subject: Re: [Pacemaker] Proposing patch for ld --as-needed
> > >
> > > On Sat, Jul 17, 2010 at 01:12:20PM +0200, Ultrabug wrote:
> > > >Dear list,
> > > >
> > > >I would like to ask you about a possible upstream modification regarding
> > > >the -- as-needed ld flag for which we Gentoo users need to patch the
> > > >pacemaker sources to get it compile.
> > > >
> > > >I'm attaching the patch which, as you can see, is relatively small and
> > > >simple (looks to me at least). The question is whether or not you think
> > > >this could be done upstream ?
> > > >
> > > >Thank you for your interest in this and all you work,
> > >
> > > Out of interest, could you explain why this is needed?
> > > Is it because gold is being used as the linker?
> >
> > [ please don't top-post ]
>
> [ noticed after sending, sorry ]
>
> >
> > Thanks for the link.
> >
> > I guess what is happening without --as-needed is that the curses
> > library is being dragged in somewhere, somehow - without your proposed
> > change CURSESLIBS is used exactly nowhere.
> >
>
> Actually the two chunks of the patch have different purposes.
>
> The first one is needed because the linking order has a meaning on a as-needed
> system and libpengine uses functions that are defined in libpe_status.
>
> Here is an example of failing build : http://paste.pocoo.org/show/239905/
> If you try to compile a program that uses libpengine that doesn't need
> libpe_status, e.g. gcc -Wl,--as-needed ptest.c -o ptest -lpe_status -lpengine
> (shortened version of actual linking from pacemaker build.log) linking will
> fail. Linker evaluates that statement sequentially starting from the inner
> most lib:
> 1) do I need libpe_status? No, forget about it.
> 2) do I need libpengine? Yes, please.
> 3) is everything all right? Ups, I don't know what `was_processing_warning'
> is, die...
>
>
> The second one explicitly adds CURSESLIBS dependency to libpe_status.
> If pacemaker detects ncurses, you get HAVE_NCURSES_H and e.g.
> status_print (used in lib/pengine/native.c etc.) becomes wrapper
> around "printw" (see configure.ac). You need to provide `printw' or any linking
> with libpe_status will fail.
> Fail build example : http://paste.pocoo.org/show/239916/
>
> > So I think that your change is a step in the right direction,
> > though for completeness I think that you also need to give the same
> > treatment to libpe_rule as common.c seems to make curses calls.
> >
> > Could you considering updating your patch to include my proposed
> > additions below? And could you please include a description that describes
> > what the patch does? Perhaps something like this:
> >
>
> Sure, if you agree with the explanations above, I'll summarize them and add
> them in the patch which I'll resubmit to you for integration.
I think tat you have a better handle on this problem than me.
So yes, please summarise your explanation above and use
it as a preamble to the patch.
[snip]
More information about the Pacemaker
mailing list