Omar Sandoval
6a6d37c5e1
Make Program and CoreReader context managers
...
This is preparation for the next change, so that a Program can clean up
after itself. The Program will close the CoreReader, and the CoreReader
will close the underlying file.
2018-07-11 19:16:34 -07:00
Omar Sandoval
800ee3ec36
corereader: take fd and list of segments instead of path
...
Now, we can get rid of the ELF parsing implementation in CoreReader.
Instead, we parse in ElfFile and pass the parsed information to
CoreReader.
2018-07-09 19:12:33 -07:00
Omar Sandoval
95c0682718
corereader: implement type reads in C
...
Now that read_memory() was converted to C, IntType.read() and friends
are a bottleneck. Convert them to C methods of CoreReader.
2018-05-25 00:41:12 -07:00
Omar Sandoval
15849f5795
type: make operand_type() a method of Type
...
This gets rid of the huge isinstance() chain in
TypeIndex.operand_type().
2018-05-18 23:51:20 -07:00
Omar Sandoval
54f5124be8
type: format char arrays as strings
...
For, e.g., comm in struct task_struct, a string is much nicer to look
at.
2018-05-14 20:35:21 -07:00
Omar Sandoval
1916528f5d
type: make offsetof() and typeof() accept arbitrary member designators
...
Instead of only accepting an identifier.
2018-05-13 00:42:50 -07:00
Omar Sandoval
f299bea98a
type/typeindex: implement saner typing for EnumType
...
This is a big change that makes EnumType have a compatible integer type
member instead of copying the fields, which ends up touching a lot of
stuff but also fixing a bunch of static typing errors.
2018-05-11 23:57:52 -07:00
Omar Sandoval
9560b913f3
typeindex: change Type.unqualified() to TypeIndex.operand_type()
...
Converting an lvalue to an operand has to do a little bit more than
remove qualifiers:
- Convert array types to pointer types
- Convert function types to pointer types
2018-05-06 21:29:59 -07:00
Omar Sandoval
987f9be6db
type: add Type.is_arithmetic() and Type.is_integer()
...
This will be used for ProgramObject operators as a shortcut for
isinstance(type.real_type(), (ArithmeticType, BitFieldType).
2018-05-06 00:28:07 -07:00
Omar Sandoval
812951c340
type: add Type.convert()
...
For converting a value to a valid value of that type (i.e., casting).
2018-05-01 20:49:49 -07:00
Omar Sandoval
78a745588a
type: add TypedefType.real_type()
...
Instead of open-coding it in ProgramObject.
2018-04-30 22:23:55 -07:00
Omar Sandoval
c49426359b
type: add Type.unqualified()
...
Used to get the same type with no qualifiers.
2018-04-30 22:16:44 -07:00
Omar Sandoval
26d8e0f7e9
type: add compatible integer type to EnumType
2018-04-30 19:33:40 -07:00
Omar Sandoval
cef86a18c0
Move from_dwarf_type{,_name}() logic to a class
2018-04-30 18:11:28 -07:00
Omar Sandoval
80d3058b17
type: canonicalize basic type names
...
Instead of using whatever the compiler emits, make sure we are
consistent with naming.
2018-04-30 00:01:18 -07:00
Omar Sandoval
e38ddba9c6
type: fix pretty-print of array of structs
...
We need to handle indentation like we do with nested structs.
2018-04-28 22:42:01 -07:00
Omar Sandoval
1d2b90e62b
Document drgn.program and drgn.type more
2018-04-12 00:51:32 -07:00
Omar Sandoval
4c9a454cd2
type{,name}: get rid of __eq__()
...
We should only have these for testing.
2018-04-09 22:49:39 -07:00
Omar Sandoval
f347a51399
type{,name}: make qualifiers a frozenset
2018-04-09 21:57:52 -07:00
Omar Sandoval
366a706a96
type: replace Type.format() with Type.pretty(Type.read())
...
Most of the implementations of format() call read(). Make pretty() do
just the formatting part of format() and take the already read value.
2018-04-09 21:02:03 -07:00
Omar Sandoval
b848134c49
Add (partial) support for function types
...
The only part not implemented is function type name parsing.
2018-04-08 23:04:08 -07:00
Omar Sandoval
d41137d6e2
type: format empty struct without newline
...
This shows up in, e.g., Linux's struct lock_class_key if compiled
without lockdep.
2018-04-07 15:36:46 -07:00
Omar Sandoval
422c39823f
type: allow reading incomplete array types
...
Just return a zero-length array.
2018-04-06 00:27:17 -07:00
Omar Sandoval
2bd81fd5fc
coredump: push ELF/DWARF-specific logic out of Coredump
...
Instead, take callbacks for looking up variables and reading memory.
While we're at it, get rid of TypeFactory and instead implement its
methods as functions taking a DwarfIndex.
2018-04-05 00:52:00 -07:00
Omar Sandoval
acbf14d10c
dwarf: rewrite DwarfIndex in pure C
...
Most of drgn.dwarf is not performance-sensitive, and the part that is
(DwarfIndex) can use some extra tuning which is easier to do in C rather
than Cython.
2018-03-25 02:10:15 -07:00
Omar Sandoval
a7309d2a15
elf: support debug sections with relocations
2018-03-09 17:41:54 -08:00
Omar Sandoval
dac4f9156a
elf: clean up ElfFile API
...
Use functions instead of properties to make it clear that they're not
free, and make it possible to construct a DwarfFile directly from an
ElfFile.
2018-03-08 23:31:02 -08:00
Omar Sandoval
aa4d5852b3
type: fix handling of arrays with zero-length elements
...
Encountered in s_writers_key in struct file_system_type.
2018-03-07 21:20:38 -08:00
Omar Sandoval
7d21255007
type: add format() to type classes
...
For formatting read values nicely in C syntax.
2018-03-07 02:04:09 -08:00
Omar Sandoval
adeeca927b
type: add TypeFactory.from_type_name()
2018-03-07 00:31:00 -08:00
Omar Sandoval
f71d2a8fd9
type: add read() to type classes
...
For reading a value out of memory.
2018-03-06 01:22:14 -08:00
Omar Sandoval
84e0910342
type: remove all DWARF-specific code from type classes
2018-03-06 00:42:03 -08:00
Omar Sandoval
1717c060cd
type: further improve type handling
...
Make specific type classes which are separate from the type name
classes.
2018-03-03 02:14:09 -08:00