From 0a61c07d591273b76da21fb8386b669989da3707 Mon Sep 17 00:00:00 2001 From: rsc Date: Mon, 19 Apr 2004 18:18:37 +0000 Subject: acid files --- acid/elflink | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 acid/elflink (limited to 'acid/elflink') diff --git a/acid/elflink b/acid/elflink new file mode 100644 index 00000000..8e9f2e76 --- /dev/null +++ b/acid/elflink @@ -0,0 +1,54 @@ +aggr Rdebug +{ + 'X' 0 version; + 'X' 4 map; +}; + +aggr Rmap +{ + 'X' 0 addr; + 'X' 4 name; + 'X' 8 dynsect; + 'X' 12 next; + 'X' 16 prev; +}; + +defn +rdebug() +{ + local a; + + a = _DYNAMIC; + while *a != 0 do { + if *a == 21 then // 21 == DT_DEBUG + return *(a+4); + a = a+8; + } + return 0; +} + +defn +rlink() +{ + local r, m, n; + + r = rdebug(); + if r == 0 then + return {}; + complex Rdebug r; + print("version ", r.version, "\n"); + + m = r.map; + n = 0; + while m != 0 && n < 100 do { + complex Rmap m; + print("map ", m\X, " base ", m.addr\X, " next ", m.next\X, " name "); + if m.name then + print(*(m.name\s)); + else + print("''"); + print("\n"); + m = m.next; + n = n+1; + } +} -- cgit v1.2.3