AC_NO_EXECUTABLES in libc/machine/sh
Jeff Johnston
jjohnstn@redhat.com
Tue Apr 25 17:59:00 GMT 2006
Nick Clifton wrote:
> Hi Jeff,
>
>> DJ Delorie wrote:
>>
>>> [snip] However, in a local discussion, one of us also
>>> noted that the objects in that directory don't seem to be correctly
>>> overriding the generic C implementations of those functions, due to
>>> new object naming conventions. We're not sure what to do about that.
>
>
> This was me. It seems that nowadays the object files in the newlib
> sub-directories all have a "lib_a-" prefix. So for example the source
> file newlib/libc/string/strlen.c compiles to lib_a-strlen.o.
>
> The problem is that the object files built in the libc/machine/<target>/
> directory are not being given this prefix. So for example for the SH
> port the libc/machine/sh/strlen.S file is being compiled into strlen.o.
>
> When the object files from the various sub-directories are extracted
> into the temporary directory as part of the process of building libc.a
> it used to be that the version from the machine/ sub-directory would
> have the same name as the version from the string/ sub-directory and
> (since it was extracted last) it would overwrite it. Thus the machine
> specific version would be used by the application.
>
> With the switch over to autoconf-2.59 and the appearance of this
> "lib_a-" prefix there are now two distinct filenames, and so both are
> copied into libc.a. Since the "lib_a-" prefix is usually alphabetically
> prior to the un-prefixed name, the lib_a- version is usually the one
> picked up by an application that links with libc.a. Thus applications
> do not get the versions that are optimized for their target
> architecture, and in some cases, the versions that are necessary for
> correct operation on their target architecture.
>
> (Note this affects not just the SH port, but all ports that have machine
> specific versions of some libc functions, including the CRIS, CRX,
> H8300, HPPA, i386, i960, M68K, MIPS, MN10300, XSTORMY16 and Z8K).
>
> Unfortunately I have not been able to work out why this "lib_a-" prefix
> has appeared, nor why it is not being applied to the files built in the
> machine sub-directory. Any clues in this direction would be greatly
> appreciated.
>
It is caused by a work-around I was forced to use. I have no idea why,
but the new autoconf/automake complains about multiple objects of the
same name when we have a directory that optionally uses libtool or
non-libtool. It is ridiculous because both objects are not built at the
same time due to an if/else check. The workaround I found for this
problem is to specify the lib_a_CFLAGS=$(AM_CFLAGS) and this adds the
prefix which is why the error goes away.
I'm certainly not happy with this and I am open to suggestions for
alternatives. I will investigate getting the prefix added to the
machine object files as well to at least fix the problem.
-- Jeff J.
> Cheers
> Nick
More information about the Newlib
mailing list