[Bug 1887989] Re: [20.04 Feature] Enable glibc for POWER10

Dimitri John Ledkov 1887989 at bugs.launchpad.net
Mon Aug 17 15:41:22 UTC 2020


** Description changed:

+ [Impact]
+ 
+  * glibc / ld does not know about new power10 capability, and thus
+ unable to load libraries optimizied for power10, on power10 hardware.
+ 
+ [Test Case]
+ 
+  * sudo rm /etc/ld.so.cache
+  * LD_SHOW_AUXV=yes LD_DEBUG=libs /bin/true
+ 
+ Expectations are that in AT_HWCAP2 power10 specific features are listed
+ AT_PLATFORM is set to power10
+ and that search paths include /power10/ directories
+ 
+ 
+ The sample output from power8 machine is this
+ 
+ $ LD_SHOW_AUXV=yes LD_DEBUG=libs /bin/true
+ AT_DCACHEBSIZE:       0x80
+ AT_ICACHEBSIZE:       0x80
+ AT_UCACHEBSIZE:       0x0
+ AT_SYSINFO_EHDR:      0x73b685b20000
+ AT_L1I_CACHESIZE:     32768
+ AT_L1I_CACHEGEOMETRY: 128B line size, 8-way set associative
+ AT_L1D_CACHESIZE:     65536
+ AT_L1D_CACHEGEOMETRY: 128B line size, 8-way set associative
+ AT_L2_CACHESIZE:      524288
+ AT_L2_CACHEGEOMETRY:  128B line size, 8-way set associative
+ AT_L3_CACHESIZE:      8388608
+ AT_L3_CACHEGEOMETRY:  128B line size, 8-way set associative
+ AT_HWCAP:             true_le archpmu vsx arch_2_06 dfp ic_snoop smt mmu fpu altivec ppc64 ppc32
+ AT_PAGESZ:            65536
+ AT_CLKTCK:            100
+ AT_PHDR:              0x5b376320040
+ AT_PHENT:             56
+ AT_PHNUM:             9
+ AT_BASE:              0x73b685b40000
+ AT_FLAGS:             0x0
+ AT_ENTRY:             0x5b376321ab0
+ AT_UID:               1000
+ AT_EUID:              1000
+ AT_GID:               1000
+ AT_EGID:              1000
+ AT_SECURE:            0
+ AT_RANDOM:            0x7fffc779b3f2
+ AT_HWCAP2:            htm-nosc vcrypto tar isel ebb dscr htm arch_2_07
+ AT_EXECFN:            /bin/true
+ AT_PLATFORM:          power8
+ AT_BASE_PLATFORM:     power8
+     277374:	find library=libc.so.6 [0]; searching
+     277374:	 search cache=/etc/ld.so.cache
+     277374:	 search path=/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp:/lib/powerpc64le-linux-gnu/tls/power8/altivec:/lib/powerpc64le-linux-gnu/tls/power8/dfp:/lib/powerpc64le-linux-gnu/tls/power8:/lib/powerpc64le-linux-gnu/tls/altivec/dfp:/lib/powerpc64le-linux-gnu/tls/altivec:/lib/powerpc64le-linux-gnu/tls/dfp:/lib/powerpc64le-linux-gnu/tls:/lib/powerpc64le-linux-gnu/power8/altivec/dfp:/lib/powerpc64le-linux-gnu/power8/altivec:/lib/powerpc64le-linux-gnu/power8/dfp:/lib/powerpc64le-linux-gnu/power8:/lib/powerpc64le-linux-gnu/altivec/dfp:/lib/powerpc64le-linux-gnu/altivec:/lib/powerpc64le-linux-gnu/dfp:/lib/powerpc64le-linux-gnu:/usr/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/tls/power8/altivec:/usr/lib/powerpc64le-linux-gnu/tls/power8/dfp:/usr/lib/powerpc64le-linux-gnu/tls/power8:/usr/lib/powerpc64le-linux-gnu/tls/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/tls/altivec:/usr/lib/powerpc64le-linux-gnu/tls/dfp:/usr/lib/powerpc64le-linux-gnu/tls:/usr/lib/powerpc64le-linux-gnu/power8/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/power8/altivec:/usr/lib/powerpc64le-linux-gnu/power8/dfp:/usr/lib/powerpc64le-linux-gnu/power8:/usr/lib/powerpc64le-linux-gnu/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/altivec:/usr/lib/powerpc64le-linux-gnu/dfp:/usr/lib/powerpc64le-linux-gnu:/lib/tls/power8/altivec/dfp:/lib/tls/power8/altivec:/lib/tls/power8/dfp:/lib/tls/power8:/lib/tls/altivec/dfp:/lib/tls/altivec:/lib/tls/dfp:/lib/tls:/lib/power8/altivec/dfp:/lib/power8/altivec:/lib/power8/dfp:/lib/power8:/lib/altivec/dfp:/lib/altivec:/lib/dfp:/lib:/usr/lib/tls/power8/altivec/dfp:/usr/lib/tls/power8/altivec:/usr/lib/tls/power8/dfp:/usr/lib/tls/power8:/usr/lib/tls/altivec/dfp:/usr/lib/tls/altivec:/usr/lib/tls/dfp:/usr/lib/tls:/usr/lib/power8/altivec/dfp:/usr/lib/power8/altivec:/usr/lib/power8/dfp:/usr/lib/power8:/usr/lib/altivec/dfp:/usr/lib/altivec:/usr/lib/dfp:/usr/lib		(system search path)
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/altivec/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/altivec/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/altivec/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/altivec/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/altivec/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/altivec/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/altivec/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/dfp/libc.so.6
+     277374:	  trying file=/lib/powerpc64le-linux-gnu/libc.so.6
+     277374:	
+     277374:	
+     277374:	calling init: /lib/powerpc64le-linux-gnu/libc.so.6
+     277374:	
+     277374:	
+     277374:	initialize program: /bin/true
+     277374:	
+     277374:	
+     277374:	transferring control: /bin/true
+     277374:	
+     277374:	
+     277374:	calling fini: /bin/true [0]
+     277374:	
+ 
+ 
+ [Regression Potential] 
+ 
+  * The additional parsing of the new constant for HWCAP / PLATFORM are
+ backwards compatible, however, it would be nice for the kernel to have
+ the constants backported too. Such that focal kernel has support for
+ POWER10 platform too. These will arrive in the hwe kernel, but should be
+ backported to the generic kernel too.
+ 
+ At the moment Ubuntu, does not provide any power10 libraries, thus only
+ locally built/provided libraries could be installed and loaded from the
+ power10 paths. If such files are present on disk, on a power10 machines,
+ and happen to be buggy and/or abi incompatible, hard to debug crashes
+ may occur. However, this is no different to locally built
+ power9/avx2/avx512/lse etc built libraries on other architectures.
+ 
+ There might be other pieces of software in focal unprepared for power10
+ AT_PLATFORM as it does sort lower than power9, when similar stanzas
+ looped in the past unintended breakage may also occur.
+ 
+ If incompatibilities with power10 support are detected, they would need
+ to be fixed up under HWE banner.
+ 
+ Note there are no current power10 hardware in production, thus these
+ changes can currently only affect pre-release hardware.
+ 
+ [Other Info]
+  
+  * Original bug report
+ 
+ 
  == Comment: #0 - Tulio Magno Quites Machado Filho <tulioqm at br.ibm.com> - 2020-06-04 09:30:54 ==
  Add the basic enablement of POWER10 in glibc (AT_PLATFORM and AT_HWCAP2) allowing userspace software to use POWER10 features by using STT_GNU_IFUNC or providing shared libraries for POWER10, e.g. with files in /usr/lib/powerpc64le-linux-gnu/power10/.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1887989

