Hi Palle!
On Sat, Mar 09, 2019 at 01:42:55PM +0100, Palle Girgensohn wrote:
! > 9 mars 2019 kl. 01:17 skrev Peter <pmc@citylink.dinoex.sub.org>:
! > Yes, -mstackrealign helps. So, as my local problem is now solved,
! > I am thinking about that "greater good for mankind" thing. ;)
! >
! > At least one other person did run into the issue, and from Your
! > explanation I understand that this is not a postgres issue, but
! > could happen to any piece of software that decides to use gcc.
! >
! > Now it seems easy to put this compiler option into the port's
! > specific makefile for postgreSQL, but it should actually be fixed
! > systemwide.
! >
! > But, while it gets recommended to set the cpu-type systemwide on
! > FreeBSD, it is not recommend for the system owner to set CFLAGS
! > systemwide (even less specific ones for gcc - and I didn't find
! > a proper way to do that, anyway).
! >
! > So my proposal is that this one belongs into /usr/ports/Mk/bsd.gcc.mk
! >
! > + .if ${MACHINE_CPU:Msse} && ${MACHINE_ARCH} == i386
! > + CFLAGS+= -mstackrealign
! > + .endif
! >
! > That seems to work. Palle, Your opinion?
!
! Well, we ideally want the binary packages built with the ports
! framework, for a specific platform, in this case i386, to work on all
! i386 machines. This makes it a bit more complicated.
Yes, that was my intention! The MACHINE_CPU variable gets already
populated with "sse" (from somewhere in /usr/share/mk).
What I usually do, I do only set the proper CPU type in
/etc/make.conf, and then the "-march=pentium3" (or whatever CPU there is)
appears magically in all builds. I didn't configure this!
/etc/make.conf:
! # Maschine ist Pentium-3
! CPUTYPE?= p3
Nothing more is needed, and now in any ports' directory, we get
! >postgresql10-server$ make -V MACHINE_CPU
! sse i686 mmx i586 i486
Contrarily, if I remove the CPUTYPE from /etc/make.conf, then it says:
! >postgresql10-server$ make -V MACHINE_CPU
! i486
And I suppose these strings appear to be tested for such cases.
! We would have to
! check if the user has any of -msse, -msse2, -march=pentium3 or later,
! or any similar flag that enables use of SSE or later,
If the user explicitely drop in those options, then it gets indeed
complicated. I don't do that - I do NOT set any -march or whatever
options, I only set CPUTYPE in make.conf, as it gets recommended
by developers, e.g. here:
https://forums.freebsd.org/threads/whats-in-your-make-conf.36150/post-199595
And that's why I am thinking of a global fix - because this fault is
happening on recommended practices ground!
! and if the
! underlying userland is built with clang
Ouch, that one I did neglect. One could have built the whole system
with gcc, and then no action is needed. Hmm...
! Perhaps, as Andrew suggests, just adding -mstackrealign defensively
! in the port for i386 is a reasonable tradeoff? It would not help for
! other ports though.
That is reasonable, certainly. :)
PMc