Fixes for z80 compilation with SDCC toolchain. There are still a few header file and linker issues

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5149 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-09-13 22:04:47 +00:00
parent 3e7c5c1b43
commit 3fcb8d9d6c
35 changed files with 282 additions and 165 deletions

View File

@ -94,7 +94,7 @@ $(AOBJS) $(HEAD_OBJ): %$(OBJEXT): %$(ASMEXT)
$(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
# This is a kludge to work around some conflicting symbols in libsdcc.liXqueb
# This is a kludge to work around some conflicting symbols in libsdcc.lib
$(SDCCLIBDIR)/myz80.lib: $(SDCCLIBDIR)/$(SDCCLIB)
@cat $(SDCCLIBDIR)/$(SDCCLIB) | \

View File

@ -1,7 +1,7 @@
/****************************************************************************
* arch/z80/src/z80/z80_io.c
*
* Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
* Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -44,9 +44,23 @@
#include "up_internal.h"
/****************************************************************************
* Private Definitions
* Pre-processor Definitions
****************************************************************************/
#undef ASM
#undef ENDASM
#undef NAKED
#ifdef CONFIG_SDCC_OLD
# define ASM _asm
# define ENDASM _endasm
# define NAKED
#else
# define ASM __asm
# define ENDASM __endasm
# define NAKED __naked
#endif
/****************************************************************************
* Private Data
****************************************************************************/
@ -69,11 +83,11 @@
void outp(char p, char c)
{
_asm
ASM
ld c, 4(ix) ; port
ld a, 5(ix) ; value
out (c), a
_endasm;
ENDASM;
}
@ -85,10 +99,10 @@ void outp(char p, char c)
*
****************************************************************************/
char inp(char p)
char inp(char p) NAKED
{
_asm
ASM
ld c, 4(ix) ;port
in l, (c)
_endasm;
ENDASM;
}

View File

@ -1,7 +1,7 @@
/****************************************************************************
* arch/z80/src/z80/z80_irq.c
*
* Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
* Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -48,6 +48,14 @@
* Private Definitions
****************************************************************************/
#ifdef CONFIG_SDCC_OLD
# define ASM _asm
# define ENDASM _endasm
#else
# define ASM __asm
# define ENDASM __endasm
#endif
/****************************************************************************
* Public Data
****************************************************************************/
@ -80,13 +88,13 @@ volatile chipreg_t *current_regs;
irqstate_t irqsave(void) __naked
{
_asm
ASM
ld a, i ; AF Parity bit holds interrupt state
di ; Interrupts are disabled
push af ; Return AF in HL
pop hl ;
ret ;
_endasm;
ENDASM;
}
/****************************************************************************
@ -99,7 +107,7 @@ irqstate_t irqsave(void) __naked
void irqrestore(irqstate_t flags) __naked
{
_asm
ASM
di ; Assume disabled
pop hl ; HL = return address
pop af ; AF Parity bit holds interrupt state
@ -109,5 +117,5 @@ statedisable:
push af ; Restore stack
push hl ;
ret ; and return
_endasm;
ENDASM;
}

View File

@ -55,7 +55,6 @@ Configuring NuttX
cd -
. ./setenv.sh
nsh
This configuration file builds NSH (examples/nsh). This
configuration is not functional due to issues with use of the
@ -134,6 +133,9 @@ like compiler bugs. If you are using UBUNTU 9.10, you may have to either
the older stable releases, or (2) wait for the next stable SDCC release
after 2.9.0.
See below: If you wish to continue using the older SDCC toolchain, you
must now also add CONFIG_SDCC_OLD=y to your configuration file.
Newer SDCC Versions
^^^^^^^^^^^^^^^^^^^
@ -154,4 +156,14 @@ This is the text of bug 3468951 reported on the SourceForge website:
sdcc-2.6.0-asz80-symlen.patch is unnecessary, and it and the corresponding
section from the README can be removed.
These changes have not yet been incorporated or verified.
These changes *have* been incorporated but only partially verified. In order
to get a successful compilation, I had to copy stdarg.h out of the SDCC source
(at sdcc/device/include/stdarg.h) to include/nuttx/stdarg.h.
There are also some library related issues when you get to the final build
that I have not looked into yet.
If you want to back out these change and continue to use the older toolchain
in your build, simpy define the following in your configuration file:
CONFIG_SDCC_OLD=y

View File

@ -1,5 +1,5 @@
/************************************************************
* board/board.h
* configs/xtrs/include/board.h
*
* Copyright (C) 2008 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/trs80-m3.h
* configs/xtrs/include/trs80-m3.h
*
* Copyright (C) 2008 Jacques Pelletier. All rights reserved.
* Author: Jacques Pelletier

View File

@ -1,5 +1,5 @@
############################################################################
# configs/xtrs/Make.defs
# configs/xtrs/nsh/Make.defs
#
# Copyright (C) 2007, 2008, 2012 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
############################################################################
# sim/xtrs/nsh/defconfig
# configs/xtrs/nsh/defconfig
#
# Copyright (C) 2007-2010, 2012 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
#!/bin/bash
# xtrs/setenv.sh
# configs/xtrs/nsh/setenv.sh
#
# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
############################################################################
# configs/xtrs/Make.defs
# configs/xtrs/ostest/Make.defs
#
# Copyright (C) 2008, 2012 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
#!/bin/bash
# xtrs/setenv.sh
# configs/xtrs/ostest/setenv.sh
#
# Copyright (C) 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
############################################################################
# configs/xtrs/Make.defs
# configs/xtrs/pashello/Make.defs
#
# Copyright (C) 2008, 2012 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
#!/bin/bash
# xtrs/setenv.sh
# configs/xtrs/pashello/setenv.sh
#
# Copyright (C) 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/xtr_irq.c
* configs/xtrs/src/xtr_irq.c
*
* Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/********************************************************************************
* board/xtr_lowputc.c
* configs/xtrs/src//xtr_lowputc.c
*
* Copyright (C) 2008 Jacques Pelletier. All rights reserved.
* Author: Jacques Pelletier

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/xtr_serial.c
* config/xtrs/src/xtr_serial.c
*
* Copyright (C) 2008 Jacques Pelletier. All rights reserved.
* Author: Jacques Pelletier

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/xtr_timerisr.c
* configs/xtrs/src/xtr_timerisr.c
*
* Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -28,7 +28,6 @@ Configuring NuttX
cd -
. ./setenv.sh
nsh
This configuration file builds NSH (examples/nsh). This
configuration is not functional due to issues with use of the
@ -107,6 +106,9 @@ like compiler bugs. If you are using UBUNTU 9.10, you may have to either
the older stable releases, or (2) wait for the next stable SDCC release
after 2.9.0.
See below: If you wish to continue using the older SDCC toolchain, you
must now also add CONFIG_SDCC_OLD=y to your configuration file.
Newer SDCC Versions
^^^^^^^^^^^^^^^^^^^
@ -127,4 +129,14 @@ This is the text of bug 3468951 reported on the SourceForge website:
sdcc-2.6.0-asz80-symlen.patch is unnecessary, and it and the corresponding
section from the README can be removed.
These changes have not yet been incorporated or verified.
These changes *have* been incorporated but only partially verified. In order
to get a successful compilation, I had to copy stdarg.h out of the SDCC source
(at sdcc/device/include/stdarg.h) to include/nuttx/stdarg.h.
There are also some library related issues when you get to the final build
that I have not looked into yet.
If you want to back out these change and continue to use the older toolchain
in your build, simpy define the following in your configuration file:
CONFIG_SDCC_OLD=y

View File

@ -1,5 +1,5 @@
/************************************************************
* board/board.h
* configs/z80sim/include/board.h
*
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
############################################################################
# sim/z80sim/nsh/defconfig
# configs/z80sim/nsh/defconfig
#
# Copyright (C) 2007-2010 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
#!/bin/bash
# z80sim/setenv.sh
# configs/z80sim/nsh/setenv.sh
#
# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
#!/bin/bash
# z80sim/setenv.sh
# configs/z80sim/ostest/setenv.sh
#
# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -36,25 +36,36 @@
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
ifeq ("${CONFIG_DEBUG_SYMBOLS}","y")
CROSSDEV =
CC = sdcc
CPP = sdcpp
AR = sdcclib -a
ifeq ($(CONFIG_SDCC_OLD),y)
LD = link-z80
AS = as-z80
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
else
LD = sdldz80
AS = sdasz80
ARCHCPUFLAGS = -mz80
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
ARCHOPTIMIZATION = --debug
else
ARCHOPTIMIZATION =
endif
ARCHCPUFLAGS = -mz80 --stack-auto --int-long-reent --float-reent
ARCHPICFLAGS =
ARCHWARNINGS =
ARCHDEFINES =
ARCHINCLUDES = -I. -I$(TOPDIR)/include
CROSSDEV =
CC = sdcc
CPP = sdcpp
LD = link-z80
AS = as-z80
AR = sdcclib -a
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \
$(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)

View File

@ -1,5 +1,5 @@
#!/bin/bash
# z80sim/setenv.sh
# configs/z80sim/pashello/setenv.sh
#
# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/z80_irq.c
* configs/z80sim/src/z80_irq.c
*
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/********************************************************************************
* board/z80_lowputc.c
* configs/z80sim/src//z80_lowputc.c
*
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/z80_serial.c
* configs/z80sim/src/z80_serial.c
*
* Copyright (C) 2007-2009, 2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
/****************************************************************************
* board/z80_timerisr.c
* configs/z80sim/src/z80_timerisr.c
*
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -39,8 +39,6 @@
#include <nuttx/config.h>
#ifdef CONFIG_ARCH_LOWGETC
#include <stdio.h>
#include <assert.h>
#include <errno.h>
@ -49,6 +47,8 @@
#include "lib_internal.h"
#ifdef CONFIG_ARCH_LOWGETC
/****************************************************************************
* Private Functions
****************************************************************************/

View File

@ -91,13 +91,13 @@ static const char spaces[] = " \t\n\r\f\v";
*
****************************************************************************/
int sscanf(const char *buf, const char *fmt, ...)
int sscanf(FAR const char *buf, FAR const char *fmt, ...)
{
va_list ap;
int count;
va_start(ap, fmt);
count = vsscanf((char*)buf, fmt, ap);
count = vsscanf((FAR char*)buf, fmt, ap);
va_end(ap);
return count;
}
@ -109,15 +109,15 @@ int sscanf(const char *buf, const char *fmt, ...)
* ANSI standard vsscanf implementation.
*
****************************************************************************/
int vsscanf(char *buf, const char *s, va_list ap)
int vsscanf(FAR char *buf, FAR const char *s, va_list ap)
{
int count;
int noassign;
int width;
int base = 10;
int lflag;
char *tv;
const char *tc;
FAR char *tv;
FAR const char *tc;
char tmp[MAXLN];
lvdbg("vsscanf: buf=\"%s\" fmt=\"%s\"\n", buf, s);

View File

@ -42,7 +42,11 @@ CSRCS += lib_checkbase.c lib_isbasedigit.c lib_memset.c lib_memchr.c \
lib_strncasecmp.c lib_strncat.c lib_strncmp.c lib_strncpy.c \
lib_strndup.c lib_strcasestr.c lib_strpbrk.c lib_strrchr.c\
lib_strspn.c lib_strstr.c lib_strtok.c lib_strtokr.c lib_strtol.c \
lib_strtoll.c lib_strtoul.c lib_strtoull.c lib_strtod.c
lib_strtoll.c lib_strtoul.c lib_strtoull.c
ifeq ($(CONFIG_LIBC_FLOATINGPOINT),y)
CSRCS += lib_strtod.c
endif
# Add the string directory to the build

View File

@ -1090,7 +1090,8 @@ static ssize_t tcp_recvfrom(FAR struct socket *psock, FAR void *buf, size_t len,
* 2) if read-ahead buffering is enabled (CONFIG_NET_NTCP_READAHEAD_BUFFERS > 0)
* and delay logic is disabled (CONFIG_NET_TCP_RECVDELAY == 0), then we
* not want to wait if we already obtained some data from the read-ahead
* buffer. In that case, return now with what we have.
* buffer. In that case, return now with what we have (don't want for more
* because there may be no timeout).
*/
#if CONFIG_NET_TCP_RECVDELAY == 0 && CONFIG_NET_NTCP_READAHEAD_BUFFERS > 0

View File

@ -91,7 +91,7 @@ int prctl(int option, ...)
{
/* Get the prctl arguments */
char *name = va_arg(ap, char *);
FAR char *name = va_arg(ap, FAR char *);
int pid = va_arg(ap, int);
FAR _TCB *tcb;