I am working with AVR ATmega328p MCU and I would like to add constant string at address 0x7000 into flash memory. How can I do this with AVR-GCC?

My code contains this declaration:

```
// Firmware version
static volatile char version[16] __attribute__ ((section (".fwversion"))) = "0.01 DEV";

```

Now, when I run gcc with this flags:

```
avr-gcc -Wl,--section-start=.fwversion=0x7000 -mmcu=atmega328p -DF_CPU=8000000UL -Os -Wall -o main.elf main.c

```

The ELF file contains section `.fwversion` and after `avr-objcopy`, there are data at address 0x7000 in iHEX file.

But when I run gcc with `-Wl,--gc-sections` flag:

```
avr-g++ -Wl,--gc-sections -Wl,--section-start=.fwversion=0x7000 -mmcu=atmega328p -DF_CPU=8000000UL -Os -Wall -o main.elf main.c

```

the `.fwversion` section is removed.

I need to use `-Wl,--gc-sections` flag but I also need constant string stored in flash memory. What flags should I use to achieve this?

---

Is it possible to use something like this in GCC?

```
static volatile char version[16] __attribute__ ((section (0x7000))) = "0.01 DEV";

```