X-Git-Url: https://git.saurik.com/apple/ld64.git/blobdiff_plain/a61fdf0a731e23ff7eb0cc86ba748fd9af5de879..e456bf1059cf7e6b8b71545d1b2f2092b55a9684:/unit-tests/test-cases/read-only-relocs/Makefile diff --git a/unit-tests/test-cases/read-only-relocs/Makefile b/unit-tests/test-cases/read-only-relocs/Makefile index 53d702a..e4b8086 100644 --- a/unit-tests/test-cases/read-only-relocs/Makefile +++ b/unit-tests/test-cases/read-only-relocs/Makefile @@ -1,5 +1,5 @@ -## -# Copyright (c) 2006 Apple Computer, Inc. All rights reserved. + ## +# Copyright (c) 2006-2007 Apple Inc. All rights reserved. # # @APPLE_LICENSE_HEADER_START@ # @@ -24,21 +24,62 @@ TESTROOT = ../.. include ${TESTROOT}/include/common.makefile # -# The point of this test is a sanity check that ld -# will fail to link a dylib compiled with -mdynamic-no-pic +# Test that ld can linke a dylib built with -mdynamic-no-pic # SHELL = bash # use bash shell so we can redirect just stderr -run: - @if [ ${ARCH} = x86_64 ] ; then \ - ${PASS_IFF} /usr/bin/true ; \ - else \ - $(MAKE) all ; \ - fi +NO_PIC = +STATIC = +RELOC_FAIL = ${FAIL_IF_SUCCESS} +LRELOCS_NEEDED = ${FAIL_IF_EMPTY} +XRELOCS_NEEDED = ${FAIL_IF_EMPTY} + +ifeq (${ARCH},i386) + NO_PIC = -mdynamic-no-pic + STATIC = -static +endif +ifeq (${ARCH},ppc) + NO_PIC = -mdynamic-no-pic + STATIC = -mdynamic-no-pic + XRELOCS_NEEDED = ${FAIL_IF_STDIN} + LRELOCS_NEEDED = ${FAIL_IF_EMPTY} +endif +ifeq (${ARCH},x86_64) + RELOC_FAIL = + XRELOCS_NEEDED = ${FAIL_IF_STDIN} + LRELOCS_NEEDED = ${FAIL_IF_STDIN} +endif +ifeq (${FILEARCH},arm) + NO_PIC = -mdynamic-no-pic + STATIC = -static +endif + + + all: - ${FAIL_IFF} ${CC} ${CCFLAGS} test.c -mdynamic-no-pic -dynamiclib -o test-${ARCH}.dylib 2> fail.log + # build libfoo.dylib as regular dylib + ${CC} ${CCFLAGS} foo.c -dynamiclib -o libfoo.dylib + # build libtest.dylib using -mdynamic-no-pic, should fail + ${CC} ${CCFLAGS} test_rebase.c -c ${NO_PIC} + ${RELOC_FAIL} ${CC} ${CCFLAGS} test_rebase.o libfoo.dylib -dynamiclib -o libtestrebase.dylib -read_only_relocs error 2>/dev/null + ${CC} ${CCFLAGS} test_bind.c -c ${NO_PIC} + ${RELOC_FAIL} ${CC} ${CCFLAGS} test_bind.o libfoo.dylib -dynamiclib -o libtestbind.dylib -read_only_relocs error 2>/dev/null + # build libtest.dylib using -mdynamic-no-pic and -read_only_relocs suppress + ${CC} ${CCFLAGS} test_rebase.c -c ${NO_PIC} + ${CC} ${CCFLAGS} test_bind.c -c ${NO_PIC} + ${CC} ${CCFLAGS} test_rebase.o test_bind.o libfoo.dylib -dynamiclib -o libtest-no-pic.dylib -read_only_relocs suppress -Wl,-w + # build libtest.dylib using -static and -read_only_relocs suppress + ${CC} ${CCFLAGS} test_rebase.c -c ${STATIC} + ${CC} ${CCFLAGS} test_bind.c -c ${STATIC} + ${CC} ${CCFLAGS} test_rebase.o test_bind.o libfoo.dylib -dynamiclib -o libtest-static.dylib -read_only_relocs suppress -Wl,-w + otool -lv libtest-static.dylib | grep -A9 "sectname __text" | grep attributes | grep EXT_RELOC | ${XRELOCS_NEEDED} + otool -lv libtest-static.dylib | grep -A9 "sectname __text" | grep attributes | grep LOC_RELOC | ${LRELOCS_NEEDED} + # build main using -static and -read_only_relocs suppress + ${CC} ${CCFLAGS} main.c -c ${STATIC} + ${CC} ${CCFLAGS} main.o libfoo.dylib -o main -read_only_relocs suppress -Wl,-w + ${PASS_IFF_GOOD_MACHO} main clean: - rm -rf *.dylib fail.log + rm -rf test_bind.o test_rebase.o libfoo.dylib libtestrebase.dylib libtestbind.dylib libtest-no-pic.dylib libtest-static.dylib main.o main