On Solaris 11 2011-11 the vendor gcc 4.5.2 cannot compile gnulib's mktime.c:

$ make
...
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -DGNULIB_STRICT_CHECKING=1  -Wall 
-D_REENTRANT  -g -O2 -MT mktime.o -MD -MP -MF $depbase.Tpo -c -o mktime.o 
mktime.c &&\
mv -f $depbase.Tpo $depbase.Po
Assembler: mktime.c
        "/var/tmp//ccGla4PN.s", line 10 : .align test amount has negative value
        "/var/tmp//ccGla4PN.s", line 131 : .align test amount has negative value
        "/var/tmp//ccGla4PN.s", line 355 : .align test amount has negative value
        "/var/tmp//ccGla4PN.s", line 1111 : .align test amount has negative 
value
*** Error code 1

Indeed, find attached the output of
$ gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -DGNULIB_STRICT_CHECKING=1  -Wall 
-D_REENTRANT  -O2 -S mktime.c -o mktime1.s
$ gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -DGNULIB_STRICT_CHECKING=1  -Wall 
-D_REENTRANT  -O2 -S mktime.c -DWRAPV -o mktime2.s

As you can see, the use of
  #pragma GCC optimize ("wrapv")
apparently replaces the valid asm statements
  .p2align 4,,15
with
  .p2align 4,,-1

For the semantics of .p2align, see
http://sourceware.org/binutils/docs/as/P2align.html

I can reproduce the effect with gcc-4.5.2 built from source on a glibc system.
The difference is that the GNU assembler accepts the .p2align 4,,-1
pseudo-instruction, while the Solaris assembler doesn't.

I've registered this bug as <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.

As a workaround, I would propose to emit this #pragma only on platforms
where we can be sure that GNU as is used. Namely, glibc systems.


2012-01-08  Bruno Haible  <br...@clisp.org>

        mktime: Avoid compilation error on Solaris 11.
        * lib/mktime.c (WRAPV): Define to 0 on all non-glibc systems.

--- lib/mktime.c.orig   Sun Jan  8 14:27:58 2012
+++ lib/mktime.c        Sun Jan  8 14:27:51 2012
@@ -25,24 +25,6 @@
 # include <config.h>
 #endif
 
-/* Some of the code in this file assumes that signed integer overflow
-   silently wraps around.  This assumption can't easily be programmed
-   around, nor can it be checked for portably at compile-time or
-   easily eliminated at run-time.
-
-   Define WRAPV to 1 if the assumption is valid.  Otherwise, define it
-   to 0; this forces the use of slower code that, while not guaranteed
-   by the C Standard, works on all production platforms that we know
-   about.  */
-#ifndef WRAPV
-# if (__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__
-#  pragma GCC optimize ("wrapv")
-#  define WRAPV 1
-# else
-#  define WRAPV 0
-# endif
-#endif
-
 /* Assume that leap seconds are possible, unless told otherwise.
    If the host has a 'zic' command with a '-L leapsecondfilename' option,
    then it supports leap seconds; otherwise it probably doesn't.  */
@@ -64,6 +46,26 @@
 # define mktime my_mktime
 #endif /* DEBUG */
 
+/* Some of the code in this file assumes that signed integer overflow
+   silently wraps around.  This assumption can't easily be programmed
+   around, nor can it be checked for portably at compile-time or
+   easily eliminated at run-time.
+
+   Define WRAPV to 1 if the assumption is valid and if
+     #pragma GCC optimize ("wrapv")
+   does not trigger GCC bug 
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
+   Otherwise, define it to 0; this forces the use of slower code that,
+   while not guaranteed by the C Standard, works on all production
+   platforms that we know about.  */
+#ifndef WRAPV
+# if ((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) && defined 
__GLIBC__
+#  pragma GCC optimize ("wrapv")
+#  define WRAPV 1
+# else
+#  define WRAPV 0
+# endif
+#endif
+
 /* Verify a requirement at compile-time (unlike assert, which is runtime).  */
 #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
 
        .file   "mktime.c"
        .text
        .p2align 4,,-1
        .type   ranged_convert, @function
ranged_convert:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $56, %esp
        movl    %ecx, 4(%esp)
        movl    %ebx, -12(%ebp)
        movl    %edx, %ebx
        movl    %esi, -8(%ebp)
        movl    %edi, -4(%ebp)
        movl    %eax, -28(%ebp)
        movl    %ecx, -32(%ebp)
        movl    %edx, (%esp)
        call    *%eax
        testl   %eax, %eax
        je      .L11
.L2:
        movl    -12(%ebp), %ebx
        movl    -8(%ebp), %esi
        movl    -4(%ebp), %edi
        movl    %ebp, %esp
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L11:
        movl    (%ebx), %esi
        testl   %esi, %esi
        je      .L2
        xorl    %edi, %edi
        jmp     .L9
        .p2align 4,,7
        .p2align 3
.L6:
        movl    %esi, %edx
        movl    %edi, %eax
        sarl    %eax
        sarl    %edx
        addl    %eax, %edx
        movl    %esi, %eax
        andl    %edi, %eax
        andl    $1, %eax
        addl    %eax, %edx
        movl    -32(%ebp), %eax
        movl    %edx, (%ebx)
        movl    %edx, -36(%ebp)
        movl    %ebx, (%esp)
        movl    %eax, 4(%esp)
        call    *-28(%ebp)
        movl    -36(%ebp), %edx
        testl   %eax, %eax
        cmovl.ne        %edx, %edi
        cmovl.e %edx, %esi
