+2013-05-03 Jakub Jelinek <jakub@redhat.com>
+
+ * src/cache.c (prelink_save_cache_check): For ET_CACHE_DYN
+ or ET_UNPRELINKABLE dependencies, call prelink_save_cache_check
+ recursively.
+ * testsuite/Makefile.am (TESTS): Add unprel1.sh.
+ * testsuite/Makefile.in: Regenerated.
+ * testsuite/unprel1.sh: New test.
+ * testsuite/unprel1.c: New file.
+ * testsuite/unprel1lib1.c: New file.
+ * testsuite/unprel1lib2.c: New file.
+
+ * src/prelink.h (R_390_IRELATIVE): Define if not defined.
+
+2013-04-25 Jakub Jelinek <jakub@redhat.com>
+
+ * src/arch-s390.c (s390_adjust_rela, s390_prelink_rela,
+ s390_apply_conflict_rela, s390_prelink_conflict_rela,
+ s390_undo_prelink_rela): Handle R_390_IRELATIVE.
+ * src/arch-s390x.c (s390x_adjust_rela, s390x_prelink_rela,
+ s390x_apply_conflict_rela, s390x_prelink_conflict_rela,
+ s390x_undo_prelink_rela, s390x_reloc_size): Likewise.
+
+2013-04-18 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/reloc4.sh: Add libraries to link lines to make
+ testsuite work both with --no-add-needed and with --add-needed,
+ including latest ld.bfd.
+ * testsuite/reloc5.sh: Likewise.
+ * testsuite/reloc8.sh: Likewise.
+ * testsuite/reloc9.sh: Likewise.
+
+2013-04-17 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/ifunc.h (IFUNC_DECL): Fix up .size on ppc64.
+ * testsuite/cxx1.sh: Add libraries to link lines to make
+ testsuite work both with --no-add-needed and with --add-needed,
+ including latest ld.bfd.
+ * testsuite/cxx2.sh: Likewise.
+ * testsuite/cxx3.sh: Likewise.
+ * testsuite/deps1.sh: Likewise.
+ * testsuite/deps2.sh: Likewise.
+ * testsuite/ifunc1.sh: Likewise.
+ * testsuite/ifunc2.sh: Likewise.
+ * testsuite/ifunc3.sh: Likewise.
+ * testsuite/quick1.sh: Likewise.
+ * testsuite/quick2.sh: Likewise.
+ * testsuite/quick3.sh: Likewise.
+ * testsuite/reloc1.sh: Likewise.
+ * testsuite/reloc10.sh: Likewise.
+ * testsuite/reloc11.sh: Likewise.
+ * testsuite/reloc3.sh: Likewise.
+ * testsuite/reloc6.sh: Likewise.
+ * testsuite/reloc7.sh: Likewise.
+ * testsuite/shuffle1.sh: Likewise.
+ * testsuite/shuffle2.sh: Likewise.
+ * testsuite/shuffle3.sh: Likewise.
+ * testsuite/shuffle4.sh: Likewise.
+ * testsuite/shuffle5.sh: Likewise.
+ * testsuite/shuffle6.sh: Likewise.
+ * testsuite/shuffle7.sh: Likewise.
+ * testsuite/shuffle8.sh: Likewise.
+ * testsuite/shuffle9.sh: Likewise.
+ * testsuite/tls1.sh: Likewise.
+ * testsuite/tls2.sh: Likewise.
+ * testsuite/tls3.sh: Likewise.
+ * testsuite/tls4.sh: Likewise.
+ * testsuite/tls5.sh: Likewise.
+ * testsuite/tls6.sh: Likewise.
+ * testsuite/undo1.sh: Likewise.
+
+2012-06-28 Jakub Jelinek <jakub@redhat.com>
+
+ * src/get.c (is_ldso_soname): Add arm dynamic linker SONAMEs.
+
+ * src/dwarf2.h (DW_FORM_GNU_ref_alt,
+ DW_FORM_GNU_strp_alt): Define.
+ * src/dwarf2.c (read_abbrev): Allow those forms.
+ (adjust_attributes): Handle them.
+
+2012-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ * src/dwarf2.c (DEBUG_MACRO): Define.
+ (debug_sections): Add .debug_macro entry.
+
+2012-04-02 Jakub Jelinek <jakub@redhat.com>
+
+ * src/dwarf2.c (adjust_attributes): For DWARF4+ treat
+ DW_AT_data_member_location with DW_FORM_data[48] as
+ large constant instead of loclistptr.
+
2011-10-12 Jakub Jelinek <jakub@redhat.com>
* src/main.c (layout_page_size): New variable.
-/* Copyright (C) 2001, 2002, 2003, 2004, 2009, 2010 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2004, 2009, 2010, 2013 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
rela->r_addend += (Elf32_Sword) adjust;
}
break;
+ case R_390_IRELATIVE:
+ if (rela->r_addend >= start)
+ /* Adjust the resolver function address. */
+ rela->r_addend += adjust;
+ /* FALLTHROUGH */
case R_390_JMP_SLOT:
+ /* Adjust the address in the GOT slot. */
addr = read_ube32 (dso, rela->r_offset);
if (addr >= start)
write_be32 (dso, rela->r_offset, addr + adjust);
DSO *dso = info->dso;
GElf_Addr value;
- if (GELF_R_TYPE (rela->r_info) == R_390_NONE)
+ if (GELF_R_TYPE (rela->r_info) == R_390_NONE
+ || GELF_R_TYPE (rela->r_info) == R_390_IRELATIVE)
return 0;
else if (GELF_R_TYPE (rela->r_info) == R_390_RELATIVE)
{
s390_apply_conflict_rela (struct prelink_info *info, GElf_Rela *rela,
char *buf, GElf_Addr dest_addr)
{
+ GElf_Rela *ret;
switch (GELF_R_TYPE (rela->r_info))
{
case R_390_32:
case R_390_8:
buf_write_8 (buf, rela->r_addend);
break;
+ case R_390_IRELATIVE:
+ if (dest_addr == 0)
+ return 5;
+ ret = prelink_conflict_add_rela (info);
+ if (ret == NULL)
+ return 1;
+ ret->r_offset = dest_addr;
+ ret->r_info = GELF_R_INFO (0, R_390_IRELATIVE);
+ ret->r_addend = rela->r_addend;
+ break;
default:
abort ();
}
/* Even local DTPMOD and TPOFF relocs need conflicts. */
case R_390_TLS_DTPMOD:
case R_390_TLS_TPOFF:
+ /* IRELATIVE always need conflicts. */
+ case R_390_IRELATIVE:
break;
default:
return 0;
}
value = 0;
}
- else if (conflict->ifunc)
- {
- error (0, 0, "%s: STT_GNU_IFUNC not handled on S390 yet",
- dso->filename);
- return 1;
- }
else
{
/* DTPOFF wants to see only real conflicts, not lookups
case R_390_GLOB_DAT:
case R_390_JMP_SLOT:
ret->r_addend = (Elf32_Sword) (value - rela->r_addend);
+ if (conflict != NULL && conflict->ifunc)
+ ret->r_info = GELF_R_INFO (0, R_390_IRELATIVE);
break;
case R_390_32:
+ case R_390_IRELATIVE:
ret->r_addend = (Elf32_Sword) value;
+ if (conflict != NULL && conflict->ifunc)
+ ret->r_info = GELF_R_INFO (0, R_390_IRELATIVE);
break;
case R_390_PC32:
ret->r_addend = (Elf32_Sword) (value - rela->r_offset);
{
case R_390_NONE:
case R_390_RELATIVE:
+ case R_390_IRELATIVE:
break;
case R_390_JMP_SLOT:
sec = addr_to_sec (dso, rela->r_offset);
-/* Copyright (C) 2001, 2002, 2003, 2004, 2009 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2004, 2009, 2013 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
rela->r_addend += adjust;
}
break;
+ case R_390_IRELATIVE:
+ if (rela->r_addend >= start)
+ /* Adjust the resolver function address. */
+ rela->r_addend += adjust;
+ /* FALLTHROUGH */
case R_390_JMP_SLOT:
+ /* Adjust the address in the GOT slot. */
addr = read_ube64 (dso, rela->r_offset);
if (addr >= start)
write_be64 (dso, rela->r_offset, addr + adjust);
DSO *dso = info->dso;
GElf_Addr value;
- if (GELF_R_TYPE (rela->r_info) == R_390_NONE)
+ if (GELF_R_TYPE (rela->r_info) == R_390_NONE
+ || GELF_R_TYPE (rela->r_info) == R_390_IRELATIVE)
return 0;
else if (GELF_R_TYPE (rela->r_info) == R_390_RELATIVE)
{
s390x_apply_conflict_rela (struct prelink_info *info, GElf_Rela *rela,
char *buf, GElf_Addr dest_addr)
{
+ GElf_Rela *ret;
switch (GELF_R_TYPE (rela->r_info))
{
case R_390_64:
case R_390_8:
buf_write_8 (buf, rela->r_addend);
break;
+ case R_390_IRELATIVE:
+ if (dest_addr == 0)
+ return 5;
+ ret = prelink_conflict_add_rela (info);
+ if (ret == NULL)
+ return 1;
+ ret->r_offset = dest_addr;
+ ret->r_info = GELF_R_INFO (0, R_390_IRELATIVE);
+ ret->r_addend = rela->r_addend;
+ break;
default:
abort ();
}
/* Even local DTPMOD and TPOFF relocs need conflicts. */
case R_390_TLS_DTPMOD:
case R_390_TLS_TPOFF:
+ /* IRELATIVE always need conflicts. */
+ case R_390_IRELATIVE:
break;
default:
return 0;
}
value = 0;
}
- else if (conflict->ifunc)
- {
- error (0, 0, "%s: STT_GNU_IFUNC not handled on S390x yet",
- dso->filename);
- return 1;
- }
else
{
/* DTPOFF wants to see only real conflicts, not lookups
case R_390_GLOB_DAT:
case R_390_JMP_SLOT:
case R_390_64:
+ case R_390_IRELATIVE:
ret->r_addend = value;
- r_type = R_390_64;
+ if (conflict != NULL && conflict->ifunc)
+ r_type = R_390_IRELATIVE;
+ else
+ r_type = R_390_64;
break;
case R_390_PC32:
value -= rela->r_offset;
{
case R_390_NONE:
case R_390_RELATIVE:
+ case R_390_IRELATIVE:
break;
case R_390_JMP_SLOT:
sec = addr_to_sec (dso, rela->r_offset);
case R_390_JMP_SLOT:
case R_390_64:
case R_390_PC64:
+ case R_390_IRELATIVE:
return 8;
case R_390_32:
case R_390_PC32:
-/* Copyright (C) 2001, 2002, 2003, 2004, 2006 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2004, 2006, 2013 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
return 1;
break;
case ET_CACHE_DYN:
+ if (prelink_save_cache_check (ent->depends[i]))
+ return 1;
break;
case ET_UNPRELINKABLE:
if (ent->type != ET_UNPRELINKABLE)
return 1;
+ if (prelink_save_cache_check (ent->depends[i]))
+ return 1;
break;
default:
return 1;
-/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009, 2010, 2011 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009, 2010, 2011, 2012
+ Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
#define DEBUG_FRAME 9
#define DEBUG_RANGES 10
#define DEBUG_TYPES 11
+#define DEBUG_MACRO 12
{ ".debug_info", NULL, 0, 0 },
{ ".debug_abbrev", NULL, 0, 0 },
{ ".debug_line", NULL, 0, 0 },
{ ".debug_frame", NULL, 0, 0 },
{ ".debug_ranges", NULL, 0, 0 },
{ ".debug_types", NULL, 0, 0 },
+ { ".debug_macro", NULL, 0, 0 },
{ NULL, NULL, 0 }
};
}
form = read_uleb128 (ptr);
if (form == 2
- || (form > DW_FORM_flag_present && form != DW_FORM_ref_sig8))
+ || (form > DW_FORM_flag_present
+ && form != DW_FORM_ref_sig8
+ && form != DW_FORM_GNU_ref_alt
+ && form != DW_FORM_GNU_strp_alt))
{
error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form);
htab_delete (h);
{
switch (t->attr[i].attr)
{
+ case DW_AT_data_member_location:
+ /* In DWARF4+ DW_AT_data_member_location
+ with DW_FORM_data[48] is just very high
+ constant, rather than loclistptr. */
+ if (cu->cu_version >= 4 && form != DW_FORM_sec_offset)
+ break;
+ /* FALLTHRU */
case DW_AT_location:
case DW_AT_string_length:
case DW_AT_return_addr:
- case DW_AT_data_member_location:
case DW_AT_frame_base:
case DW_AT_segment:
case DW_AT_static_link:
ptr += 2;
break;
case DW_FORM_ref4:
+ case DW_FORM_GNU_ref_alt:
case DW_FORM_data4:
case DW_FORM_sec_offset:
ptr += 4;
ptr += 4;
break;
case DW_FORM_strp:
+ case DW_FORM_GNU_strp_alt:
ptr += 4;
break;
case DW_FORM_string:
-/* Copyright (C) 2001, 2002, 2009, 2010, 2011 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2009, 2010, 2011, 2012 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
#define DW_FORM_exprloc 0x18
#define DW_FORM_flag_present 0x19
#define DW_FORM_ref_sig8 0x20
+#define DW_FORM_GNU_ref_alt 0x1f20
+#define DW_FORM_GNU_strp_alt 0x1f21
#define DW_AT_sibling 0x01
#define DW_AT_location 0x02
|| ! strcmp (soname, "ld.so.1")
|| ! strcmp (soname, "ld-linux-ia64.so.2")
|| ! strcmp (soname, "ld-linux-x86-64.so.2")
- || ! strcmp (soname, "ld64.so.1"))
+ || ! strcmp (soname, "ld64.so.1")
+ || ! strcmp (soname, "ld-linux.so.3")
+ || ! strcmp (soname, "ld-linux-armhf.so.3"))
return 1;
return 0;
}
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
- Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011,
+ 2013 Red Hat, Inc.
Written by Jakub Jelinek <jakub@redhat.com>, 2001.
This program is free software; you can redistribute it and/or modify
#define R_PPC64_IRELATIVE 248
#endif
+#ifndef R_390_IRELATIVE
+#define R_390_IRELATIVE 61
+#endif
+
struct prelink_entry;
struct prelink_info;
struct PLArch;
reloc7.sh reloc8.sh reloc9.sh reloc10.sh reloc11.sh \
shuffle1.sh shuffle2.sh shuffle3.sh shuffle4.sh shuffle5.sh \
shuffle6.sh shuffle7.sh shuffle8.sh shuffle9.sh undo1.sh \
- layout1.sh layout2.sh \
+ layout1.sh layout2.sh unprel1.sh \
tls1.sh tls2.sh tls3.sh tls4.sh tls5.sh tls6.sh tls7.sh \
cxx1.sh cxx2.sh cxx3.sh quick1.sh quick2.sh quick3.sh \
cycle1.sh cycle2.sh \
reloc7.sh reloc8.sh reloc9.sh reloc10.sh reloc11.sh \
shuffle1.sh shuffle2.sh shuffle3.sh shuffle4.sh shuffle5.sh \
shuffle6.sh shuffle7.sh shuffle8.sh shuffle9.sh undo1.sh \
- layout1.sh layout2.sh \
+ layout1.sh layout2.sh unprel1.sh \
tls1.sh tls2.sh tls3.sh tls4.sh tls5.sh tls6.sh tls7.sh \
cxx1.sh cxx2.sh cxx3.sh quick1.sh quick2.sh quick3.sh \
cycle1.sh cycle2.sh \
$CXX -shared -O2 -fpic -o cxx1lib2.so $srcdir/cxx1lib2.C cxx1lib1.so
BINS="cxx1"
LIBS="cxx1lib1.so cxx1lib2.so"
-$CXXLINK -o cxx1 $srcdir/cxx1.C -Wl,--rpath-link,. cxx1lib2.so
+$CXXLINK -o cxx1 $srcdir/cxx1.C -Wl,--rpath-link,. cxx1lib2.so cxx1lib1.so
savelibs
echo $PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx1 > cxx1.log
$PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx1 >> cxx1.log 2>&1 || exit 1
$CXX -shared -O2 -fpic -o cxx2lib2.so $srcdir/cxx1lib2.C cxx2lib1.so
BINS="cxx2"
LIBS="cxx2lib1.so cxx2lib2.so"
-$CXXLINK -o cxx2 $srcdir/cxx2.C -Wl,--rpath-link,. cxx2lib2.so
+$CXXLINK -o cxx2 $srcdir/cxx2.C -Wl,--rpath-link,. cxx2lib2.so cxx2lib1.so
savelibs
echo $PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx2 > cxx2.log
$PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx2 >> cxx2.log 2>&1 || exit 1
$CXX -shared -O2 -fpic -o cxx3lib2.so $srcdir/cxx3lib2.C cxx3lib1.so
BINS="cxx3"
LIBS="cxx3lib1.so cxx3lib2.so"
-$CXXLINK -o cxx3 $srcdir/cxx3.C -Wl,--rpath-link,. cxx3lib2.so
+$CXXLINK -o cxx3 $srcdir/cxx3.C -Wl,--rpath-link,. cxx3lib2.so cxx3lib1.so
savelibs
echo $PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx3 > cxx3.log
$PRELINK -vvvv ${PRELINK_OPTS--vm} ./cxx3 >> cxx3.log 2>&1 || exit 1
cp -dp $lib deps1.tree/lib
done
$CCLINK -o deps1.tree/usr/bin/bin1 $srcdir/deps1.c \
- -Wl,-rpath,deps1.tree/usr/lib -L deps1.tree/usr/lib -l3
+ -Wl,-rpath,deps1.tree/usr/lib -L deps1.tree/usr/lib -l3 -lc -l1 -l2
cat > deps1.tree/etc/prelink.conf <<EOF
deps1.tree/usr/bin
deps1.tree/lib
cp -dp $lib deps2.tree/lib
done
$CCLINK -o deps2.tree/usr/bin/bin1 $srcdir/deps1.c \
- -Wl,-rpath,deps2.tree/usr/lib -L deps2.tree/usr/lib -l3
+ -Wl,-rpath,deps2.tree/usr/lib -L deps2.tree/usr/lib -l3 -lc -l1 -l2
cat > deps2.tree/etc/prelink.conf <<EOF
deps2.tree/usr/bin
deps2.tree/lib
"\t.previous\n" \
".L." #name ":\n" \
IFUNC_ASM (PICK (fn1, fn2)) \
- "\t.size " #name ", .-" #name "\n")
+ "\t.size " #name ", .-.L" #name "\n")
# endif
#else
# error Architecture not supported
$CC -shared -O2 -fpic -o ifunc1lib2.so $srcdir/ifunc1lib2.c ifunc1lib1.so
BINS="ifunc1"
LIBS="ifunc1lib1.so ifunc1lib2.so"
-$CCLINK -o ifunc1 $srcdir/ifunc1.c -Wl,--rpath-link,. ifunc1lib2.so
+$CCLINK -o ifunc1 $srcdir/ifunc1.c -Wl,--rpath-link,. ifunc1lib2.so -lc ifunc1lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./ifunc1 >> ifunc1.log
$PRELINK ${PRELINK_OPTS--vm} ./ifunc1 >> ifunc1.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o ifunc2lib2.so $srcdir/ifunc1lib2.c ifunc2lib1.so -DPICKNO=2
BINS="ifunc2"
LIBS="ifunc2lib1.so ifunc2lib2.so"
-$CCLINK -o ifunc2 $srcdir/ifunc1.c -Wl,--rpath-link,. ifunc2lib2.so -DPICKNO=2
+$CCLINK -o ifunc2 $srcdir/ifunc1.c -Wl,--rpath-link,. ifunc2lib2.so -lc ifunc2lib1.so -DPICKNO=2
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./ifunc2 >> ifunc2.log
$PRELINK ${PRELINK_OPTS--vm} ./ifunc2 >> ifunc2.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o ifunc3lib2.so $srcdir/ifunc1lib2.c ifunc3lib1.so
BINS="ifunc3"
LIBS="ifunc3lib1.so ifunc3lib2.so"
-$CCLINK -o ifunc3 $srcdir/ifunc3.c -Wl,--rpath-link,. ifunc3lib2.so
+$CCLINK -o ifunc3 $srcdir/ifunc3.c -Wl,--rpath-link,. ifunc3lib2.so -lc ifunc3lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./ifunc3 >> ifunc3.log
$PRELINK ${PRELINK_OPTS--vm} ./ifunc3 >> ifunc3.log 2>&1 || exit 1
cp -dp $lib quick1.tree/lib
done
$CCLINK -o quick1.tree/usr/bin/bin1 $srcdir/reloc1.c \
- -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2
+ -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2 -lc -l1
echo 'int main () { extern int foo; return foo; }' \
| $CCLINK -o quick1.tree/usr/bin/bin2 -xc - -xnone \
-L quick1.tree/usr/lib -l4
$CCLINK -o quick1.tree/usr/bin/bin3 $srcdir/reloc1.c \
- -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7
+ -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7 -lc -l2 -l1
$CCLINK -o quick1.tree/usr/bin/bin4 $srcdir/quick1.c \
- -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2
+ -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2 -lc -l1
$CCLINK -o quick1.tree/usr/bin/bin5 $srcdir/quick1.c \
- -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7
+ -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7 -lc -l2 -l1
echo 'int main () { return 0; }' \
| $CCLINK -o quick1.tree/usr/bin/bin6 -xc - -xnone \
-Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l6
cp -dp $lib quick2.tree/lib
done
$CCLINK -o quick2.tree/usr/bin/bin1 $srcdir/reloc1.c \
- -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l2
+ -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l2 -lc -l1
echo 'int main () { extern int foo; return foo; }' \
| $CCLINK -o quick2.tree/usr/bin/bin2 -xc - -xnone \
-L quick2.tree/usr/lib -l4
$CCLINK -o quick2.tree/usr/bin/bin3 $srcdir/reloc1.c \
- -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l7
+ -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l7 -lc -l2 -l1
$CCLINK -o quick2.tree/usr/bin/bin4 $srcdir/quick1.c \
- -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l2
+ -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l2 -lc -l1
$CCLINK -o quick2.tree/usr/bin/bin5 $srcdir/quick1.c \
- -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l7
+ -Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l7 -lc -l2 -l1
echo 'int main () { return 0; }' \
| $CCLINK -o quick2.tree/usr/bin/bin6 -xc - -xnone \
-Wl,--rpath-link,quick2.tree/usr/lib -L quick2.tree/usr/lib -l6
cp -dp $lib quick3.tree/lib
done
$CCLINK -o quick3.tree/usr/bin/bin1 $srcdir/reloc1.c \
- -Wl,--rpath-link,quick3.tree/usr/lib -L quick3.tree/usr/lib -l2
+ -Wl,--rpath-link,quick3.tree/usr/lib -L quick3.tree/usr/lib -l2 -lc -l1
cat > quick3.tree/etc/prelink.conf <<EOF
quick3.tree/usr/bin
quick3.tree/lib
$CC -shared -O2 -fpic -o reloc1lib2.so $srcdir/reloc1lib2.c reloc1lib1.so
BINS="reloc1"
LIBS="reloc1lib1.so reloc1lib2.so"
-$CCLINK -o reloc1 $srcdir/reloc1.c -Wl,--rpath-link,. reloc1lib2.so
+$CCLINK -o reloc1 $srcdir/reloc1.c -Wl,--rpath-link,. reloc1lib2.so -lc reloc1lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc1 > reloc1.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc1 >> reloc1.log 2>&1 || exit 1
$CC -shared -O2 -nostdlib -fpic -o reloc10lib2.so $srcdir/reloc10lib2.c reloc10lib1.so
$CC -shared -O2 -nostdlib -fpic -o reloc10lib3.so $srcdir/reloc10lib3.c reloc10lib1.so
$CC -shared -O2 -nostdlib -fpic -o reloc10lib4.so $srcdir/reloc10lib4.c reloc10lib1.so
-$CC -shared -O2 -fpic -o reloc10lib5.so $srcdir/reloc10lib5.c reloc10lib2.so reloc10lib3.so reloc10lib4.so
+$CC -shared -O2 -fpic -o reloc10lib5.so $srcdir/reloc10lib5.c -Wl,--rpath-link,. \
+ reloc10lib2.so reloc10lib3.so reloc10lib4.so
BINS="reloc10"
LIBS="reloc10lib1.so reloc10lib2.so reloc10lib3.so reloc10lib4.so reloc10lib5.so"
-$CCLINK -o reloc10 $srcdir/reloc10.c -Wl,--rpath-link,. reloc10lib5.so
+$CCLINK -o reloc10 $srcdir/reloc10.c -Wl,--rpath-link,. reloc10lib5.so -lc reloc10lib{2,3,4}.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc10 > reloc10.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc10 >> reloc10.log 2>&1 || exit 1
$CC -shared -O2 -nostdlib -fpic -o reloc11lib3.so $srcdir/reloc11lib3.c reloc11lib2.so
BINS="reloc11"
LIBS="reloc11lib1.so reloc11lib2.so reloc11lib3.so"
-$CCLINK -o reloc11 $srcdir/reloc11.c -Wl,--rpath-link,. reloc11lib1.so reloc11lib3.so
+$CCLINK -o reloc11 $srcdir/reloc11.c -Wl,--rpath-link,. reloc11lib1.so reloc11lib3.so -lc reloc11lib2.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc11 > reloc11.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc11 >> reloc11.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o reloc3lib2.so $srcdir/reloc1lib2.c reloc3lib1.so
BINS="reloc3"
LIBS="reloc3lib1.so reloc3lib2.so"
-$CCLINK -o reloc3 $srcdir/reloc3.c -Wl,--rpath-link,. reloc3lib2.so
+$CCLINK -o reloc3 $srcdir/reloc3.c -Wl,--rpath-link,. reloc3lib2.so -lc reloc3lib1.so
strip -g $BINS $LIBS
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc3 > reloc3.log
$CC -shared -fpic $extra -o reloc4lib3.so reloc4lib3.tmp.c reloc4lib2.so
BINS="reloc4"
LIBS="reloc4lib1.so reloc4lib2.so reloc4lib3.so"
-$CCLINK $extra -o reloc4 reloc4.tmp.c -Wl,--rpath-link,. reloc4lib3.so
+$CCLINK $extra -o reloc4 reloc4.tmp.c -Wl,--rpath-link,. reloc4lib3.so -lc reloc4lib2.so
savelibs
rm -f reloc4*.tmp reloc4*.tmp.c
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc4 > reloc4.log
$CC -O2 -o reloc5.tmp $srcdir/reloc5.c
./reloc5.tmp > reloc5.tmp.c
BINS="reloc5"
-$CCLINK -o reloc5 reloc5.tmp.c -Wl,--rpath-link,. reloc4lib3.so
+$CCLINK -o reloc5 reloc5.tmp.c -Wl,--rpath-link,. reloc4lib3.so -lc reloc4lib2.so
savelibs
rm -f reloc5*.tmp reloc5*.tmp.c
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc5 > reloc5.log
rm -f prelink.cache
$CC -shared -O2 -fpic -o reloc6lib1.so $srcdir/reloc3lib1.c
$CC -shared -O2 -fpic -o reloc6lib2.so $srcdir/reloc1lib2.c reloc6lib1.so
-$CCLINK -o reloc6 $srcdir/reloc3.c -Wl,--rpath-link,. reloc6lib2.so
-$CCLINK -o reloc6.nop $srcdir/reloc3.c -Wl,--rpath-link,. reloc6lib2.so
+$CCLINK -o reloc6 $srcdir/reloc3.c -Wl,--rpath-link,. reloc6lib2.so -lc reloc6lib1.so
+$CCLINK -o reloc6.nop $srcdir/reloc3.c -Wl,--rpath-link,. reloc6lib2.so -lc reloc6lib1.so
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc6 > reloc6.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc6 >> reloc6.log 2>&1 || exit 1
grep -q ^`echo $PRELINK | sed 's/ .*$/: /'` reloc6.log && exit 2
$CC -shared -O2 -Wl,-z,nocombreloc -fpic -o reloc7lib2.so $srcdir/reloc1lib2.c reloc7lib1.so
BINS="reloc7"
LIBS="reloc7lib1.so reloc7lib2.so"
-$CCLINK -o reloc7 -Wl,-z,nocombreloc $srcdir/reloc7.c -Wl,--rpath-link,. reloc7lib2.so
+$CCLINK -o reloc7 -Wl,-z,nocombreloc $srcdir/reloc7.c -Wl,--rpath-link,. reloc7lib2.so -lc reloc7lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc7 > reloc7.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc7 >> reloc7.log 2>&1 || exit 1
$CC -shared -O2 -Wl,-z,nocombreloc -fpic -o reloc8lib2.so $srcdir/reloc1lib2.c reloc8lib1.so
BINS="reloc8"
LIBS="reloc8lib1.so reloc8lib2.so"
-$CCLINK -o reloc8 $NOCOPYRELOC $srcdir/reloc7.c -Wl,--rpath-link,. reloc8lib2.so
+$CCLINK -o reloc8 $NOCOPYRELOC $srcdir/reloc7.c -Wl,--rpath-link,. reloc8lib2.so -lc reloc8lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc8 > reloc8.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc8 >> reloc8.log 2>&1 || exit 1
$CC -shared -O2 -Wl,-z,nocombreloc -fpic -o reloc9lib2.so $srcdir/reloc1lib2.c reloc9lib1.so
BINS="reloc9"
LIBS="reloc9lib1.so reloc9lib2.so"
-$CCLINK -o reloc9 -Wl,-z,nocombreloc $NOCOPYRELOC $srcdir/reloc7.c -Wl,--rpath-link,. reloc9lib2.so
+$CCLINK -o reloc9 -Wl,-z,nocombreloc $NOCOPYRELOC $srcdir/reloc7.c -Wl,--rpath-link,. reloc9lib2.so -lc reloc9lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./reloc9 > reloc9.log
$PRELINK ${PRELINK_OPTS--vm} ./reloc9 >> reloc9.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o shuffle1lib2.so $srcdir/reloc1lib2.c shuffle1lib1.so
BINS="shuffle1"
LIBS="shuffle1lib1.so shuffle1lib2.so"
-$CCLINK -o shuffle1 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle1lib2.so \
+$CCLINK -o shuffle1 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle1lib2.so -lc shuffle1lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/0x08048000/0x08000000/;s/SIZEOF_HEADERS.*$/& . += 56;/' > shuffle1.lds
-$CCLINK -o shuffle1 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle1lib2.so \
+$CCLINK -o shuffle1 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle1lib2.so -lc shuffle1lib1.so \
-Wl,-T,shuffle1.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle1 > shuffle1.log
$CC -shared -O2 -fpic -o shuffle2lib2.so $srcdir/reloc1lib2.c shuffle2lib1.so
BINS="shuffle2"
LIBS="shuffle2lib1.so shuffle2lib2.so"
-$CCLINK -o shuffle2 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle2lib2.so \
+$CCLINK -o shuffle2 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle2lib2.so -lc shuffle2lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/0x08048000/0x08000000/;s/SIZEOF_HEADERS.*$/& . += 56;/' > shuffle2.lds
-$CCLINK -o shuffle2 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle2lib2.so \
+$CCLINK -o shuffle2 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle2lib2.so -lc shuffle2lib1.so \
-Wl,-T,shuffle2.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle2 > shuffle2.log
$CC -shared -O2 -fpic -o shuffle3lib2.so $srcdir/reloc1lib2.c shuffle3lib1.so
BINS="shuffle3"
LIBS="shuffle3lib1.so shuffle3lib2.so"
-$CCLINK -o shuffle3 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so \
+$CCLINK -o shuffle3 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so -lc shuffle3lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/0x08048000/0x08000000/' > shuffle3.lds
-$CCLINK -o shuffle3 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so \
+$CCLINK -o shuffle3 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so -lc shuffle3lib1.so \
-Wl,-T,shuffle3.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle3 > shuffle3.log
esac
rm -f shuffle4 shuffle4.log
BINS="shuffle4"
-$CCLINK -o shuffle4 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so
+$CCLINK -o shuffle4 $srcdir/shuffle2.c -Wl,--rpath-link,. shuffle3lib2.so -lc shuffle3lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle4 > shuffle4.log
$PRELINK ${PRELINK_OPTS--vm} ./shuffle4 >> shuffle4.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o shuffle5lib2.so $srcdir/reloc1lib2.c shuffle5lib1.so
BINS="shuffle5"
LIBS="shuffle5lib1.so shuffle5lib2.so"
-$CCLINK -o shuffle5 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle5lib2.so \
+$CCLINK -o shuffle5 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle5lib2.so -lc shuffle5lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/0x08048000/0x08000000/;s/SIZEOF_HEADERS.*$/& . += 180;/' > shuffle5.lds
-$CCLINK -o shuffle5 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle5lib2.so \
+$CCLINK -o shuffle5 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle5lib2.so -lc shuffle5lib1.so \
-Wl,-T,shuffle5.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle5 > shuffle5.log
$CC -shared -O2 -fpic -o shuffle6lib2.so $srcdir/reloc1lib2.c shuffle6lib1.so
BINS="shuffle6"
LIBS="shuffle6lib1.so shuffle6lib2.so"
-$CCLINK -o shuffle6 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle6lib2.so \
+$CCLINK -o shuffle6 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle6lib2.so -lc shuffle6lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/0x08048000/0x08000000/;s/SIZEOF_HEADERS.*$/& . += 56;/' > shuffle6.lds
-$CCLINK -o shuffle6 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle6lib2.so \
+$CCLINK -o shuffle6 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle6lib2.so -lc shuffle6lib1.so \
-Wl,-T,shuffle6.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle6 > shuffle6.log
$CC -shared -O2 -fpic -o shuffle7lib2.so $srcdir/reloc1lib2.c shuffle7lib1.so
BINS="shuffle7"
LIBS="shuffle7lib1.so shuffle7lib2.so"
-$CCLINK -o shuffle7 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle7lib2.so \
+$CCLINK -o shuffle7 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle7lib2.so -lc shuffle7lib1.so \
-Wl,--verbose 2>&1 | sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e '/\.hash/a\
. = . + 0x300;' > shuffle7.lds
-$CCLINK -o shuffle7 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle7lib2.so \
+$CCLINK -o shuffle7 $srcdir/reloc1.c -Wl,--rpath-link,. shuffle7lib2.so -lc shuffle7lib1.so \
-Wl,-T,shuffle7.lds
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle7 > shuffle7.log
$CC -shared -O2 -fpic -o shuffle8lib2.so $srcdir/reloc1lib2.c shuffle8lib1.so
BINS="shuffle8"
LIBS="shuffle8lib1.so shuffle8lib2.so"
-$CCLINK -o shuffle8 $srcdir/shuffle8.c -Wl,--rpath-link,. shuffle8lib2.so
+$CCLINK -o shuffle8 $srcdir/shuffle8.c -Wl,--rpath-link,. shuffle8lib2.so -lc shuffle8lib1.so
strip -R .comment shuffle8
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle8 > shuffle8.log
esac
rm -f shuffle9 shuffle9.log
BINS="shuffle9"
-$CCLINK -o shuffle9 $srcdir/shuffle9.c -Wl,--rpath-link,. shuffle3lib2.so
+$CCLINK -o shuffle9 $srcdir/shuffle9.c -Wl,--rpath-link,. shuffle3lib2.so -lc shuffle3lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle9 > shuffle9.log
$PRELINK ${PRELINK_OPTS--vm} ./shuffle9 >> shuffle9.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o tls1lib2.so $srcdir/tls1lib2.c tls1lib1.so
BINS="tls1"
LIBS="tls1lib1.so tls1lib2.so"
-$CCLINK -o tls1 $srcdir/tls1.c -Wl,--rpath-link,. tls1lib2.so
+$CCLINK -o tls1 $srcdir/tls1.c -Wl,--rpath-link,. tls1lib2.so -lc tls1lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls1 > tls1.log
$PRELINK ${PRELINK_OPTS--vm} ./tls1 >> tls1.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o tls2lib2.so $srcdir/tls1lib2.c tls2lib1.so
BINS="tls2"
LIBS="tls2lib1.so tls2lib2.so"
-$CCLINK -o tls2 $srcdir/tls2.c -Wl,--rpath-link,. tls2lib2.so
+$CCLINK -o tls2 $srcdir/tls2.c -Wl,--rpath-link,. tls2lib2.so -lc tls2lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls2 > tls2.log
$PRELINK ${PRELINK_OPTS--vm} ./tls2 >> tls2.log 2>&1 || exit 1
tls3lib1.so 2>/dev/null
BINS="tls3"
LIBS="tls3lib1.so tls3lib2.so"
-$CCLINK -o tls3 $srcdir/tls1.c -Wl,--rpath-link,. tls3lib2.so
+$CCLINK -o tls3 $srcdir/tls1.c -Wl,--rpath-link,. tls3lib2.so -lc tls3lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls3 > tls3.log
$PRELINK ${PRELINK_OPTS--vm} ./tls3 >> tls3.log 2>&1 || exit 1
tls4lib1.so 2>/dev/null
BINS="tls4"
LIBS="tls4lib1.so tls4lib2.so"
-$CCLINK -o tls4 $srcdir/tls4.c -Wl,--rpath-link,. tls4lib2.so
+$CCLINK -o tls4 $srcdir/tls4.c -Wl,--rpath-link,. tls4lib2.so -lc tls4lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls4 > tls4.log
$PRELINK ${PRELINK_OPTS--vm} ./tls4 >> tls4.log 2>&1 || exit 1
-Wl,--rpath-link,. tls5lib1.so
BINS="tls5"
LIBS="tls5lib1.so tls5lib2.so tls5lib3.so"
-$CCLINK -o tls5 $srcdir/tls1.c -Wl,--rpath-link,. tls5lib2.so
+$CCLINK -o tls5 $srcdir/tls1.c -Wl,--rpath-link,. tls5lib2.so -lc tls5lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls5 > tls5.log
$PRELINK ${PRELINK_OPTS--vm} ./tls5 >> tls5.log 2>&1 || exit 1
-Wl,--rpath-link,. tls6lib1.so
BINS="tls6"
LIBS="tls6lib1.so tls6lib2.so tls6lib3.so"
-$CCLINK -o tls6 $srcdir/tls2.c -Wl,--rpath-link,. tls6lib2.so
+$CCLINK -o tls6 $srcdir/tls2.c -Wl,--rpath-link,. tls6lib2.so -lc tls6lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./tls6 > tls6.log
$PRELINK ${PRELINK_OPTS--vm} ./tls6 >> tls6.log 2>&1 || exit 1
$CC -shared -O2 -fpic -o undo1lib2.so $srcdir/reloc1lib2.c undo1lib1.so
BINS="undo1"
LIBS="undo1lib1.so undo1lib2.so"
-$CCLINK -o undo1 $srcdir/reloc1.c -Wl,--rpath-link,. undo1lib2.so
+$CCLINK -o undo1 $srcdir/reloc1.c -Wl,--rpath-link,. undo1lib2.so -lc undo1lib1.so
savelibs
echo $PRELINK ${PRELINK_OPTS--vm} ./undo1 > undo1.log
$PRELINK ${PRELINK_OPTS--vm} ./undo1 >> undo1.log 2>&1 || exit 1
--- /dev/null
+extern int bar ();
+
+int
+main ()
+{
+ return bar () - 42;
+}
--- /dev/null
+#!/bin/bash
+. `dirname $0`/functions.sh
+PRELINK=`echo $PRELINK \
+ | sed -e 's, \./\(prelink\.\(cache\|conf\)\), unprel1.tree/etc/\1,g' \
+ -e 's,path=\.,path=unprel1.tree/opt:unprel1.tree/lib,' \
+ -e 's,linker=\./,linker=unprel1.tree/lib/,'`
+CCLINK=`echo $CCLINK \
+ | sed -e 's,linker=\./,linker=unprel1.tree/lib/,'`
+rm -rf unprel1.tree
+rm -f unprel1.log
+mkdir -p unprel1.tree/{lib,etc,opt,bin}
+$CC -shared -O2 -fpic -o unprel1.tree/lib/lib1.so $srcdir/unprel1lib1.c
+cp -a unprel1.tree/{lib,opt}/lib1.so
+$CC -shared -O2 -fpic -o unprel1.tree/lib/lib2.so $srcdir/unprel1lib2.c \
+ -L unprel1.tree/lib -l1
+$CCLINK -o unprel1.tree/bin/bin1 $srcdir/unprel1.c \
+ -Wl,-rpath,unprel1.tree/lib -L unprel1.tree/lib -l2
+cat > unprel1.tree/etc/prelink.conf <<EOF
+unprel1.tree/bin
+unprel1.tree/lib
+EOF
+for lib in `cat syslib.list`; do
+ cp -p $lib.orig unprel1.tree/lib/$lib
+ cp -p $lib.orig unprel1.tree/lib/$lib.orig
+done
+for lib in `cat syslnk.list`; do
+ cp -dp $lib unprel1.tree/lib
+done
+LIBS="unprel1.tree/lib/lib1.so unprel1.tree/lib/lib2.so"
+LIBS="$LIBS unprel1.tree/opt/lib1.so"
+BINS="unprel1.tree/bin/bin1"
+savelibs
+chmod -x unprel1.tree/bin/bin1.orig
+echo $PRELINK ${PRELINK_OPTS--vm} unprel1.tree/{bin,lib} > unprel1.log
+$PRELINK ${PRELINK_OPTS--vm} unprel1.tree/{bin,lib} >> unprel1.log 2>&1 || exit 1
+grep -v 'opt/lib1.so is not present in any config file directories' unprel1.log \
+ | grep -v 'lib/lib2.so because its dependency unprel1.tree/opt/lib1.so could not be prelinked' \
+ | grep -v 'bin/bin1 because its dependency unprel1.tree/lib/lib2.so could not be prelinked' \
+ | grep -q ^`echo $PRELINK | sed 's/ .*$/: /'` && exit 2
+grep -q 'opt/lib1.so is not present in any config file directories' \
+ unprel1.log || exit 3
+grep -q 'lib/lib2.so because its dependency unprel1.tree/opt/lib1.so could not be prelinked' \
+ unprel1.log || exit 4
+grep -q 'bin/bin1 because its dependency unprel1.tree/lib/lib2.so could not be prelinked' \
+ unprel1.log || exit 5
+unprel1.tree/bin/bin1 || exit 6
+# So that it is not prelinked again
+chmod -x unprel1.tree/bin/bin1
+LIBS=unprel1.tree/lib/lib1.so
+BINS=
+comparelibs >> unprel1.log 2>&1 || exit 7
+for i in unprel1.tree/lib/lib2.so unprel1.tree/opt/lib1.so unprel1.tree/bin/bin1; do
+ cmp -s $i $i.orig || exit 8
+done
+exit 0
--- /dev/null
+int
+baz ()
+{
+ return 42;
+}
--- /dev/null
+extern int baz ();
+
+int
+bar ()
+{
+ return baz ();
+}