diff options
Diffstat (limited to 'scripts/relocate_sdk.py')
| -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 """ |