.L9:
        movl    %esi, %edx
        sarl    $31, %edx
        orl     $1, %edx
        addl    %edi, %edx
        cmpl    %esi, %edx
        jne     .L6
        testl   %edi, %edi
        je      .L2
        testl   %eax, %eax
        jne     .L2
        movl    -32(%ebp), %eax
        movl    %edi, (%ebx)
        movl    %ebx, (%esp)
        movl    %eax, 4(%esp)
        call    *-28(%ebp)
        jmp     .L2
        .size   ranged_convert, .-ranged_convert
        .p2align 4,,-1
        .type   guess_time_tm.clone.0, @function
guess_time_tm.clone.0:
        pushl   %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        movl    %eax, %ebx
        subl    $24, %esp
        movl    68(%esp), %ecx
        movl    44(%esp), %eax
        testl   %ecx, %ecx
        movl    %eax, 12(%esp)
        je      .L13
        movl    20(%ecx), %eax
        movl    %eax, 4(%esp)
        movl    %ebx, %eax
        movl    4(%esp), %edi
        shrdl   $2, %edx, %eax
        leal    475(%eax), %ebp
        movl    %ebx, %eax
        andl    $3, %eax
        testl   %eax, %eax
        sete    %al
        movzbl  %al, %eax
        sarl    $2, %edi
        subl    %eax, %ebp
        addl    $475, %edi
        xorl    %eax, %eax
        testb   $3, 4(%esp)
        sete    %al
        subl    %eax, %edi
        movl    $1374389535, %eax
        imull   %ebp
        movl    %ebp, %eax
        sarl    $31, %eax
        subl    4(%esp), %ebx
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %eax
        movl    %eax, 8(%esp)
        movl    %ebp, %eax
        subl    8(%esp), %eax
        imull   $365, %ebx, %ebx
        shrl    $31, %eax
        subl    %eax, %edx
        movl    $1374389535, %eax
        movl    %edx, 8(%esp)
        imull   %edi
        movl    %edi, %eax
        sarl    $31, %eax
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %eax
        movl    %eax, 16(%esp)
        movl    %edi, %eax
        subl    16(%esp), %eax
        shrl    $31, %eax
        subl    %eax, %edx
        movl    60(%esp), %eax
        subl    (%ecx), %eax
        movl    %eax, 16(%esp)
        movl    56(%esp), %eax
        subl    4(%ecx), %eax
        movl    %eax, 20(%esp)
        movl    52(%esp), %eax
        subl    8(%ecx), %eax
        movl    %eax, (%esp)
        movl    12(%esp), %eax
        subl    28(%ecx), %eax
        movl    %eax, %ecx
        movl    (%esp), %eax
        subl    %edi, %ecx
        addl    %ebx, %ecx
        addl    %ebp, %ecx
        addl    %edx, %ecx
        sarl    $2, %edx
        subl    %edx, %ecx
        movl    8(%esp), %edx
        subl    8(%esp), %ecx
        sarl    $2, %edx
        addl    %edx, %ecx
        leal    (%ecx,%ecx,2), %edx
        leal    (%eax,%edx,8), %edx
        movl    64(%esp), %eax
        imull   $60, %edx, %edx
        addl    20(%esp), %edx
        imull   $60, %edx, %edx
        addl    16(%esp), %edx
        leal    (%edx,%eax), %eax
        cmpl    64(%esp), %eax
        setge   %cl
        shrl    $31, %edx
        cmpb    %dl, %cl
        jne     .L14
.L13:
        movl    64(%esp), %eax
        testl   %eax, %eax
        js      .L18
        movl    64(%esp), %edx
        movl    $2147483647, %eax
        subl    $1, %edx
        cmpl    $2147483646, 64(%esp)
        cmovl.ge        %edx, %eax
.L14:
        addl    $24, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L18:
        movl    64(%esp), %edx
        movl    $-2147483648, %eax
        addl    $1, %edx
        cmpl    $-2147483647, 64(%esp)
        cmovl.le        %edx, %eax
        addl    $24, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .size   guess_time_tm.clone.0, .-guess_time_tm.clone.0
.globl __moddi3
.globl __divdi3
        .p2align 4,,-1
.globl mktime_internal
        .type   mktime_internal, @function
mktime_internal:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        subl    $220, %esp
        movl    8(%ebp), %eax
        movl    8(%ebp), %edx
        movl    8(%ebp), %edi
        movl    (%eax), %eax
        movl    4(%edx), %edx
        movl    8(%edi), %edi
        movl    %eax, -176(%ebp)
        movl    8(%ebp), %eax
        movl    %edx, -164(%ebp)
        movl    8(%ebp), %edx
        movl    %edi, -168(%ebp)
        movl    12(%eax), %eax
        movl    16(%edx), %ecx
        movl    20(%edx), %edi
        movl    %eax, -124(%ebp)
        movl    32(%edx), %eax
        movl    %edi, -128(%ebp)
        movl    $715827883, %edi
        movl    %eax, -160(%ebp)
        movl    %ecx, %eax
        imull   %edi
        movl    %ecx, %eax
        sarl    $31, %eax
        movl    %edx, %edi
        sarl    %edi
        subl    %eax, %edi
        leal    (%edi,%edi,2), %eax
        movl    %edi, %ebx
        sall    $2, %eax
        movl    %ecx, %edi
        subl    %eax, %edi
        movl    -128(%ebp), %eax
        movl    %edi, %ecx
        shrl    $31, %ecx
        subl    %ecx, %ebx
        movl    %ebx, %esi
        movl    %eax, %edx
        sarl    $31, %edx
        sarl    $31, %esi
        addl    %eax, %ebx
        adcl    %edx, %esi
        movl    %ebx, %edx
        xorl    %eax, %eax
        andl    $3, %edx
        movl    %edx, -148(%ebp)
        jne     .L20
        movl    $100, 8(%esp)
        movl    $0, 12(%esp)
        movl    %ebx, (%esp)
        movl    %esi, 4(%esp)
        movl    %ecx, -184(%ebp)
        call    __moddi3
        movl    -184(%ebp), %ecx
        movl    %eax, -132(%ebp)
        movl    $1, %eax
        orl     -132(%ebp), %edx
        je      .L56
