aboutsummaryrefslogtreecommitdiffhomepage
path: root/ruby/ext
diff options
context:
space:
mode:
authorGravatar Adam Cozzette <acozzette@google.com>2017-03-17 11:23:01 -0700
committerGravatar Adam Cozzette <acozzette@google.com>2017-03-17 11:23:01 -0700
commitea5ef14aa01701f686c52de4e724f66101c8e163 (patch)
tree46d633de91fce6fb78d8690a924f49b4389430a3 /ruby/ext
parent44dc55587ebbf79912615c8bbcd0947e7ebaa33a (diff)
Ruby: only link against specific version of memcpy if we're using glibc
We have some special code in wrap_memcpy.c to ensure that we use the 2.2.5 version of memcpy, for compatibility with older versions of glibc. However, we need to make sure we only attempt to do this when we are actually building with glibc, so that the code can also build successfully against other libc implementations such as musl.
Diffstat (limited to 'ruby/ext')
-rw-r--r--ruby/ext/google/protobuf_c/wrap_memcpy.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/ruby/ext/google/protobuf_c/wrap_memcpy.c b/ruby/ext/google/protobuf_c/wrap_memcpy.c
index 158952a8..394a52f9 100644
--- a/ruby/ext/google/protobuf_c/wrap_memcpy.c
+++ b/ruby/ext/google/protobuf_c/wrap_memcpy.c
@@ -30,15 +30,15 @@
#include <string.h>
-// On x86-64 Linux, we link against the 2.2.5 version of memcpy so that we
-// avoid depending on the 2.14 version of the symbol. This way, distributions
-// that are using pre-2.14 versions of glibc can successfully use the gem we
-// distribute (https://github.com/google/protobuf/issues/2783).
+// On x86-64 Linux with glibc, we link against the 2.2.5 version of memcpy so
+// that we avoid depending on the 2.14 version of the symbol. This way,
+// distributions that are using pre-2.14 versions of glibc can successfully use
+// the gem we distribute (https://github.com/google/protobuf/issues/2783).
//
// This wrapper is enabled by passing the linker flags -Wl,-wrap,memcpy in
// extconf.rb.
#ifdef __linux__
-#ifdef __x86_64__
+#if defined(__x86_64__) && defined(__GNU_LIBRARY__)
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
void *__wrap_memcpy(void *dest, const void *src, size_t n) {
return memcpy(dest, src, n);