Commit da76807f authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont
Browse files

Remove plugin directory per CPU capability hack

On x86, describing and probing optimized plugins is safe (thanks to the
removal of the -mmmx and -msse2 compiler flags).

On PowerPC, libvlccore is built with -maltivec. This is a bug (no
difference before or after the plugin directory hack).
Describing and probing Altivec plugins is no worse.

On ARM, NEON support is detected only at compilation time currently
for lack of a better alternative. So this is a non-issue.
parent 2337ee69
......@@ -68,7 +68,6 @@ void vlc_assert_locked (vlc_mutex_t *);
*/
extern uint32_t cpu_flags;
uint32_t CPUCapabilities( void );
bool vlc_CPU_CheckPluginDir (const char *name);
/*
* Message/logging stuff
......
......@@ -317,25 +317,6 @@ unsigned vlc_CPU (void)
return cpu_flags;
}
const struct
{
uint32_t value;
char name[12];
} cap_dirs[] = {
#if defined ( __i386__ ) || defined ( __x86_64__ )
{ CPU_CAPABILITY_MMX, "mmx" },
{ CPU_CAPABILITY_MMXEXT, "mmxext" },
{ CPU_CAPABILITY_3DNOW, "3dnow" },
{ CPU_CAPABILITY_SSE, "sse" },
#endif
#if defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__)
{ CPU_CAPABILITY_ALTIVEC, "altivec" },
#endif
#if defined (__arm__)
{ CPU_CAPABILITY_NEON, "arm_neon" },
#endif
};
/**
* Return the number of available logical CPU.
*/
......@@ -403,29 +384,6 @@ unsigned vlc_GetCPUCount(void)
#endif
}
/**
* Check if a directory name contains usable plugins w.r.t. the hardware
* capabilities. Loading a plugin when the hardware has insufficient
* capabilities may lead to illegal instructions (SIGILL) and must be avoided.
*
* @param name the name of the directory (<b>not</b> the path)
*
* @return true if the hardware has sufficient capabilities or the directory
* does not require any special capability; false if the running hardware has
* insufficient capabilities.
*/
bool vlc_CPU_CheckPluginDir (const char *name)
{
const unsigned flags = vlc_CPU ();
for (size_t i = 0; i < sizeof (cap_dirs) / sizeof (cap_dirs[0]); i++)
{
if (strcmp (name, cap_dirs[i].name))
continue;
return (flags & cap_dirs[i].value) != 0;
}
return true;
}
static vlc_memcpy_t pf_vlc_memcpy = memcpy;
static vlc_memset_t pf_vlc_memset = memset;
......
......@@ -901,9 +901,7 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank,
break;
/* Skip ".", ".." */
if (!strcmp (file, ".") || !strcmp (file, "..")
/* Skip directories for unsupported optimizations */
|| !vlc_CPU_CheckPluginDir (file))
if (!strcmp (file, ".") || !strcmp (file, ".."))
{
free (file);
continue;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment