diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2018-02-01 13:21:41 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-02-01 13:21:41 +0000 |
commit | e99955cd8eca9ac8eff828e8c7b676955fd46e04 (patch) | |
tree | f602445e212781e97954fef0de22e366eabea098 /bfd | |
parent | f2023ce7e8d70b0155cc6206c901e185260918f0 (diff) | |
download | gdb-e99955cd8eca9ac8eff828e8c7b676955fd46e04.zip gdb-e99955cd8eca9ac8eff828e8c7b676955fd46e04.tar.gz gdb-e99955cd8eca9ac8eff828e8c7b676955fd46e04.tar.bz2 |
Fix compile time warnings building the binutils with clang.
bfdI would like to fix instances of the following warning, when building
with clang with no special CFLAGS other than -g3 -O0.
/home/emaisin/src/binutils-gdb/bfd/elflink.c:5425:45: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
return (struct elf_link_hash_entry *) 0 - 1;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
Replacing those with "(struct elf_link_hash_entry *) -1" gets rid of the
warning. I wanted to check that it didn't change the resulting code, so
I tried to build this:
$ cat test.c
int *before()
{
return (int *) 0 - 1;
}
int *after()
{
return (int *) - 1;
}
$ gcc -c test.c -g
$ objdump -d test.o
test.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <before>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 c7 c0 fc ff ff ff mov $0xfffffffffffffffc,%rax
b: 5d pop %rbp
c: c3 retq
000000000000000d <after>:
d: 55 push %rbp
e: 48 89 e5 mov %rsp,%rbp
11: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax
18: 5d pop %rbp
19: c3 retq
This shows that the previous code doesn't actually return -1 as the
function documentation says, but the new one does, so it's kind of a
bugfix.
bfd * elf64-ppc.c (ppc64_elf_archive_symbol_lookup): Avoid pointer
arithmetic on NULL pointer.
* elflink.c (_bfd_elf_archive_symbol_lookup,
elf_link_add_archive_symbols): Likewise.
ld * ldexp.c (fold_name, exp_fold_tree_1): Avoid pointer arithmetic
on NULL pointer.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 2 | ||||
-rw-r--r-- | bfd/elflink.c | 4 |
3 files changed, 10 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e71a53a..664a974 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2018-02-01 Simon Marchi <simon.marchi@ericsson.com> + + * elf64-ppc.c (ppc64_elf_archive_symbol_lookup): Avoid pointer + arithmetic on NULL pointer. + * elflink.c (_bfd_elf_archive_symbol_lookup, + elf_link_add_archive_symbols): Likewise. + 2018-01-31 Michael Matz <matz@suse.de> * elflink.c (bfd_elf_define_start_stop): Fix check of diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 5cbb035..9e4a4b5 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -5051,7 +5051,7 @@ ppc64_elf_archive_symbol_lookup (bfd *abfd, len = strlen (name); dot_name = bfd_alloc (abfd, len + 2); if (dot_name == NULL) - return (struct elf_link_hash_entry *) 0 - 1; + return (struct elf_link_hash_entry *) -1; dot_name[0] = '.'; memcpy (dot_name + 1, name, len + 1); h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name); diff --git a/bfd/elflink.c b/bfd/elflink.c index 3fe4555..d1eb820 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -5422,7 +5422,7 @@ _bfd_elf_archive_symbol_lookup (bfd *abfd, len = strlen (name); copy = (char *) bfd_alloc (abfd, len); if (copy == NULL) - return (struct elf_link_hash_entry *) 0 - 1; + return (struct elf_link_hash_entry *) -1; first = p - name + 1; memcpy (copy, name, first); @@ -5520,7 +5520,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) } h = archive_symbol_lookup (abfd, info, symdef->name); - if (h == (struct elf_link_hash_entry *) 0 - 1) + if (h == (struct elf_link_hash_entry *) -1) goto error_return; if (h == NULL) |