如何在iOS上运行时确定ARMv8功能? [英] How to determine ARMv8 features at runtime on iOS?

查看:179
本文介绍了如何在iOS上运行时确定ARMv8功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试确定iOS上运行时可选的ARMv8 cpu功能。在OS X桌面上,如i686,x86_64,PPC和PPC64,我们可以使用 sysctl 。例如,请参阅 PR 3108,MacOS X上的无SIGILL处理器功能检测



无SIGILL处理器功能部分非常重要,因为 SIGILL - 基于功能的探测功能会破坏Apple平台上的内存。我遵循的至少三个项目都遇到了问题,包括Crypto ++和OpenSSL。问题的另一部分是问题,如 Apple Clang是否缺少Xcode 10下的ARMv8 / Aarch64的CRC32?,其中核心ARMv8功能应该存在似乎丢失或不支持。



我已经找到了iOS OS等效的OS X桌面,但我找不到它们(见下文)。 / p>

我们真的更愿意避免使用像CommonCrypto这样的Apple框架。我们努力保持与平台无关。我们不使用CommonCrypto,但如果没有任何不可知的东西(我正在制作它),我会考虑使用下面的Apple函数:

  BOOL CCHasAes(); 
BOOL CCHasSHA1();
BOOL CCHasSHA2();

Apple是否发布了一种在运行时确定cpu功能的方法?



我们如何在iOS上确定运行时的cpu功能?






这些可能是相关的,但我我不确定这是否是我们所拥有的最好的,或者这是我们唯一拥有的东西,还是有其他方法可以接近它。








下面我正在寻找CRC-32,CRC-32C,AES,PMULL,SHA1和SHA2功能。我没有看到任何类似于我正在寻找的点击。 Apple自Xcode 7起支持ARMv8,因此8.2支持CPU。

  $ grep -IR CTL_ / Applications / Xcode.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS8.2.sdk | \ 