.L20:
        leal    (%eax,%eax), %edx
        addl    %eax, %edx
        leal    (%eax,%edx,4), %eax
        leal    (%ecx,%ecx), %edx
        leal    (%edx,%ecx), %ecx
        leal    (%edi,%ecx,4), %edx
        addl    %edx, %eax
        movzwl  __mon_yday(%eax,%eax), %eax
        subl    $1, %eax
        movl    %eax, -144(%ebp)
        movl    %eax, %edi
        movl    -124(%ebp), %eax
        sarl    $31, %edi
        movl    %edi, -140(%ebp)
        movl    %eax, %edx
        sarl    $31, %edx
        addl    %eax, -144(%ebp)
        adcl    %edx, -140(%ebp)
        movl    16(%ebp), %edx
        movl    -176(%ebp), %eax
        movl    (%edx), %edx
        testl   %eax, %eax
        movl    $0, -132(%ebp)
        movl    %edx, -180(%ebp)
        js      .L22
        cmpl    $59, -176(%ebp)
        movl    $59, %edi
        cmovl.le        -176(%ebp), %edi
        movl    %edi, -132(%ebp)
.L22:
        movl    %ebx, %eax
        movl    $1374389535, %edx
        shrdl   $2, %esi, %eax
        leal    475(%eax), %ecx
        xorl    %eax, %eax
        cmpl    $0, -148(%ebp)
        sete    %al
        subl    %eax, %ecx
        movl    %ecx, %eax
        movl    %ecx, %edi
        imull   %edx
        movl    %ecx, %eax
        sarl    $31, %eax
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %eax
        subl    %eax, %edi
        movl    %edi, %eax
        shrl    $31, %eax
        subl    %eax, %edx
        leal    -70(%ebx), %eax
        imull   $365, %eax, %eax
        leal    -477(%ecx,%eax), %ecx
        movl    %edx, %eax
        addl    -144(%ebp), %ecx
        sarl    $2, %eax
        leal    (%ecx,%eax), %eax
        subl    %edx, %eax
        movl    -168(%ebp), %edx
        leal    (%eax,%eax,2), %eax
        leal    (%edx,%eax,8), %eax
        movl    -128(%ebp), %edx
        imull   $60, %eax, %eax
        addl    -164(%ebp), %eax
        sarl    %edx
        imull   $60, %eax, %eax
        addl    -180(%ebp), %eax
        addl    -132(%ebp), %eax
        movl    %eax, -172(%ebp)
        movl    -124(%ebp), %eax
        sarl    $10, %eax
        leal    -35(%edx,%eax), %ecx
        movl    -168(%ebp), %eax
        sarl    $14, %eax
        addl    %eax, %ecx
        movl    -164(%ebp), %eax
        sarl    $20, %eax
        addl    %eax, %ecx
        movl    -172(%ebp), %eax
        sarl    $26, %eax
        subl    %ecx, %eax
        movl    %eax, %edx
        sarl    $31, %edx
        xorl    %eax, %edx
        cmpl    $21, %edx
        jg      .L57
.L24:
        movl    -172(%ebp), %edi
        movl    $0, -148(%ebp)
        movl    $6, -128(%ebp)
        movl    %edi, -32(%ebp)
        movl    %edi, -28(%ebp)
        movl    %edi, -124(%ebp)
.L27:
        movl    12(%ebp), %eax
        leal    -72(%ebp), %ecx
        leal    -28(%ebp), %edx
        call    ranged_convert
        movl    -132(%ebp), %edx
        movl    -28(%ebp), %edi
        movl    %edx, 16(%esp)
        movl    -168(%ebp), %edx
        movl    %edi, 20(%esp)
        movl    %eax, 24(%esp)
        movl    -164(%ebp), %eax
        movl    %edx, 8(%esp)
        movl    -140(%ebp), %edx
        movl    %eax, 12(%esp)
        movl    -144(%ebp), %eax
        movl    %edx, 4(%esp)
        movl    %esi, %edx
        movl    %eax, (%esp)
        movl    %ebx, %eax
        call    guess_time_tm.clone.0
        cmpl    %eax, %edi
        je      .L58
        cmpl    %edi, -124(%ebp)
        jne     .L28
        movl    -124(%ebp), %edx
        cmpl    -32(%ebp), %edx
        je      .L28
        movl    -40(%ebp), %edx
        testl   %edx, %edx
        js      .L29
        movl    -160(%ebp), %ecx
        testl   %ecx, %ecx
        js      .L59
        movl    -160(%ebp), %ecx
        testl   %edx, %edx
        setne   %dl
        testl   %ecx, %ecx
        setne   %cl
        cmpb    %cl, %dl
        jne     .L29
.L28:
        subl    $1, -128(%ebp)
        je      .L46
        movl    -32(%ebp), %edx
        movl    %eax, -28(%ebp)
        xorl    %eax, %eax
        cmpl    $0, -40(%ebp)
        movl    %edi, -32(%ebp)
        movl    %edx, -124(%ebp)
        setne   %al
        movl    %eax, -148(%ebp)
        jmp     .L27
        .p2align 4,,7
        .p2align 3
.L59:
        testl   %edx, %edx
        setne   %dl
        movzbl  %dl, %edx
        cmpl    %edx, -148(%ebp)
        jg      .L28
        .p2align 4,,7
        .p2align 3
