Changeset 162


Ignore:
Timestamp:
Jun 20, 2012, 5:11:11 PM (12 years ago)
Author:
karaoui
Message:

Cleaning unused files
Simplifying Makefile
adding missing include

Location:
soft/giet_vm
Files:
6 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/Makefile

    r161 r162  
     1export # export all variable to sub-Makefile
    12CC=mipsel-unknown-elf-gcc
    23AS=mipsel-unknown-elf-as
     
    45DU=mipsel-unknown-elf-objdump
    56
    6 SYS_OBJS = giet.o \
     7
     8#current directory absolute path
     9SOFT_PATH       = $(shell pwd)/
     10
     11SYS_NAME    = sys
     12BOOT_NAME   = boot
     13LIB_NAME    = libs
     14
     15SYS_PATH    = $(SOFT_PATH)$(SYS_NAME)
     16BOOT_PATH   = $(SOFT_PATH)$(BOOT_NAME)
     17LIB_PATH    = $(SOFT_PATH)$(LIB_NAME)
     18MAP_PATH    = $(SOFT_PATH)xml/
     19BUILD_PATH      = $(SOFT_PATH)build/
     20ELF_PATH        = $(SOFT_PATH)build/
     21
     22#list of all applications directory
     23APP_DIRS        = $(shell ls -d apps/*/ )
     24
     25SYS_OBJS_LIST = \
     26                sys_handler.o \
     27                init.o          \
     28                giet.o \
    729                switch.o \
    830                common.o \
     
    1133                exc_handler.o \
    1234                irq_handler.o \
    13                 sys_handler.o \
    14                 init.o          \
    1535                task_init.o
    1636
    17 BOOT_OBJS = reset.o \
    18                 boot_handler.o
     37BOOT_OBJS_LIST = reset.o \
     38                                boot_handler.o
    1939
    20 SYS_PATH    = sys
    21 BOOT_PATH   = boot
    22 MAP_PATH    = xml
    23 LIBS_PATH   = libs
    24 BUILD_DIR_NAME  = build
     40#LIB_SRCS = $(wildcard $(LIB_NAME)/*.c)
     41LIB_OBJS_LIST = stdio.o\
     42                                mwmr.o\
     43                                common.o
     44
     45LIB_OBJS = $(patsubst %,$(LIB_NAME)/%,$(LIB_OBJS_LIST))
     46SYS_OBJS   = $(patsubst %,$(SYS_NAME)/%,$(SYS_OBJS_LIST))
     47BOOT_OBJS   = $(patsubst %,$(BOOT_NAME)/%,$(BOOT_OBJS_LIST))
     48
    2549
    2650CFLAGS=-Wall -ffreestanding -mno-gpopt -mips32 -g
    2751
    28 SYS_INCLUDE = -I$(SYS_PATH) -I$(MAP_PATH) -I$(LIBS_PATH) -I.
     52SYS_INCLUDE = -I$(SYS_PATH) -I$(MAP_PATH) -I$(LIB_PATH) -I.
    2953
    30 BOOT_INCLUDE = -I$(BOOT_PATH) -I$(MAP_PATH) -I$(LIBS_PATH) -I.
     54BOOT_INCLUDE = -I$(BOOT_PATH) -I$(MAP_PATH) -I$(LIB_PATH) -I.
    3155
    32 #commons between sys and boot are: common.ld , mips_registers.h...
     56INCLUDE         = -I$(LIB_PATH) -I$(SOFT_PATH) -I$(SYS_PATH) -I$(MAP_PATH)
    3357
    3458TRASH= /dev/null||true
     
    3862all: prepare soft.elf
    3963       
    40 
    4164## merge all *.elf to soft.elf
    4265soft.elf: boot.elf sys.elf map.bin apps
    43         make -C mover
    44         mover/mover.x -sm map.bin
    45         $(DU) -D $@ > $@.txt
     66        $(MAKE) -C mover
     67        mover/mover.x map.bin
     68        $(DU) -D $@ > $(BUILD_PATH)$@.txt
    4669
    4770## prepare the environement
    4871prepare:
    49         @mkdir $(BUILD_DIR_NAME) 2>$(TRASH)
     72        @mkdir $(BUILD_PATH) 2>$(TRASH)
     73        @mkdir $(ELF_PATH) 2>$(TRASH)
    5074
     75## compile the parser
    5176## mapping compilation
    5277map.bin: map.xml
    53         make -C xml                             #compile the parser
     78        $(MAKE) -C xml                         
    5479        xml/xml2bin map.xml map.bin
    5580
    5681## system compilation
    5782sys.elf: $(SYS_OBJS) $(SYS_PATH)/sys.ld
    58         (cd $(BUILD_DIR_NAME); $(LD) -o $@ -T ../$(SYS_PATH)/sys.ld $(SYS_OBJS) )
    59         (cd $(BUILD_DIR_NAME); $(DU) -D $@ > $@.txt)
     83        (cd $(BUILD_PATH); $(LD) -o $@ -T $(SYS_PATH)/sys.ld $(SYS_OBJS) )
     84        (cd $(BUILD_PATH); $(DU) -D $@ > $@.txt)
    6085
    61 switch.o: $(SYS_PATH)/switch.s giet_config.h
    62         $(AS) -g -mips32 -o $(BUILD_DIR_NAME)/$@ $<
     86$(SYS_NAME)/%.o: $(SYS_NAME)/%.c
     87        @mkdir $(BUILD_PATH)/$(SYS_NAME) 2>$(TRASH)
     88        $(CC) $(SYS_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
    6389
    64 giet.o: $(SYS_PATH)/giet.s giet_config.h
    65         $(AS) -g -mips32 -o $(BUILD_DIR_NAME)/$@ $<
     90$(SYS_NAME)/%.o: $(SYS_NAME)/%.s
     91        @mkdir $(BUILD_PATH)/$(SYS_NAME) 2>$(TRASH)
     92        $(CC) $(SYS_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
    6693
    67 task_init.o: $(SYS_PATH)/task_init.S giet_config.h
    68         #$(AS) -g -mips32 -o $(BUILD_DIR_NAME)/$@ $<
    69         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    70         $(DU) -D $(BUILD_DIR_NAME)/$@ > $(BUILD_DIR_NAME)/$@.txt
    71 
    72 ctx_handler.o: $(SYS_PATH)/ctx_handler.c $(SYS_PATH)/ctx_handler.h giet_config.h
    73         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    74 
    75 exc_handler.o: $(SYS_PATH)/exc_handler.c $(SYS_PATH)/exc_handler.h giet_config.h
    76         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    77 
    78 irq_handler.o: $(SYS_PATH)/irq_handler.c $(SYS_PATH)/irq_handler.h giet_config.h
    79         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    80 
    81 sys_handler.o: $(SYS_PATH)/sys_handler.c $(SYS_PATH)/sys_handler.h giet_config.h
    82         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    83 
    84 drivers.o: $(SYS_PATH)/drivers.c $(SYS_PATH)/drivers.h giet_config.h
    85         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    86 
    87 common.o: $(SYS_PATH)/common.c $(SYS_PATH)/common.h giet_config.h
    88         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    89 
    90 init.o: $(SYS_PATH)/init.c giet_config.h
    91         $(CC) $(CFLAGS) $(SYS_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
     94$(SYS_NAME)/%.o: $(SYS_NAME)/%.S
     95        @mkdir $(BUILD_PATH)/$(SYS_NAME) 2>$(TRASH)
     96        $(CC) $(SYS_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
    9297
    9398## boot compilation
    9499boot.elf: $(BOOT_OBJS) $(BOOT_PATH)/boot.ld
    95         (cd $(BUILD_DIR_NAME); $(LD) -o $@ -T ../$(BOOT_PATH)/boot.ld $(BOOT_OBJS) )
    96         (cd $(BUILD_DIR_NAME); $(DU) -D $@ > $@.txt)
     100        (cd $(BUILD_PATH); $(LD) -o $@ -T $(BOOT_PATH)/boot.ld $(BOOT_OBJS) )
     101        (cd $(BUILD_PATH); $(DU) -D $@ > $@.txt)
    97102
    98 reset.o: $(BOOT_PATH)/reset.S giet_config.h
    99         $(CC) $(CFLAGS) $(BOOT_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
    100         $(DU) -D $(BUILD_DIR_NAME)/$@ > $(BUILD_DIR_NAME)/$@.txt
     103$(BOOT_NAME)/%.o: $(BOOT_NAME)/%.c
     104        @mkdir $(BUILD_PATH)/$(BOOT_NAME) 2>$(TRASH)
     105        $(CC) $(BOOT_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
    101106
    102 boot_handler.o: $(BOOT_PATH)/boot_handler.c $(BOOT_PATH)/boot_handler.h giet_config.h
    103         $(CC) $(CFLAGS) $(BOOT_INCLUDE) -c -o $(BUILD_DIR_NAME)/$@ $<
     107$(BOOT_NAME)/%.o: $(BOOT_NAME)/%.s
     108        @mkdir $(BUILD_PATH)/$(BOOT_NAME) 2>$(TRASH)
     109        $(CC) $(BOOT_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
    104110
    105 ## applications and libs compilation
    106 apps:
     111$(BOOT_NAME)/%.o: $(BOOT_NAME)/%.S
     112        @mkdir $(BUILD_PATH)/$(BOOT_NAME) 2>$(TRASH)
     113        $(CC) $(BOOT_INCLUDE) $(CFLAGS)  -c -o $(BUILD_PATH)/$@ $<
     114
     115##libs compilation
     116$(LIB_NAME)/%.o: $(LIB_NAME)/%.c
     117        @mkdir $(BUILD_PATH)/$(LIB_NAME) 2>$(TRASH)
     118        $(CC) $(CFLAGS) $(INCLUDE) -c -o $(BUILD_PATH)/$@ $<
     119
     120## applications
     121apps: $(LIB_OBJS)
    107122        @echo "---------------------------------------------BUILDING APPS------------------------------------------------------"
    108         make -C apps
     123        set -e; for d in $(APP_DIRS); do $(MAKE)  -C $$d ; echo "Compiling $$d";  done
    109124
    110125### special rules
    111126clean:
    112127        rm -f *.o *.elf *.bin *.txt core *~  2>$(TRASH)
    113         make clean -C xml/ 2>$(TRASH)
    114         make clean -C mover/ 2>$(TRASH)
    115         make clean -C apps 2>$(TRASH)
    116         rm -r $(BUILD_DIR_NAME) 2>$(TRASH)
     128        $(MAKE) clean -C xml/ 2>$(TRASH)
     129        $(MAKE) clean -C mover/ 2>$(TRASH)
     130        rm -r $(BUILD_PATH) 2>$(TRASH)
     131        set -e; for d in $(APP_DIRS); do $(MAKE) clean -C $$d ; done
  • soft/giet_vm/apps/Makefile

    r161 r162  
    11# Compile the library and call the Makefile of each sub-directory. #
    2 
    32export # export all variable to sub-Makefile
    43CC      = mipsel-unknown-elf-gcc
     
    76DU      = mipsel-unknown-elf-objdump
    87
    9 CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32
    10 
    11 SOFT_PATH       = $(shell cd ..; pwd)/
    12 
    13 LIB_PATH        = $(SOFT_PATH)libs
    14 SYS_PATH        = $(SOFT_PATH)sys
    15 DUMP_PATH       = $(SOFT_PATH)  #where goes the generated *.bin
    16 MAP_PATH    = $(SOFT_PATH)xml
    17 BUILD_PATH      = $(SOFT_PATH)/build/
    18 BIN_PATH        = $(SOFT_PATH)/build/
    19 
    20 INCLUDE         = -I$(LIB_PATH) -I$(SOFT_PATH) -I$(SYS_PATH) -I$(MAP_PATH)
     8CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -g
    219
    2210TRASH= /dev/null||true
     
    2614LIB_COMPILE+= common.o
    2715
     16SOFT_PATH       = $(cd ..; shell pwd)/
     17
     18SYS_PATH    = $(SOFT_PATH)sys/
     19BOOT_PATH   = $(SOFT_PATH)boot/
     20MAP_PATH    = $(SOFT_PATH)xml/
     21LIBS_PATH   = $(SOFT_PATH)libs/
     22BUILD_PATH      = $(SOFT_PATH)build/
     23ELF_PATH        = $(SOFT_PATH)build/
     24
     25INCLUDE         = -I$(LIBS_PATH) -I$(SOFT_PATH) -I$(SYS_PATH) -I$(MAP_PATH)
     26
    2827DIRS=$(shell ls -d */ ) #list all directorys
    29 
    3028
    3129.PHONY: prepare
    3230
    33 all: prepare $(LIB_COMPILE)
     31all: test prepare $(LIB_COMPILE)
    3432        set -e; for d in $(DIRS); do $(MAKE)  -C $$d ; echo "Compiling $$d";  done
    3533
    3634prepare:
    3735        @mkdir $(BUILD_PATH) 2>$(TRASH)
     36        @mkdir $(ELF_PATH) 2>$(TRASH)
    3837
    39 %.o : $(LIB_PATH)/%.c
     38%.o : $(LIBS_PATH)/%.c
    4039        $(CC) $(CFLAGS) $(INCLUDE) -c -o $(BUILD_PATH)/$@ $<
    4140
     
    4342        rm -f *.o
    4443        set -e; for d in $(DIRS); do $(MAKE) clean -C $$d ; done
    45 
  • soft/giet_vm/apps/fifo/Makefile

    r161 r162  
    11APP_NAME=fifo
     2
     3OBJS= main.o
    24
    35USE+= stdio.o
    46USE+= mwmr.o
    57
    6 USES=$(patsubst %,$(BUILD_PATH)%,$(USE))
    7 
    8 OBJS= main.o
     8USES=$(patsubst %,$(BUILD_PATH)/$(LIB_NAME)/%,$(USE))
    99
    1010all: $(APP_NAME).elf
    1111
    12 BIN_NAME_PATH=$(BIN_PATH)$(APP_NAME).elf
     12BIN_NAME_PATH=$(ELF_PATH)$(APP_NAME).elf
    1313
    1414$(APP_NAME).elf: $(OBJS) $(APP_NAME).ld
     
    2020        $(DU) -D  $@ >  $@.txt
    2121
    22 
    2322clean:
    2423        rm -f *.o *.elf *.txt core *~ 2>$(TRASH)
  • soft/giet_vm/apps/hello/Makefile

    r161 r162  
    33USE+= stdio.o
    44
    5 USES=$(patsubst %,$(BUILD_PATH)%,$(USE))
     5USES=$(patsubst %,$(BUILD_PATH)/$(LIB_NAME)/%,$(USE))
    66
    77OBJS= main.o
     
    99all: $(APP_NAME).elf
    1010
    11 BIN_NAME_PATH=$(BIN_PATH)$(APP_NAME).elf
     11BIN_NAME_PATH=$(ELF_PATH)$(APP_NAME).elf
    1212
    1313$(APP_NAME).elf: $(OBJS) $(APP_NAME).ld
  • soft/giet_vm/apps/numsplit/Makefile

    r161 r162  
    88OBJS+= producer.o
    99
    10 USES=$(patsubst %,$(BUILD_PATH)%,$(USE))
     10USES=$(patsubst %,$(BUILD_PATH)/$(LIB_NAME)/%,$(USE))
    1111SRCS=$(patsubst %.o,%.c,$(OBJS))
    1212
     
    1515.PHONY: compile
    1616
    17 BIN_NAME_PATH=$(BIN_PATH)$(APP_NAME).elf
     17BIN_NAME_PATH=$(ELF_PATH)$(APP_NAME).elf
    1818
    1919$(APP_NAME).elf: compile $(APP_NAME).ld
  • soft/giet_vm/apps/numsplit/consumer.c

    r160 r162  
    66    srl_mwmr_t input = GET_MWMR(mwmr);
    77    char buf[BUF_SIZE];
    8     int i,x;
     8    //int i,x;
    99    while(1)
    1010    {
  • soft/giet_vm/apps/pgcd/Makefile

    r161 r162  
    33USE+= stdio.o
    44
    5 USES=$(patsubst %,$(BUILD_PATH)%,$(USE))
     5USES=$(patsubst %,$(BUILD_PATH)/$(LIB_NAME)/%,$(USE))
    66
    77OBJS= main.o
     
    99all: $(APP_NAME).elf
    1010
    11 BIN_NAME_PATH=$(BIN_PATH)$(APP_NAME).elf
     11BIN_NAME_PATH=$(ELF_PATH)$(APP_NAME).elf
    1212
    1313$(APP_NAME).elf: $(OBJS) $(APP_NAME).ld
  • soft/giet_vm/apps/router/Makefile

    r161 r162  
    44USE+= mwmr.o
    55
    6 USES= $(patsubst %,$(BUILD_PATH)%,$(USE))
     6USES=$(patsubst %,$(BUILD_PATH)/$(LIB_NAME)/%,$(USE))
    77
    88OBJS= main.o
     
    1010all: $(APP_NAME).elf
    1111
    12 BIN_NAME_PATH=$(BIN_PATH)$(APP_NAME).elf
     12BIN_NAME_PATH=$(ELF_PATH)$(APP_NAME).elf
    1313
    1414$(APP_NAME).elf: $(OBJS) $(APP_NAME).ld
  • soft/giet_vm/boot/boot_handler.c

    r160 r162  
    5252#include <boot_handler.h>
    5353#include <mapping_info.h>
    54 #include <hwr_mapping.h>
    5554#include <mwmr.h>
    5655
     
    8079                         { [0 ... GIET_NB_VSPACE_MAX-1] = 0 };
    8180
    82 // Page table pointer 
     81// Page table pointers
    8382page_table_t* _ptabs[GIET_NB_VSPACE_MAX];
    8483
     
    149148    }
    150149    boot_tty_puts(buf);
    151 }
    152 
    153 unsigned int _tty_puts(const char *buffer, unsigned int length)
    154 {
    155     unsigned int* tty_address = (unsigned int*)&seg_tty_base;
    156     unsigned int n;
    157 
    158     for ( n=0; n<length; n++)
    159     {
    160         if (buffer[n] == 0) break;
    161         tty_address[0] = (unsigned int)buffer[n];
    162     }
    163    
    164     return n;
    165 }
    166 
    167 ////////////////////////////////////////////////////////////////////////////////////
    168 // tty_printf()
    169 // This function is a simplified version of the mutek_printf() function.
    170 // The terminal index must be defined in the calling task context.
    171 // It doesn't use the IRQ_PUT interrupt, and the associated kernel buffer.
    172 // Only a limited number of formats are supported:
    173 //   - %d : signed decimal
    174 //   - %u : unsigned decimal
    175 //   - %x : hexadecimal
    176 //   - %c : char
    177 //   - %s : string
    178 // - Returns 0 if success, > 0 if error.
    179 ////////////////////////////////////////////////////////////////////////////////////
    180 unsigned int _tty_printf(char *format, ...)
    181 {
    182     va_list ap;
    183     va_start(ap, format);
    184     unsigned int ret;
    185 
    186 printf_text:
    187 
    188     while (*format) {
    189         unsigned int i;
    190         for (i = 0; format[i] && format[i] != '%'; i++)
    191             ;
    192         if (i) {
    193             ret = _tty_puts(format,i);
    194             if (ret != i)
    195                 return 1; /* return error */
    196             format += i;
    197         }
    198         if (*format == '%') {
    199             format++;
    200             goto printf_arguments;
    201         }
    202     }
    203 
    204     va_end(ap);
    205     return 0;
    206 
    207 printf_arguments:
    208 
    209     {
    210         int         val = va_arg(ap, long);
    211         char            buf[20];
    212         char*           pbuf;
    213         unsigned int        len = 0;
    214         static const char   HexaTab[] = "0123456789ABCDEF";
    215         unsigned int        i;
    216 
    217         switch (*format++) {
    218             case ('c'):             /* char conversion */
    219                 len = 1;
    220                 buf[0] = val;
    221                 pbuf = buf;
    222                 break;
    223             case ('d'):             /* decimal signed integer */
    224                 if (val < 0) {
    225                     val = -val;
    226                     ret = _tty_puts("-",1);
    227                     if (ret != 1)
    228                         return 1; /* return error */
    229                 }
    230             case ('u'):             /* decimal unsigned integer */
    231                 for( i=0 ; i<10 ; i++) {
    232                     buf[9-i] = HexaTab[val % 10];
    233                     if (!(val /= 10)) break;
    234                 }
    235                 len =  i+1;
    236                 pbuf = &buf[9-i];
    237                 break;
    238             case ('x'):             /* hexadecimal integer */
    239                 ret = _tty_puts("0x",2);
    240                 if (ret != 2)
    241                     return 1; /* return error */
    242                 for( i=0 ; i<8 ; i++) {
    243                     buf[7-i] = HexaTab[val % 16U];
    244                     if (!(val /= 16U)) break;
    245                 }
    246                 len =  i+1;
    247                 pbuf = &buf[7-i];
    248                 break;
    249             case ('s'):             /* string */
    250                 {
    251                     char *str = (char*)val;
    252                     while ( str[len] ) len++;
    253                     pbuf = (char*)val;
    254                 }
    255                 break;
    256             default:
    257                 goto printf_text;
    258         }
    259 
    260         ret = _tty_puts(pbuf, len);
    261         if (ret != len)
    262             return 1;
    263         goto printf_text;
    264     }
    265150}
    266151
     
    718603///////////////////////////////////////////////////////////////////////////
    719604// Initialise vobjs
     605// For now only one type is initialised the: PTAB
     606//
    720607// param:
    721 // vobj: the vobj to initialise
    722 // region_id: the vspace in wich the vobj is located or the global space(-1).
     608//  vobj: the vobj to initialise
     609//  region_id: the vspace in wich the vobj is located or the global space(-1).
    723610///////////////////////////////////////////////////////////////////////////
    724 void initialise_ptabs(mapping_vobj_t* vobj, unsigned int region_id)
     611void initailise_vobj(mapping_vobj_t* vobj, unsigned int region_id)
    725612{
    726613    if(vobj->type == PTAB)
     
    804691    // + to computes the length of the current vseg
    805692    // + Align vobjs
    806     // + Initialise the ptabs if the vobj correspond
     693    // + Initialise the vobj
    807694    cur_vaddr = vseg->vbase;
    808695    cur_paddr = vseg->pbase;
     
    821708        cur_vaddr += vobj[vobj_id].length;
    822709        cur_paddr += vobj[vobj_id].length;
    823         initialise_ptabs(&vobj[vobj_id], region_id);
     710        initailise_vobj(&vobj[vobj_id], region_id);
    824711    }
    825712   
  • soft/giet_vm/boot/reset.S

    r160 r162  
    119119        jal     boot_init
    120120    nop
    121     j app_start
     121    j to_kinit
    122122    nop
    123123
     
    130130    nop
    131131       
    132 app_start:
     132to_kinit:
    133133    /* All processors initialize PTPR / MODE */
    134134    /* and jump to kernel_init code.                                     */
  • soft/giet_vm/mover/src/mover.cpp

    r161 r162  
    4040
    4141
    42 #define MOVER_DEBUG
     42//#define MOVER_DEBUG
    4343
    4444Mover::Mover( const std::string &filename,
  • soft/giet_vm/xml/xml_parser.c

    r160 r162  
    1212#include  <stdlib.h>
    1313#include  <fcntl.h>
     14#include  <sys/types.h>
     15#include  <sys/stat.h>
    1416#include  <unistd.h>
    1517#include  <stdio.h>
Note: See TracChangeset for help on using the changeset viewer.