Hi Thomas, On 5/27/22 16:12, Thomas Stüfe wrote:
P.S. I found one possible solution for my particular problem was to add `.type function` to the static assembler routine. That caused gcc to use the correct jump instruction (blx instead of bl). But I am not sure this is the best solution, maybe best would be to just use the same mode for all hotspot compilation units.
AFAIR, that .type %function directive is a correct way to write asm code. At least this is what gcc generates for the C code [1]. I'm not sure how the annotation in the assembly code affects the caller code, may be link time optimization? But if adding the directive resolves the issue, I vote for it.
(I expect arm-none crosscompiler to produce similar results compared to arm-linux target)
Thanks, Anton $ echo "int main() { return 0; }" | arm-none-eabi-gcc -mthumb -S -x c - -o - .cpu arm7tdmi .arch armv4t .fpu softvfp .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute 23, 3 .eabi_attribute 24, 1 .eabi_attribute 25, 1 .eabi_attribute 26, 1 .eabi_attribute 30, 6 .eabi_attribute 34, 0 .eabi_attribute 18, 4 .file "<stdin>" .text .align 1 .global main .syntax unified .code 16 .thumb_func .type main, %function main: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 push {r7, lr} add r7, sp, #0 movs r3, #0 movs r0, r3 mov sp, r7 @ sp needed pop {r7} pop {r1} bx r1 .size main, .-main .ident "GCC: (Arch Repository) 12.1.0"