x86: Properly merge -z ibt and -z shstk
Merge -z ibt and -z shstk only with GNU_PROPERTY_X86_FEATURE_1_AND, not any GNU_PROPERTY_X86_UINT32_AND_XXX properties. bfd/ PR ld/26711 * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Merge -z ibt and -z shstk only with GNU_PROPERTY_X86_FEATURE_1_AND. ld/ PR ld/26711 * testsuite/ld-i386/i386.exp: Run ld/26711 tests. * testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-i386/pr26711-1.d: Likewise. * testsuite/ld-i386/pr26711-2.d: Likewise. * testsuite/ld-i386/pr26711-3.d: Likewise. * testsuite/ld-x86-64/pr26711-1-x32.d: Likewise. * testsuite/ld-x86-64/pr26711-1.d: Likewise. * testsuite/ld-x86-64/pr26711-2-x32.d: Likewise. * testsuite/ld-x86-64/pr26711-2.d: Likewise. * testsuite/ld-x86-64/pr26711-3-x32.d: Likewise. * testsuite/ld-x86-64/pr26711-3.d: Likewise. * testsuite/ld-x86-64/pr26711.s: Likewise.
This commit is contained in:
parent
981b570a53
commit
574df58f52
15 changed files with 173 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26711
|
||||
* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Merge -z ibt
|
||||
and -z shstk only with GNU_PROPERTY_X86_FEATURE_1_AND.
|
||||
|
||||
2020-10-06 Brandon Bergren <bdragon@FreeBSD.org>
|
||||
|
||||
* config.bfd: Add powerpc64le-*-freebsd*.
|
||||
|
|
|
@ -2417,15 +2417,19 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
|||
abort ();
|
||||
if (aprop != NULL && bprop != NULL)
|
||||
{
|
||||
features = 0;
|
||||
if (htab->params->ibt)
|
||||
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
|
||||
if (htab->params->shstk)
|
||||
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
|
||||
number = aprop->u.number;
|
||||
/* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
aprop->u.number = (number & bprop->u.number) | features;
|
||||
aprop->u.number = number & bprop->u.number;
|
||||
if (pr_type == GNU_PROPERTY_X86_FEATURE_1_AND)
|
||||
{
|
||||
features = 0;
|
||||
if (htab->params->ibt)
|
||||
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
|
||||
if (htab->params->shstk)
|
||||
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
|
||||
/* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
aprop->u.number |= features;
|
||||
}
|
||||
updated = number != (unsigned int) aprop->u.number;
|
||||
/* Remove the property if all feature bits are cleared. */
|
||||
if (aprop->u.number == 0)
|
||||
|
@ -2437,10 +2441,13 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
|||
have them. Set IBT and SHSTK properties for -z ibt and -z
|
||||
shstk if needed. */
|
||||
features = 0;
|
||||
if (htab->params->ibt)
|
||||
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
|
||||
if (htab->params->shstk)
|
||||
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
|
||||
if (pr_type == GNU_PROPERTY_X86_FEATURE_1_AND)
|
||||
{
|
||||
if (htab->params->ibt)
|
||||
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
|
||||
if (htab->params->shstk)
|
||||
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
|
||||
}
|
||||
if (features)
|
||||
{
|
||||
if (aprop != NULL)
|
||||
|
|
16
ld/ChangeLog
16
ld/ChangeLog
|
@ -1,3 +1,19 @@
|
|||
2020-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26711
|
||||
* testsuite/ld-i386/i386.exp: Run ld/26711 tests.
|
||||
* testsuite/ld-x86-64/x86-64.exp: Likewise.
|
||||
* testsuite/ld-i386/pr26711-1.d: Likewise.
|
||||
* testsuite/ld-i386/pr26711-2.d: Likewise.
|
||||
* testsuite/ld-i386/pr26711-3.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-1-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-1.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-2-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-2.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-3-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711-3.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr26711.s: Likewise.
|
||||
|
||||
2020-10-06 Brandon Bergren <bdragon@FreeBSD.org>
|
||||
|
||||
* Makefile.am (ALL_64_EMULATION_SOURCES): Add eelf64lppc_fbsd.c.
|
||||
|
|
|
@ -472,6 +472,9 @@ run_dump_test "pr24322b"
|
|||
run_dump_test "align-branch-1"
|
||||
run_dump_test "pr26018"
|
||||
run_dump_test "pr26263"
|
||||
run_dump_test "pr26711-1"
|
||||
run_dump_test "pr26711-2"
|
||||
run_dump_test "pr26711-3"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
|
|
10
ld/testsuite/ld-i386/pr26711-1.d
Normal file
10
ld/testsuite/ld-i386/pr26711-1.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: ../ld-x86-64/pr26711.s
|
||||
#source: ../ld-x86-64/start.s
|
||||
#as: --32 -mx86-used-note=no
|
||||
#ld: -m elf_i386 -z ibt
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT
|
10
ld/testsuite/ld-i386/pr26711-2.d
Normal file
10
ld/testsuite/ld-i386/pr26711-2.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: ../ld-x86-64/pr26711.s
|
||||
#source: ../ld-x86-64/start.s
|
||||
#as: --32 -mx86-used-note=no
|
||||
#ld: -m elf_i386 -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: SHSTK
|
10
ld/testsuite/ld-i386/pr26711-3.d
Normal file
10
ld/testsuite/ld-i386/pr26711-3.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: ../ld-x86-64/pr26711.s
|
||||
#source: ../ld-x86-64/start.s
|
||||
#as: --32 -mx86-used-note=no
|
||||
#ld: -m elf_i386 -z ibt -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT, SHSTK
|
10
ld/testsuite/ld-x86-64/pr26711-1-x32.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-1-x32.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --x32 -mx86-used-note=no
|
||||
#ld: -m elf32_x86_64 -z ibt
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT
|
10
ld/testsuite/ld-x86-64/pr26711-1.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-1.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --64 -defsym __64_bit__=1 -mx86-used-note=no
|
||||
#ld: -m elf_x86_64 -z ibt
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT
|
10
ld/testsuite/ld-x86-64/pr26711-2-x32.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-2-x32.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --x32 -mx86-used-note=no
|
||||
#ld: -m elf32_x86_64 -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: SHSTK
|
10
ld/testsuite/ld-x86-64/pr26711-2.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-2.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --64 -defsym __64_bit__=1 -mx86-used-note=no
|
||||
#ld: -m elf_x86_64 -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: SHSTK
|
10
ld/testsuite/ld-x86-64/pr26711-3-x32.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-3-x32.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --x32 -mx86-used-note=no
|
||||
#ld: -m elf32_x86_64 -z ibt -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT, SHSTK
|
10
ld/testsuite/ld-x86-64/pr26711-3.d
Normal file
10
ld/testsuite/ld-x86-64/pr26711-3.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#source: pr26711.s
|
||||
#source: start.s
|
||||
#as: --64 -defsym __64_bit__=1 -mx86-used-note=no
|
||||
#ld: -m elf_x86_64 -z ibt -z shstk
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
[ ]+Owner[ ]+Data size[ ]+Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 feature: IBT, SHSTK
|
33
ld/testsuite/ld-x86-64/pr26711.s
Normal file
33
ld/testsuite/ld-x86-64/pr26711.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
.section ".note.gnu.property", "a"
|
||||
.ifdef __64_bit__
|
||||
.p2align 3
|
||||
.else
|
||||
.p2align 2
|
||||
.endif
|
||||
.long 1f - 0f /* name length */
|
||||
.long 5f - 2f /* data length */
|
||||
.long 5 /* note type */
|
||||
0: .asciz "GNU" /* vendor name */
|
||||
1:
|
||||
.ifdef __64_bit__
|
||||
.p2align 3
|
||||
.else
|
||||
.p2align 2
|
||||
.endif
|
||||
2: .long 0xc0001002 /* pr_type. */
|
||||
.long 4f - 3f /* pr_datasz. */
|
||||
3:
|
||||
.long 0x30
|
||||
4:
|
||||
.ifdef __64_bit__
|
||||
.p2align 3
|
||||
.else
|
||||
.p2align 2
|
||||
.endif
|
||||
5:
|
||||
|
||||
.text
|
||||
.globl foo
|
||||
.type foo, @function
|
||||
foo:
|
||||
ret
|
|
@ -432,6 +432,12 @@ run_dump_test "pr25416-3"
|
|||
run_dump_test "pr25416-4"
|
||||
run_dump_test "pr26018"
|
||||
run_dump_test "pr26263"
|
||||
run_dump_test "pr26711-1"
|
||||
run_dump_test "pr26711-1-x32"
|
||||
run_dump_test "pr26711-2"
|
||||
run_dump_test "pr26711-2-x32"
|
||||
run_dump_test "pr26711-3"
|
||||
run_dump_test "pr26711-3-x32"
|
||||
|
||||
if ![istarget "x86_64-*-linux*"] {
|
||||
return
|
||||
|
|
Loading…
Add table
Reference in a new issue