ruby-yasm 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -0,0 +1,4 @@
1
+ === 0.1.0 / 2009-12-24
2
+
3
+ * Initial release.
4
+
@@ -0,0 +1,17 @@
1
+ History.rdoc
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ lib/yasm.rb
6
+ lib/yasm/task.rb
7
+ lib/yasm/program.rb
8
+ lib/yasm/yasm.rb
9
+ lib/yasm/version.rb
10
+ tasks/spec.rb
11
+ tasks/yard.rb
12
+ spec/spec_helper.rb
13
+ spec/helpers/files.rb
14
+ spec/helpers/files/gas.S
15
+ spec/task_spec.rb
16
+ spec/program_spec.rb
17
+ spec/yasm_spec.rb
@@ -0,0 +1,85 @@
1
+ = ruby-yasm
2
+
3
+ * http://www.tortall.net/projects/yasm/
4
+ * http://www.sophsec.com/
5
+ * Postmodern (postmodern.mod3 at gmail.com)
6
+
7
+ == DESCRIPTION:
8
+
9
+ A Ruby interface to YASM.
10
+
11
+ YASM is a complete rewrite of the NASM assembler, YASM currently supports
12
+ the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes,
13
+ outputs binary, ELF32, ELF64, 32 and 64-bit Mach-O, RDOFF2, COFF, Win32,
14
+ and Win64 object formats, and generates source debugging information in
15
+ STABS, DWARF 2, and CodeView 8 formats.
16
+
17
+ == FEATURES:
18
+
19
+ * Supports all of the +yasm+ command-line options.
20
+
21
+ == EXAMPLES:
22
+
23
+ * Assemble a binary file:
24
+
25
+ YASM::Program.assemble do |yasm|
26
+ yasm.syntax = :gas
27
+ yasm.file = 'hello_world.S'
28
+ yasm.output = 'hello_world.o'
29
+ end
30
+
31
+ * Assemble a binary file, and write the output to a temporary file:
32
+
33
+ YASM::Program.assemble_temp do |yasm|
34
+ yasm.syntax = :gas
35
+ yasm.file = 'hello_world.S'
36
+ end
37
+ # => "/tmp/yasm.3386.0"
38
+
39
+ * Assemble amd64 assembly, in GAS syntax, into an ELF64 file with
40
+ debugging information:
41
+
42
+ YASM::Program.assemble do |yasm|
43
+ yasm.target! :amd64
44
+
45
+ yasm.syntax = :gas
46
+ yasm.file = 'hello_world.S'
47
+
48
+ yasm.output = 'hello_world.o'
49
+ yasm.output_format = :elf64
50
+ yasm.debug_format = :stabs
51
+ end
52
+
53
+ == REQUIREMENTS:
54
+
55
+ * {yasm}[http://www.tortall.net/projects/yasm/] >= 0.8.0.
56
+ * {rprogram}[http://rprogram.rubyforge.org/] >= 0.1.8.
57
+
58
+ == INSTALL:
59
+
60
+ $ sudo gem install ruby-yasm
61
+
62
+ == LICENSE:
63
+
64
+ (The MIT License)
65
+
66
+ Copyright (c) 2009 Hal Brodigan
67
+
68
+ Permission is hereby granted, free of charge, to any person obtaining
69
+ a copy of this software and associated documentation files (the
70
+ 'Software'), to deal in the Software without restriction, including
71
+ without limitation the rights to use, copy, modify, merge, publish,
72
+ distribute, sublicense, and/or sell copies of the Software, and to
73
+ permit persons to whom the Software is furnished to do so, subject to
74
+ the following conditions:
75
+
76
+ The above copyright notice and this permission notice shall be
77
+ included in all copies or substantial portions of the Software.
78
+
79
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
80
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
82
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
83
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
84
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
85
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,27 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require 'hoe/signing'
6
+ require './tasks/spec.rb'
7
+ require './tasks/yard.rb'
8
+
9
+ Hoe.spec('ruby-yasm') do
10
+ self.developer('Postmodern', 'postmodern.mod3@gmail.com')
11
+ self.remote_rdoc_dir = '/'
12
+ self.readme_file = 'README.rdoc'
13
+ self.history_file = 'History.rdoc'
14
+
15
+ self.extra_deps = [
16
+ ['rprogram', '>=0.1.8']
17
+ ]
18
+
19
+ self.extra_dev_deps = [
20
+ ['rspec', '>=1.2.9'],
21
+ ['yard', '>=0.5.2']
22
+ ]
23
+
24
+ self.spec_extras = {:has_rdoc => 'yard'}
25
+ end
26
+
27
+ # vim: syntax=ruby
@@ -0,0 +1,2 @@
1
+ require 'yasm/program'
2
+ require 'yasm/version'
@@ -0,0 +1,98 @@
1
+ require 'yasm/task'
2
+
3
+ require 'rprogram'
4
+ require 'tempfile'
5
+
6
+ module YASM
7
+ class Program < RProgram::Program
8
+
9
+ name_program 'yasm'
10
+
11
+ #
12
+ # Finds the +yasm+ program and assembles a file.
13
+ #
14
+ # @param [Hash{Symbol => Object}] options
15
+ # Additional options for yasm.
16
+ #
17
+ # @yield [task]
18
+ # If a block is given, it will be passed a task object used to
19
+ # specify options for yasm.
20
+ #
21
+ # @yieldparam [Task] task
22
+ # The yasm task object.
23
+ #
24
+ # @return [Boolean]
25
+ # Specifies whether the command exited normally.
26
+ #
27
+ def self.assmeble(options={},&block)
28
+ self.find().assemble(options,&block)
29
+ end
30
+
31
+ #
32
+ # Finds the +yasm+ program, then assembles an assembly file and writes
33
+ # the output to a temporary file.
34
+ #
35
+ # @param [Hash{Symbol => Object}] options
36
+ # Additional options for yasm.
37
+ #
38
+ # @yield [task]
39
+ # If a block is given, it will be passed a task object used to
40
+ # specify options for yasm.
41
+ #
42
+ # @yieldparam [Task] task
43
+ # The yasm task object.
44
+ #
45
+ # @return [TempFile]
46
+ # The temporary file containing the assembled object code.
47
+ #
48
+ def self.assemble_temp(options={},&block)
49
+ self.find().assemble(options,&block)
50
+ end
51
+
52
+ #
53
+ # Assembles an assembly file.
54
+ #
55
+ # @param [Hash{Symbol => Object}] options
56
+ # Additional options for yasm.
57
+ #
58
+ # @yield [task]
59
+ # If a block is given, it will be passed a task object used to
60
+ # specify options for yasm.
61
+ #
62
+ # @yieldparam [Task] task
63
+ # The yasm task object.
64
+ #
65
+ # @return [Boolean]
66
+ # Specifies whether the command exited normally.
67
+ #
68
+ def assemble(options={},&block)
69
+ run_task(Task.new(options,&block))
70
+ end
71
+
72
+ #
73
+ # Assembles an assembly file and writes the output to a temporary file.
74
+ #
75
+ # @param [Hash{Symbol => Object}] options
76
+ # Additional options for yasm.
77
+ #
78
+ # @yield [task]
79
+ # If a block is given, it will be passed a task object used to
80
+ # specify options for yasm.
81
+ #
82
+ # @yieldparam [Task] task
83
+ # The yasm task object.
84
+ #
85
+ # @return [TempFile]
86
+ # The temporary file containing the assembled object code.
87
+ #
88
+ def assemble_temp(options={},&block)
89
+ task = Task.new(options,&block)
90
+ task.output = Tempfile.new('yasm').path
91
+
92
+ if run_task(task)
93
+ return task.output
94
+ end
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,161 @@
1
+ require 'yasm/yasm'
2
+
3
+ require 'rprogram/task'
4
+
5
+ module YASM
6
+ #
7
+ # == YASM options:
8
+ #
9
+ # <tt>--version</tt>:: <tt>yasm.version</tt>
10
+ # <tt>--license</tt>:: <tt>yasm.license</tt>
11
+ # <tt>--help</tt>:: <tt>yasm.help</tt>
12
+ #
13
+ # <tt>--arch</tt>:: <tt>yasm.arch</tt>
14
+ # <tt>--parser</tt>:: <tt>yasm.parser</tt>
15
+ # <tt>--preproc</tt>:: <tt>yasm.preprocessor</tt>
16
+ # <tt>--oformat</tt>:: <tt>yasm.output_format</tt>
17
+ # <tt>--dformat</tt>:: <tt>yasm.debug_format</tt>
18
+ # <tt>--lformat</tt>:: <tt>yasm.list_format</tt>
19
+ #
20
+ # <tt>--list</tt>:: <tt>yasm.list_file</tt>
21
+ # <tt>--objfile</tt>:: <tt>yasm.output</tt>
22
+ # <tt>--mapfile</tt>:: <tt>yasm.map_file</tt>
23
+ #
24
+ # <tt>--machine</tt>:: <tt>yasm.machine</tt>
25
+ # <tt>--force-strict</tt>:: <tt>yasm.force_strict</tt>
26
+ # <tt>-w</tt>:: <tt>yasm.inhibit_warnings</tt>
27
+ # <tt>-W</tt>:: <tt>yasm.toggle_warnings</tt>
28
+ # <tt>-M</tt>:: <tt>yasm.gen_makefile_deps</tt>
29
+ # <tt>-E</tt>:: <tt>yasm.redirect_errors_to</tt>
30
+ # <tt>-e</tt>:: <tt>yasm.redirect_errors</tt>
31
+ # <tt>--preproc-only</tt>:: <tt>yasm.preprocessor_only</tt>
32
+ # <tt>-I</tt>:: <tt>yasm.include</tt>
33
+ # <tt>-P</tt>:: <tt>yasm.pre_include</tt>
34
+ # <tt>-D</tt>:: <tt>yasm.define</tt>
35
+ # <tt>-U</tt>:: <tt>yasm.undefine</tt>
36
+ # <tt>-X</tt>:: <tt>yasm.message_style</tt>
37
+ # <tt>--prefix</tt>:: <tt>yasm.prefix</tt>
38
+ # <tt>--suffix</tt>:: <tt>yasm.suffix</tt>
39
+ #
40
+ # <tt>file</tt>:: <tt>yasm.file</tt>
41
+ #
42
+ class Task < RProgram::Task
43
+
44
+ # The known YASM targets
45
+ TARGETS = {
46
+ :x86 => {:arch => :x86, :machine => :x86},
47
+ :amd64 => {:arch => :x86, :machine => :amd64},
48
+ :lc3b => {:arch => :lc3b, :machine => :lc3b}
49
+ }
50
+
51
+ long_option :flag => '--version'
52
+ long_option :flag => '--license'
53
+ long_option :flag => '--help'
54
+
55
+ long_option :flag => '--arch', :equals => true
56
+ long_option :flag => '--parser', :equals => true
57
+ long_option :flag => '--preproc',
58
+ :equals => true,
59
+ :name => :preprocessor
60
+ long_option :flag => '--oformat',
61
+ :equals => true,
62
+ :name => :output_format
63
+ long_option :flag => '--dformat',
64
+ :equals => true,
65
+ :name => :debug_format
66
+ long_option :flag => '--lformat',
67
+ :equals => true,
68
+ :name => :list_format
69
+
70
+ long_option :flag => '--list',
71
+ :equals => true,
72
+ :name => :list_file
73
+ long_option :flag => '--objfile',
74
+ :equals => true,
75
+ :name => :output
76
+ long_option :flag => '--mapfile',
77
+ :equals => true,
78
+ :name => :map_file
79
+
80
+ long_option :flag => '--machine', :equals => true
81
+ long_option :flag => '--force-strict'
82
+ short_option :flag => '-w', :name => :inhibit_warnings
83
+ short_option :flag => '-W', :name => :toggle_warnings
84
+ short_option :flag => '-M', :name => :gen_makefile_deps
85
+ short_option :flag => '-E', :name => :redirect_errors_to
86
+ short_option :flag => '-s', :name => :redirect_errors
87
+ long_option :flag => '--preproc-only', :name => :preprocessor_only
88
+ short_option :flag => '-I', :name => :include, :multiple => true
89
+ short_option :flag => '-P', :name => :pre_include, :multiple => true
90
+ short_option :flag => '-D', :name => :define, :multiple => true
91
+ short_option :flag => '-U', :name => :undefine, :multiple => true
92
+ short_option :flag => '-X', :name => :message_style
93
+ long_option :flag => '--prefix'
94
+ long_option :flag => '--suffix'
95
+
96
+ non_option :tailing => true, :name => :file
97
+
98
+ #
99
+ # Creates a new Task object.
100
+ #
101
+ # @param [Hash{Symbol => Object}] options
102
+ # Additional options for the task.
103
+ #
104
+ # @option options [String, Symbol] :target
105
+ # The arch/machine to target.
106
+ #
107
+ # @yield [task]
108
+ # If a block is given, it will be passed the newly created task
109
+ # object.
110
+ #
111
+ # @yieldparam [Task] task
112
+ # The new task object.
113
+ #
114
+ # @see Task#target!
115
+ #
116
+ def initialize(options={},&block)
117
+ target = options.delete(:target)
118
+
119
+ super(options,&block)
120
+
121
+ self.target!(target) if target
122
+
123
+ self.parser ||= YASM.parser
124
+ self.arch ||= YASM.arch
125
+ self.machine ||= YASM.machine
126
+ self.debug_format ||= YASM.debug_format
127
+ self.output_format ||= YASM.output_format
128
+ end
129
+
130
+ #
131
+ # Sets the YASM +arch+ and +machine+.
132
+ #
133
+ # @param [String, Symbol] name
134
+ # The target name.
135
+ #
136
+ # @raise [RuntimeError]
137
+ # The specified target is unknown.
138
+ #
139
+ # @return [true]
140
+ # The YASM +arch+ and +machine+ options were set successfully.
141
+ #
142
+ # @example
143
+ # yasm.target! :amd64
144
+ #
145
+ def target!(name)
146
+ target = TARGETS[name.to_sym]
147
+
148
+ unless target
149
+ raise(RuntimeError,"unknown YASM target #{name.inspect}",caller)
150
+ end
151
+
152
+ self.arch = target[:arch]
153
+ self.machine = target[:machine]
154
+ return true
155
+ end
156
+
157
+ alias syntax parser
158
+ alias syntax= parser=
159
+
160
+ end
161
+ end
@@ -0,0 +1,4 @@
1
+ module YASM
2
+ # ruby-yasm VERSION
3
+ VERSION = '0.1.0'
4
+ end
@@ -0,0 +1,142 @@
1
+ module YASM
2
+ @@yasm_parser = nil
3
+ @@yasm_arch = nil
4
+ @@yasm_machine = nil
5
+ @@yasm_debug_format = nil
6
+ @@yasm_output_format = nil
7
+
8
+ #
9
+ # The default YASM parser to use.
10
+ #
11
+ # @return [Symbol]
12
+ # The YASM parser.
13
+ #
14
+ def YASM.parser
15
+ @@yasm_parser
16
+ end
17
+
18
+ #
19
+ # Sets the default YASM parser to use.
20
+ #
21
+ # @param [Symbol, String] new_parser
22
+ # The new YASM parser to use.
23
+ #
24
+ # @return [Symbol]
25
+ # The new YASM parser to use.
26
+ #
27
+ def YASM.parser=(new_parser)
28
+ @@yasm_parser = if new_parser.nil?
29
+ nil
30
+ else
31
+ new_parser.to_sym
32
+ end
33
+ end
34
+
35
+ #
36
+ # The default YASM architecture to assemble for.
37
+ #
38
+ # @return [Symbol]
39
+ # The YASM architecture.
40
+ #
41
+ def YASM.arch
42
+ @@yasm_arch
43
+ end
44
+
45
+ #
46
+ # Sets the default YASM architecture to assemble for.
47
+ #
48
+ # @param [Symbol, String] new_arch
49
+ # The new YASM architecture to assemble for.
50
+ #
51
+ # @return [Symbol]
52
+ # The new YASM architecture to assemble for.
53
+ #
54
+ def YASM.arch=(new_arch)
55
+ if new_arch.nil?
56
+ @@yasm_arch = nil
57
+ else
58
+ @@yasm_arch = new_arch.to_sym
59
+ end
60
+ end
61
+
62
+ #
63
+ # The default YASM machine to assemble for.
64
+ #
65
+ # @return [Symbol]
66
+ # The YASM machine.
67
+ #
68
+ def YASM.machine
69
+ @@yasm_machine ||= nil
70
+ end
71
+
72
+ #
73
+ # Sets the default YASM machine to assemble for.
74
+ #
75
+ # @param [Symbol, String] new_machine
76
+ # The new YASM machine to assemble for.
77
+ #
78
+ # @return [Symbol]
79
+ # The new YASM machine to assemble for.
80
+ #
81
+ def YASM.machine=(new_machine)
82
+ @@yasm_machine = if new_machine.nil?
83
+ nil
84
+ else
85
+ new_machine.to_sym
86
+ end
87
+ end
88
+
89
+ #
90
+ # The default YASM debugging format to use.
91
+ #
92
+ # @return [Symbol]
93
+ # The YASM debugging format.
94
+ #
95
+ def YASM.debug_format
96
+ @@yasm_debug_format
97
+ end
98
+
99
+ #
100
+ # Sets the default YASM debugging format to use.
101
+ #
102
+ # @param [Symbol, String] new_format
103
+ # The new YASM debugging format to use.
104
+ #
105
+ # @return [Symbol]
106
+ # The new YASM debugging format to use.
107
+ #
108
+ def YASM.debug_format=(new_format)
109
+ @@yasm_debug_format = if new_format.nil?
110
+ nil
111
+ else
112
+ new_format.to_sym
113
+ end
114
+ end
115
+
116
+ #
117
+ # The default YASM output format to use.
118
+ #
119
+ # @return [Symbol]
120
+ # The YASM output format.
121
+ #
122
+ def YASM.output_format
123
+ @@yasm_output_format
124
+ end
125
+
126
+ #
127
+ # Sets the default YASM output format to use.
128
+ #
129
+ # @param [Symbol, String] new_format
130
+ # The new YASM output format to use.
131
+ #
132
+ # @return [Symbol]
133
+ # The new YASM output format to use.
134
+ #
135
+ def YASM.output_format=(new_format)
136
+ @@yasm_output_format = if new_format.nil?
137
+ nil
138
+ else
139
+ new_format.to_sym
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,9 @@
1
+ module Helpers
2
+ module Files
3
+ FILES_DIR = File.expand_path(File.join(File.dirname(__FILE__),'files'))
4
+
5
+ def assembly_file(name)
6
+ File.join(FILES_DIR,"#{name}.S")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,2 @@
1
+ _start:
2
+ movl $0x01,%eax
@@ -0,0 +1,38 @@
1
+ require 'yasm/program'
2
+
3
+ require 'spec_helper'
4
+ require 'helpers/files'
5
+
6
+ describe Program do
7
+ include Helpers::Files
8
+
9
+ before(:all) do
10
+ @yasm = Program.find
11
+ end
12
+
13
+ it "should be able to assemble a file" do
14
+ file = Tempfile.new('yasm').path
15
+
16
+ @yasm.assemble do |yasm|
17
+ yasm.target! :x86
18
+
19
+ yasm.syntax = :gas
20
+ yasm.file = assembly_file('gas')
21
+ yasm.output = file
22
+ end
23
+
24
+ File.size(file).should > 0
25
+ end
26
+
27
+ it "should assemble a file, and write the output to a temporary file" do
28
+ file = @yasm.assemble_temp do |yasm|
29
+ yasm.target! :x86
30
+
31
+ yasm.syntax = :gas
32
+ yasm.file = assembly_file('gas')
33
+ end
34
+
35
+ file.should_not be_nil
36
+ File.size(file).should > 0
37
+ end
38
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ gem 'rspec', '>=1.2.9'
3
+ require 'spec'
4
+
5
+ require 'yasm/version'
6
+
7
+ include YASM
@@ -0,0 +1,182 @@
1
+ require 'yasm/task'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Task do
6
+ it "should support a :target option" do
7
+ task = Task.new(:target => :amd64)
8
+
9
+ task.arch.should == :x86
10
+ task.machine.should == :amd64
11
+ end
12
+
13
+ describe "default" do
14
+ describe "parser" do
15
+ before(:all) do
16
+ @old_parser = YASM.parser
17
+
18
+ YASM.parser = :tasm
19
+ end
20
+
21
+ it "should have a default parser value" do
22
+ task = Task.new
23
+ task.parser.should == :tasm
24
+ end
25
+
26
+ it "should allow overriding the default parser" do
27
+ task = Task.new(:parser => :gas)
28
+ task.parser.should == :gas
29
+ end
30
+
31
+ after(:all) do
32
+ YASM.parser = @old_parser
33
+ end
34
+ end
35
+
36
+ describe "arch" do
37
+ before(:all) do
38
+ @old_arch = YASM.arch
39
+
40
+ YASM.arch = :lc3b
41
+ end
42
+
43
+ it "should have a default arch value" do
44
+ task = Task.new
45
+ task.arch.should == :lc3b
46
+ end
47
+
48
+ it "should allow overriding the default arch" do
49
+ task = Task.new(:arch => :x86)
50
+ task.arch.should == :x86
51
+ end
52
+
53
+ after(:all) do
54
+ YASM.arch = @old_arch
55
+ end
56
+ end
57
+
58
+ describe "machine" do
59
+ before(:all) do
60
+ @old_machine = YASM.machine
61
+
62
+ YASM.machine = :amd64
63
+ end
64
+
65
+ it "should have a default machine value" do
66
+ task = Task.new
67
+ task.machine.should == :amd64
68
+ end
69
+
70
+ it "should allow overriding the default machine" do
71
+ task = Task.new(:machine => :x86)
72
+ task.machine.should == :x86
73
+ end
74
+
75
+ after(:all) do
76
+ YASM.machine = @old_machine
77
+ end
78
+ end
79
+
80
+ describe "debug_format" do
81
+ before(:all) do
82
+ @old_debug_format = YASM.debug_format
83
+
84
+ YASM.debug_format = :stabs
85
+ end
86
+
87
+ it "should have a default debug_format value" do
88
+ task = Task.new
89
+ task.debug_format.should == :stabs
90
+ end
91
+
92
+ it "should allow overriding the default debug_format" do
93
+ task = Task.new(:debug_format => :null)
94
+ task.debug_format.should == :null
95
+ end
96
+
97
+ after(:all) do
98
+ YASM.debug_format = @old_debug_format
99
+ end
100
+ end
101
+
102
+ describe "output_format" do
103
+ before(:all) do
104
+ @old_output_format = YASM.output_format
105
+
106
+ YASM.output_format = :elf64
107
+ end
108
+
109
+ it "should have a default output_format value" do
110
+ task = Task.new
111
+ task.output_format.should == :elf64
112
+ end
113
+
114
+ it "should allow overriding the default output_format" do
115
+ task = Task.new(:output_format => :bin)
116
+ task.output_format.should == :bin
117
+ end
118
+
119
+ after(:all) do
120
+ YASM.output_format = @old_output_format
121
+ end
122
+ end
123
+ end
124
+
125
+ describe "target!" do
126
+ it "should return true for valid targets" do
127
+ task = Task.new
128
+
129
+ task.target!(:amd64).should == true
130
+ end
131
+
132
+ it "should raise RuntimeError when passed unknown targets" do
133
+ task = Task.new
134
+
135
+ lambda {
136
+ task.target! :lol
137
+ }.should raise_error(RuntimeError)
138
+ end
139
+
140
+ describe "x86" do
141
+ before(:all) do
142
+ @task = Task.new { |task| task.target! :x86 }
143
+ end
144
+
145
+ it "should set the arch value" do
146
+ @task.arch.should == :x86
147
+ end
148
+
149
+ it "should set the machine value" do
150
+ @task.machine.should == :x86
151
+ end
152
+ end
153
+
154
+ describe "amd64" do
155
+ before(:all) do
156
+ @task = Task.new { |task| task.target! :amd64 }
157
+ end
158
+
159
+ it "should set the arch value" do
160
+ @task.arch.should == :x86
161
+ end
162
+
163
+ it "should set the machine value" do
164
+ @task.machine.should == :amd64
165
+ end
166
+ end
167
+
168
+ describe "lc3b" do
169
+ before(:all) do
170
+ @task = Task.new { |task| task.target! :lc3b }
171
+ end
172
+
173
+ it "should set the arch value" do
174
+ @task.arch.should == :lc3b
175
+ end
176
+
177
+ it "should set the machine value" do
178
+ @task.machine.should == :lc3b
179
+ end
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,9 @@
1
+ require 'yasm/version'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe YASM do
6
+ it "should have a VERSION constant" do
7
+ YASM.const_defined?('VERSION').should == true
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec/rake/spectask'
2
+
3
+ desc "Run all specifications"
4
+ Spec::Rake::SpecTask.new(:spec) do |t|
5
+ t.libs += ['lib', 'spec']
6
+ t.spec_opts = ['--colour', '--format', 'specdoc']
7
+ end
8
+
9
+ task :test => :spec
10
+ task :default => :spec
@@ -0,0 +1,13 @@
1
+ require 'yard'
2
+
3
+ YARD::Rake::YardocTask.new do |t|
4
+ t.files = ['lib/**/*.rb']
5
+ t.options = [
6
+ '--protected',
7
+ '--files', 'History.rdoc',
8
+ '--title', 'Ruby YASM',
9
+ '--quiet'
10
+ ]
11
+ end
12
+
13
+ task :docs => :yard
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-yasm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Postmodern
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDQDCCAiigAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMRgwFgYDVQQDDA9wb3N0
14
+ bW9kZXJuLm1vZDMxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
15
+ ARkWA2NvbTAeFw0wOTA2MDMwNDU5MDNaFw0xMDA2MDMwNDU5MDNaMEYxGDAWBgNV
16
+ BAMMD3Bvc3Rtb2Rlcm4ubW9kMzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
17
+ CZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
18
+ 1wvANkTDHFgVih5XLjuTwTZjgBq1lBGybXJiH6Id1lY2JOMqM5FB1DDHVvvij94i
19
+ mJabN0zkzu6VKWC70y0IwOxY7CPokr0eFdK/D0y7mCq1P8QITv76i2YqAl0eYqIt
20
+ W+IhIkANQ7E6uMZIZcdnfadC6lPAtlKkqtd9crvRbFgr6e3kyflmohbRnTEJHoRd
21
+ 7SHHsybE6DSn7oTDs6XBTNrNIn5VfZA0z01eeos/+zBm1zKJOK2+/7xtLLDuDU9G
22
+ +Rd+ltUBbvxUrMNZmDG29pnmN2xTRH+Q8HxD2AxlvM5SRpK6OeZaHV7PaCCAVZ4L
23
+ T9BFl1sfMvRlABeGEkSyuQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
24
+ sDAdBgNVHQ4EFgQUKwsd+PqEYmBvyaTyoL+uRuk+PhEwDQYJKoZIhvcNAQEFBQAD
25
+ ggEBAB4TvHsrlbcXcKg6gX5BIb9tI+zGkpzo0Z7jnxMEcNO7NGGwmzafDBI/xZYv
26
+ xkRH3/HXbGGYDOi6Q6gWt5GujSx0bOImDtYTJTH8jnzN92HzEK5WdScm1QpZKF1e
27
+ cezArMbxbSPaosxTCtG6LQTkE28lFQsmFZ5xzouugS4h5+LVJiVMmiP+l3EfkjFa
28
+ GOURU+rNEMPWo8MCWivGW7jes6BMzWHcW7DQ0scNVmIcCIgdyMmpscuAEOSeghy9
29
+ /fFs57Ey2OXBL55nDOyvN/ZQ2Vab05UH4t+GCxjAPeirzL/29FBtePT6VD44c38j
30
+ pDj+ws7QjtH/Qcrr1l9jfN0ehDs=
31
+ -----END CERTIFICATE-----
32
+
33
+ date: 2009-12-27 00:00:00 -08:00
34
+ default_executable:
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rprogram
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 0.1.8
45
+ version:
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ type: :development
49
+ version_requirement:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.9
55
+ version:
56
+ - !ruby/object:Gem::Dependency
57
+ name: yard
58
+ type: :development
59
+ version_requirement:
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.5.2
65
+ version:
66
+ - !ruby/object:Gem::Dependency
67
+ name: hoe
68
+ type: :development
69
+ version_requirement:
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.4.0
75
+ version:
76
+ description: |-
77
+ A Ruby interface to YASM.
78
+
79
+ YASM is a complete rewrite of the NASM assembler, YASM currently supports
80
+ the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes,
81
+ outputs binary, ELF32, ELF64, 32 and 64-bit Mach-O, RDOFF2, COFF, Win32,
82
+ and Win64 object formats, and generates source debugging information in
83
+ STABS, DWARF 2, and CodeView 8 formats.
84
+ email:
85
+ - postmodern.mod3@gmail.com
86
+ executables: []
87
+
88
+ extensions: []
89
+
90
+ extra_rdoc_files:
91
+ - Manifest.txt
92
+ files:
93
+ - History.rdoc
94
+ - Manifest.txt
95
+ - README.rdoc
96
+ - Rakefile
97
+ - lib/yasm.rb
98
+ - lib/yasm/task.rb
99
+ - lib/yasm/program.rb
100
+ - lib/yasm/yasm.rb
101
+ - lib/yasm/version.rb
102
+ - tasks/spec.rb
103
+ - tasks/yard.rb
104
+ - spec/spec_helper.rb
105
+ - spec/helpers/files.rb
106
+ - spec/helpers/files/gas.S
107
+ - spec/task_spec.rb
108
+ - spec/program_spec.rb
109
+ - spec/yasm_spec.rb
110
+ has_rdoc: yard
111
+ homepage: http://www.tortall.net/projects/yasm/
112
+ licenses: []
113
+
114
+ post_install_message:
115
+ rdoc_options:
116
+ - --main
117
+ - README.rdoc
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
125
+ version:
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: "0"
131
+ version:
132
+ requirements: []
133
+
134
+ rubyforge_project: ruby-yasm
135
+ rubygems_version: 1.3.5
136
+ signing_key:
137
+ specification_version: 3
138
+ summary: A Ruby interface to YASM
139
+ test_files: []
140
+
Binary file