This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Failure in building GFortran on Cygwin

On Dec  1 11:13, Christopher Faylor wrote:
> On Sat, Dec 01, 2007 at 11:31:55AM +0100, Corinna Vinschen wrote:
> >On Nov 30 16:36, Christopher Faylor wrote:
> >> But we do have a fairly transparent way of dealing with this problem which
> >> will allow any ancient apps to continue to work.  We used it for the transition
> >> from 32 -> 64 bit file I/O.
> >
> >Unfortunately it doesn't work for variables.  We can hide the timezone
> >function, but how do we alias timezone to _timezone in libcygwin.a?
> Why do you say that?  It should just be a simple aliasing.

Because it doesn't work, AFAICS.  Actual aliasing in as in

  extern long timezone __attribute__ ((alias("_timezone")));

doesn't work because it breaks generating cygdll.a due to multiple
definitions of timezone, the function in, the variable in

Using the NEW_FUNCTIONS mechanism in doesn't work either.
Apply this patch:

RCS file: /cvs/src/src/winsup/cygwin/,v
retrieving revision 1.202
diff -u -p -r1.202
--- 1 Dec 2007 13:04:43 -0000       1.202
+++ 1 Dec 2007 17:01:32 -0000
@@ -214,7 +214,8 @@ NEW_FUNCTIONS:=regcomp posix_regcomp \
 	      stat _stat64 \
 	      telldir _telldir64 \
 	      tmpfile _tmpfile64 \
-	      truncate _truncate64
+	      truncate _truncate64 \
+	      timezone _timezone
Index: include/cygwin/time.h
RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/time.h,v
retrieving revision 1.7
diff -u -p -r1.7 time.h
--- include/cygwin/time.h       1 Dec 2007 13:49:45 -0000       1.7
+++ include/cygwin/time.h       1 Dec 2007 17:01:32 -0000
@@ -29,7 +29,7 @@ time_t __cdecl timegm (struct tm *);
 extern int daylight __asm__ ("__daylight");
 #ifndef __timezonefunc__
-extern long timezone __asm__ ("__timezone");
+extern long timezone;
When you build this application:

  #include <sys/time.h>

  main ()
    printf ("&timezone = %p\n", &timezone);
    printf ("&_timezone = %p\n", &_timezone);
    return 0;

The result will be something like this:

  $ ./test-timezone
  &timezone = 0x401170
  &_timezone = 0x611942c0

So timezone is not the same as _timezone in the application and
only _timezone will be handled inside of Cygwin.

Am I missing something?


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]