diff options
| author | Robert Yang <liezhi.yang@windriver.com> | 2019-01-24 14:57:32 +0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-01-26 13:39:37 +0000 |
| commit | bb97a087e98697ee8dafa27ad5eb9b3d50f18387 (patch) | |
| tree | 683c00cc24f8e1d93ec2972d0ac1ccc82a7f97fb /meta/recipes-devtools/ccache | |
| parent | f3b6a6e4ee41d466646866dfcd544b386cb499b9 (diff) | |
| download | poky-bb97a087e98697ee8dafa27ad5eb9b3d50f18387.tar.gz | |
ccache: Fix Segmentation fault error when gcc -o /dev/null
Fixed:
$ export CCACHE_DEBUG=1
$ ccache gcc -c hello.c -o /dev/null
Segmentation fault (core dumped)
This is because failed to open /dev/null.foo (Permission denied), check file
stream before write to it can fix the problem.
(From OE-Core rev: 78a24b3a1eae04e5f4744f320e4ccbb8bfe17b9a)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/ccache')
| -rw-r--r-- | meta/recipes-devtools/ccache/ccache_3.6.bb | 1 | ||||
| -rw-r--r-- | meta/recipes-devtools/ccache/files/0003-Fix-Segmentation-fault-error-when-gcc-o-dev-null.patch | 79 |
2 files changed, 80 insertions, 0 deletions
diff --git a/meta/recipes-devtools/ccache/ccache_3.6.bb b/meta/recipes-devtools/ccache/ccache_3.6.bb index a12306e9a5..60807be0ae 100644 --- a/meta/recipes-devtools/ccache/ccache_3.6.bb +++ b/meta/recipes-devtools/ccache/ccache_3.6.bb | |||
| @@ -8,4 +8,5 @@ SRC_URI[sha256sum] = "a3f2b91a2353b65a863c5901251efe48060ecdebec46b5eaec8ea8e092 | |||
| 8 | 8 | ||
| 9 | SRC_URI += " \ | 9 | SRC_URI += " \ |
| 10 | file://0002-dev.mk.in-fix-file-name-too-long.patch \ | 10 | file://0002-dev.mk.in-fix-file-name-too-long.patch \ |
| 11 | file://0003-Fix-Segmentation-fault-error-when-gcc-o-dev-null.patch \ | ||
| 11 | " | 12 | " |
diff --git a/meta/recipes-devtools/ccache/files/0003-Fix-Segmentation-fault-error-when-gcc-o-dev-null.patch b/meta/recipes-devtools/ccache/files/0003-Fix-Segmentation-fault-error-when-gcc-o-dev-null.patch new file mode 100644 index 0000000000..b3012b7e89 --- /dev/null +++ b/meta/recipes-devtools/ccache/files/0003-Fix-Segmentation-fault-error-when-gcc-o-dev-null.patch | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | From c51b63758e95247e3c1e2f06e5f5bfb49849e66d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Robert Yang <liezhi.yang@windriver.com> | ||
| 3 | Date: Tue, 22 Jan 2019 16:30:52 +0800 | ||
| 4 | Subject: [PATCH] Fix Segmentation fault error when gcc -o /dev/null | ||
| 5 | |||
| 6 | Fixed: | ||
| 7 | $ export CCACHE_DEBUG=1 | ||
| 8 | $ ccache gcc -c hello.c -o /dev/null | ||
| 9 | |||
| 10 | Segmentation fault (core dumped) | ||
| 11 | |||
| 12 | This is because failed to open /dev/null.foo (Permission denied), check file | ||
| 13 | stream before write to it can fix the problem. | ||
| 14 | |||
| 15 | Upstream-Status: Backport [https://github.com/ccache/ccache/commit/4d86e884d07ba1853a0c70507cc4d04107f57c29] | ||
| 16 | |||
| 17 | Signed-off-by: Robert Yang <liezhi.yang@windriver.com> | ||
| 18 | --- | ||
| 19 | src/ccache.c | 15 ++++++++++++--- | ||
| 20 | src/util.c | 8 ++++++-- | ||
| 21 | 2 files changed, 18 insertions(+), 5 deletions(-) | ||
| 22 | |||
| 23 | diff --git a/src/ccache.c b/src/ccache.c | ||
| 24 | index b4cdb86..8c227df 100644 | ||
| 25 | --- a/src/ccache.c | ||
| 26 | +++ b/src/ccache.c | ||
| 27 | @@ -521,9 +521,13 @@ init_hash_debug(struct hash *hash, const char *obj_path, char type, | ||
| 28 | |||
| 29 | char *path = format("%s.ccache-input-%c", obj_path, type); | ||
| 30 | FILE *debug_binary_file = fopen(path, "wb"); | ||
| 31 | - hash_enable_debug(hash, section_name, debug_binary_file, debug_text_file); | ||
| 32 | + if (debug_binary_file) { | ||
| 33 | + hash_enable_debug(hash, section_name, debug_binary_file, debug_text_file); | ||
| 34 | + exitfn_add(fclose_exitfn, debug_binary_file); | ||
| 35 | + } else { | ||
| 36 | + cc_log("Failed to open %s: %s", path, strerror(errno)); | ||
| 37 | + } | ||
| 38 | free(path); | ||
| 39 | - exitfn_add(fclose_exitfn, debug_binary_file); | ||
| 40 | } | ||
| 41 | |||
| 42 | static enum guessed_compiler | ||
| 43 | @@ -3670,8 +3674,13 @@ ccache(int argc, char *argv[]) | ||
| 44 | if (conf->debug) { | ||
| 45 | char *path = format("%s.ccache-input-text", output_obj); | ||
| 46 | debug_text_file = fopen(path, "w"); | ||
| 47 | + if (debug_text_file) { | ||
| 48 | + exitfn_add(fclose_exitfn, debug_text_file); | ||
| 49 | + } | ||
| 50 | + else { | ||
| 51 | + cc_log("Failed to open %s: %s", path, strerror(errno)); | ||
| 52 | + } | ||
| 53 | free(path); | ||
| 54 | - exitfn_add(fclose_exitfn, debug_text_file); | ||
| 55 | } | ||
| 56 | |||
| 57 | struct hash *common_hash = hash_init(); | ||
| 58 | diff --git a/src/util.c b/src/util.c | ||
| 59 | index e442cc4..a49fb4c 100644 | ||
| 60 | --- a/src/util.c | ||
| 61 | +++ b/src/util.c | ||
| 62 | @@ -219,8 +219,12 @@ void | ||
| 63 | cc_dump_log_buffer(const char *path) | ||
| 64 | { | ||
| 65 | FILE *file = fopen(path, "w"); | ||
| 66 | - (void) fwrite(logbuffer, 1, logsize, file); | ||
| 67 | - fclose(file); | ||
| 68 | + if (file) { | ||
| 69 | + (void) fwrite(logbuffer, 1, logsize, file); | ||
| 70 | + fclose(file); | ||
| 71 | + } else { | ||
| 72 | + cc_log("Failed to open %s: %s", path, strerror(errno)); | ||
| 73 | + } | ||
| 74 | } | ||
| 75 | |||
| 76 | // Something went badly wrong! | ||
| 77 | -- | ||
| 78 | 2.7.4 | ||
| 79 | |||
