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
26 lines
627 B
Plaintext
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
|