summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/relocate_sdk.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/scripts/relocate_sdk.py b/scripts/relocate_sdk.py
index 74bb7a5fdd..45d2c241c3 100755
--- a/scripts/relocate_sdk.py
+++ b/scripts/relocate_sdk.py
@@ -66,7 +66,7 @@ def parse_elf_header():
66 e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum, e_shstrndx =\ 66 e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum, e_shstrndx =\
67 hdr_struct.unpack(elf_header[16:hdr_size]) 67 hdr_struct.unpack(elf_header[16:hdr_size])
68 68
69def change_interpreter(): 69def change_interpreter(elf_file_name):
70 if arch == 32: 70 if arch == 32:
71 ph_struct = struct.Struct("<IIIIIIII") 71 ph_struct = struct.Struct("<IIIIIIII")
72 else: 72 else:
@@ -89,7 +89,16 @@ def change_interpreter():
89 if p_type == 3: 89 if p_type == 3:
90 # PT_INTERP section 90 # PT_INTERP section
91 f.seek(p_offset) 91 f.seek(p_offset)
92 # External SDKs with mixed pre-compiled binaries should not get
93 # relocated so look for some variant of /lib
94 fname = f.read(11)
95 if fname.startswith("/lib/") or fname.startswith("/lib64/") or fname.startswith("/lib32/") or fname.startswith("/usr/lib32/") or fname.startswith("/usr/lib32/") or fname.startswith("/usr/lib64/"):
96 break
97 if (len(new_dl_path) >= p_filesz):
98 print "ERROR: could not relocate %s, interp size = %i and %i is needed." % (elf_file_name, p_memsz, len(new_dl_path) + 1)
99 break
92 dl_path = new_dl_path + "\0" * (p_filesz - len(new_dl_path)) 100 dl_path = new_dl_path + "\0" * (p_filesz - len(new_dl_path))
101 f.seek(p_offset)
93 f.write(dl_path) 102 f.write(dl_path)
94 break 103 break
95 104
@@ -199,7 +208,7 @@ for e in executables_list:
199 arch = get_arch() 208 arch = get_arch()
200 if arch: 209 if arch:
201 parse_elf_header() 210 parse_elf_header()
202 change_interpreter() 211 change_interpreter(e)
203 change_dl_sysdirs() 212 change_dl_sysdirs()
204 213
205 """ change permissions back """ 214 """ change permissions back """