Fwd: [PATCH 2/4] covoar: Use DWARF to map addresses to source files and lines.
Joel Sherrill
joel at rtems.org
Mon May 7 22:12:47 UTC 2018
On Mon, May 7, 2018 at 5:09 PM, Chris Johns <chrisj at rtems.org> wrote:
> On 08/05/2018 07:32, Joel Sherrill wrote:
> > On Mon, May 7, 2018 at 3:58 PM, Chris Johns <chrisj at rtems.org
> > <mailto:chrisj at rtems.org>> wrote:
> >
> > On 08/05/2018 03:56, Joel Sherrill wrote:
> > >
> > > I have attached a workaround.
> >
> > Looks like a solution to me.
> >
> >
> > Good enough for now. All basename() calls should come from rld.
> >
> > Eventually all dirname() calls should also.
> >
> > Luckily no file uses both so we don't have to include libgen.h when
> > for dirname() and screw up basename().
>
> Works on FreeBSD ;)
>
> > > It seems that libgen.h has this:
> > >
> > > ========================================================
> > > /* Return final component of PATH.
> > >
> > > This is the weird XPG version of this function. It sometimes
> will
> > > modify its argument. Therefore we normally use the GNU version
> (in
> > > <string.h>) and only if this header is included make the XPG
> > > version available under the real name. */
> > > extern char *__xpg_basename (char *__path) __THROW;
> > > #define basename __xpg_basename
> > > ========================================================
> > >
> >
> > Oh yuck, who would ever work in standards. ;)
> >
> > Is this function allowed to be redefined as a macro?
> >
> >
> > http://pubs.opengroup.org/onlinepubs/9699919799/functions/basename.html
> > http://pubs.opengroup.org/onlinepubs/9699919799/functions/dirname.html
> >
> > Neither seems to say anything about that. Both have language like this:
> >
> > " The /dirname/() function may modify the string pointed to by /path/,
> and may
> > return a pointer to static storage that may then be overwritten by a
> subsequent
> > call to /dirname/()."
> >
> > It really would be better to have our own implementations and not
> > use the standard basename() and dirname(). The POSIX ones
> > are not thread-safe.
>
> We have them in rld-path. It is a little like the python os.path module.
>
> >
> > > Chris has used basename as a method name and even though that
> should
> > > be perfectly acceptable, the macro above gets expanded, the name
> > > gets changed (in some places) to rld::path::__xpg_basename()
> > >
> > > r.lowSourceLine = rld::path::basename (location);
> > >
> > > IMO the fix is to add dirname to rld-files, use rld basename and
> dirname
> > > exclusively, and avoid libgen.h at all costs.
> >
> > Wouldn't the world be so much simpler if there was only Linux? ;)
> >
> >
> > The methods as defined by POSIX aren't thread-safe and can
> > modify the caller's string. Suck by design. :)
> >
> > Having one mono-culture is easy but it doesn't make it right
> > even when conformant. :)
>
> It is a horrible implementation and not safe in C++.
>
Not safe in C. Just not safe.
>
> >
> > > I didn't do that much work. I got lucky in a couple of files by
> removing the
> > > include of libgen.h since it wasn't needed but I had to leave it
> in one place.
> > >
> > > $ grep dirname *.cc
> > > GcovData.cc: dirname( path );
> > >
> > > Hopefully this lets you all proceed with Chris' patches and my
> slight hack
> > > in place.
> > >
> > > Ultimate solution is probably simple. We just need to hear from
> Chris.
> >
> > This is fine. I am slowing move covoar to use more and more of the
> rtemstoolkit.
> >
> > I will merge these changes into a v2 patch set.
> >
> >
> > Are you adding dirname()? Or does that need a ticket?
> >
>
> Confused....
>
> https://git.rtems.org/rtems-tools/tree/rtemstoolkit/rld-path.h#n52
I missed that somehow. There was one call in covoar to the OS method. Just
replace it
and remove the libgen.h reference. Easy. :)
--joel
>
>
> ?
>
> Chris
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20180507/af446826/attachment-0002.html>
More information about the devel
mailing list