.L29:
        movl    -180(%ebp), %eax
        movl    16(%ebp), %edi
        subl    -172(%ebp), %eax
        addl    -124(%ebp), %eax
        movl    %eax, (%edi)
        movl    -72(%ebp), %eax
        cmpl    %eax, -176(%ebp)
        jne     .L60
.L37:
        movl    -72(%ebp), %eax
        movl    8(%ebp), %edi
        movl    %eax, (%edi)
        movl    -68(%ebp), %eax
        movl    %eax, 4(%edi)
        movl    -64(%ebp), %eax
        movl    %eax, 8(%edi)
        movl    -60(%ebp), %eax
        movl    %eax, 12(%edi)
        movl    -56(%ebp), %eax
        movl    %eax, 16(%edi)
        movl    -52(%ebp), %eax
        movl    %eax, 20(%edi)
        movl    -48(%ebp), %eax
        movl    %eax, 24(%edi)
        movl    -44(%ebp), %eax
        movl    %eax, 28(%edi)
        movl    -40(%ebp), %eax
        movl    %eax, 32(%edi)
        movl    -124(%ebp), %eax
        addl    $220, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L46:
        movl    $-1, -124(%ebp)
.L26:
        movl    -124(%ebp), %eax
        addl    $220, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L56:
        movl    $100, 8(%esp)
        movl    $0, 12(%esp)
        movl    %ebx, (%esp)
        movl    %esi, 4(%esp)
        call    __divdi3
        movl    -184(%ebp), %ecx
        andl    $3, %eax
        cmpl    $1, %eax
        sete    %al
        movzbl  %al, %eax
        jmp     .L20
        .p2align 4,,7
        .p2align 3
.L58:
        movl    -160(%ebp), %eax
        movl    -40(%ebp), %edx
        movl    %edi, -124(%ebp)
        testl   %eax, %eax
        movl    -160(%ebp), %eax
        sete    -148(%ebp)
        orl     %edx, %eax
        notl    %eax
        shrl    $31, %eax
        testl   %edx, %edx
        sete    %dl
        xorb    -148(%ebp), %dl
        testl   %edx, %eax
        je      .L29
        movl    $-601200, -128(%ebp)
        movl    $1202400, -124(%ebp)
        movl    %ebx, -160(%ebp)
        movl    %esi, -156(%ebp)
        jmp     .L32
        .p2align 4,,7
        .p2align 3
.L33:
        addl    $2, %esi
        addl    -124(%ebp), %ebx
        cmpl    $3, %esi
        jne     .L36
        addl    $1202400, -124(%ebp)
        subl    $601200, -128(%ebp)
        cmpl    $538675200, -124(%ebp)
        je      .L61
.L32:
        movl    -128(%ebp), %ebx
        movl    $-1, %esi
.L36:
        leal    (%edi,%ebx), %eax
        movl    %ebx, %edx
        cmpl    %edi, %eax
        setge   %cl
        shrl    $31, %edx
        cmpb    %dl, %cl
        je      .L33
        movl    %eax, -36(%ebp)
        movl    12(%ebp), %eax
        leal    -36(%ebp), %edx
        leal    -108(%ebp), %ecx
        call    ranged_convert
        movl    -76(%ebp), %eax
        movl    %eax, %edx
        notl    %edx
        shrl    $31, %edx
        testl   %eax, %eax
        sete    %al
        xorb    -148(%ebp), %al
        testl   %eax, %edx
        je      .L55
        movl    -28(%ebp), %edi
        jmp     .L33
.L57:
        movl    -172(%ebp), %edi
        movl    $-1, -124(%ebp)
        notl    %edi
        movl    %edi, %eax
        sarl    $26, %eax
        subl    %ecx, %eax
        movl    %eax, %edx
        sarl    $31, %edx
        xorl    %eax, %edx
        cmpl    $21, %edx
        jg      .L26
        movl    %edi, %eax
        subl    -172(%ebp), %eax
        movl    %edi, -172(%ebp)
        addl    %eax, -180(%ebp)
        jmp     .L24
.L55:
        movl    -36(%ebp), %eax
        leal    -108(%ebp), %edx
        movl    %edx, 24(%esp)
        movl    -168(%ebp), %edx
        movl    -160(%ebp), %ebx
        movl    -156(%ebp), %esi
        movl    %eax, 20(%esp)
        movl    -164(%ebp), %eax
        movl    -132(%ebp), %edi
        movl    %edx, 8(%esp)
        movl    -140(%ebp), %edx
        movl    %eax, 12(%esp)
        movl    -144(%ebp), %eax
        movl    %edi, 16(%esp)
        movl    %edx, 4(%esp)
        movl    %esi, %edx
        movl    %eax, (%esp)
        movl    %ebx, %eax
        call    guess_time_tm.clone.0
        leal    -28(%ebp), %edx
        leal    -72(%ebp), %ecx
        movl    %eax, -28(%ebp)
        movl    12(%ebp), %eax
        call    ranged_convert
        movl    -28(%ebp), %edx
        movl    %edx, -124(%ebp)
        jmp     .L29
.L60:
        movl    -132(%ebp), %edi
        xorl    %ebx, %ebx
        testl   %edi, %edi
        jne     .L38
        xorl    %ebx, %ebx
        cmpl    $60, %eax
        sete    %bl
