merge bitcoin#25357: drop -z,noexecstack for PPC64

This commit is contained in:
Kittywhiskers Van Gogh 2023-06-21 05:22:37 +00:00 committed by PastaPastaPasta
parent 6243a71267
commit 0a7b8bda4f
7 changed files with 40 additions and 11 deletions

View File

@ -37,7 +37,7 @@ RUN pip3 install \
codespell==1.17.1 \ codespell==1.17.1 \
flake8==3.8.3 \ flake8==3.8.3 \
jinja2 \ jinja2 \
lief==0.12.0 \ lief==0.12.1 \
pyzmq \ pyzmq \
vulture==2.3 \ vulture==2.3 \
yq \ yq \

View File

@ -110,7 +110,7 @@ script: |
done done
} }
pip3 install lief==0.12.0 pip3 install lief==0.12.1
# Faketime for depends so intermediate results are comparable # Faketime for depends so intermediate results are comparable
export PATH_orig=${PATH} export PATH_orig=${PATH}

View File

@ -96,7 +96,7 @@ script: |
done done
} }
pip3 install lief==0.12.0 pip3 install lief==0.12.1
# Faketime for depends so intermediate results are comparable # Faketime for depends so intermediate results are comparable
export PATH_orig=${PATH} export PATH_orig=${PATH}

View File

@ -115,7 +115,7 @@ script: |
done done
} }
pip3 install lief==0.12.0 pip3 install lief==0.12.1
# Faketime for depends so intermediate results are comparable # Faketime for depends so intermediate results are comparable
export PATH_orig=${PATH} export PATH_orig=${PATH}

View File

@ -263,10 +263,6 @@ case "$HOST" in
*powerpc64*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,--no-tls-get-addr-optimize" ;; *powerpc64*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,--no-tls-get-addr-optimize" ;;
esac esac
case "$HOST" in
powerpc64-linux-*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,-z,noexecstack" ;;
esac
# Make $HOST-specific native binaries from depends available in $PATH # Make $HOST-specific native binaries from depends available in $PATH
export PATH="${BASEPREFIX}/${HOST}/native/bin:${PATH}" export PATH="${BASEPREFIX}/${HOST}/native/bin:${PATH}"
mkdir -p "$DISTSRC" mkdir -p "$DISTSRC"

View File

@ -548,10 +548,14 @@ inspecting signatures in Mach-O binaries.")
"glibc-2.27-dont-redefine-nss-database.patch" "glibc-2.27-dont-redefine-nss-database.patch"
"glibc-2.27-guix-prefix.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 (define-public lief
(package (package
(name "python-lief") (name "python-lief")
(version "0.12.0") (version "0.12.1")
(source (source
(origin (origin
(method git-fetch) (method git-fetch)
@ -561,7 +565,7 @@ inspecting signatures in Mach-O binaries.")
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"026jchj56q25v6gc0754dj9cj5hz5zaza8ij93y5ga94w20kzm9q")))) "1xzbh3bxy4rw1yamnx68da1v5s56ay4g081cyamv67256g0qy2i1"))))
(build-system python-build-system) (build-system python-build-system)
(arguments (arguments
`(#:phases `(#:phases
@ -618,7 +622,7 @@ parse, modify and abstract ELF, PE and MachO formats.")
;; Git ;; Git
git git
;; Tests ;; Tests
lief) (fix-ppc64-nx-default lief))
(let ((target (getenv "HOST"))) (let ((target (getenv "HOST")))
(cond ((string-suffix? "-mingw32" target) (cond ((string-suffix? "-mingw32" target)
;; Windows ;; Windows

View File

@ -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);