AC_NO_EXECUTABLES in libc/machine/sh
Jeff Johnston
jjohnstn@redhat.com
Wed Apr 26 21:15:00 GMT 2006
Jeff Johnston wrote:
> 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.
>
Without the lib_a_CFLAGS=$(AM_CFLAGS), the error message from automake is:
bash-3.00$ automake --cygnus stdio/Makefile
stdio/Makefile.am: object `clearerr.$(OBJEXT)' created both with libtool
and without
> 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