rbbcc 0.3.1 → 0.4.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.
data/lib/rbbcc/bcc.rb CHANGED
@@ -14,6 +14,20 @@ module RbBCC
14
14
 
15
15
  class BCC
16
16
  class << self
17
+ def _find_file(filename)
18
+ if filename
19
+ unless File.exist?(filename)
20
+ t = File.expand_path "../#{filename}", $0
21
+ if File.exist?(t)
22
+ filename = t
23
+ else
24
+ raise "Could not find file #{filename}"
25
+ end
26
+ end
27
+ end
28
+ return filename
29
+ end
30
+
17
31
  def ksym(addr, show_module: false, show_offset: false)
18
32
  self.sym(addr, -1, show_module: show_module, show_offset: show_offset, demangle: false)
19
33
  end
@@ -163,23 +177,37 @@ module RbBCC
163
177
  end
164
178
  end
165
179
 
166
- def initialize(text:, debug: 0, cflags: [], usdt_contexts: [], allow_rlimit: 0)
180
+ def initialize(text: "", src_file: nil, hdr_file: nil, debug: 0, cflags: [], usdt_contexts: [], allow_rlimit: 0)
167
181
  @kprobe_fds = {}
168
182
  @uprobe_fds = {}
169
183
  @tracepoint_fds = {}
170
184
  @raw_tracepoint_fds = {}
171
- @usdt_contexts = usdt_contexts
172
- if code = gen_args_from_usdt
173
- text = code + text
174
- end
175
-
176
- @module = Clib.bpf_module_create_c_from_string(
177
- text,
178
- debug,
179
- cflags.pack('p*'),
180
- cflags.size,
181
- allow_rlimit
182
- )
185
+
186
+ if src_file
187
+ src_file = BCC._find_file(src_file)
188
+ hdr_file = BCC._find_file(hdr_file)
189
+ end
190
+
191
+ if src_file && src_file.end_with?(".b")
192
+ @module = Clib.bpf_module_create_b(src_file, hdr_file, debug, device)
193
+ else
194
+ if src_file
195
+ text = File.read(src_file)
196
+ end
197
+
198
+ @usdt_contexts = usdt_contexts
199
+ if code = gen_args_from_usdt
200
+ text = code + text
201
+ end
202
+
203
+ @module = Clib.bpf_module_create_c_from_string(
204
+ text,
205
+ debug,
206
+ cflags.pack('p*'),
207
+ cflags.size,
208
+ allow_rlimit
209
+ )
210
+ end
183
211
  @funcs = {}
184
212
  @tables = {}
185
213
  @perf_buffers = {}
data/lib/rbbcc/clib.rb CHANGED
@@ -45,6 +45,7 @@ module RbBCC
45
45
  typealias "size_t", "int"
46
46
 
47
47
  extern 'void * bpf_module_create_c_from_string(char *, unsigned int, char **, int, long)'
48
+ extern 'void * bpf_module_create_b(char *filename, char *proto_filename, unsigned int flags, char *dev_name)'
48
49
  extern 'int bpf_num_functions(void *)'
49
50
  extern 'char * bpf_function_name(void *, int)'
50
51
  extern 'void bpf_module_destroy(void *)'
data/lib/rbbcc/table.rb CHANGED
@@ -78,7 +78,9 @@ module RbBCC
78
78
  return next_key
79
79
  end
80
80
 
81
- def [](key)
81
+ def [](_key)
82
+ key = normalize_key(_key)
83
+
82
84
  leaf = Fiddle::Pointer.malloc(self.leafsize)
83
85
  res = Clib.bpf_lookup_elem(self.map_fd, key, leaf)
84
86
  if res < 0
@@ -91,7 +93,8 @@ module RbBCC
91
93
  self[key] || raise(KeyError, "key not found")
92
94
  end
93
95
 
94
- def []=(key, leaf)
96
+ def []=(_key, leaf)
97
+ key = normalize_key(_key)
95
98
  res = Clib.bpf_update_elem(self.map_fd, key, leaf, 0)
96
99
  if res < 0
97
100
  raise SystemCallError.new("Could not update table", Fiddle.last_error)
@@ -180,6 +183,17 @@ module RbBCC
180
183
  end
181
184
 
182
185
  private
186
+ def normalize_key(key)
187
+ case key
188
+ when Fiddle::Pointer
189
+ key
190
+ when Integer
191
+ byref(key, keysize)
192
+ else
193
+ raise KeyError, "#{key.inspect} must be integer or pointor"
194
+ end
195
+ end
196
+
183
197
  def byref(value, size=sizeof("int"))
184
198
  pack_fmt = case size
185
199
  when sizeof("int") ; "i!"
@@ -207,14 +221,6 @@ module RbBCC
207
221
  end
208
222
  alias length size
209
223
 
210
- def [](key)
211
- super(normalize_key(key))
212
- end
213
-
214
- def []=(key, value)
215
- super(normalize_key(key), value)
216
- end
217
-
218
224
  def clearitem(key)
219
225
  self[key] = byref(0, @leafsize)
220
226
  end
@@ -229,18 +235,6 @@ module RbBCC
229
235
  b.call(v.to_bcc_value)
230
236
  end
231
237
  end
232
-
233
- private
234
- def normalize_key(key)
235
- case key
236
- when Fiddle::Pointer
237
- key
238
- when Integer
239
- byref(key, keysize)
240
- else
241
- raise KeyError, "#{key.inspect} must be integer or pointor"
242
- end
243
- end
244
238
  end
245
239
 
246
240
  class PerfEventArray < TableBase
data/lib/rbbcc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RbBCC
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
data/rbbcc.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 2.0"
25
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake", "~> 13.0"
26
26
  spec.add_development_dependency "pry"
27
27
  spec.add_development_dependency "minitest"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbcc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uchio Kondo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-20 00:00:00.000000000 Z
11
+ date: 2020-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +85,28 @@ files:
85
85
  - bin/console
86
86
  - bin/setup
87
87
  - docs/README.md
88
+ - docs/answers/01-hello-world.rb
89
+ - docs/answers/02-sys_sync.rb
90
+ - docs/answers/03-hello_fields.rb
91
+ - docs/answers/04-sync_timing.rb
92
+ - docs/answers/05-sync_count.rb
93
+ - docs/answers/06-disksnoop.rb
94
+ - docs/answers/07-hello_perf_output.rb
95
+ - docs/answers/08-sync_perf_output.rb
96
+ - docs/answers/09-bitehist.rb
97
+ - docs/answers/10-disklatency.rb
98
+ - docs/answers/11-vfsreadlat.c
99
+ - docs/answers/11-vfsreadlat.rb
100
+ - docs/answers/12-urandomread.rb
101
+ - docs/answers/13-disksnoop_fixed.rb
102
+ - docs/answers/14-strlen_count.rb
103
+ - docs/answers/15-nodejs_http_server.rb
104
+ - docs/answers/16-task_switch.c
105
+ - docs/answers/16-task_switch.rb
106
+ - docs/answers/node-server.js
88
107
  - docs/getting_started.md
108
+ - docs/projects_using_rbbcc.md
109
+ - docs/tutorial_bcc_ruby_developer.md
89
110
  - examples/bitehist.rb
90
111
  - examples/charty/Gemfile
91
112
  - examples/charty/Gemfile.lock