NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-arm/48193: On NetBSD/evbearmv6hf-el for Raspberry Pi, MACHINE_ARCH returns earm, but *hf* is expected in /usr/share/mk/bsd.own.mk .



On Sep 13, 2013, at 5:25 PM, Ryo ONODERA <ryo_on%yk.rim.or.jp@localhost> wrote:

> The following reply was made to PR port-arm/48193; it has been noted by GNATS.
> 
> From: Ryo ONODERA <ryo_on%yk.rim.or.jp@localhost>
> To: gnats-bugs%NetBSD.org@localhost
> Cc: 
> Subject: Re: port-arm/48193: On NetBSD/evbearmv6hf-el for Raspberry Pi,
> MACHINE_ARCH returns earm, but *hf* is expected in
> /usr/share/mk/bsd.own.mk .
> Date: Sat, 14 Sep 2013 09:23:55 +0900 (JST)
> 
> Hi,
> 
> From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>, Date: Tue, 10 Sep 
> 2013 14:30:01 +0000 (UTC)
> 
>> The following reply was made to PR port-arm/48193; it has been noted by 
>> GNATS.
>> 
>> From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>
>> To: gnats-bugs%NetBSD.org@localhost
>> Cc: tsutsui%ceres.dti.ne.jp@localhost
>> Subject: Re: port-arm/48193: On NetBSD/evbearmv6hf-el for Raspberry Pi, 
>> MACHINE_ARCH
>>       returns earm, but *hf* is expected in /usr/share/mk/bsd.own.mk .
>> Date: Tue, 10 Sep 2013 23:28:42 +0900
>> 
>> <arm/param.h> doesn't have proper *hf defines for sysctl.hw.machine_arch.
>> http://nxr.netbsd.org/xref/src/sys/arch/arm/include/param.h?r=1.18#5
> 
> Thank you.
> 
> make -V MACHINE_ARCH returns earmhf for evbearmv6hf-el
> Raspberry Pi with the following patch.
> 
> pkgsrc/sysutils/checkpems is built successfully.
> 
> Index: param.h
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/arm/include/param.h,v
> retrieving revision 1.18
> diff -u -r1.18 param.h
> --- param.h   22 Apr 2013 07:53:29 -0000      1.18
> +++ param.h   14 Sep 2013 00:02:22 -0000
> @@ -55,16 +55,26 @@
>  # ifndef MACHINE_ARCH                        /* XXX For now */
>  #  ifndef __ARMEB__
>  #   ifdef __ARM_EABI__
> -#    define  _MACHINE_ARCH   earm
> -#    define  MACHINE_ARCH    "earm"
> +#    if (defined(__VFP_FP__) && !defined(__SOFTFP__)) /* hardfloat */
> +#     define _MACHINE_ARCH   earmhf
> +#     define MACHINE_ARCH    "earmhf"
> +#    else /* softfloat */
> +#     define _MACHINE_ARCH   earm
> +#     define MACHINE_ARCH    "earm"
> +#    endif
>  #   else
>  #    define  _MACHINE_ARCH   arm
>  #    define  MACHINE_ARCH    "arm"
>  #   endif
>  #  else
>  #   ifdef __ARM_EABI__
> -#    define  _MACHINE_ARCH   earmeb
> -#    define  MACHINE_ARCH    "earmeb"
> +#    if (defined(__VFP_FP__) && !defined(__SOFTFP__)) /* hardfloat */
> +#     define _MACHINE_ARCH   earmhfeb
> +#     define MACHINE_ARCH    "earmhfeb"
> +#    else /* softfloat */
> +#     define _MACHINE_ARCH   earmeb
> +#     define MACHINE_ARCH    "earmeb"
> +#    endif
>  #   else
>  #    define  _MACHINE_ARCH   armeb
>  #    define  MACHINE_ARCH    "armeb"
> @@ -80,16 +90,26 @@
>  # define     MACHINE         "arm"
>  # ifndef __ARMEB__
>  #  ifdef __ARM_EABI__
> -#   define   _MACHINE_ARCH   earm
> -#   define   MACHINE_ARCH    "earm"
> +#   if (defined(__VFP_FP__) && !defined(__SOFTFP__)) /* hardfloat */
> +#    define  _MACHINE_ARCH   earmhf
> +#    define  MACHINE_ARCH    "earmhf"
> +#   else /* softfloat */
> +#    define  _MACHINE_ARCH   earm
> +#    define  MACHINE_ARCH    "earm"
> +#   endif
>  #  else
>  #   define   _MACHINE_ARCH   arm
>  #   define   MACHINE_ARCH    "arm"
>  #  endif
>  # else
>  #  ifdef __ARM_EABI__
> -#   define   _MACHINE_ARCH   earmeb
> -#   define   MACHINE_ARCH    "earmeb"
> +#   if (defined(__VFP_FP__) && !defined(__SOFTFP__)) /* hardfloat */
> +#    define  _MACHINE_ARCH   earmhfeb
> +#    define  MACHINE_ARCH    "earmhfeb"
> +#   else /* softfloat */
> +#    define  _MACHINE_ARCH   earmeb
> +#    define  MACHINE_ARCH    "earmeb"
> +#   endif
>  #  else
>  #   define   _MACHINE_ARCH   armeb
>  #   define   MACHINE_ARCH    "armeb"

That doesn't really work since the kernel is always softfloat.

I fixed it differently by embedding the MACHINE_ARCH in a note
in the executable.  The kernel records the supplied MACHINE_ARCH
in and returns when a sysctl for hw.machine_arch is done.



Home | Main Index | Thread Index | Old Index