Hi everybody, I'm writing code for embedded ARM microcontroler using arm-none-eabi-gcc version 8.3.1 20190703. I'd like to put my static data structure into FLASH memory to save precious RAM. My code is like this: --------------------------------- static const char *test_a[] /* __attribute__((section (".rodata"))) */ = { "test1", "test2", }; static const char *test_b[] /* __attribute__((section (".rodata"))) */ = { "test3", "test4", }; static const char *test_c[] /* __attribute__((section (".rodata"))) */ = { "test5", "test6", }; static const struct dict_ports_s { const char **alias; const char len; const char *name; } ports[] = { { .name = "test0", .len = sizeof(test_a), .alias = test_a }, { .name = "test1", .len = sizeof(test_b), .alias = test_b }, { .name = "test2", .len = sizeof(test_c), .alias = test_c }, }; int main(int ac, char *av[]) { int i; for (i = 0; i < 3; i++) { printf("%d %s\n", ports[i].len , ports[i].alias[0]); } return 0; } ------------------------------------------------ but neither the "const" words in declarations, nor the explicit selection of ".RODATA" section make those constant data structure go into read-only data section. Assembler, that gcc produces with "-S" option looks like this: ----------------------------------------- .section .data.test_a,"aw" .align 2 .set .LANCHOR0,. + 0 .type test_a, %object .size test_a, 8 test_a: .word .LC5 .word .LC6 .section .data.test_b,"aw" .align 2 .set .LANCHOR1,. + 0 .type test_b, %object .size test_b, 8 test_b: .word .LC3 .word .LC4 .section .data.test_c,"aw" .align 2 .set .LANCHOR2,. + 0 .type test_c, %object .size test_c, 8 test_c: .word .LC1 .word .LC2 ---------------------------------------------------- so the structures are emitted into relevant ".data.test*" sections which are writable. And that's not what I need. How do I get them emitted into "a" section (with no "w" attribute)? BR. Rafał PS: I'm not a subscriber of the list, so pls Cc: responses to me directly.