.L38:
        movl    -124(%ebp), %eax
        movl    -176(%ebp), %ecx
        addl    -176(%ebp), %eax
        cmpl    -124(%ebp), %eax
        movl    $-1, -124(%ebp)
        setge   %dl
        shrl    $31, %ecx
        cmpb    %cl, %dl
        je      .L26
        subl    -132(%ebp), %ebx
        leal    (%ebx,%eax), %edx
        cmpl    %edx, %eax
        setle   %al
        shrl    $31, %ebx
        cmpb    %bl, %al
        je      .L26
        leal    -72(%ebp), %eax
        movl    %eax, 4(%esp)
        leal    -32(%ebp), %eax
        movl    %edx, -32(%ebp)
        movl    %eax, (%esp)
        call    *12(%ebp)
        testl   %eax, %eax
        je      .L26
        movl    -32(%ebp), %edx
        movl    %edx, -124(%ebp)
        jmp     .L37
        .p2align 4,,7
        .p2align 3
.L61:
        movl    %edi, -124(%ebp)
        jmp     .L29
        .size   mktime_internal, .-mktime_internal
        .p2align 4,,-1
.globl rpl_mktime
        .type   rpl_mktime, @function
rpl_mktime:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        movl    8(%ebp), %eax
        movl    $localtime_offset, 8(%esp)
        movl    $localtime_r, 4(%esp)
        movl    %eax, (%esp)
        call    mktime_internal
        leave
        ret
        .size   rpl_mktime, .-rpl_mktime
        .local  localtime_offset
        .comm   localtime_offset,4,4
        .section        .rodata
        .align 32
        .type   __mon_yday, @object
        .size   __mon_yday, 52
__mon_yday:
        .value  0
        .value  31
        .value  59
        .value  90
        .value  120
        .value  151
        .value  181
        .value  212
        .value  243
        .value  273
        .value  304
        .value  334
        .value  365
        .value  0
        .value  31
        .value  60
        .value  91
        .value  121
        .value  152
        .value  182
        .value  213
        .value  244
        .value  274
        .value  305
        .value  335
        .value  366
        .ident  "GCC: (GNU) 4.5.2"
        .file   "mktime.c"
        .text
        .p2align 4,,15
        .type   ranged_convert, @function
ranged_convert:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $56, %esp
        movl    %ecx, 4(%esp)
        movl    %ebx, -12(%ebp)
        movl    %edx, %ebx
        movl    %esi, -8(%ebp)
        movl    %edi, -4(%ebp)
        movl    %eax, -28(%ebp)
        movl    %ecx, -32(%ebp)
        movl    %edx, (%esp)
        call    *%eax
        testl   %eax, %eax
        je      .L11
.L2:
        movl    -12(%ebp), %ebx
        movl    -8(%ebp), %esi
        movl    -4(%ebp), %edi
        movl    %ebp, %esp
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L11:
        movl    (%ebx), %esi
        testl   %esi, %esi
        je      .L2
        xorl    %edi, %edi
        jmp     .L9
        .p2align 4,,7
        .p2align 3
.L6:
        movl    %esi, %edx
        movl    %edi, %eax
        sarl    %eax
        sarl    %edx
        addl    %eax, %edx
        movl    %esi, %eax
        andl    %edi, %eax
        andl    $1, %eax
        addl    %eax, %edx
        movl    -32(%ebp), %eax
        movl    %edx, (%ebx)
        movl    %edx, -36(%ebp)
        movl    %ebx, (%esp)
        movl    %eax, 4(%esp)
        call    *-28(%ebp)
        movl    -36(%ebp), %edx
        testl   %eax, %eax
        cmovl.ne        %edx, %edi
        cmovl.e %edx, %esi
.L9:
        movl    %esi, %edx
        sarl    $31, %edx
        orl     $1, %edx
        addl    %edi, %edx
        cmpl    %esi, %edx
        jne     .L6
        testl   %edi, %edi
        je      .L2
        testl   %eax, %eax
        jne     .L2
        movl    -32(%ebp), %eax
        movl    %edi, (%ebx)
        movl    %ebx, (%esp)
        movl    %eax, 4(%esp)
        call    *-28(%ebp)
        jmp     .L2
        .size   ranged_convert, .-ranged_convert
        .p2align 4,,15
        .type   guess_time_tm.clone.0, @function
guess_time_tm.clone.0:
        pushl   %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        movl    %eax, %ebx
        subl    $24, %esp
        movl    68(%esp), %ecx
        movl    44(%esp), %eax
        testl   %ecx, %ecx
        movl    %eax, 12(%esp)
        je      .L13
        movl    68(%esp), %ecx
        movl    %ebx, %edi
        movl    %ebx, %eax
        shrdl   $2, %edx, %edi
        andl    $3, %eax
        addl    $475, %edi
        testl   %eax, %eax
        sete    %al
        movl    20(%ecx), %ecx
        movzbl  %al, %eax
        subl    %eax, %edi
        xorl    %eax, %eax
        movl    %ecx, %ebp
        sarl    $2, %ebp
        addl    $475, %ebp
        testb   $3, %cl
        sete    %al
        subl    %eax, %ebp
        movl    $1374389535, %eax
        imull   %edi
        movl    %edi, %eax
        sarl    $31, %eax
        movl    %ecx, 4(%esp)
        subl    4(%esp), %ebx
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %ecx
        movl    %edi, %eax
        subl    %ecx, %eax
        movl    %eax, %ecx
        movl    $1374389535, %eax
        shrl    $31, %ecx
        subl    %ecx, %edx
        movl    %edx, 8(%esp)
        imull   %ebp
        movl    %ebp, %eax
        sarl    $31, %eax
        imull   $365, %ebx, %ebx
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %ecx
        movl    %ebp, %eax
        subl    %ecx, %eax
        movl    %eax, %ecx
        movl    60(%esp), %eax
        shrl    $31, %ecx
        subl    %ecx, %edx
        movl    68(%esp), %ecx
        addl    %edx, %edi
        subl    %ebp, %edi
        sarl    $2, %edx
        subl    (%ecx), %eax
        subl    %edx, %edi
        movl    8(%esp), %edx
        subl    8(%esp), %edi
        movl    %eax, 16(%esp)
        movl    56(%esp), %eax
        subl    4(%ecx), %eax
        sarl    $2, %edx
        addl    %edx, %edi
        movl    %eax, 20(%esp)
        movl    52(%esp), %eax
        subl    8(%ecx), %eax
        movl    %eax, (%esp)
        movl    12(%esp), %eax
        subl    28(%ecx), %eax
        movl    %eax, %ecx
        movl    64(%esp), %eax
        addl    %ebx, %ecx
        addl    %edi, %ecx
        leal    (%ecx,%ecx,2), %edx
        movl    (%esp), %ecx
        leal    (%ecx,%edx,8), %edx
        imull   $60, %edx, %edx
        addl    20(%esp), %edx
        imull   $60, %edx, %edx
        addl    16(%esp), %edx
        leal    (%edx,%eax), %eax
        cmpl    64(%esp), %eax
        setge   %cl
        shrl    $31, %edx
        cmpb    %dl, %cl
        jne     .L14
