2016-05-15 4 views
0

Ich versuche, die ausführbare Datei mit gc-sections, ffunction-sections und fdata-sections zu optimieren. Ich gebe auch init Funktion mit -u (undefiniert) zum Linker. Meine Init-Funktion und alle verwendeten Symbole wurden hinzugefügt und andere nicht verwendete Symbole wurden erfolgreich entfernt. Alles ist ok.gcc GC-Sektionen Option entfernt crtbegin/crtend Objekte

Aber crtbegin, crtend Objekte sind auch eliminiert, die von gcc gesetzt werden. In diesem Fall funktioniert meine ausführbare Datei nicht ... Gibt es irgendeine Methode, crtbegin und crtend Objekte in der ausführbaren Datei zu behalten.

Hinweis: KEEP() Richtlinien existieren im Linker für crtbegin wie: KEEP(*crtbegin.o(.ctors))KEEP(*crtbegin?.o(.ctors)) usw.

Antwort

1

Es ist gelöst. Die ausführbare Datei stürzte ab und gab eine Ausnahme. Da die Option gc-section die crtbegin-Funktionen wie __do_global_dtors_aux call__do_global_dtors_aux, frame_dummy, call_frame_dummy usw. löscht, führt das zum Absturz des Programms.

Aber wenn Sie den Init-Abschnitt im Linker: "KEEP (* (. Init))", dann diese Funktionen beibehalten werden, während GC-Abschnitte Option löscht andere nicht verwendete Symbole. Dann läuft mein Programm erfolgreich ohne Absturz.