1 |
commit: 9051961e0c4fb3a916cd81a934972d9453a9a49a |
2 |
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Dec 27 03:10:58 2012 +0000 |
4 |
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Dec 27 03:10:58 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=9051961e |
7 |
|
8 |
misc/alt-revdep-pax: cleanup wrt object with no pax flags |
9 |
|
10 |
--- |
11 |
misc/alt-revdep-pax | 123 ++++++++++++++++++++++++-------------------------- |
12 |
1 files changed, 59 insertions(+), 64 deletions(-) |
13 |
|
14 |
diff --git a/misc/alt-revdep-pax b/misc/alt-revdep-pax |
15 |
index be51bf9..dda9025 100755 |
16 |
--- a/misc/alt-revdep-pax |
17 |
+++ b/misc/alt-revdep-pax |
18 |
@@ -41,15 +41,7 @@ def get_input(prompt): |
19 |
return raw_input(prompt) |
20 |
|
21 |
|
22 |
-def print_problems(elfs_without_flags, sonames_without_flags, sonames_missing_library): |
23 |
- elfs_without_flags = set(elfs_without_flags) |
24 |
- print('\n**** ELF objections without any PAX flags ****') |
25 |
- for m in elfs_without_flags: |
26 |
- print('\t%s' % m) |
27 |
- sonames_without_flags = set(sonames_without_flags) |
28 |
- print('\n**** SONAMEs with library files without PAX flags ****') |
29 |
- for m in sonames_without_flags: |
30 |
- print('\t%s' % m) |
31 |
+def print_problems(sonames_missing_library): |
32 |
sonames_missing_library = set(sonames_missing_library) |
33 |
print('\n**** SONAMES without any library files ****') |
34 |
for m in sonames_missing_library: |
35 |
@@ -59,8 +51,6 @@ def print_problems(elfs_without_flags, sonames_without_flags, sonames_missing_li |
36 |
def run_forward(verbose): |
37 |
(object_linkings, object_reverse_linkings, library2soname, soname2library) = LinkMap().get_maps() |
38 |
|
39 |
- elfs_without_flags = [] |
40 |
- sonames_without_flags = [] |
41 |
sonames_missing_library = [] |
42 |
|
43 |
for abi in object_linkings: |
44 |
@@ -70,22 +60,24 @@ def run_forward(verbose): |
45 |
sv = '%s :%s ( %s )' % (elf, abi, elf_str_flags) |
46 |
s = sv |
47 |
except pax.PaxError: |
48 |
- elfs_without_flags.append(elf) |
49 |
+ sv = '%s :%s ( %s )' % (elf, abi, '****') |
50 |
+ s = sv |
51 |
continue |
52 |
|
53 |
count = 0 |
54 |
for soname in object_linkings[abi][elf]: |
55 |
try: |
56 |
- library = soname2library[(soname,abi)] |
57 |
- (library_str_flags, library_bin_flags) = pax.getflags(library) |
58 |
+ library = soname2library[(soname, abi)] |
59 |
+ try: |
60 |
+ (library_str_flags, library_bin_flags) = pax.getflags(library) |
61 |
+ except pax.PaxError: |
62 |
+ library_str_flags = '****' |
63 |
sv = '%s\n\t%s\t%s ( %s )' % (sv, soname, library, library_str_flags) |
64 |
if elf_str_flags != library_str_flags: |
65 |
s = '%s\n\t%s\t%s ( %s )' % (s, soname, library, library_str_flags) |
66 |
count = count + 1 |
67 |
except KeyError: |
68 |
sonames_missing_library.append(soname) |
69 |
- except pax.PaxError: |
70 |
- sonames_without_flags.append(soname) |
71 |
|
72 |
if verbose: |
73 |
print('%s\n' % sv) |
74 |
@@ -98,7 +90,7 @@ def run_forward(verbose): |
75 |
print('%s\n\n' % s) |
76 |
|
77 |
if verbose: |
78 |
- print_problems(elfs_without_flags, sonames_without_flags, sonames_missing_library) |
79 |
+ print_problems(sonames_missing_library) |
80 |
|
81 |
|
82 |
def run_reverse(verbose, executable_only): |
83 |
@@ -106,39 +98,38 @@ def run_reverse(verbose, executable_only): |
84 |
|
85 |
shell_path = path = os.getenv('PATH').split(':') |
86 |
|
87 |
- elfs_without_flags = [] |
88 |
- sonames_without_flags = [] |
89 |
sonames_missing_library = [] |
90 |
|
91 |
for abi in object_reverse_linkings: |
92 |
for soname in object_reverse_linkings[abi]: |
93 |
try: |
94 |
- library = soname2library[(soname,abi)] |
95 |
- (library_str_flags, library_bin_flags) = pax.getflags(library) |
96 |
+ library = soname2library[(soname, abi)] |
97 |
+ try: |
98 |
+ (library_str_flags, library_bin_flags) = pax.getflags(library) |
99 |
+ except pax.PaxError: |
100 |
+ library_str_flags = '****' |
101 |
sv = '%s\t%s :%s ( %s )' % (soname, library, abi, library_str_flags) |
102 |
s = sv |
103 |
except KeyError: |
104 |
sonames_missing_library.append(soname) |
105 |
- except pax.PaxError: |
106 |
- sonames_without_flags.append(soname) |
107 |
|
108 |
count = 0 |
109 |
for elf in object_reverse_linkings[abi][soname]: |
110 |
try: |
111 |
(elf_str_flags, elf_bin_flags) = pax.getflags(elf) |
112 |
- if executable_only: |
113 |
- if os.path.dirname(elf) in shell_path: |
114 |
- sv = '%s\n\t%s ( %s )' % (sv, elf, elf_str_flags) |
115 |
- if library_str_flags != elf_str_flags: |
116 |
- s = '%s\n\t%s ( %s )' % (s, elf, elf_str_flags) |
117 |
- count = count + 1 |
118 |
- else: |
119 |
+ except pax.PaxError: |
120 |
+ elf_str_flags = '****' |
121 |
+ if executable_only: |
122 |
+ if os.path.dirname(elf) in shell_path: |
123 |
sv = '%s\n\t%s ( %s )' % (sv, elf, elf_str_flags) |
124 |
if library_str_flags != elf_str_flags: |
125 |
s = '%s\n\t%s ( %s )' % (s, elf, elf_str_flags) |
126 |
count = count + 1 |
127 |
- except pax.PaxError: |
128 |
- elfs_without_flags.append(elf) |
129 |
+ else: |
130 |
+ sv = '%s\n\t%s ( %s )' % (sv, elf, elf_str_flags) |
131 |
+ if library_str_flags != elf_str_flags: |
132 |
+ s = '%s\n\t%s ( %s )' % (s, elf, elf_str_flags) |
133 |
+ count = count + 1 |
134 |
|
135 |
if verbose: |
136 |
print('%s\n' % sv) |
137 |
@@ -151,7 +142,7 @@ def run_reverse(verbose, executable_only): |
138 |
print('%s\n\n' % s) |
139 |
|
140 |
if verbose: |
141 |
- print_problems( elfs_without_flags, sonames_without_flags, sonames_missing_library) |
142 |
+ print_problems(sonames_missing_library) |
143 |
|
144 |
|
145 |
def migrate_flags(importer, exporter_str_flags, exporter_bin_flags): |
146 |
@@ -180,7 +171,12 @@ def migrate_flags(importer, exporter_str_flags, exporter_bin_flags): |
147 |
'R':1<<14, 'r':1<<15 |
148 |
} |
149 |
|
150 |
- (importer_str_flags, importer_bin_flags) = pax.getflags(importer) |
151 |
+ try: |
152 |
+ (importer_str_flags, importer_bin_flags) = pax.getflags(importer) |
153 |
+ except pax.PaxError: |
154 |
+ # The importer has no flags, so just set them |
155 |
+ pax.setbinflags(importer, exporter_bin_flags) |
156 |
+ return |
157 |
|
158 |
# Start with the exporter's flags |
159 |
result_bin_flags = exporter_bin_flags |
160 |
@@ -226,21 +222,24 @@ def run_elf(elf, verbose, mark, allyes): |
161 |
for soname in object_linkings[abi][elf]: |
162 |
try: |
163 |
library = soname2library[(soname,abi)] |
164 |
- (library_str_flags, library_bin_flags) = pax.getflags(library) |
165 |
+ try: |
166 |
+ (library_str_flags, library_bin_flags) = pax.getflags(library) |
167 |
+ except pax.PaxError: |
168 |
+ library_str_flags = '****' |
169 |
if verbose: |
170 |
print('\t%s\t%s :%s ( %s )' % (soname, library, abi, library_str_flags)) |
171 |
if elf_str_flags != library_str_flags: |
172 |
mismatched_libraries.append(library) |
173 |
if not verbose: |
174 |
print('\t%s\t%s :%s ( %s )' % (soname, library, abi, library_str_flags)) |
175 |
- except pax.PaxError: |
176 |
- print('%s :%s: file for soname not found' % (soname,abi)) |
177 |
+ except KeyError: |
178 |
+ print('%s :%s: file for soname not found' % (soname, abi)) |
179 |
|
180 |
if len(mismatched_libraries) == 0: |
181 |
if not verbose: |
182 |
print('\tNo mismatches\n') |
183 |
else: |
184 |
- print('\n'), |
185 |
+ print('') |
186 |
if mark: |
187 |
print('\tWill mark libraries with %s\n' % elf_str_flags) |
188 |
for library in mismatched_libraries: |
189 |
@@ -249,7 +248,7 @@ def run_elf(elf, verbose, mark, allyes): |
190 |
if allyes: |
191 |
ans = 'y' |
192 |
else: |
193 |
- ans = get_input('\tSet flags for %s :%s (y/n): ' % (library,abi)) |
194 |
+ ans = get_input('\tSet flags for %s :%s (y/n): ' % (library, abi)) |
195 |
if ans == 'y': |
196 |
do_marking = True |
197 |
break |
198 |
@@ -263,7 +262,7 @@ def run_elf(elf, verbose, mark, allyes): |
199 |
try: |
200 |
migrate_flags(library, elf_str_flags, elf_bin_flags) |
201 |
except pax.PaxError: |
202 |
- print('\n\tCould not set PAX flags on %s, text maybe busy' % (library,abi)) |
203 |
+ print('\n\tCould not set PAX flags on %s, text maybe busy' % (library, abi)) |
204 |
|
205 |
try: |
206 |
(library_str_flags, library_bin_flags) = pax.getflags(library) |
207 |
@@ -303,46 +302,42 @@ def run_soname(name, verbose, use_soname, mark, allyes, executable_only): |
208 |
if not soname in object_reverse_linkings[abi]: |
209 |
continue |
210 |
|
211 |
- library = soname2library[(soname,abi)] |
212 |
- (library_str_flags, library_bin_flags) = pax.getflags(library) |
213 |
- print('%s\t%s :%s (%s)\n' % (soname, library, ", ".join(abi_list), library_str_flags)) |
214 |
+ library = soname2library[(soname, abi)] |
215 |
+ |
216 |
+ try: |
217 |
+ (library_str_flags, library_bin_flags) = pax.getflags(library) |
218 |
+ print('%s\t%s :%s (%s)\n' % (soname, library, abi, library_str_flags)) |
219 |
+ except pax.PaxError: |
220 |
+ print('%s :%s : No PAX flags found\n' % (library, abi)) |
221 |
+ continue |
222 |
|
223 |
for elf in object_reverse_linkings[abi][soname]: |
224 |
try: |
225 |
(elf_str_flags, elf_bin_flags ) = pax.getflags(elf) |
226 |
- if verbose: |
227 |
- if executable_only: |
228 |
- if os.path.dirname(elf) in shell_path: |
229 |
- print('\t%s ( %s )' % (elf, elf_str_flags )) |
230 |
- else: |
231 |
- print('\t%s ( %s )' % ( elf, elf_str_flags )) |
232 |
- if library_str_flags != elf_str_flags: |
233 |
- if executable_only: |
234 |
- if os.path.dirname(elf) in shell_path: |
235 |
- mismatched_elfs.append(elf) |
236 |
- if not verbose: |
237 |
- print('\t%s ( %s )' % (elf, elf_str_flags )) |
238 |
- else: |
239 |
- mismatched_elfs.append(elf) |
240 |
- if not verbose: |
241 |
- print('\t%s ( %s )' % (elf, elf_str_flags )) |
242 |
except pax.PaxError: |
243 |
- # If you can't get the pax flags, then its automatically mismatched |
244 |
+ elf_str_flags = '****' |
245 |
+ if verbose: |
246 |
+ if executable_only: |
247 |
+ if os.path.dirname(elf) in shell_path: |
248 |
+ print('\t%s ( %s )' % (elf, elf_str_flags)) |
249 |
+ else: |
250 |
+ print('\t%s ( %s )' % (elf, elf_str_flags)) |
251 |
+ if library_str_flags != elf_str_flags: |
252 |
if executable_only: |
253 |
if os.path.dirname(elf) in shell_path: |
254 |
mismatched_elfs.append(elf) |
255 |
if not verbose: |
256 |
- print('\t%s ( %s )' % (elf, '****' )) |
257 |
+ print('\t%s ( %s )' % (elf, elf_str_flags)) |
258 |
else: |
259 |
mismatched_elfs.append(elf) |
260 |
if not verbose: |
261 |
- print('\t%s ( %s )' % (elf, '****' )) |
262 |
+ print('\t%s ( %s )' % (elf, elf_str_flags)) |
263 |
|
264 |
if len(mismatched_elfs) == 0: |
265 |
if not verbose: |
266 |
print('\tNo mismatches\n') |
267 |
else: |
268 |
- print('\n'), |
269 |
+ print('') |
270 |
if mark: |
271 |
print('\tWill mark elf with %s\n' % library_str_flags) |
272 |
for elf in mismatched_elfs: |
273 |
@@ -370,7 +365,7 @@ def run_soname(name, verbose, use_soname, mark, allyes, executable_only): |
274 |
print('\n\tCould not set pax flags on %s, file is probably busy' % elf) |
275 |
print('\tShut down all processes that use it and try again') |
276 |
(elf_str_flags, elf_bin_flags) = pax.getflags(elf) |
277 |
- print('\n\t\t%s ( %s )\n' % (elf, elf_str_flags )) |
278 |
+ print('\n\t\t%s ( %s )\n' % (elf, elf_str_flags)) |
279 |
|
280 |
|
281 |
def run_usage(): |