2016-04-30 01:46:07 +08:00
|
|
|
// REQUIRES: x86
|
|
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
|
|
|
// RUN: llvm-readobj --dyn-symbols %p/Inputs/version-undef-sym.so | FileCheck %s
|
|
|
|
|
|
|
|
|
2016-04-30 07:35:49 +08:00
|
|
|
// Inputs/version-undef-sym.so consists of the assembly file
|
|
|
|
//
|
|
|
|
// .global bar
|
|
|
|
// bar:
|
|
|
|
// .weak abc1
|
|
|
|
// .weak abc2
|
|
|
|
// .weak abc3
|
|
|
|
// .weak abc4
|
|
|
|
// .weak abc5
|
|
|
|
//
|
|
|
|
// linked into a shared library with the version script
|
|
|
|
//
|
|
|
|
// VER_1 {
|
|
|
|
// global:
|
|
|
|
// bar;
|
|
|
|
// };
|
|
|
|
//
|
|
|
|
// Assuming we can reproduce the desired property (a few undefined symbols
|
|
|
|
// before bar) we should create it with lld itself once it supports that.
|
|
|
|
|
|
|
|
|
2016-04-30 01:46:07 +08:00
|
|
|
// Show that the input .so has undefined symbols before bar. That is what would
|
|
|
|
// get our version parsing out of sync.
|
|
|
|
|
|
|
|
// CHECK: Section: Undefined
|
|
|
|
// CHECK: Section: Undefined
|
|
|
|
// CHECK: Section: Undefined
|
|
|
|
// CHECK: Section: Undefined
|
|
|
|
// CHECK: Section: Undefined
|
|
|
|
// CHECK: Name: bar
|
|
|
|
|
|
|
|
// But now we can successfully find bar.
|
2018-07-03 01:48:23 +08:00
|
|
|
// RUN: ld.lld %t.o %p/Inputs/version-undef-sym.so -o /dev/null
|
2016-04-30 01:46:07 +08:00
|
|
|
|
|
|
|
.global _start
|
|
|
|
_start:
|
|
|
|
call bar@plt
|