This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Win32 Shared libraries and constant arrays
- From: Danny Smith <danny_r_smith_2001 at yahoo dot co dot nz>
- To: Pascal Obry <obry at act-europe dot fr>
- Cc: binutils <binutils at sources dot redhat dot com>
- Date: Mon, 2 Feb 2004 09:22:59 +1100 (EST)
- Subject: Re: Win32 Shared libraries and constant arrays
--- Pascal Obry <obry@act-europe.fr> wrote: >
> Here is the problem. The auto-import feature for non scalar syms works only
> if the syms are the DATA section. So for constant arrays this not working.
> The following simple example will not work properly:
>
> clib.c:
>
> const char arr[] = "azertyazertyazertyazertyazertyazertyazertyazertyazerty";
>
> $ gcc -shared -o clib.dll clib.c
>
> main.c:
>
> #include <stdio.h>
>
> extern const char arr[];
>
> int main (void)
> {
> int k;
>
> for (k=0; k<6; k++)
> printf ("arr[%d]=%c\n", k, arr[k]);
> }
>
> $ gcc -o main main.c clib.dll
> $ ./main
> arr[0]=ÿ
> arr[1]=%
> arr[2]=à
> arr[3]=`
> arr[4]=@
> arr[5]=
>
> Of course the obvious fix is to remove the "const" attribute. But this is not
> a general solution. The problem occurs, for example, in the standard Ada
> libraries where it is not an option to change a constant to a variable (the
> spec are part of the standard).
>
> Is there a solution with the current GCC ?
>
> If not a solution would be to add an option to GCC for force all such syms
> into the DATA section.
>
> Thoughts ?
>
This is fixed with 3.4 GCC (initialized constants are put in .rdata section)
2003-10-07 Danny Smith <dannysmith@users.sourceforge.net>
* config/i386/cygming.h (READONLY_DATA_SECTION_ASM_OP): Define.
(switch_to_section): Handle in_readonly_data.
* config/i386/winnt.c (i386_pe_asm_named_section): Handle
readonly data.
and current binutils (when doing direct imports from dll, .rdata section
as well as .data is scanned for data symbols)
2003-10-14 Danny Smith <dannysmith@users.sourceforge.net>
* pe-dll.c (pe_implied_import_dll): Also scan .rdata sections
to identify data symbols.
Danny
> Thanks,
> Pascal.
>
> --
>
> --|------------------------------------------------------
> --| Pascal Obry Team-Ada Member
> --| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
> --|------------------------------------------------------
> --| http://perso.wanadoo.fr/pascal.obry
> --| "The best way to travel is by means of imagination"
> --|
> --| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
>
http://greetings.yahoo.com.au - Yahoo! Greetings
Send your love online with Yahoo! Greetings - FREE!