summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrischka <grischka>2009-05-16 22:30:13 +0200
committergrischka <grischka>2009-05-16 22:30:13 +0200
commit110a4edc154f6fb73ef3d312630455f68641123f (patch)
tree341bfb7efbeacd9cf78ae351d2ed931df7f03d08
parent68310299b67bef763ba1622dac2aec534e096bf1 (diff)
drop alloca #definerelease_0_9_25
(Because GNU's alloca.h unconditionally #undef's alloca) Also, remove gcc specific sections in headers. and instead change tests such that gcc does not use them.
-rw-r--r--Makefile2
-rw-r--r--include/stdarg.h16
-rw-r--r--include/stddef.h10
-rw-r--r--lib/alloca86-bt.S4
-rw-r--r--lib/alloca86.S4
-rw-r--r--libtcc.c2
-rw-r--r--tcctok.h2
-rw-r--r--tests/Makefile5
-rw-r--r--tests/tcctest.c14
-rw-r--r--win32/include/stddef.h5
10 files changed, 27 insertions, 37 deletions
diff --git a/Makefile b/Makefile
index 7289b67..1a2b5f7 100644
--- a/Makefile
+++ b/Makefile
@@ -236,7 +236,7 @@ install: $(PROGS) $(LIBTCC1) libtcc.a tcc-doc.html
$(INSTALL) -m644 $(LIBTCC1) win32/lib/*.def "$(tccdir)/lib"
cp -r win32/include/. "$(tccdir)/include"
cp -r win32/examples/. "$(tccdir)/examples"
- $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include"
+# $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include"
$(INSTALL) -m644 tcc-doc.html win32/tcc-win32.txt "$(tccdir)/doc"
$(INSTALL) -m644 libtcc.a libtcc.h "$(tccdir)/libtcc"
endif
diff --git a/include/stdarg.h b/include/stdarg.h
index c49e6df..86e556c 100644
--- a/include/stdarg.h
+++ b/include/stdarg.h
@@ -2,9 +2,6 @@
#define _STDARG_H
#ifdef __x86_64__
-
-#ifdef __TINYC__
-
#include <stdlib.h>
/* GCC compatible definition of va_list. */
@@ -53,19 +50,6 @@ typedef struct __va_list_struct *va_list;
#else
-/* for GNU C */
-
-typedef __builtin_va_list va_list;
-
-#define va_start(ap, last) __builtin_va_start(ap, last)
-#define va_arg(ap, type) __builtin_va_arg(ap, type)
-#define va_copy(dest, src) __builtin_va_copy(dest, src)
-#define va_end(ap) __builtin_va_end(ap)
-
-#endif
-
-#else
-
typedef char *va_list;
/* only correct for i386 */
diff --git a/include/stddef.h b/include/stddef.h
index 9965f89..aef5b39 100644
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -7,10 +7,7 @@ typedef __WCHAR_TYPE__ wchar_t;
typedef __PTRDIFF_TYPE__ ptrdiff_t;
#define offsetof(type, field) ((size_t) &((type *)0)->field)
-/* need to do that because of glibc 2.1 bug (should have a way to test
- presence of 'long long' without __GNUC__, or TCC should define
- __GNUC__ ? */
-#if !defined(__int8_t_defined) && !defined(__dietlibc__)
+#ifndef __int8_t_defined
#define __int8_t_defined
typedef char int8_t;
typedef short int int16_t;
@@ -18,9 +15,6 @@ typedef int int32_t;
typedef long long int int64_t;
#endif
-#ifdef __i386__
-void *_alloca(size_t);
-#define alloca _alloca
-#endif
+void *alloca(size_t size);
#endif
diff --git a/lib/alloca86-bt.S b/lib/alloca86-bt.S
index 037c845..994da20 100644
--- a/lib/alloca86-bt.S
+++ b/lib/alloca86-bt.S
@@ -3,9 +3,9 @@
#include "../config.h"
-.globl __bound__alloca
+.globl __bound_alloca
-__bound__alloca:
+__bound_alloca:
pop %edx
pop %eax
mov %eax, %ecx
diff --git a/lib/alloca86.S b/lib/alloca86.S
index 3d5eb61..fb208a0 100644
--- a/lib/alloca86.S
+++ b/lib/alloca86.S
@@ -3,9 +3,9 @@
#include "../config.h"
-.globl _alloca
+.globl alloca
-_alloca:
+alloca:
pop %edx
pop %eax
add $3,%eax
diff --git a/libtcc.c b/libtcc.c
index bca1946..ade77c0 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -694,7 +694,7 @@ static void put_extern_sym2(Sym *sym, Section *section,
case TOK_memset:
case TOK_strlen:
case TOK_strcpy:
- case TOK__alloca:
+ case TOK_alloca:
strcpy(buf, "__bound_");
strcat(buf, name);
name = buf;
diff --git a/tcctok.h b/tcctok.h
index 97d9507..6dc4778 100644
--- a/tcctok.h
+++ b/tcctok.h
@@ -228,7 +228,7 @@
DEF(TOK_memmove, "memmove")
DEF(TOK_strlen, "strlen")
DEF(TOK_strcpy, "strcpy")
- DEF(TOK__alloca, "_alloca")
+ DEF(TOK_alloca, "alloca")
#endif
/* Tiny Assembler */
diff --git a/tests/Makefile b/tests/Makefile
index 61df559..ddd4932 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -37,7 +37,8 @@ libtcc_test$(EXESUF): libtcc_test.c ../libtcc.a
# test.ref - generate using gcc
test.ref: tcctest.c
- $(CC) -o tcctest.gcc $< -w -I.. -I../include $(CFLAGS)
+ cp -u ../include/tcclib.h .
+ $(CC) -o tcctest.gcc $< -I. -w $(CFLAGS)
./tcctest.gcc > $@
# auto test
@@ -141,4 +142,4 @@ cache: tcc_g
# clean
clean:
rm -vf *~ *.o *.a *.bin *.i *.ref *.out *.out? *.gcc \
- tcctest[1234] ex? libtcc_test$(EXESUF) tcc_g
+ tcctest[1234] ex? libtcc_test$(EXESUF) tcc_g tcclib.h
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 55e356e..a2d481a 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -75,6 +75,7 @@ void stdarg_test(void);
void whitespace_test(void);
void relocation_test(void);
void old_style_function(void);
+void alloca_test(void);
void sizeof_test(void);
void typeof_test(void);
void local_label_test(void);
@@ -529,6 +530,7 @@ int main(int argc, char **argv)
whitespace_test();
relocation_test();
old_style_function();
+ alloca_test();
sizeof_test();
typeof_test();
statement_expr_test();
@@ -1935,6 +1937,18 @@ void old_style_function(void)
decl_func2(NULL);
}
+void alloca_test()
+{
+#if defined __i386__ || defined __x86_64__
+ char *p = alloca(16);
+ strcpy(p,"123456789012345");
+ printf("alloca: p is %s\n", p);
+ char *demo = "This is only a test.\n";
+ /* Test alloca embedded in a larger expression */
+ printf("alloca: %s\n", strcpy(alloca(strlen(demo)+1),demo) );
+#endif
+}
+
void sizeof_test(void)
{
int a;
diff --git a/win32/include/stddef.h b/win32/include/stddef.h
index 9965f89..6e4e2c8 100644
--- a/win32/include/stddef.h
+++ b/win32/include/stddef.h
@@ -18,9 +18,6 @@ typedef int int32_t;
typedef long long int int64_t;
#endif
-#ifdef __i386__
-void *_alloca(size_t);
-#define alloca _alloca
-#endif
+void *alloca(size_t);
#endif