9fa40314fc
This commit adds a __wrap_memcpy function and a linker flag to use that
in place of memcpy for our Ruby gem C extension. This allows us to
always use the 2.2.5 version of memcpy, making it possible to use the
gem on distributions with pre-2.14 versions of glibc.
Before this change:
$ objdump -T protobuf_c.so | grep memcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __memcpy_chk
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.14 memcpy
After:
$ objdump -T protobuf_c.so | grep memcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __memcpy_chk
0000000000042450 g DF .text 0000000000000005 Base __wrap_memcpy
This is based on gRPC's solution to a similar problem:
5098508d2d/src/core/lib/support/wrap_memcpy.c
This fixes issue #2783.
18 lines
403 B
Ruby
18 lines
403 B
Ruby
#!/usr/bin/ruby
|
|
|
|
require 'mkmf'
|
|
|
|
$CFLAGS += " -std=c99 -O3 -DNDEBUG"
|
|
|
|
|
|
if RUBY_PLATFORM =~ /linux/
|
|
# Instruct the linker to point memcpy calls at our __wrap_memcpy wrapper.
|
|
$LDFLAGS += " -Wl,-wrap,memcpy"
|
|
end
|
|
|
|
$objs = ["protobuf.o", "defs.o", "storage.o", "message.o",
|
|
"repeated_field.o", "map.o", "encode_decode.o", "upb.o",
|
|
"wrap_memcpy.o"]
|
|
|
|
create_makefile("google/protobuf_c")
|