[yocto] [prelink-cross][PATCH] Add option to return an error if all binaries cannot be prelinked
Kyle Russell
bkylerussell at gmail.com
Fri Oct 12 08:37:15 PDT 2018
Otherwise, there's no way to validate whether or not the operation
was actually successful without rescanning.
Signed-off-by: Kyle Russell <bkylerussell at gmail.com>
---
src/doit.c | 16 +++++++++++-----
src/main.c | 8 +++++++-
src/prelink.h | 2 +-
3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/doit.c b/src/doit.c
index 1e32ad5..3784866 100644
--- a/src/doit.c
+++ b/src/doit.c
@@ -237,11 +237,11 @@ error_out:
return;
}
-void
+int
prelink_all (void)
{
struct collect_ents l;
- int i;
+ int i, fails = 0;
l.ents =
(struct prelink_entry **) alloca (prelink_entry_count
@@ -250,7 +250,13 @@ prelink_all (void)
htab_traverse (prelink_filename_htab, find_ents, &l);
for (i = 0; i < l.nents; ++i)
- if (l.ents[i]->done == 1
- || (l.ents[i]->done == 0 && l.ents[i]->type == ET_EXEC))
- prelink_ent (l.ents[i]);
+ {
+ if (l.ents[i]->done == 1
+ || (l.ents[i]->done == 0 && l.ents[i]->type == ET_EXEC))
+ prelink_ent (l.ents[i]);
+ if (l.ents[i]->type == ET_UNPRELINKABLE)
+ fails++;
+ }
+
+ return fails;
}
diff --git a/src/main.c b/src/main.c
index 0cea86d..6ba89d5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -47,6 +47,7 @@ int one_file_system;
int enable_cxx_optimizations = 1;
int exec_shield;
int undo, verify;
+int errors;
enum verify_method_t verify_method;
int quick;
int compute_checksum;
@@ -90,6 +91,7 @@ static struct argp_option options[] = {
{"black-list", 'b', "PATH", 0, "Blacklist path" },
{"cache-file", 'C', "CACHE", 0, "Use CACHE as cache file" },
{"config-file", 'c', "CONF", 0, "Use CONF as configuration file" },
+ {"errors", 'e', 0, 0, "Returns an error if all binaries are not prelinkable" },
{"force", 'f', 0, 0, "Force prelinking" },
{"dereference", 'h', 0, 0, "Follow symlinks when processing directory trees from command line" },
{"one-file-system", 'l', 0, 0, "Stay in local file system when processing directories from command line" },
@@ -139,6 +141,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
if (add_to_blacklist (arg, dereference, one_file_system))
exit (EXIT_FAILURE);
break;
+ case 'e':
+ errors = 1;
+ break;
case 'f':
force = 1;
break;
@@ -524,7 +529,8 @@ main (int argc, char *argv[])
prelink_load_cache ();
layout_libs ();
- prelink_all ();
+ if(prelink_all () && errors)
+ return EXIT_FAILURE;
if (! no_update && ! dry_run)
prelink_save_cache (all);
diff --git a/src/prelink.h b/src/prelink.h
index 93dbf7a..c7b57e2 100644
--- a/src/prelink.h
+++ b/src/prelink.h
@@ -574,7 +574,7 @@ int get_relocated_mem (struct prelink_info *info, DSO *dso, GElf_Addr addr,
int layout_libs (void);
-void prelink_all (void);
+int prelink_all (void);
int undo_all (void);
--
2.17.1
More information about the yocto
mailing list