Перейти к содержанию
    

avr-gcc + debian11 + "stack smashing detected"

Добрый день.

После перерыва в программировании минимум в полгода потребовалось пересобрать гарантированно рабочий makefile-based проект avr, вылезает ошибка 

*** stack smashing detected ***: terminated

При этом при сборке пустого проекта ошибка ровно та же самая:

$ cat ./main.c
int main (void)
{
        return 0;
}
$ make

-------- begin --------
avr-gcc (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: main.c
avr-gcc -c -mmcu=atmega64 -I. -gstabs -DF_CPU=SYSTEM_CLOCK  -Os -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99  main.c -o main.o

Linking: atmega64.elf
avr-gcc -mmcu=atmega64 -I. -gstabs -DF_CPU=SYSTEM_CLOCK  -Os -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99  main.o  --output atmega64.elf -Wl,-Map=atmega64.map,--cref    -lm
collect2: fatal error: ld terminated with signal 6 [Аварийный останов]
compilation terminated.
*** stack smashing detected ***: terminated
make: *** [makefile:391: atmega64.elf] Ошибка 1

 

В августе обновился деб10->деб11.

Подскажите, кто может, что изменилось и куда копать?

 

PS проекты под STM32 пересобираются нормально.

Изменено пользователем hw_engineer
дополнение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

-Wl,-Map=atmega64.map,--cref

что, вообще-то, неожиданно...

Проблема, как я понимаю. не в проекте, а в системе, питоновских скриптах, что ли.

Если "карта" не требуется, то elf/hex собираются нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде бы пара опций после -Wl это штатный режим (до сих пор работало, по кр.мере), но на всякий случай попробовал и отдельно: 

avr-gcc -c -mmcu=atmega64 -I. -gstabs   -Os -Wall -Wstrict-prototypes -std=gnu99  main.c -o main.o
avr-gcc -mmcu=atmega64 -I. -gstabs   -Os -Wall -Wstrict-prototypes -std=gnu99  main.o  --output main.elf  -Wl,-Map=main.map -Wl,--cref   -lm
collect2: fatal error: ld terminated with signal 6 [Аварийный останов]
compilation terminated.
*** stack smashing detected ***: terminated
make: *** [makefile_new:221: main.elf] Ошибка 1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@hw_engineer, я как раз сегодня столкнулся с такой же проблемой после обновления на Debian 11. Дубовое решение - использовать запуск с LANG=""

Т.е. запускать

LANG="" avr-gcc -mmcu=atmega64 -I. -gstabs   .... 


или сделать export LANG="" перед запуском процесса сборки. Но это криво, нужно патчить ld в binutils, в котором есть кривой код:

	if (! header_printed)
	{
	  char buf[100];

	  sprintf (buf, _("Archive member included "
			  "to satisfy reference by file (symbol)\n\n"));
	  minfo ("%s", buf);
	  header_printed = TRUE;
	}

вызывающий в русской локали переполнение буфера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, hw_engineer сказал:

о, спасибо, буду знать!

т.е. 100 мало?

Русский текст в utf-8 может занимать довольно много. В общем случае нужно либо выделать по необходимости, либо использовать snprintf, а не писать строку неизвестного размера в буфер без контроля его переполнения.

PS: Залил пересобранный пакет для Debian 11 - https://dropmefiles.com/0Ujlp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...