реклама на сайте
подробности

 
 
> Получить адресс возврата на cortex
Dron_Gus
сообщение Apr 23 2010, 13:45
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Пилю менеджер кучи от zltigo. Решил добавить пару сервисных функций для отладки. В частности хочу знать, откуда был вызов на выделение памяти. Для этого как-то нужно выдернуть содержимое регистра LR. В асме не силен. Так что все потуги пока не увенчались успехом. Может кто подскажет обертку/функцию для получения LR?


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Apr 23 2010, 16:21
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Примерно вот так:
Код
inline __attribute__((__always_inline__)) uint32_t get_return_address()
{
    unsigned int ret;
    __asm__ __volatile__ ("mov %0, LR" : "=r"(ret) );
    return ret - 4;
}

void __attribute__((__noinline__)) print_calee(void)
{
    volatile uint32_t ret = get_return_address();
    uart << "called from \t"; uart.put_hex(ret);
}

void test1(void)
{
    print_calee();
}

void test2(void)
{
    print_calee();
}


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 23 2010, 17:57
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(AHTOXA @ Apr 23 2010, 22:36) *
Примерно вот так:...

Вот так лучше:
Код
inline __attribute__((__always_inline__)) uint32_t get_return_address()
{
    unsigned int ret;
    __asm__ __volatile__ ("sub   %0, LR, #4" : "=r"(ret) );
    return ret;
}


Цитата(zltigo @ Apr 23 2010, 23:11) *
Вообще-то проще и уж точно удобнее для отладки, передавать уже готовый указатель на владельца


Если есть такая возможность, то конечно лучше так. Потому что адрес возврата может испортиться по ходу выполнения malloc (потому приходится его извлекать в самом начале), а параметр уж никуда не денется.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 14:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016