diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-07-06 11:36:16 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-07-20 19:05:45 +0100 |
commit | 4c9118c95ca81dc6044bbcb7bb96b15505de086f (patch) | |
tree | fcb38f1ea6ec31c33ca14dabf041009c29993c62 /meta | |
parent | fccb368fd124fd8992cd571698bb48f12f7cd5db (diff) | |
download | poky-4c9118c95ca81dc6044bbcb7bb96b15505de086f.tar.gz |
dwarfsrcfiles: Avoid races over debug-link files
We use dwarfsrcfiles in package.bbclass to list the source files used by a binary.
This is done before they're stripped and linked to debug symbols in separate files.
It is possible a binary may already have a link to separate debug symbols, e.g.
some of the test binaries in lttng-tools ptest. In those cases, the linked binary
may be changed by package.bbclass code whilst dwarfsrcfiles is reading it. That
would result in a rare SIGBUS race causing the binary to fail.
To avoid this, break the debug file search path so no other binaries are found.
Also fix a segfault if no binary is specified while here.
[YOCTO #14400]
(From OE-Core rev: 52382a03c10a6985ecb6ada24523cb9daf9c6201)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit efef732859e265533acf16f2f4da3b29d50e0df4)
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c index af7af524eb..9eb5ca807a 100644 --- a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c +++ b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <argp.h> | 10 | #include <argp.h> |
11 | #include <stdio.h> | 11 | #include <stdio.h> |
12 | #include <stdlib.h> | ||
12 | 13 | ||
13 | #include <dwarf.h> | 14 | #include <dwarf.h> |
14 | #include <elfutils/libdw.h> | 15 | #include <elfutils/libdw.h> |
@@ -83,13 +84,15 @@ process_cu (Dwarf_Die *cu_die) | |||
83 | int | 84 | int |
84 | main (int argc, char **argv) | 85 | main (int argc, char **argv) |
85 | { | 86 | { |
86 | char* args[3]; | 87 | char* args[5]; |
87 | int res = 0; | 88 | int res = 0; |
88 | Dwfl *dwfl; | 89 | Dwfl *dwfl; |
89 | Dwarf_Addr bias; | 90 | Dwarf_Addr bias; |
90 | 91 | ||
91 | if (argc != 2) | 92 | if (argc != 2) { |
92 | fprintf(stderr, "Usage %s <file>", argv[0]); | 93 | fprintf(stderr, "Usage %s <file>", argv[0]); |
94 | exit(EXIT_FAILURE); | ||
95 | } | ||
93 | 96 | ||
94 | // Pretend "dwarfsrcfiles -e <file>" was given, so we can use standard | 97 | // Pretend "dwarfsrcfiles -e <file>" was given, so we can use standard |
95 | // dwfl argp parser to open the file for us and get our Dwfl. Useful | 98 | // dwfl argp parser to open the file for us and get our Dwfl. Useful |
@@ -98,8 +101,12 @@ main (int argc, char **argv) | |||
98 | args[0] = argv[0]; | 101 | args[0] = argv[0]; |
99 | args[1] = "-e"; | 102 | args[1] = "-e"; |
100 | args[2] = argv[1]; | 103 | args[2] = argv[1]; |
104 | // We don't want to follow debug linked files due to the way OE processes | ||
105 | // files, could race against changes in the linked binary (e.g. objcopy on it) | ||
106 | args[3] = "--debuginfo-path"; | ||
107 | args[4] = "/not/exist"; | ||
101 | 108 | ||
102 | argp_parse (dwfl_standard_argp (), 3, args, 0, NULL, &dwfl); | 109 | argp_parse (dwfl_standard_argp (), 5, args, 0, NULL, &dwfl); |
103 | 110 | ||
104 | Dwarf_Die *cu = NULL; | 111 | Dwarf_Die *cu = NULL; |
105 | while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL) | 112 | while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL) |