summaryrefslogtreecommitdiff
path: root/src/hc08
diff options
context:
space:
mode:
authorXavi Del Campo <xavi.dcr@tutanota.com>2019-11-06 04:10:53 +0100
committerXavi Del Campo <xavi.dcr@tutanota.com>2019-11-06 04:34:26 +0100
commitcf1d3aec552ebaea437935e74e5eabda4bd989e7 (patch)
treeebff2398497ea6ff20a1d6e57e63a12531d53ea2 /src/hc08
parent0290d8bd12f3cd188c200367ade7d569a92f1d2d (diff)
downloadsdcc-gas-cf1d3aec552ebaea437935e74e5eabda4bd989e7.tar.gz
Fixed github sdcc-gas issues #1, #2 and #4
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.
Diffstat (limited to 'src/hc08')
-rw-r--r--src/hc08/main.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/hc08/main.c b/src/hc08/main.c
index 85656f5..ee7ae0d 100644
--- a/src/hc08/main.c
+++ b/src/hc08/main.c
@@ -206,17 +206,17 @@ _hc08_genAssemblerPreamble (FILE * of)
symbol *mainExists=newSymbol("main", 0);
mainExists->block=0;
- fprintf (of, "\t.area %s\n",HOME_NAME);
- fprintf (of, "\t.area GSINIT0 (CODE)\n");
- fprintf (of, "\t.area %s\n",port->mem.static_name);
- fprintf (of, "\t.area %s\n",port->mem.post_static_name);
- fprintf (of, "\t.area %s\n",CODE_NAME);
- fprintf (of, "\t.area %s\n",port->mem.xinit_name);
- fprintf (of, "\t.area %s\n",port->mem.const_name);
- fprintf (of, "\t.area %s\n",port->mem.data_name);
- fprintf (of, "\t.area %s\n",port->mem.overlay_name);
- fprintf (of, "\t.area %s\n",port->mem.xdata_name);
- fprintf (of, "\t.area %s\n",port->mem.xidata_name);
+ tfprintf (of, "\t!area\n",HOME_NAME);
+ tfprintf (of, "\t!area\n", "GSINIT0 (CODE)");
+ tfprintf (of, "\t!area\n",port->mem.static_name);
+ tfprintf (of, "\t!area\n",port->mem.post_static_name);
+ tfprintf (of, "\t!area\n",CODE_NAME);
+ tfprintf (of, "\t!area\n",port->mem.xinit_name);
+ tfprintf (of, "\t!area\n",port->mem.const_name);
+ tfprintf (of, "\t!area\n",port->mem.data_name);
+ tfprintf (of, "\t!area\n",port->mem.overlay_name);
+ tfprintf (of, "\t!area\n",port->mem.xdata_name);
+ tfprintf (of, "\t!area\n",port->mem.xidata_name);
if ((mainExists=findSymWithLevel(SymbolTab, mainExists)))
{
@@ -592,7 +592,7 @@ hc08_instructionSize(const char *inst, const char *op1, const char *op2)
int size;
long offset;
char * endnum = NULL;
-
+
opcode = bsearch (inst, hc08opcodeDataTable,
sizeof(hc08opcodeDataTable)/sizeof(hc08opcodedata),
sizeof(hc08opcodedata), hc08_opcodeCompare);
@@ -603,15 +603,15 @@ hc08_instructionSize(const char *inst, const char *op1, const char *op2)
{
case HC08OP_INH: /* Inherent addressing mode */
return 1;
-
+
case HC08OP_BSC: /* Bit set/clear direct addressing mode */
case HC08OP_BR: /* Branch (1 byte signed offset) */
case HC08OP_IM1: /* 1 byte immediate addressing mode */
return 2;
-
+
case HC08OP_BTB: /* Bit test direct addressing mode and branch */
return 3;
-
+
case HC08OP_RMW: /* read/modify/write instructions */
if (!op2[0]) /* if not ,x or ,sp must be direct addressing mode */
return 2;
@@ -620,7 +620,7 @@ hc08_instructionSize(const char *inst, const char *op1, const char *op2)
if (op2[0] == 'x') /* if ,x with offset */
return 2;
return 3; /* Otherwise, must be ,sp with offset */
-
+
case HC08OP_STD: /* standard instruction */
if (!op2[0])
{