chiark
/
gitweb
/
~ian
/
chiark-utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fishdescriptor: Use os or dl for RTLD_now
[chiark-utils.git]
/
fishdescriptor
/
greenend
/
fishdescriptor
/
indonor.py
diff --git
a/fishdescriptor/greenend/fishdescriptor/indonor.py
b/fishdescriptor/greenend/fishdescriptor/indonor.py
index b9e9053191cc41a1f04d2c906393f811f8060317..f77a4daa9e0d855983bc69cf55b31810288ae891 100644
(file)
--- a/
fishdescriptor/greenend/fishdescriptor/indonor.py
+++ b/
fishdescriptor/greenend/fishdescriptor/indonor.py
@@
-2,6
+2,19
@@
# class for use inside gdb which is debugging the donor process
import gdb
# class for use inside gdb which is debugging the donor process
import gdb
+import os
+
+try:
+ rtld_now = os.RTLD_NOW
+except AttributeError:
+ try:
+ import dl
+ rtld_now = dl.RTLD_NOW
+ except ImportError:
+ # some installations lack dl, it seems
+ # https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1721840
+ # bodge:
+ rtld_now = 2
def _string_escape_for_c(s):
if not isinstance(s, bytes):
def _string_escape_for_c(s):
if not isinstance(s, bytes):
@@
-38,8
+51,6
@@
class DonorImplementation():
def _dlopen(self):
if self._open is not None: return
def _dlopen(self):
if self._open is not None: return
- rtld_print_cmd = ['fishdescriptor','--print-rtld-now'];
- rtld_now = subprocess.check_output(rtld_print_cmd).rstrip('\n')
o = self._dlfunc('void* (*)(const char*, int)',
'dlopen',
'("libfishdescriptor-donate.so.1.0", %s)' % rtld_now)
o = self._dlfunc('void* (*)(const char*, int)',
'dlopen',
'("libfishdescriptor-donate.so.1.0", %s)' % rtld_now)