Skip to content

Commit

Permalink
merge bitcoin#25357: drop -z,noexecstack for PPC64
Browse files Browse the repository at this point in the history
  • Loading branch information
kwvg committed Jun 20, 2023
1 parent a95d9db commit 13fed24
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
4 changes: 0 additions & 4 deletions contrib/guix/libexec/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,6 @@ case "$HOST" in
*powerpc64*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,--no-tls-get-addr-optimize" ;;
esac

case "$HOST" in
powerpc64-linux-*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,-z,noexecstack" ;;
esac

# Make $HOST-specific native binaries from depends available in $PATH
export PATH="${BASEPREFIX}/${HOST}/native/bin:${PATH}"
mkdir -p "$DISTSRC"
Expand Down
10 changes: 7 additions & 3 deletions contrib/guix/manifest.scm
Original file line number Diff line number Diff line change
Expand Up @@ -548,10 +548,14 @@ inspecting signatures in Mach-O binaries.")
"glibc-2.27-dont-redefine-nss-database.patch"
"glibc-2.27-guix-prefix.patch"))))))

(define (fix-ppc64-nx-default lief)
(package-with-extra-patches lief
(search-our-patches "lief-fix-ppc64-nx-default.patch")))

(define-public lief
(package
(name "python-lief")
(version "0.12.0")
(version "0.12.1")
(source
(origin
(method git-fetch)
Expand All @@ -561,7 +565,7 @@ inspecting signatures in Mach-O binaries.")
(file-name (git-file-name name version))
(sha256
(base32
"026jchj56q25v6gc0754dj9cj5hz5zaza8ij93y5ga94w20kzm9q"))))
"1xzbh3bxy4rw1yamnx68da1v5s56ay4g081cyamv67256g0qy2i1"))))
(build-system python-build-system)
(arguments
`(#:phases
Expand Down Expand Up @@ -616,7 +620,7 @@ parse, modify and abstract ELF, PE and MachO formats.")
;; Git
git
;; Tests
lief)
(fix-ppc64-nx-default lief))
(let ((target (getenv "HOST")))
(cond ((string-suffix? "-mingw32" target)
;; Windows
Expand Down
29 changes: 29 additions & 0 deletions contrib/guix/patches/lief-fix-ppc64-nx-default.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Correct default for Binary::has_nx on ppc64

From the Linux kernel source:

* This is the default if a program doesn't have a PT_GNU_STACK
* program header entry. The PPC64 ELF ABI has a non executable stack
* stack by default, so in the absence of a PT_GNU_STACK program header
* we turn execute permission off.

This patch can be dropped the next time we update LIEF.

diff --git a/src/ELF/Binary.cpp b/src/ELF/Binary.cpp
index a90be1ab..fd2d9764 100644
--- a/src/ELF/Binary.cpp
+++ b/src/ELF/Binary.cpp
@@ -1084,7 +1084,12 @@ bool Binary::has_nx() const {
return segment->type() == SEGMENT_TYPES::PT_GNU_STACK;
});
if (it_stack == std::end(segments_)) {
- return false;
+ if (header().machine_type() == ARCH::EM_PPC64) {
+ // The PPC64 ELF ABI has a non-executable stack by default.
+ return true;
+ } else {
+ return false;
+ }
}

return !(*it_stack)->has(ELF_SEGMENT_FLAGS::PF_X);

0 comments on commit 13fed24

Please sign in to comment.