diff options
-rwxr-xr-x | scripts/relocate_sdk.py | 13 |
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 | ||
69 | def change_interpreter(): | 69 | def 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 """ |