diff --git a/Makefile b/Makefile index ed9a08d6e..c510ff3fe 100644 --- a/Makefile +++ b/Makefile @@ -225,7 +225,7 @@ clean: done distclean: clean - rm -f config-host.mak config-host.h $(DOCS) qemu-options.texi qemu-img-cmds.texi + rm -f config-host.mak config-host.h config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr} for d in $(TARGET_DIRS) libhw32 libhw64; do \ rm -rf $$d || exit 1 ; \ diff --git a/alpha.ld b/alpha.ld index 097544306..906d76bba 100644 --- a/alpha.ld +++ b/alpha.ld @@ -2,7 +2,6 @@ OUTPUT_FORMAT("elf64-alpha", "elf64-alpha", "elf64-alpha") OUTPUT_ARCH(alpha) ENTRY(__start) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/alpha-unknown-linux-gnu/lib); SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/arm.ld b/arm.ld index 93285d697..12b3edb5b 100644 --- a/arm.ld +++ b/arm.ld @@ -2,7 +2,6 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/alpha-unknown-linux-gnu/lib); SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/configure b/configure index 02cf9e774..8160bed17 100755 --- a/configure +++ b/configure @@ -1477,6 +1477,7 @@ fi config_host_mak="config-host.mak" config_host_h="config-host.h" +config_host_ld="config-host.ld" #echo "Creating $config_host_mak and $config_host_h" @@ -1784,6 +1785,18 @@ if test -f ${config_host_h}~ ; then fi fi +# generate list of library paths for linker script + +$ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld} + +if test -f ${config_host_ld}~ ; then + if cmp -s $config_host_ld ${config_host_ld}~ ; then + mv ${config_host_ld}~ $config_host_ld + else + rm ${config_host_ld}~ + fi +fi + for target in $target_list; do target_dir="$target" config_mak=$target_dir/config.mak @@ -2049,7 +2062,7 @@ if test "$target_linux_user" = "yes" -o "$target_linux_user" = "yes" ; then case "$ARCH" in i386) if test "$gprof" = "yes" -o "$static" = "yes" ; then - ldflags='-Wl,-T,$(SRC_PATH)/$(ARCH).ld' + ldflags='-Wl,-T../config-host.ld -Wl,-T,$(SRC_PATH)/$(ARCH).ld' else # WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object # that the kernel ELF loader considers as an executable. I think this @@ -2059,20 +2072,20 @@ if test "$target_linux_user" = "yes" -o "$target_linux_user" = "yes" ; then ;; sparc) # -static is used to avoid g1/g3 usage by the dynamic linker - ldflags='-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' + ldflags='-Wl,-T../config-host.ld -Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' ;; ia64) - ldflags='-Wl,-G0 -Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' + ldflags='-Wl,-G0 -Wl,-T../config-host.ld -Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' ;; x86_64|ppc|ppc64|s390|sparc64|alpha|arm|m68k|mips|mips64) - ldflags='-Wl,-T,$(SRC_PATH)/$(ARCH).ld' + ldflags='-Wl,-T../config-host.ld -Wl,-T,$(SRC_PATH)/$(ARCH).ld' ;; esac fi if test "$target_softmmu" = "yes" ; then case "$ARCH" in ia64) - ldflags='-Wl,-G0 -Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' + ldflags='-Wl,-G0 -Wl,-T../config-host.ld -Wl,-T,$(SRC_PATH)/$(ARCH).ld -static' ;; esac fi diff --git a/hppa.ld b/hppa.ld index 8ef7fa572..9a4b22c02 100644 --- a/hppa.ld +++ b/hppa.ld @@ -3,7 +3,6 @@ OUTPUT_FORMAT("elf32-hppa-linux", "elf32-hppa-linux", "elf32-hppa-linux") OUTPUT_ARCH(hppa:hppa1.1) ENTRY(_start) -SEARCH_DIR("/usr/hppa-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/i386.ld b/i386.ld index 9f4cb5b13..f2dafecc1 100644 --- a/i386.ld +++ b/i386.ld @@ -3,7 +3,6 @@ */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/alpha-unknown-linux-gnu/lib); ENTRY(_start) SECTIONS { diff --git a/ia64.ld b/ia64.ld index 8d2ede2d3..0c377967c 100644 --- a/ia64.ld +++ b/ia64.ld @@ -3,9 +3,7 @@ OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little") OUTPUT_ARCH(ia64) ENTRY(_start) -SEARCH_DIR("/usr/ia64-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); -/* Do we need any of these for elf? - __DYNAMIC = 0; */ +/* __DYNAMIC = 0; */ SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/m68k.ld b/m68k.ld index 28da902fd..0e3d9deb5 100644 --- a/m68k.ld +++ b/m68k.ld @@ -3,9 +3,7 @@ OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k") OUTPUT_ARCH(m68k) ENTRY(_start) -SEARCH_DIR("/usr/local/m68k-linux/lib"); -/* Do we need any of these for elf? - __DYNAMIC = 0; */ +/* __DYNAMIC = 0; */ SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/mips.ld b/mips.ld index 94fa63be4..4294761c1 100644 --- a/mips.ld +++ b/mips.ld @@ -3,7 +3,6 @@ OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradlittlemips") OUTPUT_ARCH(mips) ENTRY(__start) -SEARCH_DIR("/usr/mips-linux-gnu/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/ppc.ld b/ppc.ld index 1e6bbe9a6..5248ef15a 100644 --- a/ppc.ld +++ b/ppc.ld @@ -3,7 +3,6 @@ */ OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc") OUTPUT_ARCH(powerpc:common) -SEARCH_DIR(/usr/powerpc-linux-gnu/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib) ENTRY(_start) SECTIONS { diff --git a/ppc64.ld b/ppc64.ld index 1ba888301..dea0dbda2 100644 --- a/ppc64.ld +++ b/ppc64.ld @@ -3,13 +3,7 @@ OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") OUTPUT_ARCH(powerpc:common64) ENTRY(_start) -SEARCH_DIR("/usr/powerpc64-unknown-linux-gnu/lib64"); -SEARCH_DIR("/usr/lib/binutils/powerpc64-unknown-linux-gnu/2.16.164"); -SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); -SEARCH_DIR("/usr/powerpc64-unknown-linux-gnu/lib"); -SEARCH_DIR("/usr/lib/binutils/powerpc64-unknown-linux-gnu/2.16.1"); -SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); /* Do we -need any of these for elf? + __DYNAMIC = 0; */ +/* __DYNAMIC = 0; */ SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/s390.ld b/s390.ld index ccae2e71d..a9c53707f 100644 --- a/s390.ld +++ b/s390.ld @@ -2,9 +2,7 @@ OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") OUTPUT_ARCH(s390:31-bit) ENTRY(_start) -SEARCH_DIR("/usr/s390-redhat-linux/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); -/* Do we need any of these for elf? - __DYNAMIC = 0; */ +/* __DYNAMIC = 0; */ SECTIONS { /* Read-only sections, merged into text segment: */ diff --git a/sparc.ld b/sparc.ld index 26ab4151f..5aed1c2aa 100644 --- a/sparc.ld +++ b/sparc.ld @@ -1,7 +1,6 @@ OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") OUTPUT_ARCH(sparc) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/alpha-unknown-linux-gnu/lib); ENTRY(_start) SECTIONS { diff --git a/sparc64.ld b/sparc64.ld index f7286346c..9ea41431e 100644 --- a/sparc64.ld +++ b/sparc64.ld @@ -1,7 +1,6 @@ OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") OUTPUT_ARCH(sparc:v9) -SEARCH_DIR(/lib64); SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib64); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib64); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/alpha-unknown-linux-gnu/lib); ENTRY(_start) SECTIONS { diff --git a/x86_64.ld b/x86_64.ld index 878dafbe7..24ea77dad 100644 --- a/x86_64.ld +++ b/x86_64.ld @@ -2,7 +2,6 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) -SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib64"); SECTIONS { /* Read-only sections, merged into text segment: */