summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-05 15:39:55 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-05 15:39:55 +0000
commite23aefe2888d59763b013eeb491026a2ffc8930b (patch)
treea344888fdaf6c9d7db94b785d345962911346fba /tool
parentda79033a30aef778e3d5cce9541d38fe968afb77 (diff)
transform_mjit_header.rb: restrict transformation
to whitelisted patterns. This fix is for NetBSD. [Bug #14439] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r--tool/transform_mjit_header.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/tool/transform_mjit_header.rb b/tool/transform_mjit_header.rb
index c27f9ea8f6..d844b5a2ac 100644
--- a/tool/transform_mjit_header.rb
+++ b/tool/transform_mjit_header.rb
@@ -11,6 +11,7 @@ module MJITHeader
ATTR_VALUE_REGEXP = /[^()]|\([^()]*\)/
ATTR_REGEXP = /__attribute__\s*\(\((#{ATTR_VALUE_REGEXP})*\)\)/
FUNC_HEADER_REGEXP = /\A(\s*#{ATTR_REGEXP})*[^\[{(]*\((#{ATTR_REGEXP}|[^()])*\)(\s*#{ATTR_REGEXP})*\s*/
+ TARGET_NAME_REGEXP = /\A(rb|ruby|vm|insn|attr)_/
# For MinGW's ras.h. Those macros have its name in its definition and can't be preprocessed multiple times.
RECURSIVE_MACROS = %w[
@@ -167,6 +168,11 @@ while (decl_range = MJITHeader.find_decl(code, stop_pos))
code[decl_range] = "static inline #{decl}"
elsif (match = /#{MJITHeader::FUNC_HEADER_REGEXP}{/.match(decl)) && (header = match[0]) !~ /static/
+ unless decl_name.match(MJITHeader::TARGET_NAME_REGEXP)
+ puts "#{PROGRAM}: SKIPPED to transform #{decl_name}"
+ next
+ end
+
extern_names << decl_name
decl[match.begin(0)...match.end(0)] = ''