mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
powerpc: Move cache geometry information to ld diagnostics
From LD_SHOW_AUXV output. Checked on powerpc64le-linux-gnu. Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
This commit is contained in:
parent
8a995670a8
commit
a768993c10
2 changed files with 50 additions and 66 deletions
|
@ -38,6 +38,38 @@ print_hwcap_value (const char *label, int hwcap, unsigned long int value)
|
|||
_dl_printf ("\"\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_cache_geometry_value (const char *label, unsigned long int geometry)
|
||||
{
|
||||
unsigned long int assocty, line;
|
||||
|
||||
_dl_printf ("powerpc.cpu_features.%s=\"", label);
|
||||
|
||||
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);
|
||||
}
|
||||
_dl_printf ("\"\n");
|
||||
}
|
||||
|
||||
void
|
||||
_dl_diagnostics_cpu (void)
|
||||
{
|
||||
|
@ -45,4 +77,21 @@ _dl_diagnostics_cpu (void)
|
|||
print_hwcap_value ("hwcap2", AT_HWCAP2, GLRO(dl_hwcap2));
|
||||
print_hwcap_value ("hwcap3", AT_HWCAP3, GLRO(dl_hwcap3));
|
||||
print_hwcap_value ("hwcap4", AT_HWCAP4, GLRO(dl_hwcap4));
|
||||
|
||||
for (ElfW(auxv_t) *av = GLRO(dl_auxv); av->a_type != AT_NULL; ++av)
|
||||
switch (av->a_type)
|
||||
{
|
||||
case AT_L1I_CACHEGEOMETRY:
|
||||
print_cache_geometry_value ("l1i_cachegeometry", av->a_un.a_val);
|
||||
break;
|
||||
case AT_L1D_CACHEGEOMETRY:
|
||||
print_cache_geometry_value ("l1d_cachegeometry", av->a_un.a_val);
|
||||
break;
|
||||
case AT_L2_CACHEGEOMETRY:
|
||||
print_cache_geometry_value ("l2_cachegeometry", av->a_un.a_val);
|
||||
break;
|
||||
case AT_L3_CACHEGEOMETRY:
|
||||
print_cache_geometry_value ("l3_cachegeometry", av->a_un.a_val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,71 +124,6 @@ _dl_string_platform (const char *str)
|
|||
return -1;
|
||||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
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:
|
||||
/* Fallback to generic output mechanism. */
|
||||
return -1;
|
||||
}
|
||||
_dl_printf ("\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#define _dl_procinfo(type, word) -1
|
||||
|
||||
#endif /* dl-procinfo.h */
|
||||
|
|
Loading…
Add table
Reference in a new issue