Skip to content

Instantly share code, notes, and snippets.

@tingwei628
Last active August 29, 2021 07:32
Show Gist options
  • Save tingwei628/2a684cf81e63f91b97b0aeb0c585faf9 to your computer and use it in GitHub Desktop.
Save tingwei628/2a684cf81e63f91b97b0aeb0c585faf9 to your computer and use it in GitHub Desktop.
aarch64 on mac

update: I used dockcross instead.

compile .c into aarch64(arm64v8) with ELF format

brew tap SergioBenitez/osxct
brew install aarch64-none-elf
cd /usr/local/Cellar/aarch64-none-elf/7.2.0/bin

aarch64-none-elf-addr2line	aarch64-none-elf-gcov-dump
aarch64-none-elf-ar		aarch64-none-elf-gcov-tool
aarch64-none-elf-as	        aarch64-none-elf-gdb
aarch64-none-elf-c++filt	aarch64-none-elf-gprof
aarch64-none-elf-cc		aarch64-none-elf-ld
aarch64-none-elf-cpp		aarch64-none-elf-ld.bfd
aarch64-none-elf-ct-ng.config	aarch64-none-elf-ld.gold
aarch64-none-elf-dwp		aarch64-none-elf-nm
aarch64-none-elf-elfedit	aarch64-none-elf-objcopy
aarch64-none-elf-gcc		aarch64-none-elf-objdump
aarch64-none-elf-gcc-7.2.0	aarch64-none-elf-ranlib
aarch64-none-elf-gcc-ar		aarch64-none-elf-readelf
aarch64-none-elf-gcc-nm		aarch64-none-elf-size
aarch64-none-elf-gcc-ranlib	aarch64-none-elf-strings
aarch64-none-elf-gcov		aarch64-none-elf-strip

aarch64-none-elf-as (from asm to ELF format executable)

homebrew-osxct@SergioBenitez

export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPATH="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/"

compile .c into aarch64(arm64v8) with Mach-O format

xcrun -sdk macosx clang -arch arm64 -o hello hello.c

xcrun - Run or locate development tools and properties.

@tingwei628
Copy link
Author

tingwei628 commented Aug 8, 2021

compile .c to arm64 elf executable

./dockcross-linux-arm64 bash -c '$CC hello.c -o hello_arm'

execute

./dockcross-linux-arm64 bash -c './hello_arm'

enter dockcross container

./dockcross-linux-arm64 bash

@tingwei628
Copy link
Author

tingwei628 commented Aug 23, 2021

ENV CROSS_ROOT ${XCC_PREFIX}/${CROSS_TRIPLE}
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
    AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \
    CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gcc \
    CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \
    CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++ \
    LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld \
    ```

gdb
aarch64-unknown-linux-gnu-gdb

@tingwei628
Copy link
Author

compile c++ to arm64 elf executable

aarch64-unknown-linux-gnu-g++ (crosstool-NG 1.24.0.409_d47b234) 11.2.0

@tingwei628
Copy link
Author

ARMv8 example programs to learn from and armsim, an ARMv8 simulator
https://github.com/d-gaston/armv8-examples

@tingwei628
Copy link
Author

tingwei628 commented Aug 28, 2021

read core dump

readelf --notes core | grep -v "description data:"
objdump -s core

Segmentation fault

/usr/lib/x86_64-linux-gnu/libpython3.9.so.1.0
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
objdump -tT /usr/lib/x86_64-linux-gnu/libpython3.9.so.1.0 | grep 135
objdump -d /usr/lib/x86_64-linux-gnu/libpython3.9.so.1.0 --start-address=0x135a90 | grep 135E95

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment