Hello! At the moment I am earning my first experience in programming an AT91SAM7 chip. The project is createt by an external engineer who is not working for us anymore. Now I tried to modify the project. Programming in C ist not my Problem. I added the variable char s[12]; to my project. And got the error message: /home/Peraglie/CodeSourcery/gcc/bin/../lib/gcc/arm-none-eabi/4.4.1/../.. /../../arm-none-eabi/bin/ld: error: no memory region specified for loadable section `.ARM.exidx' collect2: ld returned 1 exit status make: *** [logicdemo-sniffer.elf] Fehler 1 Questions: - Do I have to prepare the usage of memory in any kind? - if yes, in which kind? I`ve heard that there is a file atmel-rom.ld - What have I to do in my makefile in case of using any variables? THANKS FOR YOUR HELP!!!
Timo P wrote: > Hello! > > At the moment I am earning my first experience in programming an > AT91SAM7 chip. The project is createt by an external engineer who is not > working for us anymore. > > Now I tried to modify the project. Programming in C ist not my Problem. > I added the variable char s[12]; Is this the only extension done? Does the unmodified code from the "external engineer" build without any modification? Create a minimal example (sources, makefile, linker-script) so the issue can be reproduced. At least show the output of the build-process of the unmodified project sources. >to my project. And got the error > message: > > /home/Peraglie/CodeSourcery/gcc/bin/../lib/gcc/arm-none-eabi/4.4.1/../.. /../../arm-none-eabi/bin/ld: > error: no memory region specified for loadable section `.ARM.exidx' > collect2: ld returned 1 exit status > make: *** [logicdemo-sniffer.elf] Fehler 1 hmm, this might be related to exceptions. Do you use C++? > > Questions: > - Do I have to prepare the usage of memory in any kind? > - if yes, in which kind? I`ve heard that there is a file atmel-rom.ld To make the linker happy you can try to add the following lines to your linker-script:
1 | /* .ARM.exidx is sorted, so has to go in its own output section. */ |
2 | __exidx_start = .; |
3 | .ARM.exidx : |
4 | { |
5 | *(.ARM.exidx* .gnu.linkonce.armexidx.*) |
6 | } >FLASH |
7 | __exidx_end = .; |
The lines should follow the lines for the output-section where the .text
input-sections are located.
> - What have I to do in my makefile in case of using any variables?
A minimal example is needed. Difficult to see what needs to be done
without knowing what is already there.
Hallo Martin! Vor der einzigen Änderung char s[20]; ließ sich der code einwandfrei kompilieren. Ich habe folgenden Code geadded: .= ALIGN(4); .ARM.exidx : { KEEP (*(.ARM.exidx)) } > ram Abhilfe hat das schon geschaffen. Nur ist mir immer noch nicht klar, was ".ARM.exidx" bedeutet!?! Im übrigen nutze ich unter Fedora 12 ARM-NONE-EABI-GCC mit FreeRTOS zusammen.
(Dies ist das englischsprachige Forum. Daher hier weiter auf englisch...) I little bit more information on .ARM.exidx can be found in the EABI documentation available in the technical library on arm.com. IRC this input section is related to unwinding. I guess parts of the libraries included with CS G++ (libgcc and/or libstdcpp and/or newlib/libc) place code in this section (C++ exceptions and maybe some kind of FP-"exceptions" like div. by 0). This might be a new feature so the problem did not show up in previous versions. Now that the project builds you should also find useful information in the map-file's cross-reference section.
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.