gcc-2.95.3-5 on cygwin compilation problem

Guy Harrison swamp-dog@ntlworld.com
Sun Nov 11 08:26:00 GMT 2001


On Thu, 15 Nov 2001 12:15:36 -0700, "Joe Graham" <joe@aiobjects.com>
wrote:

FWIW here's my stab at it...

There should be only one sys_errlist.

>Hello
>I ran into the following 2 problems when trying to build gcc-2.95.3-5 on
>cygwin and gcc-3.0.  Both gave me the same problems in the same file.  Below
>is how i got it to compile but I sure my implementation is probably wrong.
>Here goes.
>********
>error 1:
>********
>in file:
><gcc_source_directory>/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c:464: conflicting types for
>`sys_errlist
>/usr/include/sys/errno.h:23: previous declaration of `sys_errlist'
>make[1]: *** [strerror.o] Error 1

extern __IMPORT const char * const sys_errlist[];

Just about as 'const' as you can get.

>original:
>static const char **sys_errlist;
>fix:
>//static const char **sys_errlist;
>(commenting out the declaration fixes this)

Declaration here allows you to declare a "creatable" sys_errlist. The
system one above is effectively saying there already is one.

>********
>error 2:
>********
>in file:
><gcc_source_directory>/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c: In function `init_error_tables':
>../../gcc-2.95.3-5/libiberty/strerror.c:546: `sys_errlist' has an incomplete
>typ
>e
>original:
>     if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
>fix:
>     if ((sys_errlist[eip->value] = (const char **) malloc (nbytes)) !=
>NULL)
>(does this need to be eip->name ?)

I suspect there's nothing wrong and your fix is horribly broken.

>here's the diff
>464c464
>< //static const char **sys_errlist;
>---
>> static const char **sys_errlist;
>546c546
><       if ((sys_errlist[eip->value] = (const char **) malloc (nbytes)) !=
>NULL)
>
>---
>>       if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)

I've not compiled gcc but methinks there's two effective choices.

1) Compile against already existing 'sys_errlist'.
2) gcc creates its own 'sys_errlist'.

This is only a guess: you want option (1). Option (2) probably exists
for "bootstrapping" gcc.

I took a look at strerror.c and the problem code is conditional on
HAVE_SYSERRLIST - that must be undefined, at least at that point,
otherwise the problem would not have arisen. You need to discover why
(config.h - configure).


-- 
swamp-dog@ntlworld.com

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list