aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2014-04-05 22:54:11 +0200
committerMichael Matz <matz@suse.de>2014-04-05 22:54:11 +0200
commitc4427747e6e5890b65c70e8fad5b30309b2b0279 (patch)
treec3c841302d0918a594324ef0ec97341eee69b8ce /lib
parentb0f8ca5e0306b09077866d959b307618755513cd (diff)
downloadtinycc-c4427747e6e5890b65c70e8fad5b30309b2b0279.tar.gz
tinycc-c4427747e6e5890b65c70e8fad5b30309b2b0279.tar.bz2
arm: Provide alloca()
This provides a simple implementation of alloca for ARM (and enables the associated testcase). As tcc for ARM doesn't contain an assembler, we'll have to resort using gcc for compiling it.
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile4
-rw-r--r--lib/alloca-arm.S11
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/Makefile b/lib/Makefile
index 7ef267f..cf3cd71 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -45,7 +45,7 @@ cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF)
I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
X86_64_O = libtcc1.o alloca86_64.o
-ARM_O = libtcc1.o armeabi.o
+ARM_O = libtcc1.o armeabi.o alloca-arm.o
WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
@@ -104,7 +104,7 @@ $(DIR)/libtcc1.a ../libtcc1.a : $(OBJ) $(XAR)
$(DIR)/%.o : %.c
$(XCC) -c $< -o $@ $(XFLAGS)
$(DIR)/%.o : %.S
- $(XCC) -c $< -o $@ $(XFLAGS)
+ $(CC) -c $< -o $@ $(XFLAGS)
$(DIR)/%$(EXESUF) : $(TOP)/win32/tools/%.c
$(CC) -o $@ $< $(XFLAGS) $(LDFLAGS)
diff --git a/lib/alloca-arm.S b/lib/alloca-arm.S
new file mode 100644
index 0000000..9deae63
--- /dev/null
+++ b/lib/alloca-arm.S
@@ -0,0 +1,11 @@
+ .text
+ .align 2
+ .global alloca
+ .type alloca, %function
+alloca:
+ rsb sp, r0, sp
+ bic sp, sp, #7
+ mov r0, sp
+ mov pc, lr
+ .size alloca, .-alloca
+ .section .note.GNU-stack,"",%progbits