]> sourceware.org Git - glibc.git/commitdiff
Print cache size and geometry auxv types on LD_SHOW_AUXV=1
authorTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Wed, 19 Dec 2018 21:03:12 +0000 (19:03 -0200)
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Wed, 19 Dec 2018 21:08:02 +0000 (19:08 -0200)
Add support for AT_L1I_CACHESIZE, AT_L1I_CACHEGEOMETRY,
AT_L1D_CACHESIZE, AT_L1D_CACHEGEOMETRY, AT_L2_CACHESIZE,
AT_L2_CACHEGEOMETRY, AT_L3_CACHESIZE and AT_L3_CACHEGEOMETRY when
LD_SHOW_AUXV=1.

AT_L*_CACHESIZE is printed as decimal and represent the number of
bytes of the cache.

AT_L*_CACHEGEOMETRY is treated in order to specify the cache line size
and its associativity.

Example output from a POWER8:

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

Some of the new types are longer than the previous ones, requiring to
increase the indentation in order to keep the values aligned.

* elf/dl-sysdep.c (auxvars): Add AT_L1I_CACHESIZE,
AT_L1I_CACHEGEOMETRY, AT_L1D_CACHESIZE, AT_L1D_CACHEGEOMETRY,
AT_L2_CACHESIZE, AT_L2_CACHEGEOMETRY, AT_L3_CACHESIZE and
AT_L3_CACHEGEOMETRY.  Fix indentation when printing the other
fields.
(_dl_show_auxv): Give a special treatment to
AT_L1I_CACHEGEOMETRY, AT_L1D_CACHEGEOMETRY, AT_L2_CACHEGEOMETRY
and AT_L3_CACHEGEOMETRY.
* sysdeps/powerpc/dl-procinfo.h (cache_geometry): New function.
(_dl_procinfo): Fix indentation when printing AT_HWCAP and
AT_HWCAP2.  Add support for AT_L1I_CACHEGEOMETRY,
AT_L1D_CACHEGEOMETRY, AT_L2_CACHEGEOMETRY and AT_L3_CACHEGEOMETRY.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
ChangeLog
elf/dl-sysdep.c
sysdeps/powerpc/dl-procinfo.h

index 89ad5264577680b1c43c3385c3de90acdee2abc5..b03f9455677194f2decf19827e5be1116c50d971 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2018-12-19  Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>
+
+       * elf/dl-sysdep.c (auxvars): Add AT_L1I_CACHESIZE,
+       AT_L1I_CACHEGEOMETRY, AT_L1D_CACHESIZE, AT_L1D_CACHEGEOMETRY,
+       AT_L2_CACHESIZE, AT_L2_CACHEGEOMETRY, AT_L3_CACHESIZE and
+       AT_L3_CACHEGEOMETRY.  Fix indentation when printing the other
+       fields.
+       (_dl_show_auxv): Give a special treatment to
+       AT_L1I_CACHEGEOMETRY, AT_L1D_CACHEGEOMETRY, AT_L2_CACHEGEOMETRY
+       and AT_L3_CACHEGEOMETRY.
+       * sysdeps/powerpc/dl-procinfo.h (cache_geometry): New function.
+       (_dl_procinfo): Fix indentation when printing AT_HWCAP and
+       AT_HWCAP2.  Add support for AT_L1I_CACHEGEOMETRY,
+       AT_L1D_CACHEGEOMETRY, AT_L2_CACHEGEOMETRY and AT_L3_CACHEGEOMETRY.
+
 2018-12-19  Andreas Schwab  <schwab@suse.de>
 
        * nscd/connections.c (check_use): Don't abort on invalid len.
