Commit 110a4edc authored by grischka's avatar grischka
Browse files

drop alloca #define

(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.
parent 68310299
......@@ -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
......
......@@ -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 */
......
......@@ -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
......@@ -3,9 +3,9 @@
#include "../config.h"
.globl __bound__alloca
.globl __bound_alloca
__bound__alloca:
__bound_alloca:
pop %edx
pop %eax
mov %eax, %ecx
......
......@@ -3,9 +3,9 @@
#include "../config.h"
.globl _alloca
.globl alloca
_alloca:
alloca:
pop %edx
pop %eax
add $3,%eax
......
......@@ -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;
......
......@@ -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 */
......
......@@ -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
......@@ -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;
......
......@@ -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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment