Subject: Re: bug#13818: 24.3.50; Bootstrap failed on Cygwin due to revno: 111870

From: Paul Eggert <[email-masked]>
Date: Wed, 27 Feb 2013 00:02:25 -0800

On 02/26/2013 02:59 PM, Katsumi Yamaoka wrote:
> (There's nothing about data_start in config.log .)

Odd.  Ken Brown said there was something in his config.log.
For now I'll assume his version.

On 02/26/2013 03:13 PM, Ken Brown wrote:
> The problem seems to be that HAVE_DATA_START is defined to 1,
> but DATA_START is not defined.

That should be OK.  HAVE_DATA_START says that the
external symbol data_start works.  DATA_START is
a macro, which can mean something else and which is
to some extent independent of HAVE_DATA_START.
(Yes, it's confusing...)

> configure:10083: checking for data_start
> configure:10099: gcc -std=gnu99 -o conftest.exe -g3 -O2     conftest.c  >&5
> configure:10099: $? = 0
> configure:10107: result: yes

If I'm understanding things correctly, this means the
following little test program compiles and links OK.
Can you please check this?

extern char data_start[];
char ch;                                              
int                                                                             
main ()                                                                         
{                                                                               
  return data_start == &ch;                                                       
}

If this compiles and links, we need to find out why
the similar usage in vm-limit.c does not link.

Can you please compile the above program
with gcc -std=gnu99 -O2 -S and see what
the machine code looks like?

Also, suppose we change this test program to the following
instead -- does this test program compile and link?

extern char data_start[];
char ch;                                              
int                                                                             
main ()                                                                         
{                                                                               
  return data_start < &ch;                                                       
}

>> Also, please examine the output of "gcc -E ... vm-limit.c",
>> where "..." contains the same flags as used for compiling
>> vm-limit.c, to see how data_start was declared and defined
>> in the preprocessor output.
> 
> It's declared as
> 
>   extern char data_start[];
> 
> but never defined.

That should be OK, since the test program linked.
That is, the linker should automatically define
data_start; the program shouldn't have to define it.
But for some reason it's working in the test program
but not for vm-limit.c, and we need to figure out why
there's a discrepancy.