On Thu, Mar 03, 2022 at 12:31:06AM -0500, Kurt Mosiejczuk wrote:
> snappy 1.1.9 explodes horribly on sparc64:
> 
> /usr/obj/ports/snappy-1.1.9/bin/c++ -DHAVE_CONFIG_H -Dsnappy_EXPORTS -I. 
> -I/usr/obj/ports/snappy-1.1.9/snappy-1.1.9 -O2 -pipe -Wall -Wextra 
> -fno-exceptions -fno-rtti -DNDEBUG -fPIC -std=c++11 -MD -MT 
> CMakeFiles/snappy.dir/snappy.cc.o -MF CMakeFiles/snappy.dir/snappy.cc.o.d -o 
> CMakeFiles/snappy.dir/snappy.cc.o -c 
> /usr/obj/ports/snappy-1.1.9/snappy-1.1.9/snappy.cc
> /usr/obj/ports/snappy-1.1.9/snappy-1.1.9/snappy.cc:1017:8: warning: 
> always_inline function might not be inlinable [-Wattributes]
>  size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
>         ^~~~~~~~~~~~~~~~
> /usr/obj/ports/snappy-1.1.9/snappy-1.1.9/snappy.cc: In function 
> 'std::pair<const unsigned char*, long int> snappy::DecompressBranchless(const 
> uint8_t*, const uint8_t*, ptrdiff_t, T, ptrdiff_t) [with T = char*]':
> /usr/obj/ports/snappy-1.1.9/snappy-1.1.9/snappy.cc:1017:8: error: inlining 
> failed in call to always_inline 'size_t snappy::AdvanceToNextTag(const 
> uint8_t**, size_t*)': function body can be overwritten at link time
> /usr/obj/ports/snappy-1.1.9/snappy-1.1.9/snappy.cc:1097:43: note: called from 
> here
>          size_t tag_type = AdvanceToNextTag(&ip, &tag);
> 
> ...
> 
> There's a bit more.
> 
> This patch makes it _not_ set always_inline on sparc64. This fixes the build.

No need for a patch, you could pass `-U HAVE_ATTRIBUTE_ALWAYS_INLINE` in
our Makefile.

We could also disable the flag that triggers this?

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/archivers/snappy/Makefile,v
retrieving revision 1.13
diff -u -p -r1.13 Makefile
--- Makefile    30 Mar 2020 20:43:50 -0000      1.13
+++ Makefile    4 Mar 2022 10:28:17 -0000
@@ -19,6 +19,10 @@ WANTLIB +=           m ${COMPILER_LIBCXX}
 
 COMPILER =             base-clang ports-gcc base-gcc
 
+.if ${MACHINE_ARCH} == sparc64
+CFLAGS +=              -Wno-attributes
+.endif
+
 MODULES =              devel/cmake
 
 CONFIGURE_ARGS +=      -DBUILD_SHARED_LIBS=ON \




> 
> ok?
> 
> --Kurt
> 
> Index: patches/patch-snappy-stubs-internal_h
> ===================================================================
> RCS file: patches/patch-snappy-stubs-internal_h
> diff -N patches/patch-snappy-stubs-internal_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-snappy-stubs-internal_h     3 Mar 2022 05:28:19 -0000
> @@ -0,0 +1,14 @@
> +Don't set this for sparc64, it keeps it from building
> +
> +Index: snappy-stubs-internal.h
> +--- snappy-stubs-internal.h.orig
> ++++ snappy-stubs-internal.h
> +@@ -99,7 +99,7 @@
> + #endif
> + 
> + // Inlining hints.
> +-#ifdef HAVE_ATTRIBUTE_ALWAYS_INLINE
> ++#if defined(HAVE_ATTRIBUTE_ALWAYS_INLINE) && !defined(__sparc64__)
> + #define SNAPPY_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
> + #else
> + #define SNAPPY_ATTRIBUTE_ALWAYS_INLINE
> 

Reply via email to