Chciałbym utworzyć program ze specjalną sekcją na końcu pamięci wirtualnej. Więc chciałem zrobić coś skryptu linkera tak:Jawnie ustawiono wskaźnik stosu początkowego ze skryptem konsolidatora
/* ... */
.section_x 0xffff0000 : {
_start_section_x = .;
. = . + 0xffff;
_end_section_x = .;
}
Problemem jest to, że gcc/LD/glibc wydaje się załadować stos w tej lokalizacji domyślnie dla aplikacji 32 bitowych, nawet jeśli pokrywa się znanym Sekcja. Powyższy kod zeruje stos, powodując wyjątek. Czy jest jakiś sposób, aby powiedzieć linkerowi, aby użył innej lokalizacji pamięci VM dla stosu? (Poza tym chciałbym się upewnić, że sterta nie obejmuje tej sekcji pamięci wirtualnej ...).
Musisz podać więcej informacji o celu. Początkowa zawartość rejestru (która określa położenie stosu) zależy od celu. –
To jest system arm-8 (kompilacja w trybie 32-bitowym). Używam jądra Linux 3.10 z opcją narzędziową gcc 4.7.0. – HardcoreHenry