for ARMClang toolchain in ARM DS, it support section pragmas in the following format.
#pragma clang section bss = ".uncached_bss" data = ".uncached_data"int test= 0;
int test2= 0;#pragma clang section bss="" data="" text=""
however, it seems that ARM GNU toolchain doesn' support this similar feature, in deed, gcc support through attribute , for example,int __attribute__((__section__(".uncached_bss"))) test= 0 ;
int __attribute__((__section__(".uncached_bss"))) test2= 0 ;
without section pragma, programmer must add attributes for the variables one by one.
so I advise ARM GNU toolchain to add simlilar support.
Best Regards,Zhang Shiping.
I've been dealing with this for a day. I created a new section in the ld file. I want to specify the specific address I want to write in the section I created. However, starting from the starting address, it writes to addresses in a certain order. maybe I'm doing something wrong
Hi there, some other, more conventional ideas that could result in code that is portable between GCC and Clang:
Depending on your compiler options (-ffunction-sections, -fdata-sections, enabled), the variables will be put into sections with a predictable name, e.g. .data.test1 .data.test2. You could then catch those names in your linker script similar to TuAFBogey's thread and, since you can predict the names, you can use a wilcard like:
SECTIONS{ ... .uncached_bss <address for them> : { <filename.o>(.data.test*) } ...}
Or even simpler if you have them in their own file:
SECTIONS{ ... .uncached_bss <address for them> : { my-file-with-only-uncached-bss-definitions.o>(*) } ...}
Does the issue have anything to do with autoat or --no_autoat?
https://developer.arm.com/documentation/dui0803/a/Using-scatter-files/Automatic-placement-of---at-sections
This is exactly what I want to do actually.
But I can't write to the correct address. I think it has something to do with the automatic filling of addresses.
COMPILER_OPT = -D$(MCU) COMPILER_OPT += -mfloat-abi=$(FLOAT) COMPILER_OPT += -mfpu=$(FPU) COMPILER_OPT += -mcpu=cortex-m23 COMPILER_OPT += -mthumb COMPILER_OPT += -Os COMPILER_OPT += -flto COMPILER_OPT += -fdata-sections COMPILER_OPT += -ffunction-sections COMPILER_OPT += -fno-exceptions COMPILER_OPT += -fno-rtti COMPILER_OPT += -fno-use-cxa-atexit COMPILER_OPT += -fno-threadsafe-statics COMPILER_OPT += -ffast-math COMPILER_OPT += -fshort-enums COMPILER_OPT += -fno-common #COMPILER_OPT += -falign-functions=4 COMPILER_OPT += -fsingle-precision-constant LINKER_OPT = -flto LINKER_OPT += -Wl,--gc-sections LINKER_OPT += -Wl,--sort-section=alignment LINKER_OPT += -Wl,--cref LINKER_OPT += -Wl,--print-memory-usage LINKER_OPT += -Wl,--no-wchar-size-warning LINKER_OPT += -static LINKER_OPT += --specs=nano.specs LINKER_OPT += --specs=nosys.specs
Hmm, I think the __at thing is only feature of the Arm Compiler linker `armlink` and scatter files. That's AC-specific documentation that you're linking there :)I don't think it's supported in GCC? IIUC in GCC you have to do things manually with the linker scriptEDIT: And the same applies for open-source Clang which also uses linker scripts
I think I understand. Thank you :)