[PATCH] gcc3/ld patch for direct-linking-to-dll and auto-importsupport

Danny Smith danny_r_smith_2001@yahoo.co.nz
Mon Sep 8 01:28:00 GMT 2003


Hello Nick, Ralf

> From: Nick Clifton <nickc at redhat dot com> 
> 
> Hi Ralf,
> 
> > while compiling trolltechs qt/xfree library with gcc3 (3.2x) on
> > cygwin I recognized, that the auto-import stuff in combination of
> > recent ld does not work in case of const variables in a dll when
> > using direct linking to a dll, because gcc put those variables into
> > a readonly, that means the .text section.
> >
> > The patch and a testcase is appended. A documentation could be found
> > in the patch file.
> 
> Are you sure that the current linker does not work ?
> 
> When I tried it, using the test case you supplied, but without the
> patch applied, I got this:
> 
>   % make
>   ../gcc/g++ -B ../gcc/ -g  -save-temps -c -o dll.o dll.cc
>   ../gcc/g++ -B ../gcc/ -g  --shared -L ../i686-pc-cygwin/newlib -L
../i686-pc-cygwin/libstdc++-v3/src/.libs dll.o -o dll.dll
>   ../gcc/g++ -B ../gcc/ -g  -save-temps -c -o client.o client.cc
>   ../gcc/g++ -B ../gcc/ -g  -o client client.o -L ../i686-pc-cygwin/newlib -L
../i686-pc-cygwin/libstdc++-v3/src/.libs -L. -ldll
>   Info: resolving _var by linking to __imp__var (auto-import)
>   Info: resolving test::var      by linking to __imp___ZN4test3varE (auto-import)
> 
> Cheers
>         Nick
>         


Yes, but try running ./client.exe.  Since the const data variables are
in .text section they are treated as functions, not data.  They are
imported without warning, but not as data.

Ralf, what about a  less intrusive approach? Compile dll
code with -fdata-sections. This will put const data in 
.rdata$foo sections.  Then, make pe_implied_import_dll()
scan .rdata as well as .data and .bss. for data symbols

I've tried that with your testcase and it seems to work.

Danny 

http://search.yahoo.com.au - Yahoo! Search
- Looking for more? Try the new Yahoo! Search



More information about the Binutils mailing list