Fix Control.Arrow (***) diagram (fixes #25698)
[ghc.git] / m4 / check_ld_copy_bug.m4
bloba2d3c4ee931065866e6a519287b210982d7644c0
1 # CHECK_LD_COPY_BUG()
2 # -------------------
3 # Check for binutils bug #16177 present in some versions of the bfd ld
4 # implementation affecting ARM relocations.
5 # https://sourceware.org/bugzilla/show_bug.cgi?id=16177
7 # $1 = the platform
9 AC_DEFUN([CHECK_LD_COPY_BUG],[
10     case $1 in
11       arm*linux*)
12         AC_CHECK_TARGET_TOOL([READELF], [readelf])
13         AC_CHECK_TARGET_TOOL([AS], [as])
14         AC_MSG_CHECKING([for ld bug 16177])
15         cat >actest.s <<-EOF
16           .globl _start
17           .p2align 4
18         _start:
19           bkpt
21         .data
22           .globl data_object
23         object_reference:
24           .long data_object
25           .size object_reference, 4
26 EOF
28         cat >aclib.s <<-EOF
29           .data
30           .globl data_object
31           .type data_object, %object
32           .size data_object, 4
33         data_object:
34             .long 123
35 EOF
37         $AS -o aclib.o aclib.s
38         $LD -shared -o aclib.so aclib.o
40         $AS -o actest.o actest.s
41         $LD -o actest actest.o aclib.so
43         if $READELF -r actest | grep R_ARM_COPY > /dev/null; then
44             AC_MSG_RESULT([affected])
45             AC_MSG_ERROR(
46               [Your linker is affected by binutils #16177, which
47                critically breaks linkage of GHC objects. Please either upgrade
48                binutils or supply a different linker with the LD environment
49                variable.])
50         else
51             AC_MSG_RESULT([unaffected])
52         fi
54         rm -f aclib.s aclib.o aclib.so actest.s actest.o actest
55         ;;
56       *)
57         ;;
58     esac