Properly support ARM64's 32-bit compatibility profile#4527
Conversation
`uname -m` on ARM64 processors using 32-bit personality shows as `armv8l`, not `armv7l`. See https://github.com/torvalds/linux/blob/cef7298262e9af841fb70d8673af45caf55300a1/arch/arm64/include/asm/compat.h#L22 This allows building on 64-bit ARM machines in a 32-bit environment. Without this patch, the build system thinks 32-bit personality on ARM64 is linux-x64, and the build explodes accordingly. 32-bit personality allows building ARM32 code on modern ARM64 systems, which in this day and age are easier to obtain with decent performance characteristics. ``` builder@xam-softiron-1:~$ uname -a Linux xam-softiron-1 4.17.0ilp32-31333-gb2d7ec3 dotnet#1 SMP Tue Oct 16 16:37:20 EDT 2018 aarch64 aarch64 aarch64 GNU/Linux builder@xam-softiron-1:~$ linux32 uname -a Linux xam-softiron-1 4.17.0ilp32-31333-gb2d7ec3 dotnet#1 SMP Tue Oct 16 16:37:20 EDT 2018 armv8l armv8l armv8l GNU/Linux ``` Closes: https://github.com/dotnet/cli/issues/11437
|
Is this supposed to fix issues like dotnet/iot#805? |
|
@pgrawehr related. build.sh will always do the wrong thing where the kernel is 64-bit and the userland is 32-bit. This PR is specifically for cases where the kernel lies about being 32-bit but the fake 32-bit ARM kernel is mis-detected as being AMD64. Your reported issue is for where the kernel isn't lying at all - but assuming kernel == userland is breaking. That's marginally more complicated to fix. |
|
Well, not sure. On the Raspberry Pi, with a default Raspbian installation, everything is 32Bit, except that the CPU is 64-bit capable. As far as I know, this isn't running a 64 Bit Kernel yet (how do I find out?) |
|
|
|
|
|
@pgrawehr @directhex Is this still something we're interested in merging? |
|
Yes. I have no idea why a 1 character fix died in review |
|
@directhex awesome. I'll make sure this gets merged after a more recent build is green. |
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
uname -mon ARM64 processors using 32-bit personality shows asarmv8l, notarmv7l. See https://github.com/torvalds/linux/blob/cef7298262e9af841fb70d8673af45caf55300a1/arch/arm64/include/asm/compat.h#L22This allows building on 64-bit ARM machines in a 32-bit environment. Without this patch, the build system thinks 32-bit personality on ARM64 is linux-x64, and the build explodes accordingly.
32-bit personality allows building ARM32 code on modern ARM64 systems, which in this day and age are easier to obtain with decent performance characteristics.
Closes: https://github.com/dotnet/cli/issues/11437
Whatever process pushes to https://dot.net/v1/dotnet-install.sh really needs this update