Mail Archives: cygwin/1997/07/07/07:39:39
I am still having problem using ld to produce working dlls. I have
converted the .lib files I wish to link against into .a files using
dlltool (and using nm to create the .def file). However, when I try to
link to produce another dll, I find the dll I get is missing its
..rdata, .idata and .reloc sections. It also doesn't seem to work very
well. I append the linker script and ld command line I used. Here's
what objdump thinks of the result, which was produced without error by
ld.
C:\dyl>objdump --headers threads.dll
threads.dll: file format pei-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000200 00401000 000000fd 000002b8 2**2
CONTENTS, ALLOC, LOAD, RELOC, CODE
1 .dyvar 00000200 00402000 00000004 000004b8 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .dyfix 00000200 00403000 0000000b 000006b8 2**2
CONTENTS, ALLOC, LOAD, RELOC, DATA
And here's what I think objdump should have produced, or something
like it (this was produced by link).
C:\dyl>objdump --headers j:/releases\pentium-kan/install\x86-win32\bin\threads.dll
j:/releases\pentium-kan/install\x86-win32\bin\threads.dll: file format pei-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000200 10001000 00000154 00000400 2**2
CONTENTS, ALLOC, LOAD, CODE
1 .rdata 00000200 10002000 00000126 00000600 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .idata 00000400 10003000 000002c8 00000800 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .dyvar 00000200 10004000 00000004 00000c00 2**2
CONTENTS, ALLOC, LOAD, DATA
4 .dyfix 00000200 10005000 0000000b 00000e00 2**2
CONTENTS, ALLOC, LOAD, DATA
5 .reloc 00000200 10006000 00000074 00001000 2**2
CONTENTS, ALLOC, LOAD, DATA
Finally, here's the link command and script.
ld -T i386pe.scr -r -E -e _DylanDllEntry AT 12 -o threads.dll --traditional-format -L. -ldylan j:/releases/pentium-kan/build/x86-win32/threads/_glue.obj j:/releases/pentium-kan/build/x86-win32/threads/threads-library.obj j:/releases/pentium-kan/lib/pentium-run-time/dylan-support.obj
OUTPUT_FORMAT(pei-i386)
TARGET(pe-i386)
SECTIONS
{
.text __image_base__ + __section_alignment__ :
{
*(.init)
*(.text)
___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
LONG (-1); *(.ctors); *(.ctor); LONG (0);
___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); LONG (0);
*(.fini)
/* ??? Why is .gcc_exc here? */
*(.gcc_exc)
etext = .;
/* Grouped section support currently must be explicitly provided for
in the linker script. */
*(.text$)
}
.bss BLOCK(__section_alignment__) :
{
__bss_start__ = . ;
*(.bss)
*(COMMON)
__bss_end__ = . ;
}
.data BLOCK(__section_alignment__) :
{
__data_start__ = . ;
*(.data)
*(.data2)
__data_end__ = . ;
/* Grouped section support currently must be explicitly provided for
in the linker script. */
*(.data$)
}
.rdata BLOCK(__section_alignment__) :
{
*(.rdata)
/* Grouped section support currently must be explicitly provided for
in the linker script. */
*(.rdata$)
}
.edata BLOCK(__section_alignment__) :
{
*(.edata)
}
.dydat BLOCK(0x1000) :
{
*(.dydat$a)
*(.dydat$m)
*(.dydat$z)
}
.dyobj BLOCK(0x1000) :
{
*(.dyobj$a)
*(.dyobj$m)
*(.dyobj$z)
}
.dyvar BLOCK(0x1000) :
{
*(.dyvar$a)
*(.dyvar$m)
*(.dyvar$z)
}
.dyfix BLOCK(0x1000) :
{
*(.dyfix$a)
*(.dyfix$m)
*(.dyfix$z)
}
/DISCARD/ :
{
*(.debug$S)
*(.debug$T)
*(.debug$F)
*(.drectve)
}
.idata BLOCK(__section_alignment__) :
{
/* This cannot currently be handled with grouped sections.
See pe.em:sort_sections. */
*(.idata$2)
*(.idata$3)
*(.idata$4)
*(.idata$5)
*(.idata$6)
*(.idata$7)
}
.CRT BLOCK(__section_alignment__) :
{
/* Grouped sections are used to handle .CRT$foo. */
*(.CRT$)
}
.tls BLOCK(__section_alignment__) :
{
*(.tls$)
;
}
.rsrc BLOCK(__section_alignment__) :
{
/* Grouped sections are used to handle .rsrc$0[12]. */
*(.rsrc$)
}
.endjunk BLOCK(__section_alignment__) :
{
/* end is deprecated, don't use it */
end = .;
__end__ = .;
}
.stab BLOCK(__section_alignment__) (NOLOAD) :
{
[ .stab ]
}
.stabstr BLOCK(__section_alignment__) (NOLOAD) :
{
[ .stabstr ]
}
.reloc BLOCK(__section_alignment__) :
{
*(.reloc)
}
}
------- end -------
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -