target/10431: improper __attribute__((dllimport)) handling

TROCHU Xavier xtrochu@yahoo.com
Mon Apr 21 22:26:00 GMT 2003


The following reply was made to PR target/10431; it has been noted by GNATS.

From: TROCHU Xavier <xtrochu@yahoo.com>
To: <mmitchel@gcc.gnu.org>, <gcc-bugs@gcc.gnu.org>, <gcc-prs@gcc.gnu.org>,
  <gcc-gnats@gcc.gnu.org>
Cc:  
Subject: Re: target/10431: improper __attribute__((dllimport)) handling
Date: Mon, 21 Apr 2003 15:17:58 -0700 (PDT)

 I checked your patch and it shows the same behaviour
 as the previous one 
 (i.e. an incorrect behaviour).
 
 mainline can't be bootstrapped under mingw with this
 patch. Notice that
 stdout under mingw is declared really like this :
 extern __attribute__((dllimport)) FILE * _iob[1];
 and obviously,  this bug
 
 This is the test I tried again :
 ================= rtest.i =============
 
 extern __attribute__((dllimport)) int foo;
 extern __attribute__((dllimport)) int foo2[];
 
 int bar() {
     return foo;
 }
 
 int bar2(int i)  {
     int * p = &foo2[i];
     return *p;
 }
 ==================================
 with winnt.c reverted to version 1.42 (but with patch
 from 1.43 to 1.44 
 inserted) I get the following output,
 which is correct and the same as gcc 3.2.2
 ================= rtest.ori.s =========
     .file    "rtest.i"
     .text
 ..globl _bar
     .def    _bar;    .scl    2;    .type    32;   
 .endef
 _bar:
     pushl    %ebp
     movl    %esp, %ebp
     movl    __imp__foo, %eax
     movl    (%eax), %eax
     popl    %ebp
     ret
 ..globl _bar2
     .def    _bar2;    .scl    2;    .type    32;   
 .endef
 _bar2:
     pushl    %ebp
     movl    %esp, %ebp
     subl    $4, %esp
     movl    8(%ebp), %eax
     sall    $2, %eax
     addl    __imp__foo2, %eax
     movl    %eax, -4(%ebp)
     movl    -4(%ebp), %eax
     movl    (%eax), %eax
     leave
     ret
 ====================================
 with winnt.c version 1.45 (current) or 1.44 the output
 is as the following.
 ================== rtest.new.s ==========
     .file    "rtest.i"
     .text
 ..globl _bar
     .def    _bar;    .scl    2;    .type    32;   
 .endef
 _bar:
     pushl    %ebp
     movl    %esp, %ebp
     movl    __imp__foo, %eax
     popl    %ebp
     ret
 ..globl _bar2
     .def    _bar2;    .scl    2;    .type    32;   
 .endef
 _bar2:
     pushl    %ebp
     movl    %esp, %ebp
     subl    $4, %esp
     movl    8(%ebp), %eax
     leal    0(,%eax,4), %edx
     movl    $__imp__foo2, %eax
     addl    %edx, %eax
     movl    %eax, -4(%ebp)
     movl    -4(%ebp), %eax
     movl    (%eax), %eax
     leave
     ret
 ======================================
 
 I really would like to be able to help correcting this
 bug, but I really 
 lack a lot of knowledge of GCC internal for that.
 But if you think I can help you testing thing, don't
 hesitate to ask.
 
 Greetings,
 
 Xavier
 
 mmitchel@gcc.gnu.org wrote:
 
 >Synopsis: improper __attribute__((dllimport))
 handling
 >
 >State-Changed-From-To: open->closed
 >State-Changed-By: mmitchel
 >State-Changed-When: Mon Apr 21 20:59:27 2003
 >State-Changed-Why:
 >    Fixed in GCC 3.3, GCC 3.4.
 >
 >http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10431
 >
 >  
 >
 
 
 __________________________________________________
 Do you Yahoo!?
 The New Yahoo! Search - Faster. Easier. Bingo
 http://search.yahoo.com



More information about the Gcc-prs mailing list