[前][次][番号順一覧][スレッド一覧]

ruby-changes:68972

From: Aaron <ko1@a...>
Date: Thu, 21 Oct 2021 08:19:31 +0900 (JST)
Subject: [ruby-changes:68972] 30f20d7c38 (master): Remove some MicroJIT vestiges

https://git.ruby-lang.org/ruby.git/commit/?id=30f20d7c38

From 30f20d7c3867d6e06d78efb5d7e99b4b4260c2ac Mon Sep 17 00:00:00 2001
From: Aaron Patterson <tenderlove@r...>
Date: Mon, 21 Jun 2021 15:16:13 -0700
Subject: Remove some MicroJIT vestiges

Just happened to run across this, so lets fix them
---
 template/Makefile.in                               |   4 +-
 tool/ruby_vm/models/instructions.rb                |   4 +-
 tool/ruby_vm/models/micro_jit.rb                   | 221 ---------------------
 .../models/micro_jit/example_instructions.rb       |  69 -------
 tool/ruby_vm/models/yjit.rb                        | 221 +++++++++++++++++++++
 tool/ruby_vm/models/yjit/example_instructions.rb   |  69 +++++++
 tool/ruby_vm/views/vm.inc.erb                      |   2 +-
 tool/ruby_vm/views/yjit_hooks.inc.erb              |   4 +-
 8 files changed, 297 insertions(+), 297 deletions(-)
 delete mode 100644 tool/ruby_vm/models/micro_jit.rb
 delete mode 100644 tool/ruby_vm/models/micro_jit/example_instructions.rb
 create mode 100644 tool/ruby_vm/models/yjit.rb
 create mode 100644 tool/ruby_vm/models/yjit/example_instructions.rb

diff --git a/template/Makefile.in b/template/Makefile.in
index 730ad942c7..eebdaf08da 100644
--- a/template/Makefile.in
+++ b/template/Makefile.in
@@ -610,8 +610,8 @@ $(INSNS): $(srcdir)/insns.def vm_opts.h \ https://github.com/ruby/ruby/blob/trunk/template/Makefile.in#L610
 	  $(tooldir)/ruby_vm/models/instructions_unifications.rb \
 	  $(tooldir)/ruby_vm/models/operands_unifications.rb \
 	  $(tooldir)/ruby_vm/models/trace_instructions.rb \
-	  $(tooldir)/ruby_vm/models/micro_jit.rb \
-	  $(tooldir)/ruby_vm/models/micro_jit/example_instructions.rb \
+	  $(tooldir)/ruby_vm/models/yjit.rb \
+	  $(tooldir)/ruby_vm/models/yjit/example_instructions.rb \
 	  $(tooldir)/ruby_vm/models/typemap.rb \
 	  $(tooldir)/ruby_vm/scripts/converter.rb \
 	  $(tooldir)/ruby_vm/scripts/insns2vm.rb \
diff --git a/tool/ruby_vm/models/instructions.rb b/tool/ruby_vm/models/instructions.rb
index 1533872d66..e6e5d2713b 100644
--- a/tool/ruby_vm/models/instructions.rb
+++ b/tool/ruby_vm/models/instructions.rb
@@ -13,12 +13,12 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/models/instructions.rb#L13
 require_relative 'bare_instructions'
 require_relative 'operands_unifications'
 require_relative 'instructions_unifications'
-require_relative 'micro_jit'
+require_relative 'yjit'
 
 RubyVM::Instructions = RubyVM::BareInstructions.to_a + \
                        RubyVM::OperandsUnifications.to_a + \
                        RubyVM::InstructionsUnifications.to_a + \
-                       RubyVM::MicroJIT::ExampleInstructions.to_a
+                       RubyVM::YJIT::ExampleInstructions.to_a
 
 
 require_relative 'trace_instructions'
