Arch Linux

Please read this before reporting a bug:

Do NOT report bugs when a package is just outdated, or it is in the AUR. Use the 'flag out of date' link on the package page, or the Mailing List.

REPEAT: Do NOT report bugs for outdated packages!

FS#46019 - [pacman] -fstack-check fails some 32 bit asm compiles

Attached to Project: Arch Linux
Opened by Johannes Dewender (JonnyJD) - Wednesday, 19 August 2015, 10:45 GMT
Last edited by Evangelos Foutras (foutrelis) - Friday, 02 October 2015, 11:48 GMT
Task Type Bug Report
Category Packages: Testing
Status Closed
Assigned To Allan McRae (Allan)
Architecture All
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 1
Private No


pacman 4.1.2-3 includes -fstack-check in the default makepkg.conf CFLAGS.
(currently in [testing])

This does break some 32 bit compilation including asm code since it "effectively" costs 1 register (see gcc bug below).
I only tested compiling 32 bit packages on a 64 bit system. This effect is probably the same on actual i686, I guess.

The package lib32-libx264 disables PIC as a workaround for this issue:

I reported the problem to gcc as this is possibly something that shouldn't happen or be done differently:

I also reported the same bug to hardening-wrapper, since that package was the first to include -fstack-check in (non-testing) Arch Linux:

And because the problem affects x264 I also reported it there:

I am not to judge who needs to do what and what needs to happen and when,
but I wanted to inform that this flag is not without problems currently.
This task depends upon

Closed by  Evangelos Foutras (foutrelis)
Friday, 02 October 2015, 11:48 GMT
Reason for closing:  Fixed
Additional comments about closing:  pacman 4.2.1-4
Comment by Allan McRae (Allan) - Wednesday, 19 August 2015, 11:03 GMT
So gcc is reserving a register for this? That will be a missive performance issue on i686...
Comment by Daniel Micay (thestinger) - Wednesday, 19 August 2015, 17:38 GMT
I don't think that's why it's breaking. It makes a register unavailable for use by inline assembly in the functions where it needs to insert a write, but that doesn't mean it's reserved from C code.