-
Notifications
You must be signed in to change notification settings - Fork 11.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[WebAssembly][MC] Simplify WasmObjectWriter::recordRelocation. NFC.
WebAssembly doesn't support PC relative relocation or relocation expressions that can't be reduced to single symbol. The only support for we have for fixups involving two symbols are when both symbols are defined and withing the same section. In this case evaluateFixup will already have evaluated to the expression before calling recordRelocation. llvm-svn: 369317
- Loading branch information
Showing
2 changed files
with
47 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// RUN: not llvm-mc -filetype=obj -triple wasm32 %s -o /dev/null 2>&1 | FileCheck %s | ||
|
||
.section .data.foo,"",@ | ||
foo: | ||
.int8 1 | ||
.size foo, 1 | ||
foo_other: | ||
.int8 1 | ||
.size foo_other, 1 | ||
|
||
.section .data.bar,"",@ | ||
bar: | ||
.int8 1 | ||
.size bar, 1 | ||
|
||
.text | ||
.section .text.main,"",@ | ||
main: | ||
.functype main () -> (i32) | ||
// Expressions involving symbols within the same sections can be evaluated | ||
// prior to writing the object file. | ||
// CHECK-NOT: foo | ||
i32.const foo-foo_other+2 | ||
i32.const foo_other-foo-10 | ||
|
||
// CHECK: 'bar': unsupported subtraction expression used in relocation | ||
i32.const foo-bar | ||
// CHECK: 'undef_baz': unsupported subtraction expression used in relocation | ||
i32.const foo-undef_baz | ||
// CHECK: 'foo': unsupported subtraction expression used in relocation | ||
i32.const undef_baz-foo | ||
end_function |