-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ELF: Do not use -1 to mark pieces of merge sections as being tail mer…
…ged. We were previously using an output offset of -1 for both GC'd and tail merged pieces. We need to distinguish these two cases in order to filter GC'd symbols from the symbol table -- we were previously asserting when we asked for the VA of a symbol pointing into a dead piece, which would end up asking the tail merging string table for an offset even though we hadn't initialized it properly. This patch fixes the bug by using an offset of -1 to exclusively mean GC'd pieces, using 0 for tail merges, and distinguishing the tail merge case from an offset of 0 by asking the output section whether it is tail merge. Differential Revision: http://reviews.llvm.org/D19953 llvm-svn: 268604
- Loading branch information
Showing
7 changed files
with
85 additions
and
11 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
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
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
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,54 @@ | ||
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o | ||
// RUN: ld.lld %t.o -o %t --gc-sections | ||
// RUN: llvm-readobj -symbols %t | FileCheck %s | ||
|
||
// CHECK: Symbols [ | ||
// CHECK-NEXT: Symbol { | ||
// CHECK-NEXT: Name: (0) | ||
// CHECK-NEXT: Value: 0x0 | ||
// CHECK-NEXT: Size: 0 | ||
// CHECK-NEXT: Binding: Local (0x0) | ||
// CHECK-NEXT: Type: None (0x0) | ||
// CHECK-NEXT: Other: 0 | ||
// CHECK-NEXT: Section: Undefined (0x0) | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: Symbol { | ||
// CHECK-NEXT: Name: s1 (8) | ||
// CHECK-NEXT: Value: 0x10120 | ||
// CHECK-NEXT: Size: 0 | ||
// CHECK-NEXT: Binding: Local (0x0) | ||
// CHECK-NEXT: Type: Object (0x1) | ||
// CHECK-NEXT: Other [ (0x2) | ||
// CHECK-NEXT: STV_HIDDEN (0x2) | ||
// CHECK-NEXT: ] | ||
// CHECK-NEXT: Section: .rodata (0x1) | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: Symbol { | ||
// CHECK-NEXT: Name: _start (1) | ||
// CHECK-NEXT: Value: 0x11000 | ||
// CHECK-NEXT: Size: 0 | ||
// CHECK-NEXT: Binding: Global (0x1) | ||
// CHECK-NEXT: Type: Function (0x2) | ||
// CHECK-NEXT: Other: 0 | ||
// CHECK-NEXT: Section: .text (0x2) | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: ] | ||
|
||
.text | ||
.globl _start | ||
.type _start,@function | ||
_start: | ||
movl $s1, %eax | ||
|
||
.hidden s1 | ||
.type s1,@object | ||
.section .rodata.str1.1,"aMS",@progbits,1 | ||
.globl s1 | ||
s1: | ||
.asciz "abcd" | ||
|
||
.hidden s2 | ||
.type s2,@object | ||
.globl s2 | ||
s2: | ||
.asciz "efgh" |