mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-09 17:43:57 +00:00
[ELF] --warn-backrefs: use the same GroupId for object files in the same --{start,end}-lib
Reviewers: ruiu, espindola Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D45849 llvm-svn: 330443
This commit is contained in:
parent
6550c13912
commit
2416d7fcb2
@ -990,10 +990,19 @@ void LinkerDriver::createFiles(opt::InputArgList &Args) {
|
||||
++InputFile::NextGroupId;
|
||||
break;
|
||||
case OPT_start_lib:
|
||||
if (InLib)
|
||||
error("nested --start-lib");
|
||||
if (InputFile::IsInGroup)
|
||||
error("may not nest --start-lib in --start-group");
|
||||
InLib = true;
|
||||
InputFile::IsInGroup = true;
|
||||
break;
|
||||
case OPT_end_lib:
|
||||
if (!InLib)
|
||||
error("stray --end-lib");
|
||||
InLib = false;
|
||||
InputFile::IsInGroup = false;
|
||||
++InputFile::NextGroupId;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -113,9 +113,9 @@ public:
|
||||
bool JustSymbols = false;
|
||||
|
||||
// GroupId is used for --warn-backrefs which is an optional error
|
||||
// checking feature. All files within the same --{start,end}-group
|
||||
// get the same group ID. Otherwise, each file gets a new group
|
||||
// ID. For more info, see checkDependency() in SymbolTable.cpp.
|
||||
// checking feature. All files within the same --{start,end}-group or
|
||||
// --{start,end}-lib get the same group ID. Otherwise, each file gets a new
|
||||
// group ID. For more info, see checkDependency() in SymbolTable.cpp.
|
||||
uint32_t GroupId;
|
||||
static bool IsInGroup;
|
||||
static uint32_t NextGroupId;
|
||||
|
@ -21,5 +21,14 @@
|
||||
// TEST3-NOT: Name: bar
|
||||
// TEST3-NOT: Name: foo
|
||||
|
||||
// RUN: not ld.lld %t1.o --start-lib --start-lib 2>&1 | FileCheck -check-prefix=NESTED-LIB %s
|
||||
// NESTED-LIB: nested --start-lib
|
||||
|
||||
// RUN: not ld.lld %t1.o --start-group --start-lib 2>&1 | FileCheck -check-prefix=LIB-IN-GROUP %s
|
||||
// LIB-IN-GROUP: may not nest --start-lib in --start-group
|
||||
|
||||
// RUN: not ld.lld --end-lib 2>&1 | FileCheck -check-prefix=END %s
|
||||
// END: stray --end-lib
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
|
@ -35,6 +35,10 @@
|
||||
# RUN: not ld.lld --fatal-warnings --end-group 2>&1 | FileCheck -check-prefix=END %s
|
||||
# END: stray --end-group
|
||||
|
||||
# RUN: echo ".globl bar; bar:" | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %t3.o
|
||||
# RUN: echo ".globl foo; foo: call bar" | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %t4.o
|
||||
# RUN: ld.lld --fatal-warnings --warn-backrefs %t1.o --start-lib %t3.o %t4.o --end-lib
|
||||
|
||||
.globl _start, foo
|
||||
_start:
|
||||
call foo
|
||||
|
Loading…
Reference in New Issue
Block a user