diff --git a/library/GNUmakefile.68k b/library/GNUmakefile.68k index 85c6bc1..618689a 100644 --- a/library/GNUmakefile.68k +++ b/library/GNUmakefile.68k @@ -1,5 +1,5 @@ # -# $Id: GNUmakefile.68k,v 1.35 2005-03-07 11:16:42 obarthel Exp $ +# $Id: GNUmakefile.68k,v 1.36 2005-03-07 14:04:08 obarthel Exp $ # # :ts=8 # @@ -77,23 +77,28 @@ $(LIBAMIGA_OBJS)/%.o : %.c ############################################################################## ifeq (small_data_020,$(TYPE)) -CODE_TYPE := -fbaserel -DSMALL_DATA -m68020-60 -DM68020 +CODE_TYPE := -m68020-60 -fbaserel +CODE_FLAGS := -DSMALL_DATA -DM68020 endif ifeq (small_data,$(TYPE)) -CODE_TYPE := -fbaserel -DSMALL_DATA -m68000 +CODE_TYPE := -m68000 -fbaserel +CODE_FLAGS := -DSMALL_DATA endif ifeq (small_data32,$(TYPE)) -CODE_TYPE := -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 +CODE_TYPE := -m68020-60 -fbaserel32 +CODE_FLAGS := -DSMALL_DATA32 -DM68020 endif ifeq (large_data_020,$(TYPE)) -CODE_TYPE := -m68020-60 -DM68020 +CODE_TYPE := -m68020-60 +CODE_FLAGS := -DM68020 endif ifeq (large_data,$(TYPE)) -CODE_TYPE := -m68000 +CODE_TYPE := -m68000 +CODE_FLAGS := endif ############################################################################## @@ -112,7 +117,7 @@ INCLUDES = -Iinclude -I. -Inetinclude #OPTIMIZE = -O2 -fomit-frame-pointer #DEBUG = -g2 -CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES) +CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(CODE_TYPE) $(INCLUDES) ############################################################################## @@ -539,7 +544,6 @@ MATH_LIB = \ stdio_vsnprintf.o \ stdio_vsprintf.o \ stdlib_atof.o \ - stdlib_machine_test.o \ stdlib_strtod.o \ time_difftime.o @@ -752,7 +756,7 @@ LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K) ############################################################################## # The 881 math library won't build in plain 68k mode -ifneq (,$(findstring 68020,$(CODE_TYPE))) +ifneq (,$(findstring 68020,$(CODE_FLAGS))) LIBS := $(LIBS_020) else LIBS := $(LIBS_68K) @@ -943,6 +947,20 @@ $(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h ############################################################################## +$(LIBC_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c + @echo "Compiling $< [$(TYPE):c]" + @$(CC) -o $(LIBC_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(INCLUDES) $< + +$(LIBC_OBJS)/stdlib_showerror.o : stdlib_showerror.c + @echo "Compiling $< [$(TYPE):c]" + @$(CC) -o $(LIBC_OBJS)/stdlib_showerror.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(INCLUDES) $< + +$(LIBM881_OBJS)/math_init_exit.o : math_init_exit.c + @echo "Compiling $< [$(TYPE):m881]" + @$(CC) -o $(LIBM881_OBJS)/math_init_exit.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(INCLUDES) -DM68881_FLOATING_POINT_SUPPORT $< + +############################################################################## + $(LIBC_OBJS)/stdlib_alloca_debug.o : stdlib_alloca.c @echo "Compiling $< [$(TYPE):c debug]" @$(CC) -o $(LIBC_OBJS)/stdlib_alloca_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_alloca.c @@ -1070,25 +1088,33 @@ $(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIB ############################################################################## nrcrt0.o : nrcrt0.S - $(CC) -traditional -o $@ -c nrcrt0.S + @echo "Assembling $< [resident]" + @$(CC) -traditional -o $@ -c nrcrt0.S nr32crt0.o : nrcrt0.S - $(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S + @echo "Assembling $< [resident32]" + @$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S nbcrt0.o : ncrt0.S - $(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S + @echo "Assembling $< [small_data]" + @$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S nb32crt0.o : ncrt0.S - $(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S + @echo "Assembling $< [small_data32]" + @$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S ncrt0.o : ncrt0.S - $(CC) -traditional -o $@ -c ncrt0.S + @echo "Assembling $< [large_data]" + @$(CC) -traditional -o $@ -c ncrt0.S mainb32.o : stdlib_main.c - $(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c + @echo "Compiling $< [small_data32]" + @$(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c mainb.o : stdlib_main.c - $(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c + @echo "Compiling $< [small_data]" + @$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c mainnb.o : stdlib_main.c - $(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c + @echo "Compiling $< [large_data]" + @$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c diff --git a/library/changes b/library/changes index 95313c2..d50208e 100644 --- a/library/changes +++ b/library/changes @@ -25,6 +25,11 @@ - Made the file descriptor checks in the fsync() and fdatasync() functions more robust. +- Cleaned up the 68k build makefile, so that the CPU and FPU + tests and the error message display can run safely even + on plain 68000 machines. This won't work for the 32 bit small + data model, which implies 68020 code, but so there... + c.lib 1.189 (5.3.2005) diff --git a/library/stdlib_arg.c b/library/stdlib_arg.c index 53ade88..684132c 100644 --- a/library/stdlib_arg.c +++ b/library/stdlib_arg.c @@ -1,5 +1,5 @@ /* - * $Id: stdlib_arg.c,v 1.1 2005-03-07 11:16:43 obarthel Exp $ + * $Id: stdlib_arg.c,v 1.2 2005-03-07 14:04:09 obarthel Exp $ * * :ts=4 * @@ -73,13 +73,13 @@ is_space(unsigned char c) { BOOL result; - result = (BOOL)(c == '\t' || /* tab */ - c == '\r' || /* carriage return */ - c == '\n' || /* line feed */ - c == '\v' || /* vertical tab */ - c == '\f' || /* form feed */ - c == ' ' || /* blank space */ - c == '\240'); /* non-breaking space */ + result = (BOOL)(c == '\t' || /* horizontal tab */ + c == '\r' || /* carriage return */ + c == '\n' || /* line feed */ + c == '\v' || /* vertical tab */ + c == '\f' || /* form feed */ + c == ' ' || /* blank space */ + c == (unsigned char)'\240'); /* non-breaking space */ return(result); } @@ -129,12 +129,12 @@ __arg_init(void) feed and blank spaces if necessary. */ arg_str = GetArgStr(); - while((*arg_str) == ' ' || (*arg_str) == '\t') + while(is_space(*arg_str)) arg_str++; arg_len = strlen(arg_str); - while(arg_len > 0 && (arg_str[arg_len - 1] == '\n' || arg_str[arg_len - 1] == ' ' || arg_str[arg_len - 1] == '\t')) + while(arg_len > 0 && is_space(arg_str[arg_len - 1])) arg_len--; /* Make a copy of the shell parameter string. */ @@ -315,6 +315,9 @@ __arg_init(void) } else { + /* Return a pointer to the startup message in place of the + the argument vector. The argument counter (what will come + out as 'argc' for the main() function) will remain 0. */ __argv = (char **)__WBenchMsg; } diff --git a/library/stdlib_main.c b/library/stdlib_main.c index 622d6e3..9f52bc8 100644 --- a/library/stdlib_main.c +++ b/library/stdlib_main.c @@ -1,5 +1,5 @@ /* - * $Id: stdlib_main.c,v 1.12 2005-03-07 11:16:43 obarthel Exp $ + * $Id: stdlib_main.c,v 1.13 2005-03-07 14:04:09 obarthel Exp $ * * :ts=4 * @@ -307,6 +307,7 @@ _main(void) struct WBStartup * startup_message; struct Process * this_process; APTR old_window_pointer = NULL; + BOOL old_window_pointer_valid = FALSE; int return_code = RETURN_FAIL; ULONG current_stack_size; int os_version; @@ -388,6 +389,8 @@ _main(void) __set_process_window(old_window_pointer); } + old_window_pointer_valid = TRUE; + /* If a callback was provided which can fill us in on which minimum stack size should be used, invoke it now and store its result in the global __stack_size variable. */ @@ -557,7 +560,7 @@ _main(void) out: - if(DOSBase != NULL) + if(old_window_pointer_valid) __set_process_window(old_window_pointer); if(child_process == NULL) diff --git a/library/stdlib_showerror.c b/library/stdlib_showerror.c index a9358ac..890bbc2 100644 --- a/library/stdlib_showerror.c +++ b/library/stdlib_showerror.c @@ -1,5 +1,5 @@ /* - * $Id: stdlib_showerror.c,v 1.9 2005-01-13 15:39:39 obarthel Exp $ + * $Id: stdlib_showerror.c,v 1.10 2005-03-07 14:04:09 obarthel Exp $ * * :ts=4 * @@ -68,6 +68,53 @@ /****************************************************************************/ +#if NOT defined(__amigaos4__) + +/****************************************************************************/ + +/* We use these short local versions of strlen() and bzero() so that this + module does not need to depend upon other library code which, so it happens, + might be built for the "wrong" CPU type. This is not a problem for the + PowerPC build, but it is for the 68k build. */ + +/****************************************************************************/ + +INLINE STATIC size_t +local_strlen(const char *s) +{ + const char * start = s; + size_t result = 0; + + while((*s) != '\0') + s++; + + result = (size_t)(s - start); + + return(result); +} + +/****************************************************************************/ + +INLINE STATIC void +local_bzero(void *ptr, size_t len) +{ + unsigned char * m = ptr; + + while(len-- > 0) + (*m++) = 0; +} + +/****************************************************************************/ + +#define strlen(s) local_strlen(s) +#define memset(ptr,val,len) local_bzero((ptr),(len)) + +/****************************************************************************/ + +#endif /* __amigaos4__ */ + +/****************************************************************************/ + void __show_error(const char * message) {