Title:
  [20.04 Feature] Enable glibc for POWER10

Status in The Ubuntu-power-systems project:
  Triaged
Status in glibc package in Ubuntu:
  In Progress
Status in glibc source package in Focal:
  Triaged
Status in glibc source package in Groovy:
  In Progress

Bug description:
  [Impact]

   * glibc / ld does not know about new power10 capability, and thus
  unable to load libraries optimizied for power10, on power10 hardware.

  [Test Case]

   * sudo rm /etc/ld.so.cache
   * LD_SHOW_AUXV=yes LD_DEBUG=libs /bin/true

  Expectations are that in AT_HWCAP2 power10 specific features are listed
  AT_PLATFORM is set to power10
  and that search paths include /power10/ directories

  
  The sample output from power8 machine is this

  $ LD_SHOW_AUXV=yes LD_DEBUG=libs /bin/true
  AT_DCACHEBSIZE:       0x80
  AT_ICACHEBSIZE:       0x80
  AT_UCACHEBSIZE:       0x0
  AT_SYSINFO_EHDR:      0x73b685b20000
  AT_L1I_CACHESIZE:     32768
  AT_L1I_CACHEGEOMETRY: 128B line size, 8-way set associative
  AT_L1D_CACHESIZE:     65536
  AT_L1D_CACHEGEOMETRY: 128B line size, 8-way set associative
  AT_L2_CACHESIZE:      524288
  AT_L2_CACHEGEOMETRY:  128B line size, 8-way set associative
  AT_L3_CACHESIZE:      8388608
  AT_L3_CACHEGEOMETRY:  128B line size, 8-way set associative
  AT_HWCAP:             true_le archpmu vsx arch_2_06 dfp ic_snoop smt mmu fpu altivec ppc64 ppc32
  AT_PAGESZ:            65536
  AT_CLKTCK:            100
  AT_PHDR:              0x5b376320040
  AT_PHENT:             56
  AT_PHNUM:             9
  AT_BASE:              0x73b685b40000
  AT_FLAGS:             0x0
  AT_ENTRY:             0x5b376321ab0
  AT_UID:               1000
  AT_EUID:              1000
  AT_GID:               1000
  AT_EGID:              1000
  AT_SECURE:            0
  AT_RANDOM:            0x7fffc779b3f2
  AT_HWCAP2:            htm-nosc vcrypto tar isel ebb dscr htm arch_2_07
  AT_EXECFN:            /bin/true
  AT_PLATFORM:          power8
  AT_BASE_PLATFORM:     power8
      277374:	find library=libc.so.6 [0]; searching
      277374:	 search cache=/etc/ld.so.cache
      277374:	 search path=/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp:/lib/powerpc64le-linux-gnu/tls/power8/altivec:/lib/powerpc64le-linux-gnu/tls/power8/dfp:/lib/powerpc64le-linux-gnu/tls/power8:/lib/powerpc64le-linux-gnu/tls/altivec/dfp:/lib/powerpc64le-linux-gnu/tls/altivec:/lib/powerpc64le-linux-gnu/tls/dfp:/lib/powerpc64le-linux-gnu/tls:/lib/powerpc64le-linux-gnu/power8/altivec/dfp:/lib/powerpc64le-linux-gnu/power8/altivec:/lib/powerpc64le-linux-gnu/power8/dfp:/lib/powerpc64le-linux-gnu/power8:/lib/powerpc64le-linux-gnu/altivec/dfp:/lib/powerpc64le-linux-gnu/altivec:/lib/powerpc64le-linux-gnu/dfp:/lib/powerpc64le-linux-gnu:/usr/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/tls/power8/altivec:/usr/lib/powerpc64le-linux-gnu/tls/power8/dfp:/usr/lib/powerpc64le-linux-gnu/tls/power8:/usr/lib/powerpc64le-linux-gnu/tls/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/tls/altivec:/usr/lib/powerpc64le-linux-gnu/tls/dfp:/usr/lib/powerpc64le-linux-gnu/tls:/usr/lib/powerpc64le-linux-gnu/power8/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/power8/altivec:/usr/lib/powerpc64le-linux-gnu/power8/dfp:/usr/lib/powerpc64le-linux-gnu/power8:/usr/lib/powerpc64le-linux-gnu/altivec/dfp:/usr/lib/powerpc64le-linux-gnu/altivec:/usr/lib/powerpc64le-linux-gnu/dfp:/usr/lib/powerpc64le-linux-gnu:/lib/tls/power8/altivec/dfp:/lib/tls/power8/altivec:/lib/tls/power8/dfp:/lib/tls/power8:/lib/tls/altivec/dfp:/lib/tls/altivec:/lib/tls/dfp:/lib/tls:/lib/power8/altivec/dfp:/lib/power8/altivec:/lib/power8/dfp:/lib/power8:/lib/altivec/dfp:/lib/altivec:/lib/dfp:/lib:/usr/lib/tls/power8/altivec/dfp:/usr/lib/tls/power8/altivec:/usr/lib/tls/power8/dfp:/usr/lib/tls/power8:/usr/lib/tls/altivec/dfp:/usr/lib/tls/altivec:/usr/lib/tls/dfp:/usr/lib/tls:/usr/lib/power8/altivec/dfp:/usr/lib/power8/altivec:/usr/lib/power8/dfp:/usr/lib/power8:/usr/lib/altivec/dfp:/usr/lib/altivec:/usr/lib/dfp:/usr/lib		(system search path)
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/altivec/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/altivec/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/power8/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/altivec/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/altivec/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/tls/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/altivec/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/altivec/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/power8/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/altivec/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/altivec/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/dfp/libc.so.6
      277374:	  trying file=/lib/powerpc64le-linux-gnu/libc.so.6
      277374:	
      277374:	
      277374:	calling init: /lib/powerpc64le-linux-gnu/libc.so.6
      277374:	
      277374:	
      277374:	initialize program: /bin/true
      277374:	
      277374:	
      277374:	transferring control: /bin/true
      277374:	
      277374:	
      277374:	calling fini: /bin/true [0]
      277374:	

  
  [Regression Potential] 

   * The additional parsing of the new constant for HWCAP / PLATFORM are
  backwards compatible, however, it would be nice for the kernel to have
  the constants backported too. Such that focal kernel has support for
  POWER10 platform too. These will arrive in the hwe kernel, but should
  be backported to the generic kernel too.

  At the moment Ubuntu, does not provide any power10 libraries, thus
  only locally built/provided libraries could be installed and loaded
  from the power10 paths. If such files are present on disk, on a
  power10 machines, and happen to be buggy and/or abi incompatible, hard
  to debug crashes may occur. However, this is no different to locally
  built power9/avx2/avx512/lse etc built libraries on other
  architectures.

  There might be other pieces of software in focal unprepared for
  power10 AT_PLATFORM as it does sort lower than power9, when similar
  stanzas looped in the past unintended breakage may also occur.

  If incompatibilities with power10 support are detected, they would
  need to be fixed up under HWE banner.

  Note there are no current power10 hardware in production, thus these
  changes can currently only affect pre-release hardware.

  [Other Info]
   
   * Original bug report

  
  == Comment: #0 - Tulio Magno Quites Machado Filho <tulioqm at br.ibm.com> - 2020-06-04 09:30:54 ==
  Add the basic enablement of POWER10 in glibc (AT_PLATFORM and AT_HWCAP2) allowing userspace software to use POWER10 features by using STT_GNU_IFUNC or providing shared libraries for POWER10, e.g. with files in /usr/lib/powerpc64le-linux-gnu/power10/.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-power-systems/+bug/1887989/+subscriptions



More information about the foundations-bugs mailing list