.L13:
        movl    64(%esp), %eax
        testl   %eax, %eax
        js      .L18
        movl    64(%esp), %edx
        movl    $2147483647, %eax
        subl    $1, %edx
        cmpl    $2147483646, 64(%esp)
        cmovl.ge        %edx, %eax
.L14:
        addl    $24, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L18:
        movl    64(%esp), %edx
        movl    $-2147483648, %eax
        addl    $1, %edx
        cmpl    $-2147483647, 64(%esp)
        cmovl.le        %edx, %eax
        addl    $24, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .size   guess_time_tm.clone.0, .-guess_time_tm.clone.0
.globl __moddi3
.globl __divdi3
        .p2align 4,,15
.globl mktime_internal
        .type   mktime_internal, @function
mktime_internal:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        subl    $220, %esp
        movl    8(%ebp), %eax
        movl    8(%ebp), %edx
        movl    8(%ebp), %edi
        movl    (%eax), %eax
        movl    4(%edx), %edx
        movl    8(%edi), %edi
        movl    %eax, -176(%ebp)
        movl    8(%ebp), %eax
        movl    %edx, -164(%ebp)
        movl    8(%ebp), %edx
        movl    %edi, -168(%ebp)
        movl    12(%eax), %eax
        movl    16(%edx), %ecx
        movl    20(%edx), %edi
        movl    %eax, -124(%ebp)
        movl    32(%edx), %eax
        movl    %edi, -128(%ebp)
        movl    $715827883, %edi
        movl    %eax, -160(%ebp)
        movl    %ecx, %eax
        imull   %edi
        movl    %ecx, %eax
        sarl    $31, %eax
        movl    %edx, %edi
        sarl    %edi
        subl    %eax, %edi
        leal    (%edi,%edi,2), %eax
        movl    %edi, %ebx
        sall    $2, %eax
        movl    %ecx, %edi
        subl    %eax, %edi
        movl    -128(%ebp), %eax
        movl    %edi, %ecx
        shrl    $31, %ecx
        subl    %ecx, %ebx
        movl    %ebx, %esi
        movl    %eax, %edx
        sarl    $31, %edx
        sarl    $31, %esi
        addl    %eax, %ebx
        adcl    %edx, %esi
        movl    %ebx, %edx
        xorl    %eax, %eax
        andl    $3, %edx
        movl    %edx, -148(%ebp)
        jne     .L20
        movl    $100, 8(%esp)
        movl    $0, 12(%esp)
        movl    %ebx, (%esp)
        movl    %esi, 4(%esp)
        movl    %ecx, -184(%ebp)
        call    __moddi3
        movl    -184(%ebp), %ecx
        movl    %eax, -132(%ebp)
        movl    $1, %eax
        orl     -132(%ebp), %edx
        je      .L56
.L20:
        leal    (%eax,%eax), %edx
        addl    %eax, %edx
        leal    (%eax,%edx,4), %eax
        leal    (%ecx,%ecx), %edx
        leal    (%edx,%ecx), %ecx
        leal    (%edi,%ecx,4), %edx
        addl    %edx, %eax
        movzwl  __mon_yday(%eax,%eax), %eax
        subl    $1, %eax
        movl    %eax, -144(%ebp)
        movl    %eax, %edi
        movl    -124(%ebp), %eax
        sarl    $31, %edi
        movl    %edi, -140(%ebp)
        movl    %eax, %edx
        sarl    $31, %edx
        addl    %eax, -144(%ebp)
        adcl    %edx, -140(%ebp)
        movl    16(%ebp), %edx
        movl    -176(%ebp), %eax
        movl    (%edx), %edx
        testl   %eax, %eax
        movl    $0, -132(%ebp)
        movl    %edx, -180(%ebp)
        js      .L22
        cmpl    $59, -176(%ebp)
        movl    $59, %edi
        cmovl.le        -176(%ebp), %edi
        movl    %edi, -132(%ebp)
