History

Add __clear_cache implementation in libtcc1

Add __clear_cache function for flushing caches to libtcc1.

Thomas Preud'homme committed 13 years ago

Commit fbb48411 parent b7d017d3 files · +36 −2Browse files

Unified · Split

3 files
  1. Makefile +2 −1
  2. lib/Makefile +11 −0
  3. lib/libtcc1.c +23 −1
Makefile+2−1
@@ -66,7 +66,7 @@ NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386 · 65 unmodified lines
66NATIVE_DEFINES_$(CONFIG_x86-64) += -DTCC_TARGET_X86_6466NATIVE_DEFINES_$(CONFIG_x86-64) += -DTCC_TARGET_X86_64
67NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE67NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE
68NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC68NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC
69NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM -DWITHOUT_LIBTCC69NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM
70NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT70NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT
71NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI71NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI
72NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP72NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP
@@ -122,6 +122,7 @@ LIBTCC1=libtcc1.a · 49 unmodified lines
122else ifeq ($(ARCH),arm)122else ifeq ($(ARCH),arm)
123NATIVE_FILES=$(ARM_FILES)123NATIVE_FILES=$(ARM_FILES)
124PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(C67_CROSS)124PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(C67_CROSS)
125LIBTCC1=libtcc1.a
125endif126endif
126 127
127ifeq ($(TARGETOS),Darwin)128ifeq ($(TARGETOS),Darwin)
lib/Makefile+11−0
@@ -24,6 +24,10 @@ ifndef TARGET · 23 unmodified lines
24 ifneq ($(TARGETOS),Darwin)24 ifneq ($(TARGETOS),Darwin)
25 XCC = $(CC)25 XCC = $(CC)
26 endif26 endif
27 else
28 ifeq ($(ARCH),arm)
29 TARGET = arm
30 endif
27 endif31 endif
28 endif32 endif
29 endif33 endif
@@ -41,6 +45,7 @@ cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF) · 11 unmodified lines
41 45
42I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)46I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
43X86_64_O = libtcc1.o alloca86_64.o47X86_64_O = libtcc1.o alloca86_64.o
48ARM_O = libtcc1.o
44WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o49WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
45WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o50WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
46 51
@@ -65,12 +70,18 @@ ifeq "$(TARGET)" "x86_64" · 18 unmodified lines
65 OBJ = $(addprefix $(DIR)/,$(X86_64_O))70 OBJ = $(addprefix $(DIR)/,$(X86_64_O))
66 TGT = -DTCC_TARGET_X86_6471 TGT = -DTCC_TARGET_X86_64
67 XCC ?= $(TCC) -B$(TOP)72 XCC ?= $(TCC) -B$(TOP)
73else
74ifeq "$(TARGET)" "arm"
75 OBJ = $(addprefix $(DIR)/,$(ARM_O))
76 TGT = -DTCC_TARGET_ARM
77 XCC ?= $(TCC) -B$(TOP)
68else78else
69 $(error libtcc1.a not supported on target '$(TARGET)')79 $(error libtcc1.a not supported on target '$(TARGET)')
70endif80endif
71endif81endif
72endif82endif
73endif83endif
84endif
74 85
75XFLAGS = $(CPPFLAGS) $(CFLAGS) $(TGT)86XFLAGS = $(CPPFLAGS) $(CFLAGS) $(TGT)
76 87
lib/libtcc1.c+23−1
@@ -107,7 +107,7 @@ union float_long { · 106 unmodified lines
107};107};
108 108
109/* XXX: we don't support several builtin supports for now */109/* XXX: we don't support several builtin supports for now */
110#ifndef __x86_64__110#if !defined(__x86_64__) && !defined(__arm__)
111 111
112/* XXX: use gcc/tcc intrinsic ? */112/* XXX: use gcc/tcc intrinsic ? */
113#if defined(__i386__)113#if defined(__i386__)
@@ -713,6 +713,28 @@ void __clear_cache(char *beginning, char *end) · 599 unmodified lines
713{713{
714}714}
715 715
716#elif defined(__arm__)
717
718#define _GNU_SOURCE
719#include <unistd.h>
720#include <sys/syscall.h>
721
722void __clear_cache(char *beginning, char *end)
723{
724/* __ARM_NR_cacheflush is kernel private and should not be used in user space.
725 * However, there is no ARM asm parser in tcc so we use it for now */
726#if 1
727 syscall(__ARM_NR_cacheflush);
728#else
729 __asm__ ("push {r7}\n\t"
730 "mov r7, #0xf0002\n\t"
731 "mov r2, #0\n\t"
732 "swi 0\n\t"
733 "pop {r7}\n\t"
734 "ret");
735#endif
736}
737
716#else738#else
717#warning __clear_cache not defined for this architecture, avoid using tcc -run739#warning __clear_cache not defined for this architecture, avoid using tcc -run
718#endif740#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t