summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'hardened/toolchain/branches/pieworld/toolchain.README')
-rw-r--r--hardened/toolchain/branches/pieworld/toolchain.README154
1 files changed, 0 insertions, 154 deletions
diff --git a/hardened/toolchain/branches/pieworld/toolchain.README b/hardened/toolchain/branches/pieworld/toolchain.README
deleted file mode 100644
index 6e65198..0000000
--- a/hardened/toolchain/branches/pieworld/toolchain.README
+++ /dev/null
@@ -1,154 +0,0 @@
-NOTES
-=====
-
-Non-PIE support is a mess (well, strictly speaking it's broken)
-So far, crt{begin,end}.o are now correctly built no-PIE.
-However, libgcc.a/libgcc_eh.a, libc.a, libpthread.a, libieee.a, libgcov.a
-are built PIE. This ok for linking PIEs, but rubbish for doing non-PIE
-links (i.e. vanilla). Also crtfastmath.o is only built once (there's no
-crtfastmathS.o) - so we build it PIE.
-
-So, what to do?
-
-For vanilla compiles, we need the .a's built -nopie.
-For hardened compiles, we need the .a's built -fPIE - if they ever get used
-that way. If we can convince ourselves that when building -fPIE the .so's
-are used, then we don't need PIE versions of these .a's.
-To do this, add '-nopie' to CFLAGS for libgcc.a in gcc/Makefile.in?
-
-For libc.a - we could treat hardened as a multilib system; with the normal no-PIE
-ABI and our PIE ABI - and get glibc to build itself two ways; one for vanilla and
-one for hardened. Or, we could try to force all .a's to be built -nopie - this
-isn't easy, however, as you can't tell from normal compilation commands whether
-it's for a .a or for an executable.
-
-I think the multiple-ABI approach is easier. We could then drop PIE from the
-compiler variants, leaving just relro/now and ssp combinations, which don't change
-the ABI, and do the -fPIE thing in the compiler wrapper, when ABI is PIE.
-I'm thinking of doing MULTLIB_ABIS="x86 x86_pie" and defining
-CFLAGS_x86_pie="-fpie -pie"
-LDFLAGS_x86_pie="-fpie -pie"
-LIBDIR_x86="lib"
-LIBDIR_x86_pie="libpie"
-note; the gcc-config wrapper adds CFLAGS_x86_pie to the command line, but doesn't look at LDFLAGS_<abi>
-
-
-Upgrade path for Hardened Gentoo users from glibc-2.3*/gcc-3* to glibc-2.4+/gcc-4.1+
-====================================================================================
-
-Note; references to "hardened", "non-hardened" etc refer to the toolchain, not the
-kernel.
-
-
-Generic upgrade instructions
-----------------------------
-
-There are separate instructions depending on where you start. Instruction set (2)
-should work in all cases, provided a vanilla compiler is set via gcc-config first.
-However the most common case will be (1) - which is why it's listed first :)
-
-
-1) HARDENED SYSTEMS with hardened gcc-3 and glibc-2.3
- Going from an existing hardened system (gcc-3.4.6 & glibc-2.3.6 hardened)
-
- .1) emerge --oneshot sys-libs/glibc
- build the hardened version of glibc-2.4 (with the gcc-3 hardened compiler)
-
- .2) emerge --oneshot sys-devel/gcc
- build the hardened gcc-4.1.1 with the hardened gcc-3.4.6
-
- .3) emerge --oneshot sys-libs/glibc
- rebuild the hardened version of glibc-2.4 (with the gcc-4 hardened compiler)
-
-
-2) NON-HARDENED SYSTEMS with gcc-4.1.1 and glibc-2.4 (no -hardened compiler available)
- Going from non-hardened stage3 2006.1:
- This starts from non-hardened gcc-4.1.1 and glibc-2.4
-
- .1) Switch profile to the hardened profile
- This means remaking the softlink /etc/make.conf to a hardened profile.
- Do not confuse this with selecting a hardened compiler with gcc-config (which
- you can't do anyway from the standard 2006.1 stage3).
-
- .2) emerge --oneshot sys-libs/glibc
- Build glibc with support for both gcc-3 and gcc-4 stack protectiona.
-
- .3) USE="-hardened" emerge --oneshot sys-devel/gcc
- Build gcc-4 non-hardened, but including split-specs so it can build
- hardened objects later.
-
- .4) gcc-config to the (now available) hardened variant of the compiler.
-
- .5) emerge --oneshot sys-libs/glibc
- Build the hardened version of glibc-2.4 (with the gcc-4 hardened compiler)
-
- .6) emerge --oneshot sys-devel/gcc
- This will build gcc itself hardened (in particular, building the static libraries PIE)
-
-
-3) NON-HARDENED SYSTEMS with a -hardened gcc available
-
- .1) gcc-config to the -hardened gcc
-
- .2) emerge --oneshot sys-libs/glibc
- Build glibc with support for both gcc-3 and gcc-4 stack protectiona.
-
- .3) emerge --oneshot sys-devel/gcc
- build the hardened gcc-4.1.1 with a hardened gcc
-
- .4) emerge --oneshot sys-libs/glibc
- rebuild the hardened version of glibc-2.4 (with the gcc-4 hardened compiler)
-
-
-Platform-specific notes
------------------------
-
-sparc
-For gcc-4 SSP to work, glibc must be 2.4 or higher. Glibc-2.4 is nptl-only, so this means
-it's not available on 32-bit sparc (sparcv8).
-
-
-
-
-Toolchain mods for hardened gcc-4.x/glibc-2.4
-=============================================
-
-* glibc __stack_chk_fail implementation written so that it's ok when glibc built with SSP
- Implement stderr & syslog messaging, SIGKILL and _exit to provide a secure termination
- (the one supplied by glibc is for debug purposes only), and all via inline syscalls
- avoiding any function calls (which would potentially invoke __stack_chk_fail).
- Note; building glibc with ssp-all is causing too many problems at the moment, so for
- now it's set to build without ssp.
- Sorted out the PIE building better (replaces the filter-ldflags -pie with something
- more sensible).
- (done) Use SIG_ABRT instead of SIG_KILL - means doing the sigset stuff.
- (done) Use INTERNAL_SYSCALL (check vsyscall page isn't user modifiable)
-
-* gcc minispecs for gcc-4.1.1 and gcc-3.4.6, from psm
- Much simplified gcc patching for hardened compiler; use of minispecs to generate
- the relevant specs files. Involves a few changes in toolchain.eclass and
- flag-o-matic.eclass.
-
-* Specs switching handled by the wrappers, rather than the gcc-specs-env patch
- (app-admin/eselect-compiler only). This gives us ccache reliability, as for
- gcc itself the specs are specified on the command line as normal.
- May not be a good idea - doing it gcc itself guarantees it'll happen even if
- the wrappers aren't used (is that ever the case?).
- Further investigation ongoing to manage filtering; considering doing this by
- adjusting GCC_SPECS, although it may be better as a separate variable (perhaps
- as part of COMPILER_FEATURES - see bug #128810)
-
-Still cooking
-
-* Look into -DFORTIFY_SOURCE=2, -msecure-plt for ppc
-
-
-Status summary:
-===============
-
-glibc ok (builds itself non-ssp)
-gcc ok (ish)
- Needs distfile gcc-4.1.1-piepatches-v9.0.6.tar.bz2 from toolchain/distfiles
- (or gcc-3.4.6-piepatches-v9.0.5.tar.bz2 for gcc-3.4.6)
-
-