.L22:
        movl    %ebx, %eax
        movl    $1374389535, %edx
        shrdl   $2, %esi, %eax
        leal    475(%eax), %ecx
        xorl    %eax, %eax
        cmpl    $0, -148(%ebp)
        sete    %al
        subl    %eax, %ecx
        movl    %ecx, %eax
        movl    %ecx, %edi
        imull   %edx
        movl    %ecx, %eax
        sarl    $31, %eax
        sarl    $3, %edx
        subl    %eax, %edx
        leal    (%edx,%edx,4), %eax
        leal    (%eax,%eax,4), %eax
        subl    %eax, %edi
        movl    %edi, %eax
        movl    -144(%ebp), %edi
        shrl    $31, %eax
        subl    %eax, %edx
        leal    -70(%ebx), %eax
        imull   $365, %eax, %eax
        leal    (%eax,%edi), %edi
        movl    %edx, %eax
        sarl    $2, %eax
        leal    -477(%ecx,%eax), %eax
        subl    %edx, %eax
        movl    -168(%ebp), %edx
        leal    (%edi,%eax), %eax
        leal    (%eax,%eax,2), %eax
        leal    (%edx,%eax,8), %eax
        movl    -128(%ebp), %edx
        imull   $60, %eax, %eax
        addl    -164(%ebp), %eax
        sarl    %edx
        imull   $60, %eax, %eax
        addl    -180(%ebp), %eax
        addl    -132(%ebp), %eax
        movl    %eax, -172(%ebp)
        movl    -124(%ebp), %eax
        sarl    $10, %eax
        leal    -35(%edx,%eax), %ecx
        movl    -168(%ebp), %eax
        sarl    $14, %eax
        addl    %eax, %ecx
        movl    -164(%ebp), %eax
        sarl    $20, %eax
        addl    %eax, %ecx
        movl    -172(%ebp), %eax
        sarl    $26, %eax
        subl    %ecx, %eax
        movl    %eax, %edx
        sarl    $31, %edx
        xorl    %eax, %edx
        cmpl    $21, %edx
        jg      .L57
.L24:
        movl    -172(%ebp), %edi
        movl    $0, -148(%ebp)
        movl    $6, -128(%ebp)
        movl    %edi, -32(%ebp)
        movl    %edi, -28(%ebp)
        movl    %edi, -124(%ebp)
.L27:
        movl    12(%ebp), %eax
        leal    -72(%ebp), %ecx
        leal    -28(%ebp), %edx
        call    ranged_convert
        movl    -132(%ebp), %edx
        movl    -28(%ebp), %edi
        movl    %edx, 16(%esp)
        movl    -168(%ebp), %edx
        movl    %edi, 20(%esp)
        movl    %eax, 24(%esp)
        movl    -164(%ebp), %eax
        movl    %edx, 8(%esp)
        movl    -140(%ebp), %edx
        movl    %eax, 12(%esp)
        movl    -144(%ebp), %eax
        movl    %edx, 4(%esp)
        movl    %esi, %edx
        movl    %eax, (%esp)
        movl    %ebx, %eax
        call    guess_time_tm.clone.0
        cmpl    %eax, %edi
        je      .L58
        cmpl    %edi, -124(%ebp)
        jne     .L28
        movl    -124(%ebp), %edx
        cmpl    -32(%ebp), %edx
        je      .L28
        movl    -40(%ebp), %edx
        testl   %edx, %edx
        js      .L29
        movl    -160(%ebp), %ecx
        testl   %ecx, %ecx
        js      .L59
        movl    -160(%ebp), %ecx
        testl   %edx, %edx
        setne   %dl
        testl   %ecx, %ecx
        setne   %cl
        cmpb    %cl, %dl
        jne     .L29
.L28:
        subl    $1, -128(%ebp)
        je      .L46
        movl    -32(%ebp), %edx
        movl    %eax, -28(%ebp)
        xorl    %eax, %eax
        cmpl    $0, -40(%ebp)
        movl    %edi, -32(%ebp)
        movl    %edx, -124(%ebp)
        setne   %al
        movl    %eax, -148(%ebp)
        jmp     .L27
        .p2align 4,,7
        .p2align 3
.L59:
        testl   %edx, %edx
        setne   %dl
        movzbl  %dl, %edx
        cmpl    %edx, -148(%ebp)
        jg      .L28
        .p2align 4,,7
        .p2align 3
.L29:
        movl    -180(%ebp), %eax
        movl    16(%ebp), %edi
        subl    -172(%ebp), %eax
        addl    -124(%ebp), %eax
        movl    %eax, (%edi)
        movl    -72(%ebp), %eax
        cmpl    %eax, -176(%ebp)
        jne     .L60
.L37:
        movl    -72(%ebp), %eax
        movl    8(%ebp), %edi
        movl    %eax, (%edi)
        movl    -68(%ebp), %eax
        movl    %eax, 4(%edi)
        movl    -64(%ebp), %eax
        movl    %eax, 8(%edi)
        movl    -60(%ebp), %eax
        movl    %eax, 12(%edi)
        movl    -56(%ebp), %eax
        movl    %eax, 16(%edi)
        movl    -52(%ebp), %eax
        movl    %eax, 20(%edi)
        movl    -48(%ebp), %eax
        movl    %eax, 24(%edi)
        movl    -44(%ebp), %eax
        movl    %eax, 28(%edi)
        movl    -40(%ebp), %eax
        movl    %eax, 32(%edi)
        movl    -124(%ebp), %eax
        addl    $220, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L46:
        movl    $-1, -124(%ebp)
.L26:
        movl    -124(%ebp), %eax
        addl    $220, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
.L56:
        movl    $100, 8(%esp)
        movl    $0, 12(%esp)
        movl    %ebx, (%esp)
        movl    %esi, 4(%esp)
        call    __divdi3
        movl    -184(%ebp), %ecx
        andl    $3, %eax
        cmpl    $1, %eax
        sete    %al
        movzbl  %al, %eax
        jmp     .L20
        .p2align 4,,7
        .p2align 3
