[Issue 18014] DMD test suite fails to link on Linux distros where PIC/PIE is enforced

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Dec 15 09:13:58 UTC 2017


https://issues.dlang.org/show_bug.cgi?id=18014

--- Comment #2 from github-bugzilla at puremagic.com ---
Commits pushed to master at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/818f27d0b969d08b7e705541e9524ce906fdc709
Fix issue 18014 - dmd test suite fails to link (part 1/2)

... on Linux x86_64 distros where PIC/PIE is enforced.

For more details, see:
* https://wiki.gentoo.org/wiki/Hardened/Position_Independent_Code_internals
* https://fedoraproject.org/wiki/Packaging:Guidelines#PIE
* https://wiki.debian.org/Hardening/PIEByDefaultTransition
* https://wiki.ubuntu.com/SecurityTeam/PIE
* non-PIE linker support removed in Android 5.0:
https://source.android.com/security/enhancements/enhancements50
*
https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/

We addressed the issues in the `dmd.conf` generated when dmd is build, the
`dmd.conf` files we ship in the release packages, and the makefiles of
druntime and phobos, but we haven't (yet) fixed the test suite build
system. Because of that, on Linux x86_64 distros where PIC is enforced,
the dmd test suite (the d_do_test.d test runner, as well as all test
cases that require linking) fails to link and as a result is completely
unusable.

The first commit of this pull-request does the following:
* adds a `PIC` variable to `test/Makefile`, which defaults to `1`, on x86_64
* exports a `PIC_FLAG` environment variable, which is set to `-fPIC` when
`PIC` is set to `1`
* adds `$(PIC_FLAG)` to `d_do_test.d`'s build command-line
* appends `$(PIC_FLAG)` to the `REQUIRED_ARGS` variable, which is
expanded in each `*.d` test case command-line

The second and final commit adds the `$PIC_FLAG` environment variable to the
dmd command-line in the shell-driven test cases, where the object files were
linked. This was done by trial and error, by amending each failing test case,
until I got the whole test suite to pass on my Ubuntu 17.10 system, minus two
unrelated test failures:
* `runnable/test_cdvecfill.d` - see
https://issues.dlang.org/show_bug.cgi?id=18013
* runnable/test17559.d - stack traces don't work properly on my system,
but I have yet to investigate the root cause.

See also:
* https://github.com/dlang/dmd/pull/7002

* https://github.com/dlang/druntime/pull/1880
* https://github.com/dlang/druntime/pull/1974

* https://github.com/dlang/phobos/pull/5586
* https://github.com/dlang/phobos/pull/5868

https://github.com/dlang/dmd/commit/64424027452125693483b36022827e6c401e2307
Merge pull request #7433 from wilzbach/hardening-part-1

Fix issue 18014 - dmd test suite fails to link (part 1/2)
merged-on-behalf-of: Mike Franklin <JinShil at users.noreply.github.com>

--


More information about the Digitalmars-d-bugs mailing list