1

I have been trying to locate ARMv8 32bit package repository since yesterday to download packages that I would make use to carry out some analysis with radare. I had found repositories from archlinux and centos but unfortunately all these packages are aarch64 (ARMv8-64bit) which radare is having issues with analyzing. I do not know exact reason for that issue but what my question is I want to find repositories like the above mentioned two for 32bit variant of ARMv8. I did find termux distribution of 32 bit ARM, but unfortunately it was ARMv7 instead of ARMv8.

In general following are my questions:

  1. Is there a package repositories for ARMv8 32bit? Or ARMv8 is just 64bit?
  2. Is there any general way of finding such repositories? (I did had a great difficulty in locating above mentioned repositories too, and knowing the way to finding such repositories would be really great)
  3. When we mention ARMv8, is it generally referes to aarch64?

Thank you very much for your time.

1

1 Answer 1

2

Technically ARMv8 consists of both a 64-bit architecture called Aarch64 and a 32-bit architecture called Aarch32. Some ARMv8 chips only have the 32-bit architecture. But in practice “ARMv8” is usually used to mean Aarch64. Aarch32 is backward compatible with ARMv7 and adds very few extensions to it. So I guess there isn't much call for ARMv8 optimized 32-bit binaries.

The only Aarch32 feature that isn't in ARMv7 that I can name without research is cryptographic acceleration (for AES, SHA-1, SHA-2 and GCM), but this is an observation bias on my part and as far as I recall there are a few other minor extensions (maybe some new SIMD instructions?). Also some optional features of ARMv7 are always present on Aarch32, such as the floating-point/SIMD registers.

In practice, armhf binaries (for ARMv7 with floating point and SIMD) work well for Aarch32.

If you want to analyze existing binaries, you'll want tools that support whatever features those binaries use. In practice, most of the 32-bit arm binaries you'll find only use instructions from the set targeted by armhf.

By the way, there's another widespread use of imprecise terminology that doesn't matter if you're considering Unix distributions, but it might appear when looking at architecture names in tools such as compiler flags. The full names of ARMv7 and ARMv8 are “ARMv7-A” and “ARMv8-A”. The suffix “-A” indicates “high-end” processors with an MMU. In a Unix context, they're the only relevant Arm processors, since the others don't have an MMU. But there are two other classes of Arm architectures that don't have an MMU (but might have an MPU): R (real-time) and M (microcontroller). They have different characteristics; for example ARMv8-M is only a 32-bit architecture.

2
  • @Giles thank you. In that case can I take ARMv7-m as a subset of ARMv7? I know that there are variants like ARMv7-m and ARMv7-a. For example, lets say I have a binary compiled to run on a microcontroller having ARMv7-m architecture. Does the instructions within that binary are compatible with ARMv7-a? Commented Aug 6, 2020 at 1:38
  • 1
    @hEShaN v7-M and v7-A are again different architectures, and “v7” is a shortcut for “v7-A” among people who only care about A-class processors. I only cover A-class architectures in my answer because this is a Unix site and you can't run a proper Unix on M-class or R-class since they don't have MMUs. I think that all user-mode ARMv7-M programs (and even v8-M) can run on ARMv7-A, but privileged code typically can't, and community.arm.com/developer/ip-products/processors/f/… confirms this. Commented Aug 6, 2020 at 6:58

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.