.L58:
        movl    -160(%ebp), %eax
        movl    -40(%ebp), %edx
        movl    %edi, -124(%ebp)
        testl   %eax, %eax
        movl    -160(%ebp), %eax
        sete    -148(%ebp)
        orl     %edx, %eax
        notl    %eax
        shrl    $31, %eax
        testl   %edx, %edx
        sete    %dl
        xorb    -148(%ebp), %dl
        testl   %edx, %eax
        je      .L29
        movl    $-601200, -128(%ebp)
        movl    $1202400, -124(%ebp)
        movl    %ebx, -160(%ebp)
        movl    %esi, -156(%ebp)
        jmp     .L32
        .p2align 4,,7
        .p2align 3
.L33:
        addl    $2, %esi
        addl    -124(%ebp), %ebx
        cmpl    $3, %esi
        jne     .L36
        addl    $1202400, -124(%ebp)
        subl    $601200, -128(%ebp)
        cmpl    $538675200, -124(%ebp)
        je      .L61
.L32:
        movl    -128(%ebp), %ebx
        movl    $-1, %esi
.L36:
        leal    (%edi,%ebx), %eax
        movl    %ebx, %edx
        cmpl    %edi, %eax
        setge   %cl
        shrl    $31, %edx
        cmpb    %dl, %cl
        je      .L33
        movl    %eax, -36(%ebp)
        movl    12(%ebp), %eax
        leal    -36(%ebp), %edx
        leal    -108(%ebp), %ecx
        call    ranged_convert
        movl    -76(%ebp), %eax
        movl    %eax, %edx
        notl    %edx
        shrl    $31, %edx
        testl   %eax, %eax
        sete    %al
        xorb    -148(%ebp), %al
        testl   %eax, %edx
        je      .L55
        movl    -28(%ebp), %edi
        jmp     .L33
.L57:
        movl    -172(%ebp), %edi
        movl    $-1, -124(%ebp)
        notl    %edi
        movl    %edi, %eax
        sarl    $26, %eax
        subl    %ecx, %eax
        movl    %eax, %edx
        sarl    $31, %edx
        xorl    %eax, %edx
        cmpl    $21, %edx
        jg      .L26
        movl    %edi, %eax
        subl    -172(%ebp), %eax
        movl    %edi, -172(%ebp)
        addl    %eax, -180(%ebp)
        jmp     .L24
.L55:
        movl    -36(%ebp), %eax
        leal    -108(%ebp), %edx
        movl    %edx, 24(%esp)
        movl    -168(%ebp), %edx
        movl    -160(%ebp), %ebx
        movl    -156(%ebp), %esi
        movl    %eax, 20(%esp)
        movl    -164(%ebp), %eax
        movl    -132(%ebp), %edi
        movl    %edx, 8(%esp)
        movl    -140(%ebp), %edx
        movl    %eax, 12(%esp)
        movl    -144(%ebp), %eax
        movl    %edi, 16(%esp)
        movl    %edx, 4(%esp)
        movl    %esi, %edx
        movl    %eax, (%esp)
        movl    %ebx, %eax
        call    guess_time_tm.clone.0
        leal    -28(%ebp), %edx
        leal    -72(%ebp), %ecx
        movl    %eax, -28(%ebp)
        movl    12(%ebp), %eax
        call    ranged_convert
        movl    -28(%ebp), %edx
        movl    %edx, -124(%ebp)
        jmp     .L29
.L60:
        movl    -132(%ebp), %esi
        xorl    %ebx, %ebx
        testl   %esi, %esi
        jne     .L38
        xorl    %ebx, %ebx
        cmpl    $60, %eax
        sete    %bl
.L38:
        movl    -124(%ebp), %eax
        movl    -176(%ebp), %ecx
        addl    -176(%ebp), %eax
        cmpl    -124(%ebp), %eax
        movl    $-1, -124(%ebp)
        setge   %dl
        shrl    $31, %ecx
        cmpb    %cl, %dl
        je      .L26
        subl    -132(%ebp), %ebx
        leal    (%ebx,%eax), %edx
        cmpl    %edx, %eax
        setle   %al
        shrl    $31, %ebx
        cmpb    %bl, %al
        je      .L26
        leal    -72(%ebp), %eax
        movl    %eax, 4(%esp)
        leal    -32(%ebp), %eax
        movl    %edx, -32(%ebp)
        movl    %eax, (%esp)
        call    *12(%ebp)
        testl   %eax, %eax
        je      .L26
        movl    -32(%ebp), %edx
        movl    %edx, -124(%ebp)
        jmp     .L37
        .p2align 4,,7
        .p2align 3
.L61:
        movl    %edi, -124(%ebp)
        jmp     .L29
        .size   mktime_internal, .-mktime_internal
        .p2align 4,,15
.globl rpl_mktime
        .type   rpl_mktime, @function
rpl_mktime:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        movl    8(%ebp), %eax
        movl    $localtime_offset, 8(%esp)
        movl    $localtime_r, 4(%esp)
        movl    %eax, (%esp)
        call    mktime_internal
        leave
        ret
        .size   rpl_mktime, .-rpl_mktime
        .local  localtime_offset
        .comm   localtime_offset,4,4
        .section        .rodata
        .align 32
        .type   __mon_yday, @object
        .size   __mon_yday, 52
__mon_yday:
        .value  0
        .value  31
        .value  59
        .value  90
        .value  120
        .value  151
        .value  181
        .value  212
        .value  243
        .value  273
        .value  304
        .value  334
        .value  365
        .value  0
        .value  31
        .value  60
        .value  91
        .value  121
        .value  152
        .value  182
        .value  213
        .value  244
        .value  274
        .value  305
        .value  335
        .value  366
        .ident  "GCC: (GNU) 4.5.2"

Reply via email to