sed's | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk/usr/include | ... | g'
... / c ++ / 4.2.1 / bits / c ++ config.h:#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
... / netinet / in.h:#define IPCTL_FORWARDING 1 / *充当路由器* /
... / netinet / in.h:#define IPCTL_SENDREDIRECTS 2 / *可以在转发* /
... / netinet / in.h时发送重定向:#define IPCTL_DEFTTL 3 / *默认TTL * /
... / netinet / in.h:#define IPCTL_DEFMTU 4 / *默认MTU * /
... / netinet / in.h:#define IPCTL_RTEXPIRE 5 / *克隆路由到期时间* /
... / netinet / in.h:#define IPCTL_RTMINEXPIRE 6 / *最小到期时间值* /
... / netinet / in.h:#define IPCTL_RTMAXCACHE 7 / *触发级别为动态到期* /
... / netinet / in.h:#define IPCTL_SOURCEROUTE 8 / *可执行源路由* /
... / netine t / in.h:#define IPCTL_DIRECTEDBROADCAST 9 / *可以重新广播收到的数据包* /
... / netinet / in.h:#define IPCTL_INTRQMAXLEN 10 / *最大netisr队列长度* /
... / netinet / in.h:#define IPCTL_INTRQDROPS 11 / * netisr q drop * * /
... / netinet / in.h:#define IPCTL_STATS 12 / * ipstat结构* /
... / netinet / in.h:#define IPCTL_ACCEPTSOURCEROUTE 13 / *可以接受源路由数据包* /
... / netinet / in.h:#define IPCTL_FASTFORWARDING 14 / *使用快速IP转发代码* /
... / netinet / in.h:#define IPCTL_KEEPFAITH 15 / *已弃用* /
... / netinet / in.h:#define IPCTL_GIF_TTL 16 / *默认TTL用于gif封装packet * /
... / netinet / in.h:#define IPCTL_MAXID 17
... / netinet6 / in6.h:#define IPV6CTL_FORWARDING 1 / *充当路由器* /
... / netinet6 / in6.h:#define IPV6CTL_SENDREDIRECTS 2 / *可以在转发* /
... / netinet6 / in6.h时发送重定向:#define IPV6CTL_DEFHLIM 3 / *默认跳跃限制* /
... / netinet6 / in6.h:#定义IPV6CTL_DEFMTU 4 / *默认MTU * /
... / netinet6 / in6.h:#define IPV6CTL_FORWSRCRT 5 / * forward source-routed dgrams * /
... / netinet6 / in6.h: #define IPV6CTL_STATS 6 / * stats * /
... / netinet6 / in6.h:#define IPV6CTL_MRTSTATS 7 / *组播转发统计* /
... / netinet6 / in6.h:#define IPV6CTL_MRTPROTO 8 / *组播路由协议* /
... / netinet6 / in6.h:#define IPV6CTL_MAXFRAGPACKETS 9 / *最大数据包重组队列* /
... / netinet6 / in6.h:#定义IPV6CTL_SOURCECHECK 10 / *验证源路由和intf * /
... / netinet6 / in6.h:#define IPV6CTL_SOURCECHECK_LOGINT 11 / * minimume logging interval * /
... / netinet6 / in6.h :#define IPV6CTL_ACCEPT_RTADV 12
... / n etinet6 / in6.h:#define IPV6CTL_KEEPFAITH 13 / * deprecated * /
... / netinet6 / in6.h:#define IPV6CTL_LOG_INTERVAL 14
... / netinet6 / in6.h:#define IPV6CTL_HDRNESTLIMIT 15
... / netinet6 / in6.h:#define IPV6CTL_DAD_COUNT 16
... / netinet6 / in6.h:#define IPV6CTL_AUTO_FLOWLABEL 17
... / netinet6 / in6.h :#define IPV6CTL_DEFMCASTHLIM 18
... / netinet6 / in6.h:#define IPV6CTL_GIF_HLIM 19 / * gif encap packet的默认HLIM * /
... / netinet6 / in6.h:#define IPV6CTL_KAME_VERSION 20
... / netinet6 / in6.h:#define IPV6CTL_USE_DEPRECATED 21 / *使用deprecd addr(RFC2462 5.5.4)* /
... / netinet6 / in6.h:#define IPV6CTL_RR_PRUNE 22 / *路由器重新编号的步行计时器* /
... / netinet6 / in6.h:#define IPV6CTL_MAPPED_ADDR 23
... / netinet6 / in6.h:#define IPV6CTL_V6ONLY 24
。 ../netinet6/in6.h:#define IPV6CTL_RTEXPIRE 25 / *克隆路线ex盗版时间* /
... / netinet6 / in6.h:#define IPV6CTL_RTMINEXPIRE 26 / *最小到期时间值* /
... / netinet6 / in6.h:#define IPV6CTL_RTMAXCACHE 27 / *动态到期的触发级别* /
... / netinet6 / in6.h:#define IPV6CTL_USETEMPADDR 32 / *使用临时地址[RFC 4941] * /
... / netinet6 / in6.h :#define IPV6CTL_TEMPPLTIME 33 / * tmpaddrs的首选生命周期* /
... / netinet6 / in6.h:#define IPV6CTL_TEMPVLTIME 34 / * tmpaddrs的有效生命周期* /
... / netinet6 / in6 .h:#define IPV6CTL_AUTO_LINKLOCAL 35 / *自动链接本地地址分配* /
... / netinet6 / in6.h:#define IPV6CTL_RIP6STATS 36 / * raw_ip6 stats * /
... / netinet6 /in6.h:#define IPV6CTL_PREFER_TEMPADDR 37 / *首选临时地址为src * /
... / netinet6 / in6.h:#define IPV6CTL_ADDRCTLPOLICY 38 / *获取/设置地址选择政策* /
... / netinet6 / in6.h:#define IPV6 CTL_USE_DEFAULTZONE 39 / *使用默认范围区域* /
... / netinet6 / in6.h:#define IPV6CTL_MAXFRAGS 41 / * max fragments * /
... / netinet6 / in6.h:#define IPV6CTL_MCAST_PMTU 44 / *为mcast启用pMTU发现? * /
... / netinet6 / in6.h:#define IPV6CTL_NEIGHBORGCTHRESH 46
... / netinet6 / in6.h:#define IPV6CTL_MAXIFPREFIXES 47
... / netinet6 / in6。 h:#define IPV6CTL_MAXIFDEFROUTERS 48
... / netinet6 / in6.h:#define IPV6CTL_MAXDYNROUTES 49
... / netinet6 / in6.h:#define ICMPV6CTL_ND6_ONLINKNSRFC4861 50
... / netinet6 / in6.h:/ *应从当前IPV6CTL_MAXID值添加新条目。 * /
... / netinet6 / in6.h:#define IPV6CTL_MAXID 51
... / sys / ioctl.h:#ifndef _SYS_IOCTL_H_
... / sys / ioctl.h :#define _SYS_IOCTL_H_
... / sys / ioctl.h:#endif / *!_SYS_IOCTL_H_ * /
... / sys / ioctl.h:*保持在_SYS_IOCTL_H_
.. ./sys/ioctl.h:#endif / *!_SYS_IOCTL_H_ * /
... / sys / mount.h:* Sysctl CTL_VFS定义。
... / sys / mount.h:int vc_vers; / *应该是VFSIDCTL_VERS1(下面)* /
... / sys / mount.h:#define VFS_CTL_VERS1 0x01
... / sys / mount.h:#define VFS_CTL_STATFS 0x00010001 / * statfs * /
... / sys / mount.h:#define VFS_CTL_UMOUNT 0x00010002 / * unmount * /
... / sys / mount.h:#define VFS_CTL_QUERY 0x00010003 / *有什么不对吗? (vfsquery)* /
... / sys / mount.h:#define VFS_CTL_NEWADDR 0x00010004 / *重新连接到新地址* /
... / sys / mount.h:#define VFS_CTL_TIMEO 0x00010005 / *为vfs通知设置超时* /
... / sys / mount.h:#define VFS_CTL_NOLOCKS 0x00010006 / *禁用文件锁定* /
... / sys / mount.h:#define VFS_CTL_SADDR 0x00010007 / * get server address * /
... / sys / mount.h:#define VFS_CTL_DISC 0x00010008 / * server disconnected * /
... / sys / mount.h:#define VFS_CTL_SERVERINFO 0x00010009 / *有关fs服务器的信息* /
... / sys / mount.h:#define VFS_CTL_NSTATUS 0x0001000A / * netfs mount status * /
... / sys / mount.h:* NetFS mount status - 由VFS_CTL_NSTATUS
... / sys / socket.h返回:*与网络相关的sysctl,CTL_NET的定义。
... / sys / sysctl.h:#ifndef _SYS_SYSCTL_H_
... / sys / sysctl.h:#define _SYS_SYSCTL_H_
... / sys / sysctl.h:#define CTL_MAXNAME 12 / *支持的最大组件数* /
... / sys / sysctl.h:* SYSCTL_OUT(rey,本地缓冲区,长度)
... / sys / sysctl.h:*例如SYSCTL_INT(_ parent,OID_AUTO,name,CTLFLAG_RW,& variable,0,);
... / sys / sysctl.h:#define SYSCTL_DEF_ENABLED
... / sys / sysctl.h:#ifdef SYSCTL_DEF_ENABLED
... / sys / sysctl.h:#define CTL_UNSPEC 0 / * unused * /
... / sys / sysctl.h:#define CTL_KERN 1 / *high kernel:proc,limits * /
... / sys / sysctl.h :#define CTL_VM 2 / *虚拟内存* /
... / sys / sysctl.h:#define CTL_VFS 3 / *文件系统,挂载类型是下一个* /
... / sys / sysctl.h:#define CTL_NET 4 / * network,参见socket.h * /
... / sys / sysctl.h:#define CTL_DEBUG 5 / *调试参数* /
... / sys / sysctl.h:#define CTL_HW 6 / * generic cpu / io * /
... / sys / sysctl.h:#define CTL_MACHDEP 7 / * machine dependent * /
... / sys / sysctl.h:#define CTL_USER 8 / * user-level * /
... / sys / sysctl.h:#define CTL_MAXID 9 / *有效顶级ID数* /
... / sys / sysctl.h:#define CTL_NAMES {\
... / sys / sysctl.h:* CTL_KERN标识符
... / sys / sysctl.h:*不要再添加这样的sysctl。而是使用SYSCTL _ *()宏
... / sys / sysctl.h:#define CTL_KERN_NAMES {\
... / sys / sysctl.h:* CTL_VFS identifier
... / sys / sysctl.h:#define CTL_VFS_NAMES {\
... / sys / sysctl.h:* CTL_VM标识符
... / sys / sysctl.h:#define CTL_VM_NAMES {\
... / sys / sysctl.h:* CTL_HW标识符
... / sys / sysctl.h:#define CTL_HW_NAMES {\
... / sys / sysctl.h:* CTL_USER定义
... / sys / sysctl.h:#define CTL_USER_NAMES {\
... / sys / sysctl.h:* CTL_DEBUG定义
.. ./sys/sysctl.h:#define CTL_DEBUG_NAME 0 / * string:变量名称* /
... / sys / sysctl.h:#define CTL_DEBUG_VALUE 1 / * int:变量值* /
... / sys / sysctl.h:#define CTL_DEBUG_MAXID 20
... / sys / sysctl.h:#if(CTL_MAXID!= 9)|| (KERN_MAXID!= 72)|| (VM_MAXID!= 6)|| (HW_MAXID!= 26)|| (USER_MAXID!= 21)|| (CTL_DEBUG_MAXID!= 20)
... / sys / sysctl.h:#error使用SYSCTL _ *()宏和OID_AUTO代替!
... / sys / sysctl.h:#endif / * SYSCTL_DEF_ENABLED * /
... / sys / sysctl.h:#endif / *!_SYS_SYSCTL_H_ * /
... /sys/termios.h:#if!defined(_SYS_IOCTL_COMPAT_H_)|| __DARWIN_UNIX03
... / sys / termios.h:#endif / *!_SYS_IOCTL_COMPAT_H_ * /


