From 321cd682df5659143610e50005c4eb1a6a5decf7 Mon Sep 17 00:00:00 2001 From: borutr Date: Wed, 2 Jul 2003 20:56:07 +0000 Subject: [PATCH] virtualization of glue() function: each port has it's own glue function, which is accessed by do_glue function pointer in PORT.general structure git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2719 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 9 +++++++++ src/SDCCmain.c | 43 +++++++++++-------------------------------- src/avr/main.c | 1 + src/ds390/main.c | 2 ++ src/izt/i186.c | 1 + src/izt/tlcs900h.c | 1 + src/mcs51/main.c | 1 + src/pic/glue.h | 11 +++-------- src/pic/main.c | 2 ++ src/pic16/glue.h | 11 +++-------- src/pic16/main.c | 2 ++ src/port.h | 2 ++ src/xa51/main.c | 1 + src/z80/main.c | 2 ++ 14 files changed, 41 insertions(+), 48 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0976fe13..56c7b917 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-07-02 Borut Razem + + * src/port.h, src/SDCCmain.c, src/pic/glue.h, src/pic/main.c, + src/pic16/glue.h, sdcc/src/pic16/main.c, src/izt/i186.c, + src/izt/tlcs900h.c, src/avr/main.c, src/ds390/main.c, src/mcs51/main.c, + src/xa51/main.c, src/z80/main.c: + virtualization of glue() function: each port has it's own glue function, + which is accessed by do_glue function pointer in PORT.general structure + 2003-07-01 Kevin Vigor * DS800C400 fun, improved ROM interface and tinibios. diff --git a/src/SDCCmain.c b/src/SDCCmain.c index bda73ad7..66340ca8 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -306,13 +306,6 @@ static PORT *_ports[] = #define NUM_PORTS (sizeof(_ports)/sizeof(_ports[0])) -#if !OPT_DISABLE_PIC -extern void picglue (); -#endif -#if !OPT_DISABLE_PIC16 -extern void pic16glue(); -#endif - /** Sets the port to the one given by the command line option. @param The name minus the option (eg 'mcs51') @return 0 on success. @@ -407,7 +400,7 @@ _findProcessor (int argc, char **argv) /* printVersionInfo - prints the version info */ /*-----------------------------------------------------------------*/ void -printVersionInfo () +printVersionInfo (void) { int i; @@ -460,7 +453,7 @@ printOptions(const OPTION *optionsTable) /* printUsage - prints command line syntax */ /*-----------------------------------------------------------------*/ void -printUsage () +printUsage (void) { int i; printVersionInfo(); @@ -1998,29 +1991,15 @@ main (int argc, char **argv, char **envp) exit (1); } - if (TARGET_IS_PIC) { - /* TSD PIC port hack - if the PIC port option is enabled - and SDCC is used to generate PIC code, then we will - generate .asm files in gpasm's format instead of SDCC's - assembler's format - */ -#if !OPT_DISABLE_PIC - picglue (); -#endif - - } else - if(TARGET_IS_PIC16) { - /* PIC16 port misc improvements Vangelis Rokas - 6-May-2003 - Generate .asm files for gpasm (just like PIC target) but use - pic16glue() - */ - -#if !OPT_DISABLE_PIC16 - pic16glue(); -#endif - } else { - glue (); - } + if (port->general.do_glue != NULL) + (*port->general.do_glue)(); + else + { + /* this shouldn't happen */ + assert(FALSE); + /* in case of NDEBUG */ + glue(); + } if (!options.c1mode && !noAssemble) { diff --git a/src/avr/main.c b/src/avr/main.c index 73eb0ba6..5d5a3237 100644 --- a/src/avr/main.c +++ b/src/avr/main.c @@ -153,6 +153,7 @@ PORT avr_port = { "ATMEL AVR", /* Target name */ NULL, /* processor */ { + glue, TRUE, /* Emit glue around main */ MODEL_LARGE | MODEL_SMALL, MODEL_SMALL}, diff --git a/src/ds390/main.c b/src/ds390/main.c index 285862e3..43232604 100644 --- a/src/ds390/main.c +++ b/src/ds390/main.c @@ -339,6 +339,7 @@ PORT ds390_port = "DS80C390", /* Target name */ NULL, { + glue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24, MODEL_SMALL @@ -836,6 +837,7 @@ PORT ds400_port = "DS80C400", /* Target name */ NULL, { + glue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24, MODEL_SMALL diff --git a/src/izt/i186.c b/src/izt/i186.c index 60048a43..dbb92322 100644 --- a/src/izt/i186.c +++ b/src/izt/i186.c @@ -138,6 +138,7 @@ PORT i186_port = { "Intel 80186", /* Target name */ NULL, { + glue, FALSE, /* Emit glue around main */ MODEL_SMALL, MODEL_SMALL diff --git a/src/izt/tlcs900h.c b/src/izt/tlcs900h.c index 2f5a9d22..732f93a1 100644 --- a/src/izt/tlcs900h.c +++ b/src/izt/tlcs900h.c @@ -137,6 +137,7 @@ PORT tlcs900h_port = "Toshiba TLCS-900H", /* Target name */ NULL, { + glue, TRUE, /* Emit glue around main */ MODEL_SMALL, MODEL_SMALL diff --git a/src/mcs51/main.c b/src/mcs51/main.c index 3857a4e5..e7af479f 100644 --- a/src/mcs51/main.c +++ b/src/mcs51/main.c @@ -232,6 +232,7 @@ PORT mcs51_port = "MCU 8051", /* Target name */ NULL, /* Processor name */ { + glue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE, MODEL_SMALL diff --git a/src/pic/glue.h b/src/pic/glue.h index 30e54dde..bd1cea98 100644 --- a/src/pic/glue.h +++ b/src/pic/glue.h @@ -21,15 +21,10 @@ You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ -#include "SDCCglobl.h" -#include "SDCCmem.h" -#ifndef SDCCGLUE_H -#define SDCCGLUE_H 1 +#ifndef PIC_GLUE_H +#define PIC_GLUE_H -void glue (); -/* drdani Jan 30 2000 - This is needed in gen.c of z80 port */ -char *aopLiteral (value *, int); +void picglue (void); #endif diff --git a/src/pic/main.c b/src/pic/main.c index ff5bcd3d..66b23518 100644 --- a/src/pic/main.c +++ b/src/pic/main.c @@ -9,6 +9,7 @@ #include "ralloc.h" #include "device.h" #include "SDCCutil.h" +#include "glue.h" //#include "gen.h" @@ -344,6 +345,7 @@ PORT pic_port = "MCU pic", /* Target name */ "", /* Processor */ { + picglue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24, MODEL_SMALL diff --git a/src/pic16/glue.h b/src/pic16/glue.h index 30e54dde..7df7587c 100644 --- a/src/pic16/glue.h +++ b/src/pic16/glue.h @@ -21,15 +21,10 @@ You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ -#include "SDCCglobl.h" -#include "SDCCmem.h" -#ifndef SDCCGLUE_H -#define SDCCGLUE_H 1 +#ifndef PIC16_GLUE_H +#define PIC16_GLUE_H -void glue (); -/* drdani Jan 30 2000 - This is needed in gen.c of z80 port */ -char *aopLiteral (value *, int); +void pic16glue (void); #endif diff --git a/src/pic16/main.c b/src/pic16/main.c index d236fe6d..abd6c3a5 100644 --- a/src/pic16/main.c +++ b/src/pic16/main.c @@ -9,6 +9,7 @@ #include "ralloc.h" #include "device.h" #include "SDCCutil.h" +#include "glue.h" //#include "gen.h" @@ -361,6 +362,7 @@ PORT pic16_port = "MCU PIC16", /* Target name */ "p18f452", /* Processor */ { + pic16glue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24, MODEL_SMALL diff --git a/src/port.h b/src/port.h index 835b55fb..5bb49e82 100644 --- a/src/port.h +++ b/src/port.h @@ -57,6 +57,8 @@ typedef struct struct { + /** Pointer to glue function */ + void (*do_glue)(void); /** TRUE if all types of glue functions should be inserted into the file that also defines main. We dont want this in cases like the z80 where the startup diff --git a/src/xa51/main.c b/src/xa51/main.c index 53b54359..707bad09 100755 --- a/src/xa51/main.c +++ b/src/xa51/main.c @@ -213,6 +213,7 @@ PORT xa51_port = "MCU 80C51XA", /* Target name */ NULL, /* Processor name */ { + glue, FALSE, /* Emit glue around main */ MODEL_PAGE0, MODEL_PAGE0 diff --git a/src/z80/main.c b/src/z80/main.c index 2ff5b561..4711840b 100644 --- a/src/z80/main.c +++ b/src/z80/main.c @@ -498,6 +498,7 @@ PORT z80_port = "Zilog Z80", /* Target name */ NULL, /* Processor name */ { + glue, FALSE, MODEL_MEDIUM | MODEL_SMALL, MODEL_SMALL @@ -592,6 +593,7 @@ PORT gbz80_port = "Gameboy Z80-like", /* Target name */ NULL, { + glue, FALSE, MODEL_MEDIUM | MODEL_SMALL, MODEL_SMALL -- 2.47.2