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
6666 NATIVE_DEFINES_$(CONFIG_x86-64) += -DTCC_TARGET_X86_64
6767 NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE
6868 NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC
69−NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM -DWITHOUT_LIBTCC
69+NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM
7070 NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT
7171 NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI
7272 NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP
@@ -122,6 +122,7 @@ LIBTCC1=libtcc1.a · 49 unmodified lines
122122 else ifeq ($(ARCH),arm)
123123 NATIVE_FILES=$(ARM_FILES)
124124 PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(C67_CROSS)
125+LIBTCC1=libtcc1.a
125126 endif
126127
127128 ifeq ($(TARGETOS),Darwin)
lib/Makefile+11−0
@@ -24,6 +24,10 @@ ifndef TARGET · 23 unmodified lines
2424 ifneq ($(TARGETOS),Darwin)
2525 XCC = $(CC)
2626 endif
27+ else
28+ ifeq ($(ARCH),arm)
29+ TARGET = arm
30+ endif
2731 endif
2832 endif
2933 endif
@@ -41,6 +45,7 @@ cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF) · 11 unmodified lines
4145
4246 I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
4347 X86_64_O = libtcc1.o alloca86_64.o
48+ARM_O = libtcc1.o
4449 WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
4550 WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
4651
@@ -65,12 +70,18 @@ ifeq "$(TARGET)" "x86_64" · 18 unmodified lines
6570 OBJ = $(addprefix $(DIR)/,$(X86_64_O))
6671 TGT = -DTCC_TARGET_X86_64
6772 XCC ?= $(TCC) -B$(TOP)
73+else
74+ifeq "$(TARGET)" "arm"
75+ OBJ = $(addprefix $(DIR)/,$(ARM_O))
76+ TGT = -DTCC_TARGET_ARM
77+ XCC ?= $(TCC) -B$(TOP)
6878 else
6979 $(error libtcc1.a not supported on target '$(TARGET)')
7080 endif
7181 endif
7282 endif
7383 endif
84+endif
7485
7586 XFLAGS = $(CPPFLAGS) $(CFLAGS) $(TGT)
7687
lib/libtcc1.c+23−1
@@ -107,7 +107,7 @@ union float_long { · 106 unmodified lines
107107 };
108108
109109 /* XXX: we don't support several builtin supports for now */
110−#ifndef __x86_64__
110+#if !defined(__x86_64__) && !defined(__arm__)
111111
112112 /* XXX: use gcc/tcc intrinsic ? */
113113 #if defined(__i386__)
@@ -713,6 +713,28 @@ void __clear_cache(char *beginning, char *end) · 599 unmodified lines
713713 {
714714 }
715715
716+#elif defined(__arm__)
717+
718+#define _GNU_SOURCE
719+#include <unistd.h>
720+#include <sys/syscall.h>
721+
722+void __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+
716738 #else
717739 #warning __clear_cache not defined for this architecture, avoid using tcc -run
718740 #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