解决方案

据我所知,Apple今年将取消对32位芯片的支持。 由于Apple A7处理器Apple使用ArmV8-A内核用于其SoC ...所以也许你不能用新的API选择它们因为你没有什么可选择的...... Apple通常对这类事物并使用自动切换移动平台上的某些功能。然而,基本上每个iOS 11 SoC都将具有相同的基本硬件功能,除了核心数量和能量管理(SoC> = A10 Fusion不同)。我在一个月前搜索同样的东西,但显然在iOS上你必须掌握在操作系统中。


I am trying to determine when optional ARMv8 cpu features are available on iOS at runtime. On OS X desktops, like i686, x86_64, PPC and PPC64 we can use sysctl. See, for example, PR 3108, SIGILL-free processor capabilities detection on MacOS X.

The "SIGILL-free processor capabilities" part is important because SIGILL-based feature probes corrupt memory on Apple platforms. At least three projects I follow have had problems with it, including Crypto++ and OpenSSL. Another part of the problem is questions like Does Apple Clang lack CRC32 for ARMv8/Aarch64 under Xcode 10?, where core ARMv8 features that should be present seem to be missing or unsupported.

I've looked for the iOS equivalent of the OS X desktops but I cannot find them (see below).

We really prefer to avoid Apple frameworks like CommonCrypto. We try hard to stay platform agnostic. We don't use CommonCrypto, but I would consider using an Apple functions like below if there's nothing agnostic available (I'm making them up):

BOOL CCHasAes();
BOOL CCHasSHA1();
BOOL CCHasSHA2();

Does Apple publish a method to determine cpu features at runtime?

How do we determine cpu features at runtime on iOS?


These may be related, but I'm not sure if that's the best we have, or if that's the only thing we have, or if there are other ways to approach it.


Below I am looking for CRC-32, CRC-32C, AES, PMULL, SHA1 and SHA2 features. I don't see any hits that resemble what I am looking for. Apple supports ARMv8 since Xcode 7, so 8.2 supports the CPU.

$ grep -IR CTL_ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk | \
  sed 's|/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk/usr/include|...|g'
.../c++/4.2.1/bits/c++config.h:#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
.../netinet/in.h:#define        IPCTL_FORWARDING        1       /* act as router */
.../netinet/in.h:#define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
.../netinet/in.h:#define        IPCTL_DEFTTL            3       /* default TTL */
.../netinet/in.h:#define        IPCTL_DEFMTU            4       /* default MTU */
.../netinet/in.h:#define IPCTL_RTEXPIRE         5       /* cloned route expiration time */
.../netinet/in.h:#define IPCTL_RTMINEXPIRE      6       /* min value for expiration time */
.../netinet/in.h:#define IPCTL_RTMAXCACHE       7       /* trigger level for dynamic expire */
.../netinet/in.h:#define        IPCTL_SOURCEROUTE       8       /* may perform source routes */
.../netinet/in.h:#define        IPCTL_DIRECTEDBROADCAST 9       /* may re-broadcast received packets */
.../netinet/in.h:#define IPCTL_INTRQMAXLEN      10      /* max length of netisr queue */
.../netinet/in.h:#define        IPCTL_INTRQDROPS        11      /* number of netisr q drops */
.../netinet/in.h:#define        IPCTL_STATS             12      /* ipstat structure */
.../netinet/in.h:#define        IPCTL_ACCEPTSOURCEROUTE 13      /* may accept source routed packets */
.../netinet/in.h:#define        IPCTL_FASTFORWARDING    14      /* use fast IP forwarding code */
.../netinet/in.h:#define        IPCTL_KEEPFAITH         15      /* deprecated */
.../netinet/in.h:#define        IPCTL_GIF_TTL           16      /* default TTL for gif encap packet */
.../netinet/in.h:#define        IPCTL_MAXID             17
.../netinet6/in6.h:#define      IPV6CTL_FORWARDING      1       /* act as router */
.../netinet6/in6.h:#define      IPV6CTL_SENDREDIRECTS   2       /* may send redirects when forwarding */
.../netinet6/in6.h:#define      IPV6CTL_DEFHLIM         3       /* default Hop-Limit */
.../netinet6/in6.h:#define      IPV6CTL_DEFMTU          4       /* default MTU */
.../netinet6/in6.h:#define      IPV6CTL_FORWSRCRT       5       /* forward source-routed dgrams */
.../netinet6/in6.h:#define      IPV6CTL_STATS           6       /* stats */
.../netinet6/in6.h:#define      IPV6CTL_MRTSTATS        7       /* multicast forwarding stats */
.../netinet6/in6.h:#define      IPV6CTL_MRTPROTO        8       /* multicast routing protocol */
.../netinet6/in6.h:#define      IPV6CTL_MAXFRAGPACKETS  9       /* max packets reassembly queue */
.../netinet6/in6.h:#define      IPV6CTL_SOURCECHECK     10      /* verify source route and intf */
.../netinet6/in6.h:#define      IPV6CTL_SOURCECHECK_LOGINT 11   /* minimume logging interval */
.../netinet6/in6.h:#define      IPV6CTL_ACCEPT_RTADV    12
.../netinet6/in6.h:#define      IPV6CTL_KEEPFAITH       13      /* deprecated */
.../netinet6/in6.h:#define      IPV6CTL_LOG_INTERVAL    14
.../netinet6/in6.h:#define      IPV6CTL_HDRNESTLIMIT    15
.../netinet6/in6.h:#define      IPV6CTL_DAD_COUNT       16
.../netinet6/in6.h:#define      IPV6CTL_AUTO_FLOWLABEL  17
.../netinet6/in6.h:#define      IPV6CTL_DEFMCASTHLIM    18
.../netinet6/in6.h:#define      IPV6CTL_GIF_HLIM        19      /* default HLIM for gif encap packet */
.../netinet6/in6.h:#define      IPV6CTL_KAME_VERSION    20
.../netinet6/in6.h:#define      IPV6CTL_USE_DEPRECATED  21      /* use deprec addr (RFC2462 5.5.4) */
.../netinet6/in6.h:#define      IPV6CTL_RR_PRUNE        22      /* walk timer for router renumbering */
.../netinet6/in6.h:#define      IPV6CTL_MAPPED_ADDR     23
.../netinet6/in6.h:#define      IPV6CTL_V6ONLY          24
.../netinet6/in6.h:#define      IPV6CTL_RTEXPIRE        25      /* cloned route expiration time */
.../netinet6/in6.h:#define      IPV6CTL_RTMINEXPIRE     26      /* min value for expiration time */
.../netinet6/in6.h:#define      IPV6CTL_RTMAXCACHE      27      /* trigger level for dynamic expire */
.../netinet6/in6.h:#define      IPV6CTL_USETEMPADDR     32      /* use temporary addresses [RFC 4941] */
.../netinet6/in6.h:#define      IPV6CTL_TEMPPLTIME      33      /* preferred lifetime for tmpaddrs */
.../netinet6/in6.h:#define      IPV6CTL_TEMPVLTIME      34      /* valid lifetime for tmpaddrs */
.../netinet6/in6.h:#define      IPV6CTL_AUTO_LINKLOCAL  35      /* automatic link-local addr assign */
.../netinet6/in6.h:#define      IPV6CTL_RIP6STATS       36      /* raw_ip6 stats */
.../netinet6/in6.h:#define      IPV6CTL_PREFER_TEMPADDR 37      /* prefer temporary addr as src */
.../netinet6/in6.h:#define      IPV6CTL_ADDRCTLPOLICY   38      /* get/set address selection policy */
.../netinet6/in6.h:#define      IPV6CTL_USE_DEFAULTZONE 39      /* use default scope zone */
.../netinet6/in6.h:#define      IPV6CTL_MAXFRAGS        41      /* max fragments */
.../netinet6/in6.h:#define      IPV6CTL_MCAST_PMTU      44      /* enable pMTU discovery for mcast? */
.../netinet6/in6.h:#define      IPV6CTL_NEIGHBORGCTHRESH 46
.../netinet6/in6.h:#define      IPV6CTL_MAXIFPREFIXES   47
.../netinet6/in6.h:#define      IPV6CTL_MAXIFDEFROUTERS 48
.../netinet6/in6.h:#define      IPV6CTL_MAXDYNROUTES    49
.../netinet6/in6.h:#define      ICMPV6CTL_ND6_ONLINKNSRFC4861   50
.../netinet6/in6.h:/* New entries should be added here from current IPV6CTL_MAXID value. */
.../netinet6/in6.h:#define      IPV6CTL_MAXID           51
.../sys/ioctl.h:#ifndef _SYS_IOCTL_H_
.../sys/ioctl.h:#define _SYS_IOCTL_H_
.../sys/ioctl.h:#endif /* !_SYS_IOCTL_H_ */
.../sys/ioctl.h: * Keep outside _SYS_IOCTL_H_
.../sys/ioctl.h:#endif /* !_SYS_IOCTL_H_ */
.../sys/mount.h: * Sysctl CTL_VFS definitions.
.../sys/mount.h:        int             vc_vers;        /* should be VFSIDCTL_VERS1 (below) */
.../sys/mount.h:#define VFS_CTL_VERS1   0x01
.../sys/mount.h:#define VFS_CTL_STATFS  0x00010001      /* statfs */
.../sys/mount.h:#define VFS_CTL_UMOUNT  0x00010002      /* unmount */
.../sys/mount.h:#define VFS_CTL_QUERY   0x00010003      /* anything wrong? (vfsquery) */
.../sys/mount.h:#define VFS_CTL_NEWADDR 0x00010004      /* reconnect to new address */
.../sys/mount.h:#define VFS_CTL_TIMEO   0x00010005      /* set timeout for vfs notification */
.../sys/mount.h:#define VFS_CTL_NOLOCKS 0x00010006      /* disable file locking */
.../sys/mount.h:#define VFS_CTL_SADDR   0x00010007      /* get server address */
.../sys/mount.h:#define VFS_CTL_DISC    0x00010008      /* server disconnected */
.../sys/mount.h:#define VFS_CTL_SERVERINFO  0x00010009  /* information about fs server */
.../sys/mount.h:#define VFS_CTL_NSTATUS 0x0001000A      /* netfs mount status */
.../sys/mount.h: * NetFS mount status - returned by VFS_CTL_NSTATUS
.../sys/socket.h: * Definitions for network related sysctl, CTL_NET.
.../sys/sysctl.h:#ifndef _SYS_SYSCTL_H_
.../sys/sysctl.h:#define        _SYS_SYSCTL_H_
.../sys/sysctl.h:#define CTL_MAXNAME    12      /* largest number of components supported */
.../sys/sysctl.h: *                     SYSCTL_OUT(rey, local buffer, length)
.../sys/sysctl.h: * e.g. SYSCTL_INT(_parent, OID_AUTO, name, CTLFLAG_RW, &variable, 0, "");
.../sys/sysctl.h:#define SYSCTL_DEF_ENABLED
.../sys/sysctl.h:#ifdef SYSCTL_DEF_ENABLED
.../sys/sysctl.h:#define        CTL_UNSPEC      0               /* unused */
.../sys/sysctl.h:#define        CTL_KERN        1               /* "high kernel": proc, limits */
.../sys/sysctl.h:#define        CTL_VM          2               /* virtual memory */
.../sys/sysctl.h:#define        CTL_VFS         3               /* file system, mount type is next */
.../sys/sysctl.h:#define        CTL_NET         4               /* network, see socket.h */
.../sys/sysctl.h:#define        CTL_DEBUG       5               /* debugging parameters */
.../sys/sysctl.h:#define        CTL_HW          6               /* generic cpu/io */
.../sys/sysctl.h:#define        CTL_MACHDEP     7               /* machine dependent */
.../sys/sysctl.h:#define        CTL_USER        8               /* user-level */
.../sys/sysctl.h:#define        CTL_MAXID       9               /* number of valid top-level ids */
.../sys/sysctl.h:#define CTL_NAMES { \
.../sys/sysctl.h: * CTL_KERN identifiers
.../sys/sysctl.h: * Don't add any more sysctls like this.  Instead, use the SYSCTL_*() macros
.../sys/sysctl.h:#define CTL_KERN_NAMES { \
.../sys/sysctl.h: * CTL_VFS identifiers
.../sys/sysctl.h:#define CTL_VFS_NAMES { \
.../sys/sysctl.h: * CTL_VM identifiers
.../sys/sysctl.h:#define        CTL_VM_NAMES { \
.../sys/sysctl.h: * CTL_HW identifiers
.../sys/sysctl.h:#define CTL_HW_NAMES { \
.../sys/sysctl.h: * CTL_USER definitions
.../sys/sysctl.h:#define        CTL_USER_NAMES { \
.../sys/sysctl.h: * CTL_DEBUG definitions
.../sys/sysctl.h:#define        CTL_DEBUG_NAME          0       /* string: variable name */
.../sys/sysctl.h:#define        CTL_DEBUG_VALUE         1       /* int: variable value */
.../sys/sysctl.h:#define        CTL_DEBUG_MAXID         20
.../sys/sysctl.h:#if (CTL_MAXID != 9) || (KERN_MAXID != 72) || (VM_MAXID != 6) || (HW_MAXID != 26) || (USER_MAXID != 21) || (CTL_DEBUG_MAXID != 20)
.../sys/sysctl.h:#error Use the SYSCTL_*() macros and OID_AUTO instead!
.../sys/sysctl.h:#endif /* SYSCTL_DEF_ENABLED */
.../sys/sysctl.h:#endif /* !_SYS_SYSCTL_H_ */
.../sys/termios.h:#if !defined(_SYS_IOCTL_COMPAT_H_) || __DARWIN_UNIX03
.../sys/termios.h:#endif        /* !_SYS_IOCTL_COMPAT_H_ */

解决方案

As far as I know Apple is going to remove the support to 32-bit chips this year. Since Apple A7 processors Apple uses ArmV8-A cores for its SoCs...so maybe you cannot choose them with the new APIs because you have nothing to choose...Apple usually is cryptic about those kind of things and uses automatic switching for certain features on mobile platforms. However basically every iOS 11 SoC will have the same basic hardware features except for the number of cores and the energy management (which is different for SoC >= A10 Fusion). I was searching for the same thing some month ago but apparently on iOS you have to be in the hands of the OS.

这篇关于如何在iOS上运行时确定ARMv8功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