xref: /aosp_15_r20/external/strace/m4/st_libunwind.m4 (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker#!/usr/bin/m4
2*cf84ac9aSAndroid Build Coastguard Worker#
3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2013-2018 The strace developers.
4*cf84ac9aSAndroid Build Coastguard Worker# All rights reserved.
5*cf84ac9aSAndroid Build Coastguard Worker#
6*cf84ac9aSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without
7*cf84ac9aSAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions
8*cf84ac9aSAndroid Build Coastguard Worker# are met:
9*cf84ac9aSAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright
10*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer.
11*cf84ac9aSAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright
12*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer in the
13*cf84ac9aSAndroid Build Coastguard Worker#    documentation and/or other materials provided with the distribution.
14*cf84ac9aSAndroid Build Coastguard Worker# 3. The name of the author may not be used to endorse or promote products
15*cf84ac9aSAndroid Build Coastguard Worker#    derived from this software without specific prior written permission.
16*cf84ac9aSAndroid Build Coastguard Worker#
17*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18*cf84ac9aSAndroid Build Coastguard Worker# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19*cf84ac9aSAndroid Build Coastguard Worker# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*cf84ac9aSAndroid Build Coastguard Worker# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21*cf84ac9aSAndroid Build Coastguard Worker# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22*cf84ac9aSAndroid Build Coastguard Worker# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23*cf84ac9aSAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24*cf84ac9aSAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25*cf84ac9aSAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*cf84ac9aSAndroid Build Coastguard Worker
28*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_ARG_LIBUNWIND], [dnl
29*cf84ac9aSAndroid Build Coastguard Worker
30*cf84ac9aSAndroid Build Coastguard WorkerAC_ARG_WITH([libunwind],
31*cf84ac9aSAndroid Build Coastguard Worker	    [AS_HELP_STRING([--with-libunwind],
32*cf84ac9aSAndroid Build Coastguard Worker			    [use libunwind to implement stack tracing support])],
33*cf84ac9aSAndroid Build Coastguard Worker	    [case "${withval}" in
34*cf84ac9aSAndroid Build Coastguard Worker	     yes|no|check) ;;
35*cf84ac9aSAndroid Build Coastguard Worker	     *) with_libunwind=yes
36*cf84ac9aSAndroid Build Coastguard Worker		libunwind_CPPFLAGS="-I${withval}/include"
37*cf84ac9aSAndroid Build Coastguard Worker		libunwind_LDFLAGS="-L${withval}/lib" ;;
38*cf84ac9aSAndroid Build Coastguard Worker	     esac],
39*cf84ac9aSAndroid Build Coastguard Worker	    [with_libunwind=check]
40*cf84ac9aSAndroid Build Coastguard Worker)
41*cf84ac9aSAndroid Build Coastguard Worker
42*cf84ac9aSAndroid Build Coastguard Worker])
43*cf84ac9aSAndroid Build Coastguard Worker
44*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_LIBUNWIND], [dnl
45*cf84ac9aSAndroid Build Coastguard Worker
46*cf84ac9aSAndroid Build Coastguard Workerlibunwind_CPPFLAGS=
47*cf84ac9aSAndroid Build Coastguard Workerlibunwind_LDFLAGS=
48*cf84ac9aSAndroid Build Coastguard Workerlibunwind_LIBS=
49*cf84ac9aSAndroid Build Coastguard Worker
50*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test "x$with_libunwind" != xno && test "x$use_unwinder" = x],
51*cf84ac9aSAndroid Build Coastguard Worker      [saved_CPPFLAGS="$CPPFLAGS"
52*cf84ac9aSAndroid Build Coastguard Worker       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
53*cf84ac9aSAndroid Build Coastguard Worker
54*cf84ac9aSAndroid Build Coastguard Worker       AC_CHECK_HEADERS([libunwind-ptrace.h],
55*cf84ac9aSAndroid Build Coastguard Worker	 [saved_LDFLAGS="$LDFLAGS"
56*cf84ac9aSAndroid Build Coastguard Worker	  LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
57*cf84ac9aSAndroid Build Coastguard Worker
58*cf84ac9aSAndroid Build Coastguard Worker	  AC_CHECK_LIB([unwind], [backtrace],
59*cf84ac9aSAndroid Build Coastguard Worker	    [libunwind_LIBS="-lunwind $libunwind_LIBS"
60*cf84ac9aSAndroid Build Coastguard Worker
61*cf84ac9aSAndroid Build Coastguard Worker	     AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
62*cf84ac9aSAndroid Build Coastguard Worker	     saved_LIBS="$LIBS"
63*cf84ac9aSAndroid Build Coastguard Worker	     LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
64*cf84ac9aSAndroid Build Coastguard Worker
65*cf84ac9aSAndroid Build Coastguard Worker	     AC_LINK_IFELSE(
66*cf84ac9aSAndroid Build Coastguard Worker	       [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
67*cf84ac9aSAndroid Build Coastguard Worker				[[return !unw_create_addr_space(0, 0)]])
68*cf84ac9aSAndroid Build Coastguard Worker	       ],
69*cf84ac9aSAndroid Build Coastguard Worker	       [AC_MSG_RESULT([yes])
70*cf84ac9aSAndroid Build Coastguard Worker		libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
71*cf84ac9aSAndroid Build Coastguard Worker
72*cf84ac9aSAndroid Build Coastguard Worker		AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
73*cf84ac9aSAndroid Build Coastguard Worker		  [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
74*cf84ac9aSAndroid Build Coastguard Worker		   use_unwinder=libunwind
75*cf84ac9aSAndroid Build Coastguard Worker		  ],
76*cf84ac9aSAndroid Build Coastguard Worker		  [if test "x$with_libunwind" != xcheck; then
77*cf84ac9aSAndroid Build Coastguard Worker		     AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
78*cf84ac9aSAndroid Build Coastguard Worker		   fi
79*cf84ac9aSAndroid Build Coastguard Worker		  ],
80*cf84ac9aSAndroid Build Coastguard Worker		  [$libunwind_LIBS]
81*cf84ac9aSAndroid Build Coastguard Worker		)
82*cf84ac9aSAndroid Build Coastguard Worker	       ],
83*cf84ac9aSAndroid Build Coastguard Worker	       [AC_MSG_RESULT([no])
84*cf84ac9aSAndroid Build Coastguard Worker		if test "x$with_libunwind" != xcheck; then
85*cf84ac9aSAndroid Build Coastguard Worker		  AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
86*cf84ac9aSAndroid Build Coastguard Worker		fi
87*cf84ac9aSAndroid Build Coastguard Worker	       ]
88*cf84ac9aSAndroid Build Coastguard Worker	     )
89*cf84ac9aSAndroid Build Coastguard Worker
90*cf84ac9aSAndroid Build Coastguard Worker	     LIBS="$saved_LIBS"
91*cf84ac9aSAndroid Build Coastguard Worker	    ],
92*cf84ac9aSAndroid Build Coastguard Worker	    [if test "x$with_libunwind" != xcheck; then
93*cf84ac9aSAndroid Build Coastguard Worker	       AC_MSG_FAILURE([failed to find libunwind])
94*cf84ac9aSAndroid Build Coastguard Worker	     fi
95*cf84ac9aSAndroid Build Coastguard Worker	    ],
96*cf84ac9aSAndroid Build Coastguard Worker	    [$libunwind_LIBS]
97*cf84ac9aSAndroid Build Coastguard Worker	  )
98*cf84ac9aSAndroid Build Coastguard Worker
99*cf84ac9aSAndroid Build Coastguard Worker	  LDFLAGS="$saved_LDFLAGS"
100*cf84ac9aSAndroid Build Coastguard Worker	 ],
101*cf84ac9aSAndroid Build Coastguard Worker	 [if test "x$with_libunwind" != xcheck; then
102*cf84ac9aSAndroid Build Coastguard Worker	    AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
103*cf84ac9aSAndroid Build Coastguard Worker	  fi
104*cf84ac9aSAndroid Build Coastguard Worker	 ]
105*cf84ac9aSAndroid Build Coastguard Worker       )
106*cf84ac9aSAndroid Build Coastguard Worker
107*cf84ac9aSAndroid Build Coastguard Worker       CPPFLAGS="$saved_CPPFLAGS"
108*cf84ac9aSAndroid Build Coastguard Worker      ]
109*cf84ac9aSAndroid Build Coastguard Worker)
110*cf84ac9aSAndroid Build Coastguard Worker
111*cf84ac9aSAndroid Build Coastguard Workerif test "x$use_unwinder" = xlibunwind; then
112*cf84ac9aSAndroid Build Coastguard Worker	AC_DEFINE([USE_LIBUNWIND], 1,
113*cf84ac9aSAndroid Build Coastguard Worker		  [Whether to use libunwind for stack tracing])
114*cf84ac9aSAndroid Build Coastguard Worker	AC_SUBST(libunwind_LIBS)
115*cf84ac9aSAndroid Build Coastguard Worker	AC_SUBST(libunwind_LDFLAGS)
116*cf84ac9aSAndroid Build Coastguard Worker	AC_SUBST(libunwind_CPPFLAGS)
117*cf84ac9aSAndroid Build Coastguard Workerfi
118*cf84ac9aSAndroid Build Coastguard Worker
119*cf84ac9aSAndroid Build Coastguard Worker])
120