[dpdk-dev,3/5] eal: fix compilation for armv8 64-bit

Message ID 1446139794-16071-4-git-send-email-david.hunt@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Hunt, David Oct. 29, 2015, 5:29 p.m. UTC
  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

Jan Viktorin Oct. 29, 2015, 5:38 p.m. UTC | #1
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
  

Patch

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)