On Wed, Nov 12, 2014 at 10:07 AM, Jan Dolezal <dolez...@fel.cvut.cz> wrote: > --- > c/src/lib/libbsp/i386/pc386/Makefile.am | 1 + > c/src/lib/libbsp/i386/pc386/configure.ac | 5 +++++ > c/src/lib/libbsp/i386/pc386/include/bsp.h | 6 ++---- > c/src/lib/libbsp/i386/pc386/include/bsptblsizes.h | 25 ++++++++++++++++++++++ > c/src/lib/libbsp/i386/pc386/preinstall.am | 4 ++++ > c/src/lib/libbsp/i386/pc386/startup/ldsegs.S | 26 > +++++++++++++++++++---- > 6 files changed, 59 insertions(+), 8 deletions(-) > create mode 100644 c/src/lib/libbsp/i386/pc386/include/bsptblsizes.h > > diff --git a/c/src/lib/libbsp/i386/pc386/Makefile.am > b/c/src/lib/libbsp/i386/pc386/Makefile.am > index 22ba5e9..9c901df 100644 > --- a/c/src/lib/libbsp/i386/pc386/Makefile.am > +++ b/c/src/lib/libbsp/i386/pc386/Makefile.am > @@ -15,6 +15,7 @@ include_bspdir = $(includedir)/bsp > dist_project_lib_DATA = bsp_specs > > include_HEADERS = include/bsp.h > +include_HEADERS += include/bsptblsizes.h This header should probably be nested under bsp at least.
> include_HEADERS += include/tm27.h > > nodist_include_HEADERS = include/bspopts.h > diff --git a/c/src/lib/libbsp/i386/pc386/configure.ac > b/c/src/lib/libbsp/i386/pc386/configure.ac > index 1125c7c..ecec056 100644 > --- a/c/src/lib/libbsp/i386/pc386/configure.ac > +++ b/c/src/lib/libbsp/i386/pc386/configure.ac > @@ -82,6 +82,11 @@ RTEMS_BSPOPTS_HELP([USE_CIRRUS_GD5446], > NOTE: This has only been tested on Qemu.]) > AM_CONDITIONAL(USE_CIRRUS_GD5446,test "$USE_CIRRUS_GD5446" = "1") > > +RTEMS_BSPOPTS_SET([NUM_APP_DRV_GDT_DESCRIPTORS],[*],[0]) > +RTEMS_BSPOPTS_HELP([NUM_APP_DRV_GDT_DESCRIPTORS], > +[Defines how many descriptors in GDT may be allocated for application or > + driver usage.]) > + > if test X${CLOCK_DRIVER_USE_TSC} = X1 -a X${CLOCK_DRIVER_USE_8254} = X1 ; > then > AC_MSG_ERROR([pc386 both TSC and 8254 specified for clock driver]) > fi > diff --git a/c/src/lib/libbsp/i386/pc386/include/bsp.h > b/c/src/lib/libbsp/i386/pc386/include/bsp.h > index 21aa054..3425a6d 100644 > --- a/c/src/lib/libbsp/i386/pc386/include/bsp.h > +++ b/c/src/lib/libbsp/i386/pc386/include/bsp.h > @@ -51,6 +51,7 @@ > > #include <bspopts.h> > #include <bsp/default-initial-extension.h> > +#include <bsptblsizes.h> > > #include <rtems.h> > #include <rtems/iosupp.h> > @@ -166,11 +167,8 @@ extern int rtems_3c509_driver_attach(struct > rtems_bsdnet_ifconfig *config); > /*-------------------------------------------------------------------------+ > | External Variables. > +--------------------------------------------------------------------------*/ > -#define IDT_SIZE 256 > -#define GDT_SIZE 3 > - Why not just update these #defines with the new ones you have in bsptblsizes.h? > extern interrupt_gate_descriptor Interrupt_descriptor_table[IDT_SIZE]; > -extern segment_descriptors Global_descriptor_table [GDT_SIZE]; > +extern segment_descriptors _Global_descriptor_table [GDT_SIZE]; > > /*-------------------------------------------------------------------------+ > | Function Prototypes. > diff --git a/c/src/lib/libbsp/i386/pc386/include/bsptblsizes.h > b/c/src/lib/libbsp/i386/pc386/include/bsptblsizes.h > new file mode 100644 > index 0000000..ef51ae7 > --- /dev/null > +++ b/c/src/lib/libbsp/i386/pc386/include/bsptblsizes.h > @@ -0,0 +1,25 @@ > +/** > + * @file > + * > + * @ingroup i386_pc386 > + * > + * @brief Sizes of Global and Interrupt descriptor tables. > + */ > + > +/* > + * Definitions related to the PC386 BSP. > + * This header file is also used in assembler modules. > + * > + * Copyright (C) 2014 Jan Doležal (dolez...@fel.cvut.cz) > + * CTU in Prague. > + * > + * The license and distribution terms for this file may be > + * found in the file LICENSE in this distribution or at > + * http://www.rtems.org/license/LICENSE. > + */ > + > +#include <bspopts.h> > + > +#define IDT_SIZE (256) > +#define GDT_SIZE (3 + NUM_APP_DRV_GDT_DESCRIPTORS) > + > diff --git a/c/src/lib/libbsp/i386/pc386/preinstall.am > b/c/src/lib/libbsp/i386/pc386/preinstall.am > index 182f564..aff01dc 100644 > --- a/c/src/lib/libbsp/i386/pc386/preinstall.am > +++ b/c/src/lib/libbsp/i386/pc386/preinstall.am > @@ -41,6 +41,10 @@ $(PROJECT_INCLUDE)/bsp.h: include/bsp.h > $(PROJECT_INCLUDE)/$(dirstamp) > $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h > PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h > > +$(PROJECT_INCLUDE)/bsptblsizes.h: include/bsptblsizes.h > $(PROJECT_INCLUDE)/$(dirstamp) > + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsptblsizes.h > +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsptblsizes.h > + > $(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp) > $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h > PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h > diff --git a/c/src/lib/libbsp/i386/pc386/startup/ldsegs.S > b/c/src/lib/libbsp/i386/pc386/startup/ldsegs.S > index 495d68a..8f2220d 100644 > --- a/c/src/lib/libbsp/i386/pc386/startup/ldsegs.S > +++ b/c/src/lib/libbsp/i386/pc386/startup/ldsegs.S > @@ -34,6 +34,15 @@ > +--------------------------------------------------------------------------*/ > > #include <rtems/asm.h> > +#include <bsptblsizes.h> /* contains sizes of GDT and IDT */ > + > +#ifndef GDT_SIZE > +#define GDT_SIZE (3) > +#endif > + > +#ifndef IDT_SIZE > +#define IDT_SIZE (256) > +#endif > Adding ifndef here is redundant since they are unconditionally defined in bsptblsizes.h > > /*----------------------------------------------------------------------------+ > | CODE section > @@ -167,6 +176,9 @@ next_step: > > /*---------------------------------------------------------------------------+ > | GDT itself > +--------------------------------------------------------------------------*/ > +#if GDT_SIZE < 3 > +#error "GDT_SIZE must be at least 3" > +#endif > Is there a way to use assert() type function in assembly or preprocessor code? I'm just curious. This #if and #error is a good thing to do at least, and I'm glad to see that you have it! > BEGIN_DATA > .p2align 4 > @@ -186,11 +198,17 @@ SYM (_Global_descriptor_table): > .word 0xffff, 0 > .byte 0, 0x92, 0xcf, 0 > > + /* allocated space for user segments */ > + .rept (GDT_SIZE - 3) > + .word 0,0,0,0 > + .endr > + > > /*---------------------------------------------------------------------------+ > | Descriptor of GDT > +--------------------------------------------------------------------------*/ > -SYM (gdtdesc): > - .word (3*8 - 1) > + PUBLIC(gdtdesc) > +SYM(gdtdesc): > + .word (GDT_SIZE*8 - 1) > .long SYM (_Global_descriptor_table) > > > /*---------------------------------------------------------------------------+ > @@ -200,7 +218,7 @@ SYM (gdtdesc): > > PUBLIC(Interrupt_descriptor_table) > SYM(Interrupt_descriptor_table): > - .rept 256 > + .rept IDT_SIZE > .word 0,0,0,0 > .endr > > @@ -211,7 +229,7 @@ SYM(Interrupt_descriptor_table): > .p2align 4 > PUBLIC(IDT_Descriptor) > SYM(IDT_Descriptor): > - .word (256*8 - 1) > + .word (IDT_SIZE*8 - 1) > .long SYM (Interrupt_descriptor_table) > > END_DATA > -- > 1.9.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel