ppc64el build tunes for POWER7, produces sub optimal POWER8 code
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
eglibc (Ubuntu) |
Invalid
|
Undecided
|
Unassigned | ||
Trusty |
New
|
Undecided
|
Adam Conrad | ||
glibc (Ubuntu) |
Fix Released
|
Undecided
|
Adam Conrad | ||
Trusty |
Invalid
|
Undecided
|
Unassigned |
Bug Description
We currently build eglibc using --with-cpu=power7. This gives us optimised power7 glibc functions, but it also passes -mtune=power7 to gcc.
Unfortunately this causes gcc to be overly careful about alignment issues. One example is this fragment in tcgetattr, where
we zero a struct byte by byte:
11141c: 2d d7 f9 4b bl aeb48 <bcmp+0x1768>
111420: 00 00 00 60 nop
111424: 00 00 e3 9b stb r31,0(r3)
111428: 01 00 e3 9b stb r31,1(r3)
11142c: 02 00 e3 9b stb r31,2(r3)
111430: 03 00 e3 9b stb r31,3(r3)
111434: 04 00 e3 9b stb r31,4(r3)
111438: 05 00 e3 9b stb r31,5(r3)
11143c: 06 00 e3 9b stb r31,6(r3)
111440: 07 00 e3 9b stb r31,7(r3)
111444: 08 00 e3 9b stb r31,8(r3)
111448: 09 00 e3 9b stb r31,9(r3)
11144c: 0a 00 e3 9b stb r31,10(r3)
111450: 0b 00 e3 9b stb r31,11(r3)
111454: 0c 00 e3 9b stb r31,12(r3)
If we pass -mtune=power8, then things are much better:
1104bc: 8d eb f9 4b bl af048 <bcmp+0x1768>
1104c0: 00 00 00 60 nop
1104c4: 00 00 20 39 li r9,0
1104c8: 00 00 c3 93 stw r30,0(r3)
1104cc: 04 00 c3 93 stw r30,4(r3)
1104d0: 08 00 c3 93 stw r30,8(r3)
1104d4: 0c 00 23 99 stb r9,12(r3)
(The reason we aren't going 64bit stores is a gcc bug which has been fixed upstream recently)
Related branches
CVE References
Changed in glibc (Ubuntu Trusty): | |
status: | New → Invalid |
Changed in eglibc (Ubuntu): | |
status: | New → Invalid |
Changed in eglibc (Ubuntu Trusty): | |
assignee: | nobody → Adam Conrad (adconrad) |
Changed in glibc (Ubuntu): | |
assignee: | nobody → Adam Conrad (adconrad) |
This bug was fixed in the package glibc - 2.19-4ubuntu1
---------------
glibc (2.19-4ubuntu1) utopic; urgency=medium
* Merge with Debian unstable, switching us to glibc and fixing bugs: patches/ powerpc/ local-tune- power8. diff: When configured for cpu=power7, adjust -mtune for power8 instead (LP: #1333524)
- Fix invalid fd reuse while sending DNS queries (LP: #1328975)
- Avoid Freescale 8xx dcbz workaround on ppc64el (LP: #1333499)
- Remove wrong ibm long double assembly routines (LP: #1294588)
- Fix incorrect frexpl results with long doubles (LP: #1333506)
* debian/
--with-
glibc (2.19-4) unstable; urgency=medium
[ Aurelien Jarno ] debhelper. in/libc. {preinst, postrm, postinst} : correctly remove
* debian/
old ld.so configuration if more than one libc6 package is installed
(multiarch case). Closes: #752389, #752404.
[ Samuel Thibault ] hurd-i386/ tg-tls- threadvar. diff: Update to fix gcc-4.9 build.
* patches/
[ Adam Conrad ] control. in/main: glibc-source Conflics/Replaces eglibc-source. patches/ powerpc/ local-powerpc8x x-dcbz. diff: Restrict the trap
* debian/
* debian/
to 32-bit builds, since the Freescale 8xx CPUs aren't 64-bit capable.
glibc (2.19-3experime ntal0) experimental; urgency=medium
[ Aurelien Jarno] control. in/*: replace eglibc by glibc, update descriptions. debhelper. in/eglibc- source. install into source. install. debhelper. in/eglibc- source. lintian- overrides into source. lintian- overrides. eglibc- source. filelist into glibc-source. filelist lintian- overrides: replace eglibc by glibc. rules.d/ tarball. mk: rewrite to generate the orig tarball and any/submitted- nl_langinfo- static. diff: refresh. any/submitted- ldsodefs_ rtld_debug. diff: drop. any/local- dynamic- resolvconf. diff: new patch from the eglibc powerpc/ local-powerpc8x x-dcbz. diff: new patch from the eglibc sh4/local- fpscr_values. diff: new patch from eglibc tree to any/local- libpic. diff: new patch from eglibc tree to install any/local- bootstrap- headers. diff: new patch from eglibc tree
* Switch back to glibc sources:
- debian/
- rename debian/
glibc-
- rename debian/
glibc-
- rename debian/
- debian/copyright: update.
- debian/rules, debian/rules.d/*: replace eglibc by glibc.
- source/
- debian/sysdeps/*: replace eglibc by glibc.
- debian/po/*: update using debconf-updatepo.
- debian/
to fetch the branch updates through git.
- patches/
- patches/
- patches/
tree to dynamically take into account changes in resolv.conf.
- patches/
tree to workaround dcbz issues on PowerPC 8XX CPUs.
- patches/
export the ___fpscr_values symbol on SH4.
- patches/
*_pic.a files.
- patches/
to ease header installation when bootstrapping.
eglibc (2.19-3) unstable; urgency=medium
[ Aurelien Jarno ] control. in/libc: fix libtirpc1 breaks. Closes: #751852. rules.d/ build.mk: generate ld.so configuration file using HOST_MULTIARCH instead of DEB_HOST_GNU_TYPE to have a stable debhelper. in/libc. {preinst, postrm, postinst} : remove old
* debian/
* debian/
DEB_
path even when the GNU triplet change.
* debian/
ld.so configuration file on hurd-i386, i386 and k...