Использовать абсолютное значение переменной командного файла компоновщика в коде 'C' - PullRequest
1 голос
/ 09 октября 2008

У меня есть командный файл компоновщика, который назначает верхний адрес стека в переменную

_stack = . + 0x80000;  

Я хочу использовать этот адрес в программе 'c' - я хочу скопировать стек в другое место, а затем обновить указатель стека, чтобы он указывал на новое местоположение, прежде чем выполнять деструктивный тест памяти в оригинальном банке оперативной памяти.

Я обнаружил, что если я сделаю что-то вроде

extern u32 *_stack;  
myFunction(_stack);

Тогда функция, кажется, получает значение, хранящееся в ячейке стека

lwz r3,0(r8)

Вместо адреса самого стека. Кто-нибудь может помочь?

Ответы [ 3 ]

5 голосов
/ 09 октября 2008

Попробуйте

extern u32 _stack;
U32 * stackPtr;
stackPtr = &_stack;
1 голос
/ 11 октября 2008

Я полагаю, что наиболее естественный [то есть: правильный] способ объявить это основан на представлении о стеке как о массиве в памяти, где указатель стека находится в этом массиве:

extern U32 _stack[];
U32 *stackPtr;
stackPtr = _stack;
0 голосов
/ 09 октября 2008

myFunction (& _ stack); должен передать myFunction адрес переменной * _stack *. Иначе, он передаст значение, содержащееся в переменной _stack .

...