This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

give C struct to assembler...

Note: This was originally posted on 24th November 2011 at http://forums.arm.com

how can I send the offset of a C struct to en assembly code ? For example

In my C code I have

typedef struct
{
  unsigned int a;
  unsigned int b;
} CMyStruct;
I send to an ASM function a pointer of a CMyStruct structure Let suppose that my pointer is into R0

To access to a and b attribute I need to do that.

ldr      r1, [r0, #0] // read a
ldr      r2, [r0, #4] // read b
Is there anyway to not specify #0 and #4 as contant value ? Something like

ldr      r1, [r0, CMyStruct.a] // read a
ldr      r2, [r0, CMyStruct.b] // read b
Thank's Etienne
Parents
  • Note: This was originally posted on 26th November 2011 at http://forums.arm.com

    I haven't ever come across a way to communicate this information from GCC to GAS. I use #defines in my assembly files to specify the offsets. I usually create them manually. But you could write a program which converts a header and all the structs in it into a C program which creates a new ASM safe offset header files that you can #include from the ASM. The tricky part here is that the program has to run on the same device that's executing the C code, which may not be an option for some embedded platforms. So it's not something you can easily put in a makefile if you're cross-compiling.

    Doing it manually does at least help you pay more attention to organizing your data efficiently.
Reply
  • Note: This was originally posted on 26th November 2011 at http://forums.arm.com

    I haven't ever come across a way to communicate this information from GCC to GAS. I use #defines in my assembly files to specify the offsets. I usually create them manually. But you could write a program which converts a header and all the structs in it into a C program which creates a new ASM safe offset header files that you can #include from the ASM. The tricky part here is that the program has to run on the same device that's executing the C code, which may not be an option for some embedded platforms. So it's not something you can easily put in a makefile if you're cross-compiling.

    Doing it manually does at least help you pay more attention to organizing your data efficiently.
Children
No data