mirror of
https://github.com/JakeHillion/drgn.git
synced 2024-12-24 10:03:05 +00:00
75c3679147
The current mixed Python/C implementation works well, but it has a couple of important limitations: - It's too slow for some common use cases, like iterating over large data structures. - It can't be reused in utilities written in other languages. This replaces the internals with a new library written in C, libdrgn. It includes Python bindings with mostly the same public interface as before, with some important improvements: - Types are now represented by a single Type class rather than the messy polymorphism in the Python implementation. - Qualifiers are a bitmask instead of a set of strings. - Bit fields are not considered a separate type. - The lvalue/rvalue terminology is replaced with reference/value. - Structure, union, and array values are better supported. - Function objects are supported. - Program distinguishes between lookups of variables, constants, and functions. The C rewrite is about 6x as fast as the original Python when using the Python bindings, and about 8x when using the C API directly. Currently, the exposed API in C is fairly conservative. In the future, the memory reader, type index, and object index APIs will probably be exposed for more flexibility.
11 lines
376 B
Bash
Executable File
11 lines
376 B
Bash
Executable File
#!/bin/sh
|
|
|
|
major="$(sed -rn 's/^#define DRGN_VERSION_MAJOR ([0-9])+$/\1/p' drgn.h)"
|
|
minor="$(sed -rn 's/^#define DRGN_VERSION_MINOR ([0-9])+$/\1/p' drgn.h)"
|
|
patch="$(sed -rn 's/^#define DRGN_VERSION_PATCH ([0-9])+$/\1/p' drgn.h)"
|
|
if [ -z "$major" -o -z "$minor" -o -z "$patch" ]; then
|
|
echo "Could not find version number in drgn.h" >&2
|
|
exit 1
|
|
fi
|
|
echo "$major.$minor.$patch"
|