ppc64el build tunes for POWER7, produces sub optimal POWER8 code

Bug #1333524 reported by Anton Blanchard
6
This bug affects 1 person
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)

CVE References

Adam Conrad (adconrad)
Changed in glibc (Ubuntu Trusty):
status: New → Invalid
Changed in eglibc (Ubuntu):
status: New → Invalid
Adam Conrad (adconrad)
Changed in eglibc (Ubuntu Trusty):
assignee: nobody → Adam Conrad (adconrad)
Changed in glibc (Ubuntu):
assignee: nobody → Adam Conrad (adconrad)
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (6.6 KiB)

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:
    - 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/patches/powerpc/local-tune-power8.diff: When configured for
    --with-cpu=power7, adjust -mtune for power8 instead (LP: #1333524)

glibc (2.19-4) unstable; urgency=medium

  [ Aurelien Jarno ]
  * debian/debhelper.in/libc.{preinst,postrm,postinst}: correctly remove
    old ld.so configuration if more than one libc6 package is installed
    (multiarch case). Closes: #752389, #752404.

  [ Samuel Thibault ]
  * patches/hurd-i386/tg-tls-threadvar.diff: Update to fix gcc-4.9 build.

  [ Adam Conrad ]
  * debian/control.in/main: glibc-source Conflics/Replaces eglibc-source.
  * debian/patches/powerpc/local-powerpc8xx-dcbz.diff: Restrict the trap
    to 32-bit builds, since the Freescale 8xx CPUs aren't 64-bit capable.

glibc (2.19-3experimental0) experimental; urgency=medium

  [ Aurelien Jarno]
  * Switch back to glibc sources:
    - debian/control.in/*: replace eglibc by glibc, update descriptions.
    - rename debian/debhelper.in/eglibc-source.install into
      glibc-source.install.
    - rename debian/debhelper.in/eglibc-source.lintian-overrides into
      glibc-source.lintian-overrides.
    - rename debian/eglibc-source.filelist into glibc-source.filelist
    - debian/copyright: update.
    - debian/rules, debian/rules.d/*: replace eglibc by glibc.
    - source/lintian-overrides: replace eglibc by glibc.
    - debian/sysdeps/*: replace eglibc by glibc.
    - debian/po/*: update using debconf-updatepo.
    - debian/rules.d/tarball.mk: rewrite to generate the orig tarball and
      to fetch the branch updates through git.
    - patches/any/submitted-nl_langinfo-static.diff: refresh.
    - patches/any/submitted-ldsodefs_rtld_debug.diff: drop.
    - patches/any/local-dynamic-resolvconf.diff: new patch from the eglibc
      tree to dynamically take into account changes in resolv.conf.
    - patches/powerpc/local-powerpc8xx-dcbz.diff: new patch from the eglibc
      tree to workaround dcbz issues on PowerPC 8XX CPUs.
    - patches/sh4/local-fpscr_values.diff: new patch from eglibc tree to
      export the ___fpscr_values symbol on SH4.
    - patches/any/local-libpic.diff: new patch from eglibc tree to install
      *_pic.a files.
    - patches/any/local-bootstrap-headers.diff: new patch from eglibc tree
      to ease header installation when bootstrapping.

eglibc (2.19-3) unstable; urgency=medium

  [ Aurelien Jarno ]
  * debian/control.in/libc: fix libtirpc1 breaks. Closes: #751852.
  * debian/rules.d/build.mk: generate ld.so configuration file using
    DEB_HOST_MULTIARCH instead of DEB_HOST_GNU_TYPE to have a stable
    path even when the GNU triplet change.
  * debian/debhelper.in/libc.{preinst,postrm,postinst}: remove old
    ld.so configuration file on hurd-i386, i386 and k...

Read more...

Changed in glibc (Ubuntu):
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.