forked from OSchip/llvm-project
[ELF2] Correctly set bits when -z now is specified.
The option now just sets NOW bit in DT_FLAGS_1 but some loaders seem to require also BIND_NOW bit to be set in DT_FLAGS. This is, also, what ld.bfd and gold do. Differential Revision: http://reviews.llvm.org/D13883 llvm-svn: 250799
This commit is contained in:
parent
d717cc9f71
commit
06edc7c0aa
|
@ -294,7 +294,7 @@ template <class ELFT> void DynamicSection<ELFT>::finalize() {
|
|||
++NumEntries; // DT_INIT
|
||||
if (FiniSym)
|
||||
++NumEntries; // DT_FINI
|
||||
if (Config->Bsymbolic)
|
||||
if (Config->Bsymbolic || Config->ZNow)
|
||||
++NumEntries; // DT_FLAGS
|
||||
if (Config->ZNodelete || Config->ZNow)
|
||||
++NumEntries; // DT_FLAGS_1
|
||||
|
@ -371,6 +371,8 @@ template <class ELFT> void DynamicSection<ELFT>::writeTo(uint8_t *Buf) {
|
|||
uint32_t Flags = 0;
|
||||
if (Config->Bsymbolic)
|
||||
Flags |= DF_SYMBOLIC;
|
||||
if (Config->ZNow)
|
||||
Flags |= DF_BIND_NOW;
|
||||
if (Flags)
|
||||
WriteVal(DT_FLAGS, Flags);
|
||||
Flags = 0;
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
# RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
|
||||
|
||||
# FLAGS: DynamicSection [
|
||||
# FLAGS: 0x000000000000001E FLAGS SYMBOLIC
|
||||
# FLAGS: 0x000000000000001E FLAGS SYMBOLIC BIND_NOW
|
||||
# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE
|
||||
# FLAGS: ]
|
||||
|
||||
# CHECK: DynamicSection [
|
||||
# CHECK-NOT: 0x000000000000001E FLAGS SYMBOLIC
|
||||
# CHECK-NOT: 0x000000000000001E FLAGS SYMBOLIC BIND_NOW
|
||||
# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE
|
||||
# CHECK: ]
|
||||
|
||||
|
|
Loading…
Reference in New Issue