aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2004-09-30 17:19:19 +0000
committerNick Clifton <nickc@redhat.com>2004-09-30 17:19:19 +0000
commitdb8acf26ca5d066a8cb97b8a80590886cfd04b77 (patch)
tree5250d0ac6cde35d4465b1e9c9f5e215bc0103237
parent9fe0b840a939461c776528aa63315f4228688ce3 (diff)
downloadgdb-db8acf26ca5d066a8cb97b8a80590886cfd04b77.zip
gdb-db8acf26ca5d066a8cb97b8a80590886cfd04b77.tar.gz
gdb-db8acf26ca5d066a8cb97b8a80590886cfd04b77.tar.bz2
emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Generate correct base
address for position independant executables. pe-dll.c (pe_dll_fill_sections): Don't mark position independant executables as DLLs.
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/emultempl/pe.em2
-rw-r--r--ld/pe-dll.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f9a0780..4f915c5 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-30 Filip Navara <navaraf@reactos.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Generate
+ correct base address for position independant executables.
+ * pe-dll.c (pe_dll_fill_sections): Don't mark position independant
+ executables as DLLs.
+
2004-09-30 Paul Brook <paul@codesourcery.com>
* ld.texinfo: Document --target2=abs.
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 9ff5c9c..9f39aa6 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -665,7 +665,7 @@ gld_${EMULATION_NAME}_set_symbols (void)
{
if (link_info.relocatable)
init[IMAGEBASEOFF].value = 0;
- else if (init[DLLOFF].value || link_info.shared)
+ else if (init[DLLOFF].value || (link_info.shared && !link_info.pie))
#ifdef DLL_SUPPORT
init[IMAGEBASEOFF].value = (pe_enable_auto_image_base) ?
compute_dll_image_base (output_filename) : NT_DLL_IMAGE_BASE;
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 0d0ecda..8813de6 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -2665,7 +2665,7 @@ pe_dll_fill_sections (bfd *abfd, struct bfd_link_info *info)
fill_edata (abfd, info);
- if (info->shared)
+ if (info->shared && !info->pie)
pe_data (abfd)->dll = 1;
edata_s->contents = edata_d;