Fehlersuche code-size mittels .map files

OP #8014449
Lesenswert?

Hallo, ich habe eine Frage bzgl. Fehlersuche mit .map-Files. Ich habe ein Projekt, welches ich in zwei verschiedenen Varianten bauen kann. Zwischen Varianten ändern sich dann auch die Source files. Das habe ich "versucht" alles in der Makefile zu berücksichtigen. An für sich funktioniert es auch (es compiliert durch).

Beim Linken gibt es dann aber ein Problem. c:/gnu_tools_arm_embedded/6-2017-q1/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/ld.exe: ../../_build/gcc/Output/TI_2_nocrc.elf section .bss_u' will not fit in region m_data_u' || c:/gnu_tools_arm_embedded/6-2017-q1/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/ld.exe: section .hal_noinit VMA [20006d00,20006d63] overlaps section .bss_u VMA [20000000,20009f5f] || c:/gnu_tools_arm_embedded/6-2017-q1/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/ld.exe: region `m_data_u' overflowed by 13488 bytes Wenn ich die .map-files vergleiche, sehe ich z.B. dass wenn ich die 1. Version baue der Bereich .debug_info 337481 Bytes groß ist. Wenn ich die 2. Version baue, ist der Bereuch .debug_info 1208640 Bytes groß. Also 3,5 mal so groß. Auch die anderen Bereiche sind viel größer. Das es ein bisschen unterschied ist, ist mir bewusst. Werden ja auch andere dateien angezogen. Aber so viel?

Wie kann ich jetzt herausfinden wo der Fehler liegt? Was könnte generell das Problem sein? Werden dateien öfters gebaut? Ich lasse mir die ganzen Objekte ausgeben und da sehe ich nicht, dass einige doppelt drinn stehen.

: Bearbeitet durch User
#8014484
Lesenswert?

Chandler B. schrieb:

Zwischen Varianten ändern sich dann auch die Source files. Das habe ich "versucht" alles in der Makefile zu berücksichtigen. An für sich funktioniert es auch (es compiliert durch).

Es wäre nicht der erste Compiler, der aus einer Mücke einen Elefanten macht. Wer andere Wege sucht, wird auch andere Antworten vom Compiler bekommen. Man könnte aber ein paar zusätzliche Prüfpunkte einbauen und anzeigen?

(Firma: DC3AX) #8014775
Lesenswert?

map files mal mit meld oder einem ähnlichen Tool nebeneinander legen. lst Dateien einschalten und schauen, was der compiler macht. make mit Debug aufrufen und sehen, was make macht.

3x Kontrollieren, dass das andere Projekt nicht mit -O0 und -g debug und eventuell sogar noch switches compiliert wird, die weiteres Debug im Code einschalten?

Sicherstellen, dass virtuelle mappings im linker file nicht als echter code block angegeben werden sondern beim Linken auch übersehen / exkludiert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren