Не могли бы вы предоставить мне какой-либо пример Как проверить, что функция X() вызывается из функции Y() не из функции Z()?Как проверить, что функция X() вызывается из функции Y() не из функции Z()?
Использование 'C' или языка ассемблера?
Заранее спасибо.
Обновление: 02-03-2015
Пусть исходный код ядра существует так много водителей призывают те же функции, как и исходный код драйвера SPI (Serial Phepheral Interface) и GPIO (Общий выходной ток назначения) вызывает одну и ту же функцию: «bzero()».
void bzero (void * s, size_t n);
Я собираюсь протестировать драйвер SPI и GPIO (код драйвера не может быть изменен). Для этого я написал тестовый драйвер. Я могу только вызвать функцию, открытую из моего тестового драйвера.
uint8_t SPI_read_write (uint8_t byte_out, символ * s) // Функция 1 { bzero (s, SizeOf (struct_global1)); return byte_in; }
uint8_t GPIO_read_write (uint8_t byte_out, символ * с) // Функция 2 { bzero (с, SizeOf (struct_global2)); return byte_in; }
INT основной() // Тест драйвер { SPI_read_write (arg1, arg2); // Когда эта функция вызывается из тест-пилота он будет вызывать bzero
}Оба finction SPI_read_write() и функция GPIO_read_write() вызывает функцию «bzero». Мне нужно, чтобы «bzero» вызывался в любом случае только из функции SPI_read_write().
Обновление 15-04-2017
Я не в состоянии получить какую линию неясно? некоторую функцию fun1() можно вызывать из N числа другой функции. как определить, какая функция называется fun1()?
Вероятно, это связано с стека, ссылка регистра ...
Сделать это статической функцией в той же системе перевода, что и 'X'. Если 'Y' тоже есть, вам не повезло. Но, честно говоря, я думаю, что это (буквально) проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – StoryTeller
Вы можете проверить это, используя отладчик, например. встроенный отладчик из блоков Code ::. –
Проверьте его, используя '__builtin_return_address'? – Jester