Как используется обратная трассировка наверху стеков threadx и почему ее размер варьируется?

При переносе threadx я вижу, что в верхней части каждого стека потока зарезервированы неинициализированные байты, а затем 16 нулевых байтов, и именно тогда стек действительно начинается.

Нулевые байты называются backtrace. В портах руки это 4 байта неинициализированных и 4 нулевых (здесь, например), а при портировании ARC оба имеют размер 16 байтов (здесь, например).

Еще одна важная вещь: неинициализированные байты инициализируются значением 0xef, если TX_DISABLE_STACK_FILLING не определен.

Мои вопросы:

  1. Почему есть разница между портированием ARC и портированием ARM?
  2. Почему существуют эти байты? Есть ли инструмент трассировки или что-то в алгоритме, которое использует эти байты, или они предназначены только для того, чтобы увидеть в памяти "руками", что эта память не изменилась?

1 ответ

Решение

Да, порты ARM и ARC очень разные, т. Е. Разный ассемблерный код, прагмы, встроенные функции и т. Д. Также примечательно, что используются разные инструменты разработки. Например, основным инструментом разработки для ARC является MetaWare (компилятор / отладчик), а для ARM - IAR, ARM, GCC и т. Д.

Что касается обратной трассировки стека, она обычно настраивается таким образом, что отладчик может создать дерево вызовов, когда в коде текущего потока есть остановка выполнения или точка останова. Образец байтов обратной трассировки эффективно представляет верхнюю часть стека и сигнализирует отладчику о необходимости прекратить построение дерева вызовов. Конечно, все это специфично для отладчика, и в этом примере разница между отладчиком MetaWare и отладчиками инструмента ARM. Что касается шаблона 0xEF в стеке, это полезно для визуальной проверки разработчиком. Этот шаблон также используется функцией проверки стека во время выполнения в ThreadX (см. Документацию Руководства пользователя ThreadX). Кроме того, отладчики IAR и MetaWare могут вычислять использование стека путем изучения эрозии шаблона 0xEF в стеке каждого потока и предоставлять эту очень полезную информацию разработчику.

Другие вопросы по тегам