diff --git a/tool/ruby_vm/models/micro_jit.rb b/tool/ruby_vm/models/micro_jit.rb
deleted file mode 100644
index 83b463a367..0000000000
--- a/tool/ruby_vm/models/micro_jit.rb
+++ /dev/null
@@ -1,221 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/models/instructions.rb#L0
-#! /your/favourite/path/to/ruby
-# -*- Ruby -*-
-# -*- frozen_string_literal: true; -*-
-# -*- warn_indent: true; -*-
-#
-# Copyright (c) 2020 Wu, Alan.  All rights reserved.
-#
-# This file is  a part of the programming language  Ruby.  Permission is hereby
-# granted, to  either redistribute and/or  modify this file, provided  that the
-# conditions  mentioned in  the file  COPYING are  met.  Consult  the file  for
-# details.
-
-module RubyVM::MicroJIT
-  ScrapeResult = Struct.new(:pre_call_bytes, :post_call_bytes, :disassembly_lines)
-
-  class << self
-    def target_platform
-      # Note, checking RUBY_PLATRFORM doesn't work when cross compiling
-      @platform ||= if RUBY_PLATFORM.include?('darwin')
-        :darwin
-      elsif RUBY_PLATFORM.include?('linux')
-        :linux
-      else
-        :unknown
-      end
-    end
-
-    def get_fileoff
-      # use the load command to figure out the offset to the start of the content of vm.o
-      `otool -l vm.o`.each_line do |line|
-        if (fileoff = line[/fileoff (\d+)/, 1])
-          p [__method__, line] if $DEBUG
-          return fileoff.to_i
-        end
-      end
-      raise
-    end
-
-    def get_symbol_offset(symbol)
-      `nm vm.o`.each_line do |line|
-        if (offset = line[Regexp.compile('(\h+).+' + Regexp.escape(symbol) + '\Z'), 1])
-          p [__method__, line] if $DEBUG
-          return Integer(offset, 16)
-        end
-      end
-      raise
-    end
-
-    def readint8b(offset)
-      bytes = IO.binread('vm.o', 8, offset)
-      bytes.unpack('q').first #  this is native endian but we want little endian. it's fine if the host moachine is x86
-    end
-
-    def get_symbol_section_and_offset(name)
-      `objdump -w -t vm.o`.each_line do |line|
-        split_line = line.split
-        next unless split_line.size >= 6
-        # the table should go into a data section
-        if split_line[5].include?('insns_address_table') && split_line[3].include?('data')
-          p line if $DEBUG
-          return [split_line[3], Integer(split_line[0], 16)]
-        end
-      end
-      raise 'Failed to find section and offset for the instruction address table'
-    end
-
-    def get_handler_offset(table_section, table_offset, insn_id)
-      target_offset = insn_id * 8 + table_offset
-      reloc_start_message = "RELOCATION RECORDS FOR [#{table_section}]:"
-      `objdump -w -r vm.o`.each_line do |line|
-        line.strip!
-        if (line == reloc_start_message)...(line.empty?)
-          split_line = line.split
-          next if split_line.first == 'RELOCATION'
-          next if split_line == ['OFFSET', 'TYPE', 'VALUE']
-          if Integer(split_line.first, 16) == target_offset
-            section, offset = split_line[2].split('+')
-            p line if $DEBUG
-            return section, Integer(offset, 16)
-          end
-        end
-      end
-      raise 'Failed to find relocation info for the target instruction'
-    end
-
-    def objdump_disassemble_command(offset)
-      case target_platform
-      when :darwin
-        "objdump --x86-asm-syntax=intel --start-address=#{offset} --stop-address=#{offset+50} -d vm.o"
-      when :linux
-        "objdump -M intel --start-address=#{offset} --stop-address=#{offset+50} -d vm.o"
-      else
-        raise "unkown platform"
-      end
-    end
-
-    def disassemble(offset)
-      command = objdump_disassemble_command(offset)
-      puts "Running: #{command}"
-      disassembly = `#{command}`
-      instructions = []
-      puts disassembly if $DEBUG
-      disassembly.each_line do |line|
-        line = line.strip
-        match_data = /\s*\h+:\s*((?:\h\h\s)+)\s+(\w+)/.match(line)
-        if match_data
-          bytes = match_data[1]
-          mnemonic = match_data[2]
-          instructions << [bytes, mnemonic, line]
-          break if mnemonic == 'jmp'
-        elsif !instructions.empty?
-          p line
-          raise "expected a continuous sequence of disassembly lines"
-        end
-      end
-
-      jmp_idx = instructions.find_index { |_, mnemonic, _| mnemonic == 'jmp' }
-      raise 'failed to find jmp' unless jmp_idx
-      raise 'generated code for example too long' unless jmp_idx < 10
-      handler_instructions = instructions[(0..jmp_idx)]
-
-      disassembly_lines = handler_instructions.map {|_, _, line| line}
-      puts "Disassembly for the example handler:"
-      puts disassembly_lines
-
-
-      raise 'rip reference in example makes copying unsafe' if handler_instructions.any? { |_, _, full_line| full_line.downcase.include?('rip') }
-      acceptable_mnemonics = %w(mov jmp lea call endbr64)
-      unrecognized = nil
-      handler_instructions.each { |i| unrecognized = i unless acceptable_mnemonics.include?(i[1]) }
-      raise "found an unrecognized \"#{unrecognized[1]}\" instruction in the example. List of recognized instructions: #{acceptable_mnemonics.join(', ')}" if unrecognized
-      raise 'found multiple jmp instructions' if handler_instructions.count { |_, mnemonic, _| mnemonic == 'jmp' } > 1
-      raise "the jmp instruction seems to be relative which isn't copiable" if instructions[jmp_idx][0].split.size > 4
-      raise 'no call instructions found' if handler_instructions.count { |_, mnemonic, _| mnemonic == 'call' } == 0
-      raise 'found multiple call instructions' if handler_instructions.count { |_, mnemonic, _| mnemonic == 'call' } > 1
-      call_idx = handler_instructions.find_index { |_, mnemonic, _| mnemonic == 'call' }
-
-
-      pre_call_bytes = []
-      post_call_bytes = []
-
-      handler_instructions.take(call_idx).each do |bytes, mnemonic, _|
-        pre_call_bytes += bytes.split
-      end
-
-      handler_instructions[call_idx + 1, handler_instructions.size].each do |bytes, _, _|
-        post_call_bytes += bytes.split
-      end
-
-      ScrapeResult.new(
-        comma_separated_hex_string(pre_call_bytes),
-        comma_separated_hex_string(post_call_bytes),
-        disassembly_lines
-      )
-    end
-
-    def darwin_scrape(instruction_id)
-      fileoff = get_fileoff
-      tc_table_offset = get_symbol_offset('vm_exec_core.insns_address_table')
-      vm_exec_core_offset = get_symbol_offset('vm_exec_core')
-      p instruction_id if $DEBUG
-      p fileoff if $DEBUG
-      p tc_table_offset.to_s(16) if $DEBUG
-      offset_to_insn_in_tc_table = fileoff + tc_table_offset + 8 * instruction_id
-      p offset_to_insn_in_tc_table if $DEBUG
-      offset_to_handler_code_from_vm_exec_core = readint8b(offset_to_insn_in_tc_table)
-      p offset_to_handler_code_from_vm_exec_core if $DEBUG
-      disassemble(vm_exec_core_offset + offset_to_handler_code_from_vm_exec_core)
-    end
-
-    def linux_scrape(instruction_id)
-      table_section, table_offset = get_symbol_section_and_offset('vm_exec_core.insns_address_table')
-      p [table_section, table_offset] if $DEBUG
-      handler_section, handler_offset = get_handler_offset(table_section, table_offset, inst (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]