index 998c5d52bcab8193bcb7d2480a0b6b4c233e3155..939832517eee84001d3ae2cb01a03e8384cedb14 100644 (file)
@@ -277,38 +277,46 @@ _dl_show_auxv (void)
     {
       static const struct
       {
-       const char label[17];
+       const char label[22];
        enum { unknown = 0, dec, hex, str, ignore } form : 8;
       } auxvars[] =
        {
-         [AT_EXECFD - 2] =             { "EXECFD:       ", dec },
-         [AT_EXECFN - 2] =             { "EXECFN:       ", str },
-         [AT_PHDR - 2] =               { "PHDR:         0x", hex },
-         [AT_PHENT - 2] =              { "PHENT:        ", dec },
-         [AT_PHNUM - 2] =              { "PHNUM:        ", dec },
-         [AT_PAGESZ - 2] =             { "PAGESZ:       ", dec },
-         [AT_BASE - 2] =               { "BASE:         0x", hex },
-         [AT_FLAGS - 2] =              { "FLAGS:        0x", hex },
-         [AT_ENTRY - 2] =              { "ENTRY:        0x", hex },
-         [AT_NOTELF - 2] =             { "NOTELF:       ", hex },
-         [AT_UID - 2] =                { "UID:          ", dec },
-         [AT_EUID - 2] =               { "EUID:         ", dec },
-         [AT_GID - 2] =                { "GID:          ", dec },
-         [AT_EGID - 2] =               { "EGID:         ", dec },
-         [AT_PLATFORM - 2] =           { "PLATFORM:     ", str },
-         [AT_HWCAP - 2] =              { "HWCAP:        ", hex },
-         [AT_CLKTCK - 2] =             { "CLKTCK:       ", dec },
-         [AT_FPUCW - 2] =              { "FPUCW:        ", hex },
-         [AT_DCACHEBSIZE - 2] =        { "DCACHEBSIZE:  0x", hex },
-         [AT_ICACHEBSIZE - 2] =        { "ICACHEBSIZE:  0x", hex },
-         [AT_UCACHEBSIZE - 2] =        { "UCACHEBSIZE:  0x", hex },
+         [AT_EXECFD - 2] =             { "EXECFD:            ", dec },
+         [AT_EXECFN - 2] =             { "EXECFN:            ", str },
+         [AT_PHDR - 2] =               { "PHDR:              0x", hex },
+         [AT_PHENT - 2] =              { "PHENT:             ", dec },
+         [AT_PHNUM - 2] =              { "PHNUM:             ", dec },
+         [AT_PAGESZ - 2] =             { "PAGESZ:            ", dec },
+         [AT_BASE - 2] =               { "BASE:              0x", hex },
+         [AT_FLAGS - 2] =              { "FLAGS:             0x", hex },
+         [AT_ENTRY - 2] =              { "ENTRY:             0x", hex },
+         [AT_NOTELF - 2] =             { "NOTELF:            ", hex },
+         [AT_UID - 2] =                { "UID:               ", dec },
+         [AT_EUID - 2] =               { "EUID:              ", dec },
+         [AT_GID - 2] =                { "GID:               ", dec },
+         [AT_EGID - 2] =               { "EGID:              ", dec },
+         [AT_PLATFORM - 2] =           { "PLATFORM:          ", str },
+         [AT_HWCAP - 2] =              { "HWCAP:             ", hex },
+         [AT_CLKTCK - 2] =             { "CLKTCK:            ", dec },
+         [AT_FPUCW - 2] =              { "FPUCW:             ", hex },
+         [AT_DCACHEBSIZE - 2] =        { "DCACHEBSIZE:       0x", hex },
+         [AT_ICACHEBSIZE - 2] =        { "ICACHEBSIZE:       0x", hex },
+         [AT_UCACHEBSIZE - 2] =        { "UCACHEBSIZE:       0x", hex },
          [AT_IGNOREPPC - 2] =          { "IGNOREPPC", ignore },
-         [AT_SECURE - 2] =             { "SECURE:       ", dec },
-         [AT_BASE_PLATFORM - 2] =      { "BASE_PLATFORM:", str },
-         [AT_SYSINFO - 2] =            { "SYSINFO:      0x", hex },
-         [AT_SYSINFO_EHDR - 2] =       { "SYSINFO_EHDR: 0x", hex },
-         [AT_RANDOM - 2] =             { "RANDOM:       0x", hex },
-         [AT_HWCAP2 - 2] =             { "HWCAP2:       0x", hex },
+         [AT_SECURE - 2] =             { "SECURE:            ", dec },
+         [AT_BASE_PLATFORM - 2] =      { "BASE_PLATFORM:     ", str },
+         [AT_SYSINFO - 2] =            { "SYSINFO:           0x", hex },
+         [AT_SYSINFO_EHDR - 2] =       { "SYSINFO_EHDR:      0x", hex },
+         [AT_RANDOM - 2] =             { "RANDOM:            0x", hex },
+         [AT_HWCAP2 - 2] =             { "HWCAP2:            0x", hex },
+         [AT_L1I_CACHESIZE - 2] =      { "L1I_CACHESIZE:     ", dec },
+         [AT_L1I_CACHEGEOMETRY - 2] =  { "L1I_CACHEGEOMETRY: 0x", hex },
+         [AT_L1D_CACHESIZE - 2] =      { "L1D_CACHESIZE:     ", dec },
+         [AT_L1D_CACHEGEOMETRY - 2] =  { "L1D_CACHEGEOMETRY: 0x", hex },
+         [AT_L2_CACHESIZE - 2] =       { "L2_CACHESIZE:      ", dec },
+         [AT_L2_CACHEGEOMETRY - 2] =   { "L2_CACHEGEOMETRY:  0x", hex },
+         [AT_L3_CACHESIZE - 2] =       { "L3_CACHESIZE:      ", dec },
+         [AT_L3_CACHEGEOMETRY - 2] =   { "L3_CACHEGEOMETRY:  0x", hex },
        };
       unsigned int idx = (unsigned int) (av->a_type - 2);
 
@@ -320,7 +328,9 @@ _dl_show_auxv (void)
       assert (AT_NULL == 0);
       assert (AT_IGNORE == 1);
 
-      if (av->a_type == AT_HWCAP || av->a_type == AT_HWCAP2)
+      if (av->a_type == AT_HWCAP || av->a_type == AT_HWCAP2
+         || AT_L1I_CACHEGEOMETRY || AT_L1D_CACHEGEOMETRY
+         || AT_L2_CACHEGEOMETRY || AT_L3_CACHEGEOMETRY)
        {
          /* These are handled in a special way per platform.  */
          if (_dl_procinfo (av->a_type, av->a_un.a_val) == 0)
index 3803379ab2303658dad8c024e2b619237a99d511..34bf80de9fbb17c09b38cb7a0f6c754e6ac0cf59 100644 (file)
@@ -147,6 +147,37 @@ _dl_string_platform (const char *str)
 }
 
 #if IS_IN (rtld)
+static inline void
+cache_geometry (const char * name, unsigned long int geometry)
+{
+  unsigned long int assocty, line;
+
+  _dl_printf ("%s", name);
+
+  line = geometry & 0xffff;
+  assocty = (geometry >> 16) & 0xffff;
+
+  if (line == 0)
+    _dl_printf ("Unknown line size, ");
+  else
+    _dl_printf ("%luB line size, ", line);
+
+  switch (assocty)
+    {
+    case 0:
+      _dl_printf ("Unknown associativity");
+      break;
+    case 1:
+      _dl_printf ("Directly mapped");
+      break;
+    case 0xffff:
+      _dl_printf ("Fully associative");
+      break;
+    default:
+      _dl_printf ("%lu-way set associative", assocty);
+    }
+}
+
 static inline int
 __attribute__ ((unused))
 _dl_procinfo (unsigned int type, unsigned long int word)
@@ -154,7 +185,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
   switch(type)
     {
     case AT_HWCAP:
-      _dl_printf ("AT_HWCAP:       ");
+      _dl_printf ("AT_HWCAP:            ");
 
       for (int i = 0; i <= _DL_HWCAP_LAST; ++i)
        if (word & (1 << i))
@@ -164,7 +195,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
       {
        unsigned int offset = _DL_HWCAP_LAST + 1;
 
-       _dl_printf ("AT_HWCAP2:      ");
+       _dl_printf ("AT_HWCAP2:           ");
 
         /* We have to go through them all because the kernel added the
           AT_HWCAP2 features starting with the high bits.  */
@@ -173,6 +204,26 @@ _dl_procinfo (unsigned int type, unsigned long int word)
            _dl_printf (" %s", _dl_hwcap_string (offset + i));
        break;
       }
+    case AT_L1I_CACHEGEOMETRY:
+      {
+       cache_geometry ("AT_L1I_CACHEGEOMETRY: ", word);
+       break;
+      }
+    case AT_L1D_CACHEGEOMETRY:
+      {
+       cache_geometry ("AT_L1D_CACHEGEOMETRY: ", word);
+       break;
+      }
+    case AT_L2_CACHEGEOMETRY:
+      {
+       cache_geometry ("AT_L2_CACHEGEOMETRY:  ", word);
+       break;
+      }
+    case AT_L3_CACHEGEOMETRY:
+      {
+       cache_geometry ("AT_L3_CACHEGEOMETRY:  ", word);
+       break;
+      }
     default:
       /* This should not happen.  */
       return -1;
This page took 0.076771 seconds and 5 git commands to generate.