This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [PATCH] Change export behavior for PE files
- From: Christopher Faylor <me at cgf dot cx>
- To: Filip Navara <xnavara at volny dot cz>, binutils at sources dot redhat dot com
- Date: Tue, 7 Jun 2005 11:52:06 -0400
- Subject: Re: [PATCH] Change export behavior for PE files
- References: <4231AB85.1030005@volny.cz>
On Fri, Mar 11, 2005 at 03:30:29PM +0100, Filip Navara wrote:
>I guess this one will not get accepted and you'll tell me that it's not
>bug, but feature. Anyway I decided to at least try to push this patch
>since I need to generate export-less DLLs and I don't see any other way
>to do it when "-shared" is used.
Hi.
Is there any progress with getting the assignment in place so that this
patch can be applied?
cgf
>2005-03-11 Filip Navara <navaraf@reactos.com>
>
> * ld/pe-dll.c (process_def_file, pe_dll_build_sections,
> pe_dll_fill_sections): Don't export all symbols for shared
> libraries when --export-all-symbols is not specified and
> no .def file is specified.
>
>--- ld/pe-dll.c Sun Oct 24 03:00:12 2004
>+++ ld/pe-dll.c Fri Mar 11 14:36:31 2005
>@@ -526,8 +542,7 @@
>
> /* If we are not building a DLL, when there are no exports
> we do not build an export table at all. */
>- if (!pe_dll_export_everything && pe_def_file->num_exports == 0
>- && info->executable)
>+ if (!pe_dll_export_everything && pe_def_file->num_exports == 0)
> return;
>
> /* Now, maybe export everything else the default way. */
>@@ -2630,8 +2701,13 @@
> if (pe_def_file->num_exports == 0 && !info->shared)
> return;
>
>- generate_edata (abfd, info);
>- build_filler_bfd (1);
>+ if (pe_def_file->num_exports > 0)
>+ {
>+ generate_edata (abfd, info);
>+ build_filler_bfd (1);
>+ }
>+ else
>+ build_filler_bfd (0);
> }
>
> void
>@@ -2663,13 +2739,16 @@
> lang_do_assignments (stat_ptr->head, abs_output_section, NULL, 0);
> }
>
>- fill_edata (abfd, info);
>-
> if (info->shared && !info->pie)
> pe_data (abfd)->dll = 1;
>
>- edata_s->contents = edata_d;
> reloc_s->contents = reloc_d;
>+
>+ if (pe_def_file->num_exports > 0)
>+ {
>+ fill_edata (abfd, info);
>+ edata_s->contents = edata_d;
>+ }
> }
>
> void