mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-13 05:10:07 +08:00
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.
This commit is contained in:
parent
68310299b6
commit
110a4edc15
2
Makefile
2
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
|
||||
|
@ -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
|
||||
|
2
libtcc.c
2
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;
|
||||
|
2
tcctok.h
2
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 */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user