Files
clang-p2996/lld/test/ELF/linkerscript/fill.test
George Rimar c44a23f8f4 [LLD][ELF] - Linkerscript: fix FILL() expressions handling.
D64130 introduced a bug described in the following message:
https://reviews.llvm.org/D64130#1571560

The problem can happen with the following script:

SECTIONS {
  .out : {
...
   FILL(0x10101010)
   *(.aaa)
...
}

The current code tries to read (0x10101010) as an expression and
does not break when meets *, what results in a script parsing error.

In this patch, I verify that FILL command's expression always wrapped in ().
And at the same time =<fillexp> expression can be both wrapped or unwrapped.
I checked it matches to bfd/gold.

Differential revision: https://reviews.llvm.org/D64476

llvm-svn: 365635
2019-07-10 14:36:48 +00:00

26 lines
627 B
Plaintext

# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/fill.s -o %t.o
# RUN: ld.lld -o %t --script %s %t.o
# RUN: llvm-objdump -s %t | FileCheck %s
SECTIONS {
.out : {
FILL(0x11111111)
. += 2;
FILL(0x10101010)
*(.aaa)
. += 4;
*(.bbb)
. += 4;
FILL(0x22220000 + 0x2222);
. += 4;
}
}
# CHECK: Contents of section .out:
# CHECK-NEXT: 2222aa22 222222bb 22222222 22222222
# RUN: echo 'SECTIONS { .out : { FILL 0x11111111 } }' > %t.script
# RUN: not ld.lld -o /dev/null --script %t.script 2>&1 | FileCheck %s --check-prefix=ERR
# ERR: ( expected, but got 0x11111111