Re: [Buildroot] [PATCH 2/2] package/gdb: use stat() privided by the system

Rich Felker
2018-09-11T14:13:27Z

On Tue, Sep 11, 2018 at 10:51:20AM +0100, Pedro Alves wrote:
> On 09/11/2018 01:38 AM, Sergio Durigan Junior wrote:
>
> > This is happening because, before the commit mentioned above,
> > 'common-utils.c' (which gets transformed into 'common-utils-ipa.c'
> > during the gdbserver build) wasn't calling 'stat'. It doesn't seem like
> > a regression; it seems like a hidden problem that was uncovered by the
> > need of 'stat'.
> >
> > I don't know why this problem is manifesting only when compiling IPA,
> > and not when compiling 'common-utils.c' during GDB's/gdbserver's build.
>
> Because the IPA doesn't link with gnulib. And the answer to that wouldn't
> be as simple as "just link it in", because the IPA objects are supposed
> to be compiled with -fPIC and -fvisibility=hidden. So we'd need a third
> build of gnulib for the IPA.
>
> It doesn't seem like this code that calls stat (is_regular_file?) is
> useful for the IPA, so a quicker/simpler fix would be to simply move
> that function out of common-utils.c into some other file that is not
> shared with the IPA.

Eew, I just looked up what IPA is. Yes, it's buggy to be including
gnulib headers in files used for this unless you have another copy
compiled with hidden visibility. Alternatively, you could put all the
gnulib files into a static archive and link with
-Wl,--exclude-libs=ALL to make them hidden at link-time, without
having to compile them again.

As an aside, the whole idea of running in-process code
referencing/using functions in the process being debugged (like stat
in libc) seems fragile and broken; perhaps aside from this
inadvertently-added use in is_regular_file, there is no such code in
the IPA stuff?

Rich