mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
leaked-globals: check if un-prefixed symbols leak externally
This commit is contained in:
parent
e0f0ab959e
commit
23751a2681
2 changed files with 44 additions and 0 deletions
|
@ -640,3 +640,7 @@ mjit_build_dir.$(SOEXT): $(MJIT_MIN_HEADER) $(srcdir)/ruby-runner.c ruby-runner.
|
|||
$(Q) $(DLDSHARED) $(MJIT_DLDFLAGS) $(ARCH_FLAG) $(CFLAGS) $(CPPFLAGS) \
|
||||
-DMAKE_MJIT_BUILD_DIR=1 -DMJIT_MIN_HEADER='"$(MJIT_MIN_HEADER)"' \
|
||||
$(OUTFLAG)$@ $(srcdir)/ruby-runner.c
|
||||
|
||||
# yes-test-basic: leaked-globals
|
||||
leaked-globals: $(COMMONOBJS) prog $(srcdir)/tool/leaked-globals PHONY
|
||||
$(Q) $(XRUBY) $(srcdir)/tool/leaked-globals NM=$(NM) SYMBOL_PREFIX=$(SYMBOL_PREFIX) $(srcdir)/configure.ac $(COMMONOBJS)
|
||||
|
|
40
tool/leaked-globals
Executable file
40
tool/leaked-globals
Executable file
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/ruby
|
||||
require_relative 'colorize'
|
||||
|
||||
until ARGV.empty?
|
||||
case ARGV[0]
|
||||
when /\ASYMBOL_PREFIX=(.*)/
|
||||
SYMBOL_PREFIX = $1
|
||||
when /\ANM=(.*)/ # may be multiple words
|
||||
NM = $1
|
||||
else
|
||||
break
|
||||
end
|
||||
ARGV.shift
|
||||
end
|
||||
|
||||
config = ARGV.shift
|
||||
count = 0
|
||||
col = Colorize.new
|
||||
REPLACE = File.read(config).scan(/\bAC_(?:REPLACE|CHECK)_FUNCS?\(\K\w+/)
|
||||
print "Checking leaked global symbols..."
|
||||
STDOUT.flush
|
||||
IO.foreach("|#{NM} -Pgp #{ARGV.join(' ')}") do |line|
|
||||
n, t, = line.split
|
||||
next unless /[BDT]/ =~ t
|
||||
next unless n.sub!(/^#{SYMBOL_PREFIX}/o, "")
|
||||
next if n.include?(".")
|
||||
next if /\A(?:Init_|InitVM_|ruby_|rb_|[Oo]nig|st_|dln_|mjit_|coroutine_|nu(?:comp|rat)_)/ =~ n
|
||||
next if REPLACE.include?(n)
|
||||
puts col.fail("leaked") if count.zero?
|
||||
count += 1
|
||||
puts " #{n}"
|
||||
end
|
||||
case count
|
||||
when 0
|
||||
puts col.pass("none")
|
||||
when 1
|
||||
abort col.fail("1 un-prefixed symbol leaked")
|
||||
else
|
||||
abort col.fail("#{count} un-prefixed symbols leaked")
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue