Issue #1 was caused because code_name and data_name had been incorrectly
defined as const-qualified pointers, but this must be an exception for
the z80 backend, as stated by the comments.
Issue #2 has been solved by removing the --gas switch from SDCCmain.c,
renaming it to "--asm=" (as requested by PKK) and moved to STM8's main.c,
so the option is limited to those targets supporting it.
Issue #4 was because of SDCCglue.c, that generated local labels using
"!labeldef" instead of "!slabeldef", causing those __str_%d labels to be
printed as "__str_%d::" (the double colons stand for globa label according
to asxxx documentation) instead of "__str_%d":".
I ran the regression tests and most of them passed, but "wchar" returned another
"Multiple definition of..." error that I cannot explain so far. It is better than
nothing, though.
OTOH, section names included in "options" were being assigned *before*
parsing command line arguments. These arose some issues so I have created
a post-parsing function.
GNU as does not support the #</#> notation asxxx uses to determine
address LSB and MSB. Instead, two instructions have been created on
GNU as and ld (see my stm8-binutils-gdb fork) for this purpose.
On the other hand, I'm upset to see gen.c does not provide an
assembler-agnostic implementation when SDCCasm.c already provides
tools already meant for this.
OTOH, support for the "-C" has been added for --gas.
STM8 code generator was generating some instructions in a
"ld register, (#%d, register)" way, causing assembling errors on
stm8-as. This is because stm8-as does not require the '#' character.
A quick and dirty workaround has been implemented for this.
Added new warning W_IGNORED_OPT_IN_ASM, which warns the user when
both "--no-optsdcc-in-asm" and "--gas" are used (the first is ignored
when the latter is active since GNU as does not accept the .optsdcc
directive, as opposed to asxxx).
.data only needs a label with the smybol name and .byte/.word
directives defining it. Therefore, INITIALIZED_NAME is ignored
since no allocation must be done from emitRegularMap() for .data.
It was an experimental attempt to implement GNU as support, but it
was deprecated in favor of ad-hoc workarounds and using SDCC
cross-assembler capabilities.
Interrupt vector must be placed on section .vectors, according to
the default linker script file.
Intermediate labels must be $-terminated so they are not listed by nm.
On _gas_mapping, label definitions do not allow "::". ":" must be
used instead.
gasOutput is now part of "options".
Unneeded sections, such as HOME/GSINIT/etc., are no longer declared
and/or defined. GNU as just does not need them.
Startup function name must equal "_start" for GNU ld.
The value of some macros, such as CODE_NAME or DATA_NAME, must change
according to options.gasOutput, as "CODE" or "DATA" (among many others)
are not understood by GNU as.
STM8 port now selects GNU as format on --gas switch enabled.
SDCCasm proved a much more elegant way to implement GAS support for SDCC.
In fact, I was surprised to see there was already an attempt that had been commented out.
stm8-as only complaints about those nasty "Smain ==." statements, but that should be easy to fix.