[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#886638: gcc-aarch64-linux-gnu: wrong symbol address



Package: gcc-aarch64-linux-gnu
Version: 4:7.2.0-1d1
Severity: important

Dear Maintainer,

I have a bug with some relocation symbols with the current version of gcc-aarch64-linux-gnu (gcc6 was fine).
FYI, the gcc-linaro-7.2.1-2017.11 toolchain does not have this issue.

Thank you!

Test case:
``` test.c
struct ld_symbol;
extern struct ld_symbol _test_start, _test_end;

unsigned long long test(void)
{
    unsigned long long test_start = (unsigned long long)&_test_start;
    unsigned long long test_end = (unsigned long long)&_test_end;
    return test_end - test_start;
}
```

``` script.ld
OUTPUT_ARCH(aarch64)
OUTPUT_FORMAT(elf64-littleaarch64)
SECTIONS
{
    _test_start = .;
    .text :
    {
        *(.text)
    }
    _test_end = .;
    . += 0xFFFF0000;
}
```

Compile with:
```
aarch64-linux-gnu-gcc -O1 -c test.c -o test.o
aarch64-linux-gnu-objdump -ld test.o
aarch64-linux-gnu-ld -o test.elf -nostdlib --script script.ld --entry test test.o
aarch64-linux-gnu-objdump -ld test.elf
```

Bad (current):
```
test.o:
test():
   0: 90000001 adrp x1, 0 <_test_end>
   4: f9400021 ldr x1, [x1]
   8: 90000000 adrp x0, 0 <_test_start>
   c: f9400000 ldr x0, [x0]
  10: cb000020 sub x0, x1, x0
  14: d65f03c0 ret

test.elf:
test():
   0: 907fff81 adrp x1, ffff0000 <_test_end+0xfffeffe8>
   4: f9401421 ldr x1, [x1, #40]
   8: 907fff80 adrp x0, ffff0000 <_test_end+0xfffeffe8>
   c: f9401000 ldr x0, [x0, #32]
  10: cb000020 sub x0, x1, x0
  14: d65f03c0 ret
```

Good:
```
test():
   0: 90000001 adrp x1, 0 <_test_end>
   4: 91000021 add x1, x1, #0x0
   8: 90000000 adrp x0, 0 <_test_start>
   c: 91000000 add x0, x0, #0x0
  10: cb000020 sub x0, x1, x0
  14: d65f03c0 ret
```

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)$
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages gcc-aarch64-linux-gnu depends on:
ii  cpp-aarch64-linux-gnu    4:7.2.0-1d1
ii  gcc-7-aarch64-linux-gnu  7.2.0-11cross1

Versions of packages gcc-aarch64-linux-gnu recommends:
ii  libc6-dev-arm64-cross [libc-dev-arm64-cross]  2.25-3cross1

Versions of packages gcc-aarch64-linux-gnu suggests:
ii  autoconf               2.69-11
ii  automake               1:1.15.1-3
pn  bison                  <none>
pn  flex                   <none>
pn  gcc-doc                <none>
pn  gdb-aarch64-linux-gnu  <none>
ii  libtool                2.4.6-2
ii  make                   4.1-9.1
ii  manpages-dev           4.14-1

-- no debconf information


Reply to: