Failure after gdb-12-branchpoint-2943-g13917d936e3: Renaming .debug to .zdebug and vice versa: Results changed to -10 # true: 0 # build_abe binutils: 1 # build_abe stage1: 2 # build_abe linux: 3 # build_abe glibc: 4 # build_abe stage2: 5 # build_abe gdb: # FAILED # First few build errors in logs: # 00:02:36 ../bfd/bfd.h:7970:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:36 ../bfd/bfd.h:7983:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:36 make[1]: *** [Makefile:1899: bcache.o] Error 1 # 00:02:36 ../bfd/bfd.h:7970:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:36 ../bfd/bfd.h:7983:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:36 make[1]: *** [Makefile:1899: gdb.o] Error 1 # 00:02:37 ../bfd/bfd.h:7970:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:37 ../bfd/bfd.h:7983:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] # 00:02:37 make[1]: *** [Makefile:1899: async-event.o] Error 1 # 00:02:37 ../bfd/bfd.h:7970:30: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] from -10 # true: 0 # build_abe binutils: 1 # build_abe stage1: 2 # build_abe linux: 3 # build_abe glibc: 4 # build_abe stage2: 5 # build_abe gdb: 6 # build_abe qemu: 7 THIS IS THE END OF INTERESTING STUFF. BELOW ARE LINKS TO BUILDS, REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT. For latest status see comments in https://linaro.atlassian.net/browse/GNU-692 . Status of gdb-12-branchpoint-2943-g13917d936e3 commit for tcwg_gnu_cross_build: commit 13917d936e367b0c42d4c32566e1017ff8e15520 Author: Alan Modra Date: Sun Dec 4 12:29:19 2022 +1030 Renaming .debug to .zdebug and vice versa Move a couple of elf.c functions to compress.c. * compress.c (bfd_debug_name_to_zdebug): New inline function. (bfd_zdebug_name_to_debug): Likewise. * elf.c (convert_debug_to_zdebug, convert_zdebug_to_debug): Delete. (_bfd_elf_make_section_from_shdr, elf_fake_sections), (_bfd_elf_assign_file_positions_for_non_load): Adjust to suit. * coffgen.c (make_a_section_from_file): Use new inlines here. * master-arm ** Failure after gdb-12-branchpoint-2943-g13917d936e3: Renaming .debug to .zdebug and vice versa: ** https://ci.linaro.org/job/tcwg_gnu_cross_build-build-master-arm/1942/ Bad build: https://ci.linaro.org/job/tcwg_gnu_cross_build-build-master-arm/1942/artifact/artifacts Good build: https://ci.linaro.org/job/tcwg_gnu_cross_build-build-master-arm/1940/artifact/artifacts Reproduce current build: mkdir -p investigate-gdb-13917d936e367b0c42d4c32566e1017ff8e15520 cd investigate-gdb-13917d936e367b0c42d4c32566e1017ff8e15520 # Fetch scripts git clone https://git.linaro.org/toolchain/jenkins-scripts # Fetch manifests for bad and good builds mkdir -p bad/artifacts good/artifacts curl -o bad/artifacts/manifest.sh https://ci.linaro.org/job/tcwg_gnu_cross_build-build-master-arm/1942/artifact/artifacts/manifest.sh --fail curl -o good/artifacts/manifest.sh https://ci.linaro.org/job/tcwg_gnu_cross_build-build-master-arm/1940/artifact/artifacts/manifest.sh --fail # Reproduce bad build (cd bad; ../jenkins-scripts/tcwg_gnu-build.sh ^^ true %%rr[top_artifacts] artifacts) # Reproduce good build (cd good; ../jenkins-scripts/tcwg_gnu-build.sh ^^ true %%rr[top_artifacts] artifacts) Full commit (up to 1000 lines): commit 13917d936e367b0c42d4c32566e1017ff8e15520 Author: Alan Modra Date: Sun Dec 4 12:29:19 2022 +1030 Renaming .debug to .zdebug and vice versa Move a couple of elf.c functions to compress.c. * compress.c (bfd_debug_name_to_zdebug): New inline function. (bfd_zdebug_name_to_debug): Likewise. * elf.c (convert_debug_to_zdebug, convert_zdebug_to_debug): Delete. (_bfd_elf_make_section_from_shdr, elf_fake_sections), (_bfd_elf_assign_file_positions_for_non_load): Adjust to suit. * coffgen.c (make_a_section_from_file): Use new inlines here. --- bfd/bfd-in2.h | 25 +++++++++++++++++++++++++ bfd/coffgen.c | 23 ++++++----------------- bfd/compress.c | 29 +++++++++++++++++++++++++++++ bfd/elf.c | 34 ++++------------------------------ 4 files changed, 64 insertions(+), 47 deletions(-) diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 0b071dda1e5..48451175364 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -7963,6 +7963,31 @@ bfd_byte *bfd_simple_get_relocated_section_contents (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); /* Extracted from compress.c. */ +static inline char * +bfd_debug_name_to_zdebug (bfd *abfd, const char *name) +{ + size_t len = strlen (name); + char *new_name = bfd_alloc (abfd, len + 2); + if (new_name == NULL) + return NULL; + new_name[0] = '.'; + new_name[1] = 'z'; + memcpy (new_name + 2, name + 1, len); + return new_name; +} + +static inline char * +bfd_zdebug_name_to_debug (bfd *abfd, const char *name) +{ + size_t len = strlen (name); + char *new_name = bfd_alloc (abfd, len); + if (new_name == NULL) + return NULL; + new_name[0] = '.'; + memcpy (new_name + 1, name + 2, len - 1); + return new_name; +} + bool bfd_get_full_section_contents (bfd *abfd, asection *section, bfd_byte **ptr); diff --git a/bfd/coffgen.c b/bfd/coffgen.c index aab41c34ec7..f2c71b19880 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -181,19 +181,12 @@ make_a_section_from_file (bfd *abfd, abfd, name); return false; } - if (return_section->compress_status == COMPRESS_SECTION_DONE) + if (return_section->compress_status == COMPRESS_SECTION_DONE + && name[1] != 'z') { - if (name[1] != 'z') - { - unsigned int len = strlen (name); - - new_name = bfd_alloc (abfd, len + 2); - if (new_name == NULL) - return false; - new_name[0] = '.'; - new_name[1] = 'z'; - memcpy (new_name + 2, name + 1, len); - } + new_name = bfd_debug_name_to_zdebug (abfd, name); + if (new_name == NULL) + return false; } break; case decompress: @@ -207,13 +200,9 @@ make_a_section_from_file (bfd *abfd, } if (name[1] == 'z') { - unsigned int len = strlen (name); - - new_name = bfd_alloc (abfd, len); + new_name = bfd_zdebug_name_to_debug (abfd, name); if (new_name == NULL) return false; - new_name[0] = '.'; - memcpy (new_name + 1, name + 2, len - 1); } break; } diff --git a/bfd/compress.c b/bfd/compress.c index ad3feeafc6c..95579847cf3 100644 --- a/bfd/compress.c +++ b/bfd/compress.c @@ -30,6 +30,35 @@ #define MAX_COMPRESSION_HEADER_SIZE 24 +/* +CODE_FRAGMENT +.static inline char * +.bfd_debug_name_to_zdebug (bfd *abfd, const char *name) +.{ +. size_t len = strlen (name); +. char *new_name = bfd_alloc (abfd, len + 2); +. if (new_name == NULL) +. return NULL; +. new_name[0] = '.'; +. new_name[1] = 'z'; +. memcpy (new_name + 2, name + 1, len); +. return new_name; +.} +. +.static inline char * +.bfd_zdebug_name_to_debug (bfd *abfd, const char *name) +.{ +. size_t len = strlen (name); +. char *new_name = bfd_alloc (abfd, len); +. if (new_name == NULL) +. return NULL; +. new_name[0] = '.'; +. memcpy (new_name + 1, name + 2, len - 1); +. return new_name; +.} +. +*/ + static bool decompress_contents (bool is_zstd, bfd_byte *compressed_buffer, bfd_size_type compressed_size, diff --git a/bfd/elf.c b/bfd/elf.c index 87ec1623313..9e490c968c1 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -968,31 +968,6 @@ bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec) return NULL; } -static char * -convert_debug_to_zdebug (bfd *abfd, const char *name) -{ - unsigned int len = strlen (name); - char *new_name = bfd_alloc (abfd, len + 2); - if (new_name == NULL) - return NULL; - new_name[0] = '.'; - new_name[1] = 'z'; - memcpy (new_name + 2, name + 1, len); - return new_name; -} - -static char * -convert_zdebug_to_debug (bfd *abfd, const char *name) -{ - unsigned int len = strlen (name); - char *new_name = bfd_alloc (abfd, len); - if (new_name == NULL) - return NULL; - new_name[0] = '.'; - memcpy (new_name + 1, name + 2, len - 1); - return new_name; -} - /* This a copy of lto_section defined in GCC (lto-streamer.h). */ struct lto_section @@ -1285,7 +1260,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, /* Convert section name from .zdebug_* to .debug_* so that linker will consider this section as a debug section. */ - char *new_name = convert_zdebug_to_debug (abfd, name); + char *new_name = bfd_zdebug_name_to_debug (abfd, name); if (new_name == NULL) return false; bfd_rename_section (newsect, new_name); @@ -3233,7 +3208,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) needed. */ if (name[1] == 'z') { - char *new_name = convert_zdebug_to_debug (abfd, name); + char *new_name = bfd_zdebug_name_to_debug (abfd, name); if (new_name == NULL) { arg->failed = true; @@ -3249,7 +3224,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) section smaller. So only rename the section when compression has actually taken place. If input section name is .zdebug_*, we should never compress it again. */ - char *new_name = convert_debug_to_zdebug (abfd, name); + char *new_name = bfd_debug_name_to_zdebug (abfd, name); if (new_name == NULL) { arg->failed = true; @@ -6729,8 +6704,7 @@ _bfd_elf_assign_file_positions_for_non_load (bfd *abfd) { /* If section is compressed with zlib-gnu, convert section name from .debug_* to .zdebug_*. */ - char *new_name - = convert_debug_to_zdebug (abfd, name); + char *new_name = bfd_debug_name_to_zdebug (abfd, name); if (new_name == NULL) return false; name = new_name;