summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-15 10:20:16 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-17 19:37:56 +0900
commitc68ce6f7f5e6020409cfe689ba5946f284828d4b (patch)
treea9fefa40e62398b1961d356e52c3407e3f6ef89a
parent6215b5ba9811ae1a1e631f01a88fd5b32043effa (diff)
Skip checking for symbol leaks in libruby.so linking extensions
The libruby.so linking extension libraries contain symbols exported from extension libraries, and is not subject of test-leaked-globals.
-rw-r--r--template/Makefile.in3
-rwxr-xr-xtool/leaked-globals13
2 files changed, 13 insertions, 3 deletions
diff --git a/template/Makefile.in b/template/Makefile.in
index 61f420d966..ae1bbd8f24 100644
--- a/template/Makefile.in
+++ b/template/Makefile.in
@@ -643,7 +643,7 @@ un-runnable:
$(ECHO) cannot make runnable, configure with --enable-load-relative.
$(Q) exit 1
-LIBRUBY_FOR_LEAKED_GLOBALS = $(enable_shared:no=$(EXTSTATIC:static=))
+LIBRUBY_FOR_LEAKED_GLOBALS = $(enable_shared:no=)
yes-test-basic: $(DOT_WAIT) test-leaked-globals
leaked-globals: test-leaked-globals
yes-test-leaked-globals-precheck: $(COMMONOBJS) prog $(tooldir)/leaked-globals
@@ -653,6 +653,7 @@ yes-test-leaked-globals: yes-test-leaked-globals-precheck
$(Q) $(XRUBY) $(tooldir)/leaked-globals \
SOEXT=$(SOEXT) NM="$(NM) -Pgp" SYMBOL_PREFIX=$(SYMBOL_PREFIX) \
SYMBOLS_IN_EMPTYLIB="@XSYMBOLS_IN_EMPTYLIB@" \
+ EXTSTATIC="$(EXTSTATIC)" \
PLATFORM=$(hdrdir)/ruby/$(PLATFORM_DIR).h $(srcdir)/configure.ac \
$(COMMONOBJS) $(LIBRUBY_FOR_LEAKED_GLOBALS:yes=$(LIBRUBY_SO))
$(ACTIONS_ENDGROUP)
diff --git a/tool/leaked-globals b/tool/leaked-globals
index 87089ebd81..ee75f78d1d 100755
--- a/tool/leaked-globals
+++ b/tool/leaked-globals
@@ -13,12 +13,15 @@ until ARGV.empty?
soext = $1
when /\A SYMBOLS_IN_EMPTYLIB=(.*)/x
SYMBOLS_IN_EMPTYLIB = $1.split(" ")
+ when /\A EXTSTATIC=(.+)?/x
+ EXTSTATIC = true
else
break
end
ARGV.shift
end
SYMBOLS_IN_EMPTYLIB ||= nil
+EXTSTATIC ||= false
config = ARGV.shift
count = 0
@@ -56,8 +59,14 @@ REPLACE.push("rust_eh_personality") if RUBY_PLATFORM.include?("darwin")
print "Checking leaked global symbols..."
STDOUT.flush
-soext = /\.#{soext}(?:$|\.)/ if soext
-so = soext =~ ARGV.first if ARGV.size == 1
+if soext
+ soext = /\.#{soext}(?:$|\.)/
+ if EXTSTATIC
+ ARGV.delete_if {|n| soext =~ n}
+ elsif ARGV.size == 1
+ so = soext =~ ARGV.first
+ end
+end
IO.foreach("|#{NM} #{ARGV.join(' ')}") do |line|
line.chomp!
next so = nil if line.empty?