Hello Basil and Vahid,

When you find what you believe to be a bug it's best to file it in the bug
tracker at SF. If you only post about it in the mailing list(s) it will
likely get lost in time.

Maarten


Vahid Bashiri schreef op 2020-05-12 19:06:
I'v seen exactly the same problem with "--out-fmt-elf" and "_naked". it
must be bug.

On Sun, May 10, 2020 at 8:55 PM Basil Hussain <ba...@stasisleak.uk> wrote:

Hi all,

I have encountered an odd problem with sdasstm8 crashing. I believe I
have narrowed it down to a particular set of circumstances, which are:

* Using --debug and --out-fmt-elf options together, and;
* Having a function with __naked attribute that contains inline assembly
code.

It seems to hinge on the use of the ELF output option. With everything
else being equal, but using --out-fmt-hex, there is no crash.
Alternatively, if I instead just comment out the use of the __naked
attribute, then ELF compilation succeeds.

I'm assuming it's something to do with the contents of the .asm file
that sdas is being asked to assemble, and indeed if I examine the output
of both an ELF and Intel Hex output compilation, there are substantial
differences between the two - mainly that the former has a massive
amount of debug stuff appended, which the latter omits.

Here is a minimal sample program that demonstrates the problem:

unsigned int do_something(unsigned char a, unsigned char b) {
     return a + b;
}

void do_nothing(void) __naked {
     __asm
         nop
         nop
         nop
         ret
     __endasm;
}

void main(void) {
     unsigned int foo;

     foo = do_something(100, 42);
     do_nothing();

     while(1);
}

This is a log of the verbose output from the crashing scenario, when
asking SDCC for ELF output:

sdcc.exe -mstm8 --verbose --debug  --out-fmt-elf    -I"C:\Program
Files\SDCC\include" -c main.c -o obj\ELF\main.rel
sdcc.exe -L"C:\Program Files\SDCC\lib" -o bin\ELF\test.elf -mstm8
--verbose --debug  --out-fmt-elf      obj\ELF\main.rel
sdcc: Calling preprocessor...
sdcc: sdcpp.exe -nostdinc -Wall -std=c11 -I"C:\Program
Files\SDCC\include" -obj-ext=.rel -D__SDCC_STACK_AUTO
-D__SDCC_CHAR_UNSIGNED -D__SDCC_MODEL_MEDIUM -D__SDCC_INT_LONG_REENT
-D__SDCC_FLOAT_REENT -D__SDCC=4_0_0 -D__SDCC_VERSION_MAJOR=4
-D__SDCC_VERSION_MINOR=0 -D__SDCC_VERSION_PATCH=0
-D__SDCC_REVISION=11528 -D__SDCC_stm8 -D__STDC_NO_COMPLEX__=1
-D__STDC_NO_THREADS__=1 -D__STDC_NO_ATOMICS__=1 -D__STDC_NO_VLA__=1
-D__STDC_ISO_10646__=201409L -D__STDC_UTF_16__=1 -D__STDC_UTF_32__=1
-isystem "C:\Program Files\SDCC\bin\..\include\stm8" -isystem
"C:\Program Files\SDCC\bin\..\include"  "main.c"
sdcc: Generating code...
sdcc: Calling assembler...
sdcc: sdasstm8.exe -plosgffwy ""obj\ELF\main".asm"

The execution of sdasstm8 crashes (with the usual "sdasstm8.exe has
stopped working" message from Windows), so the whole compilation process
fails to complete. There are no error messages output by sdas.

This is the output from the non-crash scenario, when asking for Intel
Hex output:

sdcc.exe -mstm8 --verbose --debug  --out-fmt-ihx    -I"C:\Program
Files\SDCC\include" -c main.c -o obj\IHX\main.rel
sdcc.exe -L"C:\Program Files\SDCC\lib" -o bin\IHX\test.hex -mstm8
--verbose --debug  --out-fmt-ihx      obj\IHX\main.rel
sdcc: Calling preprocessor...
sdcc: sdcpp.exe -nostdinc -Wall -std=c11 -I"C:\Program
Files\SDCC\include" -obj-ext=.rel -D__SDCC_STACK_AUTO
-D__SDCC_CHAR_UNSIGNED -D__SDCC_MODEL_MEDIUM -D__SDCC_INT_LONG_REENT
-D__SDCC_FLOAT_REENT -D__SDCC=4_0_0 -D__SDCC_VERSION_MAJOR=4
-D__SDCC_VERSION_MINOR=0 -D__SDCC_VERSION_PATCH=0
-D__SDCC_REVISION=11528 -D__SDCC_stm8 -D__STDC_NO_COMPLEX__=1
-D__STDC_NO_THREADS__=1 -D__STDC_NO_ATOMICS__=1 -D__STDC_NO_VLA__=1
-D__STDC_ISO_10646__=201409L -D__STDC_UTF_16__=1 -D__STDC_UTF_32__=1
-isystem "C:\Program Files\SDCC\bin\..\include\stm8" -isystem
"C:\Program Files\SDCC\bin\..\include"  "main.c"
sdcc: Generating code...
sdcc: Calling assembler...
sdcc: sdasstm8.exe -plosgffwy ""obj\IHX\main".asm"
sdcc: Calling linker...
sdcc: sdldstm8.exe -nf ""bin\IHX\test.lk""

I am using SDCC 4.0.0 on Windows 7. If it helps, I can supply a
Code::Blocks project that is set up to demonstrate the problem.

Regards,
Basil Hussain


_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to