И втолкнули и вытолкнули правильно, в одно и из того же места. Просто указатель стека был инициализирован не моей программой и значением вверху ОЗУ, а бутлодером, значением глубже внутрь ОЗУ, что приводило к накладке. Адрес возврата помещался в стек и к моменту возврата оказывался затёрт записью в массив.