https://sourceware.org/bugzilla/show_bug.cgi?id=32311
Bug ID: 32311
Summary: elf_compress_gnu.c: gcc warns null-dereference with
lto
Product: elfutils
Version: unspecified
Status: UNCONFIRMED
Severity: minor
Priority: P2
Component: libelf
Assignee: unassigned at sourceware dot org
Reporter: the.ra2.ifv at gmail dot com
CC: elfutils-devel at sourceware dot org
Target Milestone: ---
Created attachment 15764
--> https://sourceware.org/bugzilla/attachment.cgi?id=15764&action=edit
full log when building elfutils in openwrt
elfutils: 0.191
When compiling elfutils in OpenWRT, gcc warn potential null pointer dereference
with lto enabled. If I disable it or use `-Wno-null-dereference` then the build
would pass with no problems.
```
ccache aarch64-openwrt-linux-musl-gcc -std=gnu99 -Wall -Wshadow -Wformat=2
-Wold-style-definition -Wstrict-prototypes -Wtrampolines -Wlogical-op
-Wduplicated-co
nd -Wnull-dereference -Wimplicit-fallthrough=5 -Wuse-after-free=3 -Werror
-Wunused -Wextra -Wstack-usage=262144-fno-caller-saves -fno-plt -pipe
-Ofast -fhon
our-copts
-fmacro-prefix-map=/openwrt/build_dir/target-aarch64_generic_musl/elfutils-0.191=elfutils-0.191
-ffunction-sections -fdata-sections -flto=auto -fno-fa
t-lto-objects -Wformat -Werror=format-security -fstack-protector
-D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -D_GNU_SOURCE -Wno-unused-result
-Wno-format-nonl
iteral -Wno-error=use-after-free
-L/openwrt/staging_dir/toolchain-aarch64_generic_gcc-14.2.0_musl/usr/lib
-L/openwrt/staging_dir/toolchain-aarch64_generic_gcc
-14.2.0_musl/lib -fuse-ld=mold -Wl,--gc-sections -flto=auto -fuse-linker-plugin
-znow -zrelro-Wl,--build-id -o libelf.so -shared -Wl,-z,defs -Wl,-z,relro
-o
libelf.so \
-Wl,--soname,libelf.so.1 \
-Wl,--version-script,libelf.map \
-Wl,--no-undefined \
-Wl,--whole-archive libelf_pic.a -Wl,--no-whole-archive \
../lib/libeu.a -lz
elf_compress.c: In function 'elf_compress':
elf_compress.c:675:26: error: potential null pointer dereference
[-Werror=null-dereference]
675 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:675:15: error: potential null pointer dereference
[-Werror=null-dereference]
675 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:674:30: error: potential null pointer dereference
[-Werror=null-dereference]
674 | shdr->sh_addralign = __libelf_type_align (ELFCLASS32,
ELF_T_CHDR);
| ^
elf_compress.c:673:25: error: potential null pointer dereference
[-Werror=null-dereference]
673 | shdr->sh_size = new_size;
| ^
elf_compress.c:675:26: error: potential null pointer dereference
[-Werror=null-dereference]
675 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:675:15: error: potential null pointer dereference
[-Werror=null-dereference]
675 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:674:30: error: potential null pointer dereference
[-Werror=null-dereference]
674 | shdr->sh_addralign = __libelf_type_align (ELFCLASS32,
ELF_T_CHDR);
| ^
elf_compress.c:673:25: error: potential null pointer dereference
[-Werror=null-dereference]
673 | shdr->sh_size = new_size;
| ^
elf_compress.c:682:26: error: potential null pointer dereference
[-Werror=null-dereference]
682 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:682:15: error: potential null pointer dereference
[-Werror=null-dereference]
682 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:681:30: error: potential null pointer dereference
[-Werror=null-dereference]
681 | shdr->sh_addralign = __libelf_type_align (ELFCLASS64,
ELF_T_CHDR);
| ^
elf_compress.c:680:25: error: potential null pointer dereference
[-Werror=null-dereference]
680 | shdr->sh_size = new_size;
| ^
elf_compress.c:682:26: error: potential null pointer dereference
[-Werror=null-dereference]
682 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:682:15: error: potential null pointer dereference
[-Werror=null-dereference]
682 | shdr->sh_flags |= SHF_COMPRESSED;
| ^
elf_compress.c:681:30: error: potential null pointer dereference
[-Werror=null-dereference]
681 | shdr->sh_addralign = __libelf_type_align (ELFCLASS64,
ELF_T_CHDR);
| ^
elf_compress.c:680:25: error: potential null pointer dereference
[-Werror=null-dereference]
680 | shdr->sh_size = new_si