[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Build a Secure-PLT version of the PowerPC PIC code
From: |
Josh Elsasser |
Subject: |
Build a Secure-PLT version of the PowerPC PIC code |
Date: |
Wed, 20 Nov 2019 20:16:42 -0800 |
User-agent: |
Mutt/1.5.22 (2013-10-16) |
OpenBSD now requires PowerPC PIC code to be built for the newer
Secure-PLT ABI, rather than the original BSS-PLT ABI. I believe this
change was made to allow ld.so to resolve procedure relocations using
non-executable memory, rather than using self-modifying code stubs.
This adds gcc 4.1.2 to the cross compiler list, and uses it to build
the powerpc vacall_r pic code with -msecure-plt
diff --git .gitignore .gitignore
index 447b983..ed25615 100644
--- .gitignore
+++ .gitignore
@@ -211,6 +211,7 @@
/callback/vacall_r/vacall-powerpc-linux.s
/callback/vacall_r/vacall-powerpc-linux-macro.S
/callback/vacall_r/vacall-powerpc-macos.s
+/callback/vacall_r/vacall-powerpc-secplt-macro.S
/callback/vacall_r/vacall-powerpc-sysv4-macro.S
/callback/vacall_r/vacall-powerpc64-aix.s
/callback/vacall_r/vacall-powerpc64-linux.S
diff --git callback/vacall_r/Makefile.devel callback/vacall_r/Makefile.devel
index d596091..3899b52 100644
--- callback/vacall_r/Makefile.devel
+++ callback/vacall_r/Makefile.devel
@@ -21,7 +21,7 @@ precompiled : \
vacall-hppa-macro.S vacall-hppa64-macro.S \
vacall-arm-macro.S vacall-armhf-macro.S \
vacall-arm64-macro.S \
- vacall-powerpc-aix.s vacall-powerpc-linux-macro.S
vacall-powerpc-sysv4-macro.S vacall-powerpc-macos.s vacall-powerpc64-aix.s
vacall-powerpc64-linux.S vacall-powerpc64-elfv2-linux.S \
+ vacall-powerpc-aix.s vacall-powerpc-linux-macro.S
vacall-powerpc-sysv4-macro.S vacall-powerpc-secplt-macro.S
vacall-powerpc-macos.s vacall-powerpc64-aix.s vacall-powerpc64-linux.S
vacall-powerpc64-elfv2-linux.S \
vacall-ia64-macro.S \
vacall-x86_64-macro.S vacall-x86_64-x32-linux.s
vacall-x86_64-windows-macro.S \
vacall-s390-macro.S vacall-s390x-macro.S \
@@ -157,6 +157,11 @@ vacall-powerpc-sysv4-macro.S :
../../vacall/vacall-powerpc.c ../../vacall/vacall
(../../common/asm-powerpc.sh < vacall-powerpc-sysv4.s ; cat
../../common/noexecstack.h) > vacall-powerpc-sysv4-macro.S
$(RM) vacall-powerpc-sysv4.s
+vacall-powerpc-secplt-macro.S : ../../vacall/vacall-powerpc.c
../../vacall/vacall-internal.h vacall_r.h ../../common/asm-powerpc.sh
../../common/noexecstack.h $(THISFILE)
+ $(CROSS_TOOL) powerpc-linux gcc -V 4.1.2 -mno-power -mno-power2
-mno-powerpc -msecure-plt $(GCCFLAGS) -D__powerpc__ -S
../../vacall/vacall-powerpc.c -I../../vacall -I. -o vacall-powerpc-secplt.s
+ (../../common/asm-powerpc.sh < vacall-powerpc-secplt.s ; cat
../../common/noexecstack.h) > vacall-powerpc-secplt-macro.S
+ $(RM) vacall-powerpc-secplt.s
+
vacall-powerpc-macos.s : ../../vacall/vacall-powerpc.c
../../vacall/vacall-internal.h vacall_r.h $(THISFILE)
$(CROSS_TOOL) powerpc-darwin gcc -V 3.3.6 $(GCCFLAGS) -D__powerpc__ -S
../../vacall/vacall-powerpc.c -I../../vacall -I. -o vacall-powerpc-macos.s
diff --git callback/vacall_r/Makefile.in callback/vacall_r/Makefile.in
index 9d52db5..62cb87d 100644
--- callback/vacall_r/Makefile.in
+++ callback/vacall_r/Makefile.in
@@ -147,15 +147,16 @@ vacall-arm64.s : $(srcdir)/vacall-arm64-macro.S
vacall-powerpc.lo : vacall-powerpc.s
$(LIBTOOL_COMPILE) $(CC) @GCC_X_NONE@ -c vacall-powerpc.s
-vacall-powerpc.s : $(srcdir)/vacall-powerpc-aix.s
$(srcdir)/vacall-powerpc-linux-macro.S $(srcdir)/vacall-powerpc-macos.s
$(srcdir)/vacall-powerpc-sysv4-macro.S
+vacall-powerpc.s : $(srcdir)/vacall-powerpc-aix.s
$(srcdir)/vacall-powerpc-linux-macro.S $(srcdir)/vacall-powerpc-macos.s
$(srcdir)/vacall-powerpc-sysv4-macro.S $(srcdir)/vacall-powerpc-secplt-macro.S
case "$(OS)" in \
aix*) syntax=aix;; \
- linux* | netbsd* | openbsd*) syntax=linux;; \
+ linux* | netbsd*) syntax=linux;; \
+ openbsd*) syntax=secplt;; \
macos* | darwin*) syntax=macos;; \
*) syntax=sysv4;; \
esac; \
case $${syntax} in \
- linux | netbsd | sysv4) \
+ linux | sysv4 | secplt) \
$(CPP) $(ASPFLAGS) -I$(srcdir)
$(srcdir)/vacall-powerpc-$${syntax}-macro.S | grep -v '^ *#line' | grep -v '^#'
| sed -e 's,% ,%,g' -e 's,//,@,g' -e 's,\$$,#,g' > vacall-powerpc.s || exit 1
;; \
macos) \
grep -v '\.machine' $(srcdir)/vacall-powerpc-$${syntax}.s >
vacall-powerpc.s || exit 1 ;; \
@@ -324,6 +325,7 @@ SOURCE_FILES = \
vacall-powerpc-linux.s vacall-powerpc-linux-macro.S \
vacall-powerpc-macos.s \
vacall-powerpc-sysv4-macro.S \
+ vacall-powerpc-secplt-macro.S \
vacall-powerpc64-aix.s vacall-powerpc64-linux.S
vacall-powerpc64-elfv2-linux.S \
vacall-riscv32-ilp32d-linux.s vacall-riscv32-ilp32d-macro.S \
vacall-riscv64-lp64d-linux.s vacall-riscv64-lp64d-macro.S \
diff --git cross-tools/cross.conf cross-tools/cross.conf
index 23d3faa..e20abfe 100644
--- cross-tools/cross.conf
+++ cross-tools/cross.conf
@@ -16,7 +16,7 @@ arm64 aarch64-linux 5.4.0 2.24
aarch64-linux
rs6000 rs6000-aix 3.3.6 2.17 rs6000-aix
rs6000 rs6000-aix6.1 5.4.0 2.17 rs6000-aix6.1
powerpc powerpc-darwin 3.3.6 2.17 ppc-macos
-powerpc powerpc-linux 3.3.6 2.17 ppc-linux
+powerpc powerpc-linux 3.3.6,4.1.2 2.17 ppc-linux
powerpc64 powerpc64le-linux 5.4.0 2.24 powerpc64le-linux
ia64 ia64-linux 4.0.1 2.16.1 ia64-linux
x86_64 x86_64-linux 4.0.2,5.4.0 2.16.1 x86_64-linux
diff --git cross-tools/patches/gcc-4.1.2.patch
cross-tools/patches/gcc-4.1.2.patch
new file mode 100644
index 0000000..297c241
--- /dev/null
+++ cross-tools/patches/gcc-4.1.2.patch
@@ -0,0 +1,21 @@
+diff -ru gcc-4.1.2/gcc/toplev.h gcc-4.1.2/gcc/toplev.h
+--- gcc-4.1.2/gcc/toplev.h 2005-09-08 17:47:05.000000000 -0700
++++ gcc-4.1.2/gcc/toplev.h 2019-10-16 10:05:49.377343593 -0700
+@@ -171,17 +171,6 @@
+ # define CTZ_HWI __builtin_ctz
+ # endif
+
+-extern inline int
+-floor_log2 (unsigned HOST_WIDE_INT x)
+-{
+- return x ? HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x) : -1;
+-}
+-
+-extern inline int
+-exact_log2 (unsigned HOST_WIDE_INT x)
+-{
+- return x == (x & -x) && x ? (int) CTZ_HWI (x) : -1;
+-}
+ #endif /* GCC_VERSION >= 3004 */
+
+ /* Functions used to get and set GCC's notion of in what directory
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Build a Secure-PLT version of the PowerPC PIC code,
Josh Elsasser <=