> Date: Wed, 25 Apr 2018 13:48:12 +0200
> From: Stefan Sperling <[email protected]>
> 
> tor's configure script is failing on armv7:
> 
> checking size of short... (cached) 2
> checking size of int... configure: error: in 
> `/usr/ports/pobj/tor-0.3.2.10/tor-0.3.2.10':
> configure: error: cannot compute sizeof (int)
> See `config.log' for more details
> 
> The underlying error shows up at mulitple places in config.log,
> and looks like:
> 
> configure:12618: cc -o conftest -O2 -pipe -fasynchronous-unwind-tables  
> -I${top_srcdir}/src/common  -z relro -z now -rdynamic conftest.c
>  -lpthread  >&5
> /tmp/conftest-9c413e.o:(.ARM.exidx+0x0): undefined reference to 
> `__aeabi_unwind_cpp_pr1'
> cc: error: linker command failed with exit code 1 (use -v to see invocation)
> configure:12618: $? = 1
> configure: program exited with status 1
> 
> Note that the error shows up during other tests in the configure
> script as well, not just this 'size of int' check. It seems we
> are lucky that we didn't get silent failures only.
> 
> I am not sure what __aeabi_unwind_cpp_pr1 is about, and whether there is
> a deeper issue to fix. This seems related to -fasynchronous-unwind-table
> which according to the tor changelog has something to do with backtrace
> support:
> 
>   o Minor bugfixes (backtrace support):
>     - Support automatic backtraces on more platforms by using the
>       "-fasynchronous-unwind-tables" compiler option. This option is
>       needed for platforms like 32-bit Intel where "-fomit-frame-pointer"
>       is on by default and table generation is not. This doesn't yet
>       add Windows support; only Linux, OSX, and some BSDs are affected.
>       Reported by 'cypherpunks'; fixes bug 11047; bugfix on 0.2.5.2-alpha.
> 
> If I simply remove this compiler flag the configure script finishes fine.
> 
> Is this a good fix?

ARM is "special".  For the 32-bit ABI they designed their own variant
of the the unwinder ABI.  When generating exception handling
information for this ABI, references to __aeabi_unwind_cpp_pr1 may
occur.  GCC will resolve these by linking against libgcc_eh.a.  For
Clang with compiler-rt I'm still not sure what the best approach is.

Anyway, do we actually support the backtrace functionality?  As far as
I can tell tor needs glibc-compatible backtrace functionality which we
don't provide.  So tis diff should be harmless in that respect.

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/net/tor/Makefile,v
> retrieving revision 1.111
> diff -u -p -r1.111 Makefile
> --- Makefile  4 Mar 2018 14:05:06 -0000       1.111
> +++ Makefile  25 Apr 2018 11:45:57 -0000
> @@ -15,7 +15,8 @@ WANTLIB += c crypto event_core event_ext
>  
>  MASTER_SITES=        https://www.torproject.org/dist/
>  
> -CONFIGURE_STYLE=gnu
> +AUTOCONF_VERSION=2.69
> +CONFIGURE_STYLE=gnu autoconf
>  # PIE is already taken care of on a per-arch basis, and we have stack 
> protection
>  # anyway on FRAME_GROWS_DOWN archs.
>  CONFIGURE_ARGS=      --with-ssl-dir=/usr \
> Index: patches/patch-configure_ac
> ===================================================================
> RCS file: patches/patch-configure_ac
> diff -N patches/patch-configure_ac
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-configure_ac        25 Apr 2018 11:46:27 -0000
> @@ -0,0 +1,19 @@
> +$OpenBSD$
> +disable -fasynchronous-unwind-tables as it breaks build on armv7
> +Index: configure.ac
> +--- configure.ac.orig
> ++++ configure.ac
> +@@ -1081,13 +1081,6 @@ fi
> + CFLAGS="$saved_CFLAGS"
> + AC_SUBST(F_OMIT_FRAME_POINTER)
> + 
> +-dnl ------------------------------------------------------
> +-dnl If we are adding -fomit-frame-pointer (or if the compiler's doing it
> +-dnl for us, as GCC 4.6 and later do at many optimization levels), then
> +-dnl we should try to add -fasynchronous-unwind-tables so that our backtrace
> +-dnl code will work.
> +-TOR_CHECK_CFLAGS(-fasynchronous-unwind-tables)
> +-
> + dnl ============================================================
> + dnl Check for libseccomp
> + 
> Index: patches/patch-src_config_torrc_sample_in
> ===================================================================
> RCS file: /cvs/ports/net/tor/patches/patch-src_config_torrc_sample_in,v
> retrieving revision 1.19
> diff -u -p -r1.19 patch-src_config_torrc_sample_in
> --- patches/patch-src_config_torrc_sample_in  10 Jan 2018 14:35:49 -0000      
> 1.19
> +++ patches/patch-src_config_torrc_sample_in  25 Apr 2018 11:10:43 -0000
> @@ -37,7 +37,7 @@ Index: src/config/torrc.sample.in
>   #HiddenServicePort 80 127.0.0.1:80
>   #HiddenServicePort 22 127.0.0.1:22
>   
> -@@ -198,6 +198,8 @@
> +@@ -204,6 +204,8 @@
>   ## and any public IPv4 and IPv6 addresses on any interface on the relay.
>   ## See the man page entry for ExitPolicyRejectPrivate if you want to allow
>   ## "exit enclaving".
> 

Reply via email to