Gcc builtin functions used by glibc not available on mips

Jakub Jelinek jakub@redhat.com
Thu Feb 7 03:13:00 GMT 2002


On Wed, Feb 06, 2002 at 10:25:54PM -0800, H . J . Lu wrote:
> In glibc, there are codes
> 
>   /* Partly clean the `bootstrap_map' structure up.  Don't use
>      `memset' since it might not be built in or inlined and we cannot
>      make function calls at this point.  Use '__builtin_memset' if we
>      know it is available.  */
> #if __GNUC_PREREQ (2, 96) 
>   __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
> #else
>   for (cnt = 0;
>        cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
>        ++cnt)
>     bootstrap_map.l_info[cnt] = 0;
> #endif
> 
> used in ld.so bootstrap. The problem is even gcc 3.1 doesn't have a
> real __builtin_memset for mips. I am very reluctant to call it a gcc
> bug. Maybe we should check it during the gcc configure instead of
> depending on "#if __GNUC_PREREQ (2, 96)".

Well, I think on most arches this __builtin_memset will actually expand to
real memset, since sizeof (bootstrap_map.l_info) is more than 64 * sizeof (void *),
ie. really big. Guess just ia-32 will expand it inline.

But, memset is local symbol in ld.so, do even calls to local functions have
to go through plt or got on mips?

	Jakub



More information about the Gcc mailing list