How can I set an "end of code" marker at the end of my binary?

105 Views Asked by At

I have a GNU linker script for my firmware with the following section defined:

  .endc :
  {
    KEEP(*(.endc));
    . = ALIGN(4);
    _end_code_mark = .;
  } >FLASH

This is the last time I'm assigning a section to the FLASH region. The purpose of this section is to put an "end of code" marker so that I can know in my application what's the actual size of my binary (I do the difference with the start and end address).

In my C code, when I look for the _end_code_mark symbol, it indeed is referencing the last byte of my binary. So, that's fine.

However, I would like to have a magic bytecode value as a marker to define the end of my binary rather than a symbol. Therefore, I have a file where I defined a 4 bytes buffer:

const uint8_t end_of_code[] __attribute__((section(".endc.end_of_code"))) = {0x01, 0x02, 0x03, 0x04};

And I changed the .endc section in my linker script above with the following:

  .endc :
  {
    KEEP(*(.endc));
    . = ALIGN(4);
    .end_of_code = .;
  } >FLASH

Yet, when I build my firmware binary this way, the end_of_code buffer is not located at the end of my binary image anymore.

Am I doing something wrong, or is there an other way to write those 4 bytes at the end of my binary image with the linker script?

0

There are 0 best solutions below