summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-12-27 14:58:00 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-12-27 15:50:44 +0900
commit260d626ef69336530b636e2b14b75479f869e8dc (patch)
tree87bc638fa8a6dd557f8dbf048e63bdfa493b12ee
parent366b58d7ca19914d533a0bef51e51995e7876da7 (diff)
Ignore symbols declared in the platform header
-rw-r--r--template/Makefile.in2
-rwxr-xr-xtool/leaked-globals15
2 files changed, 16 insertions, 1 deletions
diff --git a/template/Makefile.in b/template/Makefile.in
index f5a31499b3..1f911524fe 100644
--- a/template/Makefile.in
+++ b/template/Makefile.in
@@ -684,4 +684,4 @@ mjit_build_dir.$(SOEXT): $(MJIT_MIN_HEADER) $(srcdir)/ruby-runner.c ruby-runner.
# yes-test-basic: leaked-globals
leaked-globals: $(COMMONOBJS) prog $(tooldir)/leaked-globals PHONY
- $(Q) $(XRUBY) $(tooldir)/leaked-globals NM=$(NM) SYMBOL_PREFIX=$(SYMBOL_PREFIX) $(srcdir)/configure.ac $(COMMONOBJS)
+ $(Q) $(XRUBY) $(tooldir)/leaked-globals NM=$(NM) SYMBOL_PREFIX=$(SYMBOL_PREFIX) PLATFORM=$(hdrdir)/ruby/$(PLATFORM_DIR).h $(srcdir)/configure.ac $(COMMONOBJS)
diff --git a/tool/leaked-globals b/tool/leaked-globals
index 0d8c3c4195..7ed81b1361 100755
--- a/tool/leaked-globals
+++ b/tool/leaked-globals
@@ -7,6 +7,8 @@ until ARGV.empty?
SYMBOL_PREFIX = $1
when /\ANM=(.*)/ # may be multiple words
NM = $1
+ when /\APLATFORM=(.+)?/
+ platform = $1
else
break
end
@@ -20,6 +22,19 @@ config_code = File.read(config)
REPLACE = config_code.scan(/\bAC_(?:REPLACE|CHECK)_FUNCS?\((\w+)/).flatten
# REPLACE << 'memcmp' if /\bAC_FUNC_MEMCMP\b/ =~ config_code
REPLACE.push('main', 'DllMain')
+if platform and !platform.empty?
+ begin
+ h = File.read(platform)
+ rescue Errno::ENOENT
+ else
+ REPLACE.concat(
+ h .gsub(%r[/\*.*?\*/]m, " ") # delete block comments
+ .gsub(%r[//.*], ' ') # delete oneline comments
+ .gsub(/^\s*#.*(?:\\\n.*)*/, "") # delete preprocessor directives
+ .scan(/\b((?!rb_|DEPRECATED|_)\w+)\s*\(.*\);/)
+ .flatten)
+ end
+end
missing = File.dirname(config) + "/missing/"
ARGV.reject! do |n|
unless (src = Dir.glob(missing + File.basename(n, ".*") + ".[cS]")).empty?