--build-id was introduced as "approximation of true uniqueness across all
binaries that might be used by overlapping sets of people". It does not require
the some resistance mentioned below. In practice, people just use --build-id=md5
for 16-byte build ID and --build-id=sha1 for 20-byte build ID.
BLAKE3 has 256-bit key length, which provides 128-bit security against
(second-)preimage, collision, and differentiability attacks. Its portable
implementation is fast. It additionally provides Arm Neon/AVX2/AVX-512. Just
implement --build-id={md5,sha1} with truncated BLAKE3.
Linking clang 14 RelWithDebInfo with --threads=8 on a Skylake CPU:
* 1.13x as fast with --build-id=md5
* 1.15x as fast with --build-id=sha1
--threads=4 on Apple m1:
* 1.25x as fast with --build-id=md5
* 1.17x as fast with --build-id=sha1
Reviewed By: ikudrin
Differential Revision: https://reviews.llvm.org/D121531
65 lines
1.7 KiB
ArmAsm
65 lines
1.7 KiB
ArmAsm
// Test that notes (both from object files and synthetic) are duplicated into
|
|
// each partition.
|
|
|
|
// REQUIRES: x86
|
|
|
|
// RUN: llvm-mc %s -o %t.o -filetype=obj --triple=x86_64-unknown-linux
|
|
// RUN: ld.lld %t.o -o %t --shared --gc-sections --build-id=sha1
|
|
|
|
// RUN: llvm-objcopy --extract-main-partition %t %t0
|
|
// RUN: llvm-objcopy --extract-partition=part1 %t %t1
|
|
|
|
// RUN: llvm-readobj --all %t0 | FileCheck %s
|
|
// RUN: llvm-readobj --all %t1 | FileCheck %s
|
|
|
|
// CHECK: Type: PT_NOTE
|
|
// CHECK-NEXT: Offset: 0x{{0*}}[[NOTE_OFFSET:[^ ]*]]
|
|
|
|
// CHECK: Notes [
|
|
// CHECK-NEXT: NoteSection {
|
|
// CHECK-NEXT: Name: .note.obj
|
|
// CHECK-NEXT: Offset: 0x{{0*}}[[NOTE_OFFSET]]
|
|
// CHECK-NEXT: Size:
|
|
// CHECK-NEXT: Note {
|
|
// CHECK-NEXT: Owner: foo
|
|
// CHECK-NEXT: Data size: 0x4
|
|
// CHECK-NEXT: Type: NT_VERSION (version)
|
|
// CHECK-NEXT: Description data (
|
|
// CHECK-NEXT: 0000: 62617200 |bar.|
|
|
// CHECK-NEXT: )
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: NoteSection {
|
|
// CHECK-NEXT: Name: .note.gnu.build-id
|
|
// CHECK-NEXT: Offset:
|
|
// CHECK-NEXT: Size:
|
|
// CHECK-NEXT: Note {
|
|
// CHECK-NEXT: Owner: GNU
|
|
// CHECK-NEXT: Data size:
|
|
// CHECK-NEXT: Type: NT_GNU_BUILD_ID (unique build ID bitstring)
|
|
// CHECK-NEXT: Build ID: ab81108a3d85b729980356331fddc2bfc4c10177{{$}}
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
|
|
.section .llvm_sympart,"",@llvm_sympart
|
|
.asciz "part1"
|
|
.quad p1
|
|
|
|
.section .data.p0,"aw",@progbits
|
|
.globl p0
|
|
p0:
|
|
|
|
.section .data.p1,"aw",@progbits
|
|
.globl p1
|
|
p1:
|
|
|
|
.section .note.obj,"a",@note
|
|
.align 4
|
|
.long 2f-1f
|
|
.long 3f-2f
|
|
.long 1
|
|
1: .asciz "foo"
|
|
2: .asciz "bar"
|
|
3:
|