Inline assembly not produced when linking with main() file clang

74 Views Asked by At

I have the following code with an inline assembly in C:

#include <stdlib.h>
#include <stdio.h>

__attribute__((noinline))
int *get_indecies(int *padding, int pad_size, int size, int alias_type);

int *get_indecies(int *padding, int pad_size, int size, int alias_type){
    int *indecies = (int *)malloc(size*sizeof(int));
    asm("dsb sy\n\t");
    return indecies;
}

At the bottom I the inline is inserted...

When I produce the object code using (cross compilation for aarch64) I have the inline inserted:

.....
 1f0:   d5033f9f        dsb     sy
 1f4:   aa1f03e1        mov     x1, xzr
......

when I link this binary with my main file using:

clang verification.c get_indecies.o -I "/home/[name]/gem5/include"  -L "/home/[name]/gem5/util/m5/build/arm64/out" -lm5 -lc -O0 -static -target aarch64-linux-gnu -o verfication-base-m5

and then I do an object dump of this to check if the assembly instruction is present using:

 aarch64-linux-gnu-objdump verification-base-m5 -S > assembly.s

The inline assembly does not exist.... Any ideas about what is happening in the linking stage that is removing this assembly instruction? The optimisation level is turned to 0 so I am not sure...

Thanks!

1

There are 1 best solutions below

0
Gandinator On

I re-ran the below line recently:

clang verification.c get_indecies.o -I "/home/[name]/gem5/include"  -L "/home/[name]/gem5/util/m5/build/arm64/out" -lm5 -lc -O0 -static -target aarch64-linux-gnu -o verfication-base-m5

and then object dumped this and the inline assembly was present. Not sure what the bug was during the time but in my case it is resolved.