Project

General

Profile

Bug #9928 ยป test_NEXT_for_aix.patch

ReiOdaira (Rei Odaira), 06/10/2014 08:00 PM

View differences:

test/fiddle/test_handle.rb (working copy)
handle = Handle::NEXT
refute_nil handle['malloc']
rescue
# BSD
#
# If dlsym() is called with the special handle RTLD_NEXT, then the search
# for the symbol is limited to the shared objects which were loaded after
# the one issuing the call to dlsym(). Thus, if the function is called
# from the main program, all the shared libraries are searched. If it is
# called from a shared library, all subsequent shared libraries are
# searched. RTLD_NEXT is useful for implementing wrappers around library
# functions. For example, a wrapper function getpid() could access the
# "real" getpid() with dlsym(RTLD_NEXT, "getpid"). (Actually, the dlfunc()
# interface, below, should be used, since getpid() is a function and not a
# data object.)
# --- FreeBSD 8.0 dlsym(3)
require 'objspace'
handle = Handle::NEXT
refute_nil handle['Init_objspace']
begin
# BSD
#
# If dlsym() is called with the special handle RTLD_NEXT, then the search
# for the symbol is limited to the shared objects which were loaded after
# the one issuing the call to dlsym(). Thus, if the function is called
# from the main program, all the shared libraries are searched. If it is
# called from a shared library, all subsequent shared libraries are
# searched. RTLD_NEXT is useful for implementing wrappers around library
# functions. For example, a wrapper function getpid() could access the
# "real" getpid() with dlsym(RTLD_NEXT, "getpid"). (Actually, the dlfunc()
# interface, below, should be used, since getpid() is a function and not a
# data object.)
# --- FreeBSD 8.0 dlsym(3)
require 'objspace'
handle = Handle::NEXT
refute_nil handle['Init_objspace']
rescue
# AIX
#
# The behavior of AIX for RTLD_NEXT is the same as that of BSD.
# However, the problem is that on AIX, Ruby's extension libraries do not
# export their symbols, because they are loaded not by dlopen(3)/dlsym(3)
# but by load(3) (See dln.c). This means 'Init_objspace' is not the search
# target of RTLD_NEXT and the test above results in nil.
# Fortunately, on AIX, helper.rb creates and loads a dummy shared library,
# libaixdltest.so, which contains 'strcpy' and some other functions,
# so we can take advantage of it for testing RTLD_NEXT.
handle = Handle::NEXT
refute_nil handle['strcpy']
end
end
end unless /mswin|mingw/ =~ RUBY_PLATFORM
    (1-1/1)