[dpdk-dev,3/5] eal: fix compilation for armv8 64-bit
Commit Message
Signed-off-by: David Hunt <david.hunt@intel.com>
---
lib/librte_eal/common/include/arch/arm/rte_cpuflags.h | 9 +++++++++
1 file changed, 9 insertions(+)
Comments
Hello Dave,
On Thu, 29 Oct 2015 17:29:52 +0000
David Hunt <david.hunt@intel.com> wrote:
> Signed-off-by: David Hunt <david.hunt@intel.com>
> ---
> lib/librte_eal/common/include/arch/arm/rte_cpuflags.h | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h b/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h
> index 7ce9d14..27d49c0 100644
> --- a/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h
> +++ b/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h
> @@ -141,12 +141,21 @@ rte_cpu_get_features(__attribute__((unused)) uint32_t leaf,
> __attribute__((unused)) uint32_t subleaf, cpuid_registers_t out)
> {
> int auxv_fd;
> +#ifdef RTE_ARCH_64
> + Elf64_auxv_t auxv;
> +#else
> Elf32_auxv_t auxv;
> +#endif
>
> auxv_fd = open("/proc/self/auxv", O_RDONLY);
> assert(auxv_fd);
> +#ifdef RTE_ARCH_64
> + while (read(auxv_fd, &auxv,
> + sizeof(Elf64_auxv_t)) == sizeof(Elf64_auxv_t)) {
> +#else
> while (read(auxv_fd, &auxv,
> sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) {
> +#endif
> if (auxv.a_type == AT_HWCAP)
> out[REG_HWCAP] = auxv.a_un.a_val;
> else if (auxv.a_type == AT_HWCAP2)
I think, it might be better to do a typedef (or define) like
#ifdef RTE_ARCH_64
typedef Elf64_auxv_t Elf_auxv_t;
#else
typedef Elf32_auxv_t Elf_auxv_t;
#endif
while leaving the above code almost untouched (just Elf32_auxv_t ->
Elf_auxv_t). This is like spagetti... :)
Regards
Jan
@@ -141,12 +141,21 @@ rte_cpu_get_features(__attribute__((unused)) uint32_t leaf,
__attribute__((unused)) uint32_t subleaf, cpuid_registers_t out)
{
int auxv_fd;
+#ifdef RTE_ARCH_64
+ Elf64_auxv_t auxv;
+#else
Elf32_auxv_t auxv;
+#endif
auxv_fd = open("/proc/self/auxv", O_RDONLY);
assert(auxv_fd);
+#ifdef RTE_ARCH_64
+ while (read(auxv_fd, &auxv,
+ sizeof(Elf64_auxv_t)) == sizeof(Elf64_auxv_t)) {
+#else
while (read(auxv_fd, &auxv,
sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) {
+#endif
if (auxv.a_type == AT_HWCAP)
out[REG_HWCAP] = auxv.a_un.a_val;
else if (auxv.a_type == AT_HWCAP2)