rdwarf 0.0.1

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.
Files changed (163) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +28 -0
  6. data/README.md +39 -0
  7. data/Rakefile +8 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/ext/rdwarf/depend +5 -0
  11. data/ext/rdwarf/extconf.rb +29 -0
  12. data/ext/rdwarf/libdwarf/CHANGES +102 -0
  13. data/ext/rdwarf/libdwarf/CODINGSTYLE +71 -0
  14. data/ext/rdwarf/libdwarf/COPYING +28 -0
  15. data/ext/rdwarf/libdwarf/ChangeLog +619 -0
  16. data/ext/rdwarf/libdwarf/ChangeLog2006 +835 -0
  17. data/ext/rdwarf/libdwarf/ChangeLog2007 +217 -0
  18. data/ext/rdwarf/libdwarf/ChangeLog2008 +263 -0
  19. data/ext/rdwarf/libdwarf/ChangeLog2009 +348 -0
  20. data/ext/rdwarf/libdwarf/ChangeLog2010 +175 -0
  21. data/ext/rdwarf/libdwarf/ChangeLog2011 +297 -0
  22. data/ext/rdwarf/libdwarf/ChangeLog2012 +131 -0
  23. data/ext/rdwarf/libdwarf/ChangeLog2013 +238 -0
  24. data/ext/rdwarf/libdwarf/ChangeLog2014 +399 -0
  25. data/ext/rdwarf/libdwarf/LGPL.txt +504 -0
  26. data/ext/rdwarf/libdwarf/LIBDWARFCOPYRIGHT +40 -0
  27. data/ext/rdwarf/libdwarf/Makefile.in +220 -0
  28. data/ext/rdwarf/libdwarf/NEWS +535 -0
  29. data/ext/rdwarf/libdwarf/README +235 -0
  30. data/ext/rdwarf/libdwarf/checkexamples.c +1179 -0
  31. data/ext/rdwarf/libdwarf/cmplrs/dwarf_addr_finder.h +55 -0
  32. data/ext/rdwarf/libdwarf/common.c +62 -0
  33. data/ext/rdwarf/libdwarf/common.h +38 -0
  34. data/ext/rdwarf/libdwarf/config.h.in +146 -0
  35. data/ext/rdwarf/libdwarf/configure +5581 -0
  36. data/ext/rdwarf/libdwarf/configure.in +167 -0
  37. data/ext/rdwarf/libdwarf/dw-linetableheader.txt +39 -0
  38. data/ext/rdwarf/libdwarf/dwarf.h +1342 -0
  39. data/ext/rdwarf/libdwarf/dwarf_abbrev.c +291 -0
  40. data/ext/rdwarf/libdwarf/dwarf_abbrev.h +45 -0
  41. data/ext/rdwarf/libdwarf/dwarf_addr_finder.c +676 -0
  42. data/ext/rdwarf/libdwarf/dwarf_alloc.c +685 -0
  43. data/ext/rdwarf/libdwarf/dwarf_alloc.h +38 -0
  44. data/ext/rdwarf/libdwarf/dwarf_arange.c +595 -0
  45. data/ext/rdwarf/libdwarf/dwarf_arange.h +62 -0
  46. data/ext/rdwarf/libdwarf/dwarf_base_types.h +157 -0
  47. data/ext/rdwarf/libdwarf/dwarf_die_deliv.c +1802 -0
  48. data/ext/rdwarf/libdwarf/dwarf_die_deliv.h +46 -0
  49. data/ext/rdwarf/libdwarf/dwarf_elf_access.c +1348 -0
  50. data/ext/rdwarf/libdwarf/dwarf_elf_access.h +46 -0
  51. data/ext/rdwarf/libdwarf/dwarf_error.c +492 -0
  52. data/ext/rdwarf/libdwarf/dwarf_error.h +53 -0
  53. data/ext/rdwarf/libdwarf/dwarf_form.c +1302 -0
  54. data/ext/rdwarf/libdwarf/dwarf_frame.c +2454 -0
  55. data/ext/rdwarf/libdwarf/dwarf_frame.h +418 -0
  56. data/ext/rdwarf/libdwarf/dwarf_frame2.c +1533 -0
  57. data/ext/rdwarf/libdwarf/dwarf_frame3.c +282 -0
  58. data/ext/rdwarf/libdwarf/dwarf_funcs.c +123 -0
  59. data/ext/rdwarf/libdwarf/dwarf_funcs.h +33 -0
  60. data/ext/rdwarf/libdwarf/dwarf_gdbindex.c +520 -0
  61. data/ext/rdwarf/libdwarf/dwarf_gdbindex.h +97 -0
  62. data/ext/rdwarf/libdwarf/dwarf_global.c +612 -0
  63. data/ext/rdwarf/libdwarf/dwarf_global.h +117 -0
  64. data/ext/rdwarf/libdwarf/dwarf_harmless.c +228 -0
  65. data/ext/rdwarf/libdwarf/dwarf_harmless.h +31 -0
  66. data/ext/rdwarf/libdwarf/dwarf_incl.h +61 -0
  67. data/ext/rdwarf/libdwarf/dwarf_init_finish.c +1263 -0
  68. data/ext/rdwarf/libdwarf/dwarf_leb.c +159 -0
  69. data/ext/rdwarf/libdwarf/dwarf_line.c +1822 -0
  70. data/ext/rdwarf/libdwarf/dwarf_line.h +446 -0
  71. data/ext/rdwarf/libdwarf/dwarf_line2.c +98 -0
  72. data/ext/rdwarf/libdwarf/dwarf_line_table_reader_common.c +1583 -0
  73. data/ext/rdwarf/libdwarf/dwarf_loc.c +1525 -0
  74. data/ext/rdwarf/libdwarf/dwarf_loc.h +149 -0
  75. data/ext/rdwarf/libdwarf/dwarf_loc2.c +833 -0
  76. data/ext/rdwarf/libdwarf/dwarf_macro.c +479 -0
  77. data/ext/rdwarf/libdwarf/dwarf_macro.h +35 -0
  78. data/ext/rdwarf/libdwarf/dwarf_opaque.h +778 -0
  79. data/ext/rdwarf/libdwarf/dwarf_original_elf_init.c +219 -0
  80. data/ext/rdwarf/libdwarf/dwarf_print_lines.c +631 -0
  81. data/ext/rdwarf/libdwarf/dwarf_pubtypes.c +132 -0
  82. data/ext/rdwarf/libdwarf/dwarf_query.c +1594 -0
  83. data/ext/rdwarf/libdwarf/dwarf_ranges.c +194 -0
  84. data/ext/rdwarf/libdwarf/dwarf_reloc_arm.h +308 -0
  85. data/ext/rdwarf/libdwarf/dwarf_reloc_mips.h +117 -0
  86. data/ext/rdwarf/libdwarf/dwarf_reloc_ppc.h +242 -0
  87. data/ext/rdwarf/libdwarf/dwarf_reloc_ppc64.h +272 -0
  88. data/ext/rdwarf/libdwarf/dwarf_reloc_x86_64.h +127 -0
  89. data/ext/rdwarf/libdwarf/dwarf_sort_line.c +665 -0
  90. data/ext/rdwarf/libdwarf/dwarf_string.c +82 -0
  91. data/ext/rdwarf/libdwarf/dwarf_stubs.c +38 -0
  92. data/ext/rdwarf/libdwarf/dwarf_tied.c +423 -0
  93. data/ext/rdwarf/libdwarf/dwarf_tsearch.h +125 -0
  94. data/ext/rdwarf/libdwarf/dwarf_tsearchhash.c +675 -0
  95. data/ext/rdwarf/libdwarf/dwarf_types.c +121 -0
  96. data/ext/rdwarf/libdwarf/dwarf_types.h +32 -0
  97. data/ext/rdwarf/libdwarf/dwarf_util.c +913 -0
  98. data/ext/rdwarf/libdwarf/dwarf_util.h +324 -0
  99. data/ext/rdwarf/libdwarf/dwarf_vars.c +125 -0
  100. data/ext/rdwarf/libdwarf/dwarf_vars.h +29 -0
  101. data/ext/rdwarf/libdwarf/dwarf_weaks.c +123 -0
  102. data/ext/rdwarf/libdwarf/dwarf_weaks.h +29 -0
  103. data/ext/rdwarf/libdwarf/dwarf_xu_index.c +579 -0
  104. data/ext/rdwarf/libdwarf/dwarf_xu_index.h +68 -0
  105. data/ext/rdwarf/libdwarf/dwgetopt.c +181 -0
  106. data/ext/rdwarf/libdwarf/dwgetopt.h +51 -0
  107. data/ext/rdwarf/libdwarf/gennames.c +531 -0
  108. data/ext/rdwarf/libdwarf/install.sh +119 -0
  109. data/ext/rdwarf/libdwarf/libdwarf.h.in +3746 -0
  110. data/ext/rdwarf/libdwarf/libdwarf2.1.mm +9805 -0
  111. data/ext/rdwarf/libdwarf/libdwarf2.1.pdf +0 -0
  112. data/ext/rdwarf/libdwarf/libdwarf2p.1.mm +2807 -0
  113. data/ext/rdwarf/libdwarf/libdwarf2p.1.pdf +0 -0
  114. data/ext/rdwarf/libdwarf/libdwarfdefs.h +81 -0
  115. data/ext/rdwarf/libdwarf/malloc_check.c +327 -0
  116. data/ext/rdwarf/libdwarf/malloc_check.h +52 -0
  117. data/ext/rdwarf/libdwarf/mips_extensions.mm +1266 -0
  118. data/ext/rdwarf/libdwarf/mips_extensions.pdf +0 -0
  119. data/ext/rdwarf/libdwarf/pro_alloc.c +179 -0
  120. data/ext/rdwarf/libdwarf/pro_alloc.h +33 -0
  121. data/ext/rdwarf/libdwarf/pro_arange.c +310 -0
  122. data/ext/rdwarf/libdwarf/pro_arange.h +51 -0
  123. data/ext/rdwarf/libdwarf/pro_die.c +431 -0
  124. data/ext/rdwarf/libdwarf/pro_die.h +59 -0
  125. data/ext/rdwarf/libdwarf/pro_encode_nm.c +108 -0
  126. data/ext/rdwarf/libdwarf/pro_encode_nm.h +39 -0
  127. data/ext/rdwarf/libdwarf/pro_error.c +96 -0
  128. data/ext/rdwarf/libdwarf/pro_error.h +43 -0
  129. data/ext/rdwarf/libdwarf/pro_expr.c +575 -0
  130. data/ext/rdwarf/libdwarf/pro_expr.h +36 -0
  131. data/ext/rdwarf/libdwarf/pro_finish.c +45 -0
  132. data/ext/rdwarf/libdwarf/pro_forms.c +1271 -0
  133. data/ext/rdwarf/libdwarf/pro_frame.c +572 -0
  134. data/ext/rdwarf/libdwarf/pro_frame.h +120 -0
  135. data/ext/rdwarf/libdwarf/pro_funcs.c +50 -0
  136. data/ext/rdwarf/libdwarf/pro_incl.h +91 -0
  137. data/ext/rdwarf/libdwarf/pro_init.c +327 -0
  138. data/ext/rdwarf/libdwarf/pro_line.c +373 -0
  139. data/ext/rdwarf/libdwarf/pro_line.h +112 -0
  140. data/ext/rdwarf/libdwarf/pro_macinfo.c +457 -0
  141. data/ext/rdwarf/libdwarf/pro_macinfo.h +31 -0
  142. data/ext/rdwarf/libdwarf/pro_opaque.h +513 -0
  143. data/ext/rdwarf/libdwarf/pro_pubnames.c +60 -0
  144. data/ext/rdwarf/libdwarf/pro_reloc.c +253 -0
  145. data/ext/rdwarf/libdwarf/pro_reloc.h +38 -0
  146. data/ext/rdwarf/libdwarf/pro_reloc_stream.c +256 -0
  147. data/ext/rdwarf/libdwarf/pro_reloc_stream.h +52 -0
  148. data/ext/rdwarf/libdwarf/pro_reloc_symbolic.c +245 -0
  149. data/ext/rdwarf/libdwarf/pro_reloc_symbolic.h +45 -0
  150. data/ext/rdwarf/libdwarf/pro_section.c +2233 -0
  151. data/ext/rdwarf/libdwarf/pro_section.h +100 -0
  152. data/ext/rdwarf/libdwarf/pro_types.c +274 -0
  153. data/ext/rdwarf/libdwarf/pro_types.h +34 -0
  154. data/ext/rdwarf/libdwarf/pro_util.h +38 -0
  155. data/ext/rdwarf/libdwarf/pro_vars.c +52 -0
  156. data/ext/rdwarf/libdwarf/pro_weaks.c +51 -0
  157. data/ext/rdwarf/rdwarf.c +765 -0
  158. data/ext/rdwarf/rdwarf.h +52 -0
  159. data/ext/rdwarf/rdwarf_names_gen.rb +109 -0
  160. data/lib/rdwarf.rb +181 -0
  161. data/lib/rdwarf/version.rb +3 -0
  162. data/rdwarf.gemspec +30 -0
  163. metadata +251 -0
@@ -0,0 +1,52 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*-
2
+ *
3
+ * rdwarf - a ruby module to read DWARF debugging information
4
+ * https://github.com/kubo/rdwarf
5
+ *
6
+ * Copyright (C) 2015 Kubo Takehiro <kubo@jiubao.org>
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above
15
+ * copyright notice, this list of conditions and the following
16
+ * disclaimer in the documentation and/or other materials provided
17
+ * with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS OR
20
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE
23
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
26
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ *
31
+ * The views and conclusions contained in the software and documentation
32
+ * are those of the authors and should not be interpreted as representing
33
+ * official policies, either expressed or implied, of the authors.
34
+ */
35
+ #ifndef RDWARF_H
36
+ #define RDWARF_H 1
37
+ #include <ruby.h>
38
+ #include "libdwarf/dwarf.h"
39
+ #include "libdwarf/libdwarf.h"
40
+
41
+ extern VALUE rdwarf_tag2name;
42
+ extern VALUE rdwarf_form2name;
43
+ extern VALUE rdwarf_at2name;
44
+ extern VALUE rdwarf_op2name;
45
+ extern VALUE rdwarf_lle2name;
46
+
47
+ extern VALUE rdwarf_tag2class;
48
+ extern VALUE rdwarf_at2class;
49
+
50
+ void Init_rdwarf_names(VALUE cRDwarf, VALUE mDie, VALUE cDIEBase, VALUE mAttr, VALUE cAttrBase);
51
+
52
+ #endif
@@ -0,0 +1,109 @@
1
+ # -*- c-file-style: "ruby"; indent-tabs-mode: nil -*-
2
+ #
3
+ # rdwarf - a ruby module to read DWARF debugging information
4
+ # https://github.com/kubo/rdwarf
5
+ #
6
+ # Copyright (C) 2015 Kubo Takehiro <kubo@jiubao.org>
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without
9
+ # modification, are permitted provided that the following conditions are met:
10
+ #
11
+ # 1. Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # 2. Redistributions in binary form must reproduce the above
15
+ # copyright notice, this list of conditions and the following
16
+ # disclaimer in the documentation and/or other materials provided
17
+ # with the distribution.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS OR
20
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ # DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
26
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29
+ # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # The views and conclusions contained in the software and documentation
32
+ # are those of the authors and should not be interpreted as representing
33
+ # official policies, either expressed or implied, of the authors.
34
+
35
+ names = {}
36
+
37
+ open(ARGV[0], 'r') do |f|
38
+ while line = f.gets
39
+ if line =~ /^#define\s+DW_([A-Z]+)_(\w+)/
40
+ names[$1] ||= []
41
+ names[$1].push($2)
42
+ end
43
+ end
44
+ end
45
+
46
+ puts <<EOS
47
+ /* This files is generated by #{__FILE__}. */
48
+ #include "rdwarf.h"
49
+
50
+ EOS
51
+
52
+ names.each do |key, ary|
53
+ puts <<EOS
54
+ VALUE rdwarf_#{key.downcase}2name;
55
+ EOS
56
+ end
57
+
58
+ puts <<EOS
59
+
60
+ VALUE rdwarf_tag2class;
61
+ VALUE rdwarf_at2class;
62
+
63
+ void Init_rdwarf_names(VALUE cRDwarf, VALUE mDie, VALUE cDieBase, VALUE mAttr, VALUE cAttrBase)
64
+ {
65
+ EOS
66
+
67
+ names.each do |key, ary|
68
+ puts <<EOS
69
+
70
+ rdwarf_#{key.downcase}2name = rb_hash_new();
71
+ rb_global_variable(&rdwarf_#{key.downcase}2name);
72
+ EOS
73
+ ary.each do |val|
74
+ puts <<EOS
75
+ rb_hash_aset(rdwarf_#{key.downcase}2name, INT2FIX(DW_#{key}_#{val}), ID2SYM(rb_intern("#{val}")));
76
+ EOS
77
+ end
78
+ puts <<EOS
79
+ OBJ_FREEZE(rdwarf_#{key.downcase}2name);
80
+ rb_define_const(cRDwarf, "#{key}_NAMES", rdwarf_#{key.downcase}2name);
81
+ EOS
82
+ end
83
+
84
+ puts <<EOS
85
+
86
+ rdwarf_tag2class = rb_hash_new();
87
+ rb_global_variable(&rdwarf_tag2class);
88
+ EOS
89
+ names['TAG'].each do |val|
90
+ puts <<EOS
91
+ rb_hash_aset(rdwarf_tag2class, INT2FIX(DW_TAG_#{val}), rb_define_class_under(mDie, "#{val.downcase.gsub(/(^|_)(.)/) { $2.upcase }}", cDieBase));
92
+ EOS
93
+ end
94
+ puts <<EOS
95
+ OBJ_FREEZE(rdwarf_tag2class);
96
+
97
+ rdwarf_at2class = rb_hash_new();
98
+ rb_global_variable(&rdwarf_at2class);
99
+ EOS
100
+ names['AT'].each do |val|
101
+ puts <<EOS
102
+ rb_hash_aset(rdwarf_at2class, INT2FIX(DW_AT_#{val}), rb_define_class_under(mAttr, "#{val.downcase.gsub(/(^|_)(.)/) { $2.upcase }}", cAttrBase));
103
+ EOS
104
+ end
105
+ puts <<EOS
106
+ OBJ_FREEZE(rdwarf_at2class);
107
+ }
108
+ EOS
109
+
@@ -0,0 +1,181 @@
1
+ require "rdwarf/version"
2
+ require "rdwarf/rdwarf"
3
+
4
+ class RDwarf
5
+
6
+ # Find an offset of a structure.
7
+ #
8
+ # # On Ubuntu 12.04 x86_64 with libc6-dbg package
9
+ # rd = RDwarf.new('/usr/lib/debug/lib/x86_64-linux-gnu/libc-2.15.so')
10
+ # rd.offsetof('struct timeval', 'tv_usec') # => 8
11
+ def offsetof(type_name, member_name)
12
+ if type_name =~ /^struct\s+/
13
+ die_type = DIE::StructureType
14
+ type_name = $'
15
+ else
16
+ die_type = DIE::Typedef
17
+ end
18
+
19
+ die = compile_units.find do |cu|
20
+ die = cu.children.find do |die|
21
+ break die if die.is_a? die_type and die.name == type_name
22
+ end
23
+ break die if die
24
+ end
25
+
26
+ while die
27
+ case die
28
+ when DIE::Typedef
29
+ die = die.attributes.find do |attr|
30
+ if attr.is_a? Attribute::Type
31
+ break attr.value
32
+ end
33
+ end
34
+ when DIE::StructureType
35
+ die.children.find do |die|
36
+ if die.name == member_name
37
+ die.attributes.find do |attr|
38
+ if attr.is_a? Attribute::DataMemberLocation
39
+ return attr.value
40
+ end
41
+ end
42
+ end
43
+ end
44
+ return nil
45
+ else
46
+ return nil # never reach here
47
+ end
48
+ end
49
+ end
50
+
51
+ def dump
52
+ s = []
53
+ compile_units.each do |cu|
54
+ s << cu.dump
55
+ end
56
+ s.join("\n")
57
+ end
58
+
59
+ module DIE
60
+
61
+ class Base
62
+ def dump(padding = '')
63
+ s = []
64
+ s << "#{padding}#{self}"
65
+ if attributes.size != 0
66
+ s << "#{padding} attributes:"
67
+ attributes.each do |attr|
68
+ s << attr.dump(padding + ' ')
69
+ end
70
+ end
71
+ if source_files
72
+ s << "#{padding} source_files:"
73
+ source_files.each_with_index do |file, idx|
74
+ s << "#{padding} #{idx + 1}: #{file}"
75
+ end
76
+ end
77
+ if children.size != 0
78
+ s << "#{padding} children:"
79
+ children.each do |child|
80
+ s << child.dump(padding + ' ')
81
+ end
82
+ end
83
+ s.join("\n")
84
+ end # dump
85
+ end # Base
86
+
87
+ end # DIE
88
+
89
+ module Attribute
90
+
91
+ class Base
92
+ def dump(padding = '')
93
+ "#{padding}#{type}(#{form}): #{value}"
94
+ end
95
+ end
96
+
97
+ class DataMemberLocation < Base
98
+ def raw_value
99
+ loc_list
100
+ end
101
+
102
+ def value
103
+ loc = raw_value[0][0].operand1
104
+ end
105
+ end
106
+
107
+ class CallFile < Base
108
+ def value
109
+ @cu.source_files[raw_value - 1]
110
+ end
111
+ end
112
+
113
+ class DeclFile < Base
114
+ def value
115
+ @cu.source_files[raw_value - 1]
116
+ end
117
+ end
118
+
119
+ class Encoding < Base
120
+ def value
121
+ RDwarf::ATE_NAMES[raw_value]
122
+ end
123
+ end
124
+
125
+ class HighPc < Base
126
+ def value
127
+ "0x%x" % raw_value
128
+ end
129
+ end
130
+
131
+ class Inline < Base
132
+ def value
133
+ RDwarf::INL_NAMES[raw_value]
134
+ end
135
+ end
136
+
137
+ class Language < Base
138
+ def value
139
+ RDwarf::LANG_NAMES[raw_value]
140
+ end
141
+ end
142
+
143
+ class Location < Base
144
+ def raw_value
145
+ loc_list
146
+ end
147
+ end
148
+
149
+ class LowPc < Base
150
+ def value
151
+ "0x%x" % raw_value
152
+ end
153
+ end
154
+
155
+ end # Attribute
156
+
157
+ class LocationList < Array
158
+ attr_reader :lle
159
+ attr_reader :lowpc
160
+ attr_reader :hipc
161
+ attr_reader :source
162
+ attr_reader :expression_offset
163
+ attr_reader :locdesc_offset
164
+
165
+ def inspect
166
+ "#<#{self.class}: lle=#@lle, lowpc=#{"0x%x" % @lowpc}, hipc=#{"0x%x" % @hipc}, source=#@source, expression_offset=#{"0x%x" % @expression_offset}, locdesc_offset=#{"0x%x" % @locdesc_offset}, [#{self.collect {|desc| desc.inspect}.join(", ")}]>"
167
+ end
168
+ end
169
+
170
+ class LocationDescriptor
171
+ attr_reader :atom
172
+ attr_reader :operand1
173
+ attr_reader :operand2
174
+ attr_reader :operand3
175
+ attr_reader :offset_for_branch
176
+
177
+ def inspect
178
+ "#<#{self.class}: atom=#@atom, operand1=#{"0x%x" % @operand1}, operand2=#{"0x%x" % @operand2}, operand3=#{"0x%x" % @operand3}, offset_for_branch=#{"0x%x" % @offset_for_branch}>"
179
+ end
180
+ end
181
+ end # RDwarf
@@ -0,0 +1,3 @@
1
+ class Rdwarf
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rdwarf/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rdwarf"
8
+ spec.version = Rdwarf::VERSION
9
+ spec.authors = ["Kubo Takehiro"]
10
+ spec.email = ["kubo@jiubao.org"]
11
+
12
+ spec.summary = %q{A module to read DWARF debugging information}
13
+ spec.description = <<EOS
14
+ RDwarf is a module to read DWARF debugging information.
15
+
16
+ This module includes libdwarf distributed at http://www.prevanders.net/dwarf.html.
17
+ EOS
18
+ spec.homepage = "https://github.com/kubo/rdwarf"
19
+ spec.license = "LGPL"
20
+
21
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+ spec.extensions = ["ext/rdwarf/extconf.rb"]
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.10"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rake-compiler"
30
+ end
metadata ADDED
@@ -0,0 +1,251 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rdwarf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kubo Takehiro
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: |
56
+ RDwarf is a module to read DWARF debugging information.
57
+
58
+ This module includes libdwarf distributed at http://www.prevanders.net/dwarf.html.
59
+ email:
60
+ - kubo@jiubao.org
61
+ executables: []
62
+ extensions:
63
+ - ext/rdwarf/extconf.rb
64
+ extra_rdoc_files: []
65
+ files:
66
+ - ".gitignore"
67
+ - ".travis.yml"
68
+ - Gemfile
69
+ - LICENSE.txt
70
+ - README.md
71
+ - Rakefile
72
+ - bin/console
73
+ - bin/setup
74
+ - ext/rdwarf/depend
75
+ - ext/rdwarf/extconf.rb
76
+ - ext/rdwarf/libdwarf/CHANGES
77
+ - ext/rdwarf/libdwarf/CODINGSTYLE
78
+ - ext/rdwarf/libdwarf/COPYING
79
+ - ext/rdwarf/libdwarf/ChangeLog
80
+ - ext/rdwarf/libdwarf/ChangeLog2006
81
+ - ext/rdwarf/libdwarf/ChangeLog2007
82
+ - ext/rdwarf/libdwarf/ChangeLog2008
83
+ - ext/rdwarf/libdwarf/ChangeLog2009
84
+ - ext/rdwarf/libdwarf/ChangeLog2010
85
+ - ext/rdwarf/libdwarf/ChangeLog2011
86
+ - ext/rdwarf/libdwarf/ChangeLog2012
87
+ - ext/rdwarf/libdwarf/ChangeLog2013
88
+ - ext/rdwarf/libdwarf/ChangeLog2014
89
+ - ext/rdwarf/libdwarf/LGPL.txt
90
+ - ext/rdwarf/libdwarf/LIBDWARFCOPYRIGHT
91
+ - ext/rdwarf/libdwarf/Makefile.in
92
+ - ext/rdwarf/libdwarf/NEWS
93
+ - ext/rdwarf/libdwarf/README
94
+ - ext/rdwarf/libdwarf/checkexamples.c
95
+ - ext/rdwarf/libdwarf/cmplrs/dwarf_addr_finder.h
96
+ - ext/rdwarf/libdwarf/common.c
97
+ - ext/rdwarf/libdwarf/common.h
98
+ - ext/rdwarf/libdwarf/config.h.in
99
+ - ext/rdwarf/libdwarf/configure
100
+ - ext/rdwarf/libdwarf/configure.in
101
+ - ext/rdwarf/libdwarf/dw-linetableheader.txt
102
+ - ext/rdwarf/libdwarf/dwarf.h
103
+ - ext/rdwarf/libdwarf/dwarf_abbrev.c
104
+ - ext/rdwarf/libdwarf/dwarf_abbrev.h
105
+ - ext/rdwarf/libdwarf/dwarf_addr_finder.c
106
+ - ext/rdwarf/libdwarf/dwarf_alloc.c
107
+ - ext/rdwarf/libdwarf/dwarf_alloc.h
108
+ - ext/rdwarf/libdwarf/dwarf_arange.c
109
+ - ext/rdwarf/libdwarf/dwarf_arange.h
110
+ - ext/rdwarf/libdwarf/dwarf_base_types.h
111
+ - ext/rdwarf/libdwarf/dwarf_die_deliv.c
112
+ - ext/rdwarf/libdwarf/dwarf_die_deliv.h
113
+ - ext/rdwarf/libdwarf/dwarf_elf_access.c
114
+ - ext/rdwarf/libdwarf/dwarf_elf_access.h
115
+ - ext/rdwarf/libdwarf/dwarf_error.c
116
+ - ext/rdwarf/libdwarf/dwarf_error.h
117
+ - ext/rdwarf/libdwarf/dwarf_form.c
118
+ - ext/rdwarf/libdwarf/dwarf_frame.c
119
+ - ext/rdwarf/libdwarf/dwarf_frame.h
120
+ - ext/rdwarf/libdwarf/dwarf_frame2.c
121
+ - ext/rdwarf/libdwarf/dwarf_frame3.c
122
+ - ext/rdwarf/libdwarf/dwarf_funcs.c
123
+ - ext/rdwarf/libdwarf/dwarf_funcs.h
124
+ - ext/rdwarf/libdwarf/dwarf_gdbindex.c
125
+ - ext/rdwarf/libdwarf/dwarf_gdbindex.h
126
+ - ext/rdwarf/libdwarf/dwarf_global.c
127
+ - ext/rdwarf/libdwarf/dwarf_global.h
128
+ - ext/rdwarf/libdwarf/dwarf_harmless.c
129
+ - ext/rdwarf/libdwarf/dwarf_harmless.h
130
+ - ext/rdwarf/libdwarf/dwarf_incl.h
131
+ - ext/rdwarf/libdwarf/dwarf_init_finish.c
132
+ - ext/rdwarf/libdwarf/dwarf_leb.c
133
+ - ext/rdwarf/libdwarf/dwarf_line.c
134
+ - ext/rdwarf/libdwarf/dwarf_line.h
135
+ - ext/rdwarf/libdwarf/dwarf_line2.c
136
+ - ext/rdwarf/libdwarf/dwarf_line_table_reader_common.c
137
+ - ext/rdwarf/libdwarf/dwarf_loc.c
138
+ - ext/rdwarf/libdwarf/dwarf_loc.h
139
+ - ext/rdwarf/libdwarf/dwarf_loc2.c
140
+ - ext/rdwarf/libdwarf/dwarf_macro.c
141
+ - ext/rdwarf/libdwarf/dwarf_macro.h
142
+ - ext/rdwarf/libdwarf/dwarf_opaque.h
143
+ - ext/rdwarf/libdwarf/dwarf_original_elf_init.c
144
+ - ext/rdwarf/libdwarf/dwarf_print_lines.c
145
+ - ext/rdwarf/libdwarf/dwarf_pubtypes.c
146
+ - ext/rdwarf/libdwarf/dwarf_query.c
147
+ - ext/rdwarf/libdwarf/dwarf_ranges.c
148
+ - ext/rdwarf/libdwarf/dwarf_reloc_arm.h
149
+ - ext/rdwarf/libdwarf/dwarf_reloc_mips.h
150
+ - ext/rdwarf/libdwarf/dwarf_reloc_ppc.h
151
+ - ext/rdwarf/libdwarf/dwarf_reloc_ppc64.h
152
+ - ext/rdwarf/libdwarf/dwarf_reloc_x86_64.h
153
+ - ext/rdwarf/libdwarf/dwarf_sort_line.c
154
+ - ext/rdwarf/libdwarf/dwarf_string.c
155
+ - ext/rdwarf/libdwarf/dwarf_stubs.c
156
+ - ext/rdwarf/libdwarf/dwarf_tied.c
157
+ - ext/rdwarf/libdwarf/dwarf_tsearch.h
158
+ - ext/rdwarf/libdwarf/dwarf_tsearchhash.c
159
+ - ext/rdwarf/libdwarf/dwarf_types.c
160
+ - ext/rdwarf/libdwarf/dwarf_types.h
161
+ - ext/rdwarf/libdwarf/dwarf_util.c
162
+ - ext/rdwarf/libdwarf/dwarf_util.h
163
+ - ext/rdwarf/libdwarf/dwarf_vars.c
164
+ - ext/rdwarf/libdwarf/dwarf_vars.h
165
+ - ext/rdwarf/libdwarf/dwarf_weaks.c
166
+ - ext/rdwarf/libdwarf/dwarf_weaks.h
167
+ - ext/rdwarf/libdwarf/dwarf_xu_index.c
168
+ - ext/rdwarf/libdwarf/dwarf_xu_index.h
169
+ - ext/rdwarf/libdwarf/dwgetopt.c
170
+ - ext/rdwarf/libdwarf/dwgetopt.h
171
+ - ext/rdwarf/libdwarf/gennames.c
172
+ - ext/rdwarf/libdwarf/install.sh
173
+ - ext/rdwarf/libdwarf/libdwarf.h.in
174
+ - ext/rdwarf/libdwarf/libdwarf2.1.mm
175
+ - ext/rdwarf/libdwarf/libdwarf2.1.pdf
176
+ - ext/rdwarf/libdwarf/libdwarf2p.1.mm
177
+ - ext/rdwarf/libdwarf/libdwarf2p.1.pdf
178
+ - ext/rdwarf/libdwarf/libdwarfdefs.h
179
+ - ext/rdwarf/libdwarf/malloc_check.c
180
+ - ext/rdwarf/libdwarf/malloc_check.h
181
+ - ext/rdwarf/libdwarf/mips_extensions.mm
182
+ - ext/rdwarf/libdwarf/mips_extensions.pdf
183
+ - ext/rdwarf/libdwarf/pro_alloc.c
184
+ - ext/rdwarf/libdwarf/pro_alloc.h
185
+ - ext/rdwarf/libdwarf/pro_arange.c
186
+ - ext/rdwarf/libdwarf/pro_arange.h
187
+ - ext/rdwarf/libdwarf/pro_die.c
188
+ - ext/rdwarf/libdwarf/pro_die.h
189
+ - ext/rdwarf/libdwarf/pro_encode_nm.c
190
+ - ext/rdwarf/libdwarf/pro_encode_nm.h
191
+ - ext/rdwarf/libdwarf/pro_error.c
192
+ - ext/rdwarf/libdwarf/pro_error.h
193
+ - ext/rdwarf/libdwarf/pro_expr.c
194
+ - ext/rdwarf/libdwarf/pro_expr.h
195
+ - ext/rdwarf/libdwarf/pro_finish.c
196
+ - ext/rdwarf/libdwarf/pro_forms.c
197
+ - ext/rdwarf/libdwarf/pro_frame.c
198
+ - ext/rdwarf/libdwarf/pro_frame.h
199
+ - ext/rdwarf/libdwarf/pro_funcs.c
200
+ - ext/rdwarf/libdwarf/pro_incl.h
201
+ - ext/rdwarf/libdwarf/pro_init.c
202
+ - ext/rdwarf/libdwarf/pro_line.c
203
+ - ext/rdwarf/libdwarf/pro_line.h
204
+ - ext/rdwarf/libdwarf/pro_macinfo.c
205
+ - ext/rdwarf/libdwarf/pro_macinfo.h
206
+ - ext/rdwarf/libdwarf/pro_opaque.h
207
+ - ext/rdwarf/libdwarf/pro_pubnames.c
208
+ - ext/rdwarf/libdwarf/pro_reloc.c
209
+ - ext/rdwarf/libdwarf/pro_reloc.h
210
+ - ext/rdwarf/libdwarf/pro_reloc_stream.c
211
+ - ext/rdwarf/libdwarf/pro_reloc_stream.h
212
+ - ext/rdwarf/libdwarf/pro_reloc_symbolic.c
213
+ - ext/rdwarf/libdwarf/pro_reloc_symbolic.h
214
+ - ext/rdwarf/libdwarf/pro_section.c
215
+ - ext/rdwarf/libdwarf/pro_section.h
216
+ - ext/rdwarf/libdwarf/pro_types.c
217
+ - ext/rdwarf/libdwarf/pro_types.h
218
+ - ext/rdwarf/libdwarf/pro_util.h
219
+ - ext/rdwarf/libdwarf/pro_vars.c
220
+ - ext/rdwarf/libdwarf/pro_weaks.c
221
+ - ext/rdwarf/rdwarf.c
222
+ - ext/rdwarf/rdwarf.h
223
+ - ext/rdwarf/rdwarf_names_gen.rb
224
+ - lib/rdwarf.rb
225
+ - lib/rdwarf/version.rb
226
+ - rdwarf.gemspec
227
+ homepage: https://github.com/kubo/rdwarf
228
+ licenses:
229
+ - LGPL
230
+ metadata: {}
231
+ post_install_message:
232
+ rdoc_options: []
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: '0'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ requirements: []
246
+ rubyforge_project:
247
+ rubygems_version: 2.4.5
248
+ signing_key:
249
+ specification_version: 4
250
+ summary: A module to read DWARF debugging information
251
+ test_files: []