Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

Commit

Permalink
Massive ARM changes from Enrico Scholz
Browse files Browse the repository at this point in the history
  • Loading branch information
leitner committed Apr 19, 2014
1 parent 57543ee commit 039e7d1
Show file tree
Hide file tree
Showing 52 changed files with 590 additions and 352 deletions.
2 changes: 1 addition & 1 deletion FAQ
Expand Up @@ -246,7 +246,7 @@ A: UPDATE: the defaults have been changed as of 2005-04-23.
code. Unfortunately, these options have been renamed on gcc 3. You
can fix this by creating a file ~/.diet/gcc containing this line:

-Os -fomit-frame-pointer -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=2
-Os -fomit-frame-pointer -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=4

If you get this options not for diet -Os gcc but for diet -Os
i386-linux-gcc, put this in ~/.diet/i386-linux-gcc instead.
Expand Down
112 changes: 56 additions & 56 deletions Makefile
Expand Up @@ -10,7 +10,7 @@ MAN1DIR=${prefix}/man/man1

EXTRACFLAGS=

MYARCH:=$(shell uname -m | sed -e 's/i[4-9]86/i386/' -e 's/armv[3-6]t\?e\?[lb]/arm/')
MYARCH:=$(shell uname -m | sed -e 's/i[4-9]86/i386/' -e 's/armv[3-7]t\?e\?[lb]/arm/')

# This extra-ugly cruft is here so make will not run uname and sed each
# time it looks at $(OBJDIR). This alone sped up running make when
Expand Down Expand Up @@ -107,6 +107,8 @@ CFLAGS=$(DEFAULTCFLAGS)
CROSS=

CC=gcc
CCC=$(CROSS)$(CC)
STRIP=$(COMMENT) $(CROSS)strip
INC=-I. -isystem include

VPATH=lib:libstdio:libugly:libcruft:libcrypt:libshell:liblatin1:libcompat:libdl:librpc:libregex:libm:profiling
Expand Down Expand Up @@ -141,7 +143,7 @@ endif

ifneq ($(DEBUG),)
CFLAGS = -g
COMMENT = :
STRIP = :
endif
CFLAGS += -W -Wall -Wextra -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-switch -Wno-unused -Wredundant-decls -Wshadow

Expand All @@ -163,31 +165,31 @@ $(OBJDIR) $(PICODIR):

% :: %,v

$(OBJDIR)/%: $(OBJDIR)

ifeq ($(CC),tcc)
$(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h
$(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h | $(OBJDIR)
$(CROSS)cpp $(INC) $< | $(CROSS)as --noexecstack -o $@

$(OBJDIR)/%.o: %.c
$(OBJDIR)/%.o: %.c | $(OBJDIR)
tcc -I. -Iinclude -c $< -o $@
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
-$(STRIP) -x -R .comment -R .note $@
else
$(OBJDIR)/pstart.o: start.S
$(CROSS)$(CC) $(INC) $(CFLAGS) -DPROFILING -c $< $(ASM_CFLAGS) -o $@
$(OBJDIR)/pstart.o: start.S | $(OBJDIR)
$(CCC) $(INC) $(CFLAGS) -DPROFILING -c $< $(ASM_CFLAGS) -o $@

$(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h
$(CROSS)$(CC) $(INC) $(CFLAGS) -c $< $(ASM_CFLAGS) -o $@
$(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h | $(OBJDIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRAFLAGS) -c $< $(ASM_CFLAGS) -o $@

$(OBJDIR)/pthread_%.o: libpthread/pthread_%.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
$(OBJDIR)/pthread_%.o: libpthread/pthread_%.c | $(OBJDIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRAFLAGS) -c $< -o $@
-$(STRIP) -x -R .comment -R .note $@

$(OBJDIR)/%.o: %.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ -D__dietlibc__
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
$(OBJDIR)/%.o: %.c | $(OBJDIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRAFLAGS) -c $< -o $@ -D__dietlibc__
-$(STRIP) -x -R .comment -R .note $@
endif



ifeq ($(shell $(CC) -v 2>&1 | grep "gcc version"),gcc version 4.0.0)
SAFE_CFLAGS=$(shell echo $(CFLAGS)|sed 's/-Os/-O2/')
SAFER_CFLAGS=$(shell echo $(CFLAGS)|sed 's/-Os/-O/')
Expand All @@ -198,8 +200,8 @@ endif

CC+=-D__dietlibc__

$(OBJDIR)/crypt.o: libcrypt/crypt.c
$(CROSS)$(CC) $(INC) $(SAFER_CFLAGS) -c $< -o $@
$(OBJDIR)/crypt.o: libcrypt/crypt.c | $(OBJDIR)
$(CCC) $(INC) $(SAFER_CFLAGS) -c $< -o $@

DIETLIBC_OBJ = $(OBJDIR)/unified.o \
$(SYSCALLOBJ) $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
Expand All @@ -213,9 +215,9 @@ $(OBJDIR)/dietlibc.a: $(DIETLIBC_OBJ) $(OBJDIR)/start.o
$(OBJDIR)/librpc.a: $(LIBRPCOBJ)
$(CROSS)ar cru $@ $(LIBRPCOBJ)

$(OBJDIR)/libcrypt.a:
$(OBJDIR)/libcrypt.a: | $(OBJDIR)
touch dummy.c
$(CROSS)$(CC) -c dummy.c
$(CCC) -c dummy.c
$(CROSS)ar cru $@ dummy.o
rm -f dummy.c dummy.o

Expand Down Expand Up @@ -250,23 +252,23 @@ dyn_lib: $(PICODIR) $(PICODIR)/libc.so $(PICODIR)/dstart.o \
$(PICODIR)/libpthread.so $(PICODIR)/libdl.so $(PICODIR)/libcompat.so \
$(PICODIR)/libm.so $(PICODIR)/diet-dyn $(PICODIR)/diet-dyn-i

$(PICODIR)/%.o: %.S $(ARCH)/syscalls.h
$(CROSS)$(CC) $(INC) $(CFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@
$(PICODIR)/%.o: %.S $(ARCH)/syscalls.h | $(PICODIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@

$(PICODIR)/pthread_%.o: libpthread/pthread_%.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
$(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
$(PICODIR)/pthread_%.o: libpthread/pthread_%.c | $(PICODIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
$(STRIP) -x -R .comment -R .note $@

$(PICODIR)/%.o: %.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
$(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
$(PICODIR)/%.o: %.c | $(PICODIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
$(STRIP) -x -R .comment -R .note $@

$(PICODIR)/dstart.o: start.S
$(CROSS)$(CC) $(INC) $(CFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@
$(PICODIR)/dstart.o: start.S | $(PICODIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@

$(PICODIR)/dyn_so_start.o: dyn_start.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@
$(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
$(PICODIR)/dyn_so_start.o: dyn_start.c | $(PICODIR)
$(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@
$(STRIP) -x -R .comment -R .note $@

DYN_LIBC_PIC = $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ)
Expand All @@ -283,54 +285,54 @@ DYN_LIBCOMPAT_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBCOMPATOBJ))
DYN_LIBMATH_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBMATHOBJ))

$(PICODIR)/libc.so: $(PICODIR) $(DYN_LIBC_OBJ)
$(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBC_OBJ) -lgcc -Wl,-soname=libc.so
$(LD_UNSET) $(CCC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBC_OBJ) -lgcc -Wl,-soname=libc.so

$(PICODIR)/libpthread.so: $(DYN_PTHREAD_OBJS) dietfeatures.h $(PICODIR)/libc.so
$(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_PTHREAD_OBJS) -L$(PICODIR) -lc -Wl,-soname=libpthread.so
$(LD_UNSET) $(CCC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_PTHREAD_OBJS) -L$(PICODIR) -lc -Wl,-soname=libpthread.so

$(PICODIR)/libdl.so: libdl/_dl_main.c dietfeatures.h $(PICODIR)/libc.so
$(LD_UNSET) $(CROSS)$(CC) -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -nostdlib -shared -Bsymbolic -Wl,-Bsymbolic \
$(LD_UNSET) $(CCC) -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -nostdlib -shared -Bsymbolic -Wl,-Bsymbolic \
-o $@ $(SAFE_CFLAGS) $(INC) libdl/_dl_main.c -Wl,-soname=libdl.so

$(OBJDIR)/pthread_create.o $(PICODIR)/pthread_create.o: dietfeatures.h
$(OBJDIR)/pthread_internal.o $(PICODIR)/pthread_internal.o: dietfeatures.h

#$(PICODIR)/libdl.so: $(DYN_LIBDL_OBJS) dietfeatures.h
# $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBDL_OBJS) -L$(PICODIR) -ldietc -Wl,-soname=libdl.so
# $(CCC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBDL_OBJS) -L$(PICODIR) -ldietc -Wl,-soname=libdl.so

$(PICODIR)/libcompat.so: $(DYN_LIBCOMPAT_OBJS) dietfeatures.h $(PICODIR)/libc.so
$(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBCOMPAT_OBJS) -L$(PICODIR) -lc -Wl,-soname=libcompat.so
$(LD_UNSET) $(CCC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBCOMPAT_OBJS) -L$(PICODIR) -lc -Wl,-soname=libcompat.so

$(PICODIR)/libm.so: $(DYN_LIBMATH_OBJS) dietfeatures.h $(PICODIR)/libc.so
$(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBMATH_OBJS) -L$(PICODIR) -lc -Wl,-soname=libm.so
$(LD_UNSET) $(CCC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBMATH_OBJS) -L$(PICODIR) -lc -Wl,-soname=libm.so


$(SYSCALLOBJ): syscalls.h

$(OBJDIR)/elftrunc: $(OBJDIR)/diet contrib/elftrunc.c
bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/elftrunc.c
bin-$(MYARCH)/diet $(CCC) $(CFLAGS) -o $@ contrib/elftrunc.c

$(OBJDIR)/dnsd: $(OBJDIR)/diet contrib/dnsd.c
bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/dnsd.c
bin-$(MYARCH)/diet $(CCC) $(CFLAGS) -o $@ contrib/dnsd.c

VERSION=dietlibc-$(shell head -n 1 CHANGES|sed 's/://')
CURNAME=$(notdir $(shell pwd))

$(OBJDIR)/diet: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
$(CROSS)$(CC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc
$(CROSS)strip -R .comment -R .note $@
$(CCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc
$(STRIP) -R .comment -R .note $@

$(OBJDIR)/diet-i: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
$(CROSS)$(CC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -DVERSION=\"$(VERSION)\" -DINSTALLVERSION -lgcc
$(CROSS)strip -R .comment -R .note $@
$(CCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -DVERSION=\"$(VERSION)\" -DINSTALLVERSION -lgcc
$(STRIP) -R .comment -R .note $@

$(PICODIR)/diet-dyn: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
$(LD_UNSET) $(CROSS)$(CC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so
$(CROSS)strip -R .command -R .note $@
$(LD_UNSET) $(CCC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so
$(STRIP) -R .command -R .note $@

$(PICODIR)/diet-dyn-i: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
$(LD_UNSET) $(CROSS)$(CC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(ILIBDIR)/libdl.so -DINSTALLVERSION
$(CROSS)strip -R .command -R .note $@
$(LD_UNSET) $(CCC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(ILIBDIR)/libdl.so -DINSTALLVERSION
$(STRIP) -R .command -R .note $@

$(OBJDIR)/djb: $(OBJDIR)/compile $(OBJDIR)/load

Expand Down Expand Up @@ -360,14 +362,14 @@ $(OBJDIR)/exports: $(OBJDIR)/dietlibc.a

.PHONY: t t1
t:
$(CROSS)$(CC) -g $(CFLAGS) -fno-builtin -nostdlib -isystem include -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dietlibc.a -lgcc $(OBJDIR)/dyn_stop.o -Wl,-Map,mapfile
$(CCC) -g $(CFLAGS) -fno-builtin -nostdlib -isystem include -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dietlibc.a -lgcc $(OBJDIR)/dyn_stop.o -Wl,-Map,mapfile

t1:
$(CROSS)$(CC) -g -o t1 t.c
$(CCC) -g -o t1 t.c

install-bin: $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a $(OBJDIR)/librpc.a $(OBJDIR)/liblatin1.a $(OBJDIR)/libcompat.a $(OBJDIR)/elftrunc $(OBJDIR)/diet-i
$(INSTALL) -d $(DESTDIR)$(ILIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(BINDIR)
$(INSTALL) $(OBJDIR)/start.o $(DESTDIR)$(ILIBDIR)/start.o
$(INSTALL) -m 644 $(OBJDIR)/start.o $(DESTDIR)$(ILIBDIR)/start.o
$(INSTALL) -m 644 $(OBJDIR)/libm.a $(OBJDIR)/libpthread.a $(OBJDIR)/librpc.a \
$(OBJDIR)/liblatin1.a $(OBJDIR)/libcompat.a $(OBJDIR)/libcrypt.a $(DESTDIR)$(ILIBDIR)
$(INSTALL) -m 644 $(OBJDIR)/dietlibc.a $(DESTDIR)$(ILIBDIR)/libc.a
Expand Down Expand Up @@ -549,9 +551,7 @@ $(OBJDIR)/fcntl64.o: dietfeatures.h

# WANT_SSP
# This facepalm brought to you by: Ubuntu!
$(OBJDIR)/stackgap.o: lib/stackgap.c dietfeatures.h
$(CROSS)$(CC) $(INC) $(CFLAGS) -c lib/stackgap.c -o $@ -D__dietlibc__ -fno-stack-protector
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
$(OBJDIR)/stackgap.o $(PICODIR)/stackgap.o: EXTRACFLAGS:=-fno-stack-protector

# WANT_MALLOC_ZERO
$(OBJDIR)/strndup.o: dietfeatures.h
Expand Down
1 change: 1 addition & 0 deletions arm/Makefile.add
@@ -1,6 +1,7 @@

LIBOBJ+=$(OBJDIR)/md5asm.o $(OBJDIR)/__aeabi_unwind_cpp.o
LIBOBJ+=$(OBJDIR)/__fadvise.o $(OBJDIR)/arm_fadvise.o
LIBOBJ+=$(OBJDIR)/__aeabi_read_tp.o $(OBJDIR)/arm_set_tls.o
CFLAGS+=-Os -fomit-frame-pointer -fstrict-aliasing
#ifdef __ARM_EABI__
#CFLAGS+=-mabi=aapcs-linux -mno-thumb-interwork
Expand Down
13 changes: 13 additions & 0 deletions arm/__aeabi_read_tp.S
@@ -0,0 +1,13 @@
#include "arm-features.h"

FUNC_START __aeabi_read_tp

#if __ARM_ARCH__ < 6
mvn r0, #0xf000
sub pc, r0, #31
#else
mrc 15, 0, r0, cr13, cr0, 3
bx lr
#endif

FUNC_END __aeabi_read_tp
25 changes: 9 additions & 16 deletions arm/__aeabi_unwind_cpp.S
@@ -1,21 +1,14 @@
.text
.global __aeabi_unwind_cpp_pr0
.hidden __aeabi_unwind_cpp_pr0
.type __aeabi_unwind_cpp_pr0, %function
#include "arm-features.h"

.global __aeabi_unwind_cpp_pr1
FUNC_START __aeabi_unwind_cpp_pr0
FUNC_START __aeabi_unwind_cpp_pr1
FUNC_START __aeabi_unwind_cpp_pr2
.hidden __aeabi_unwind_cpp_pr0
.hidden __aeabi_unwind_cpp_pr1
.type __aeabi_unwind_cpp_pr1, %function

.global __aeabi_unwind_cpp_pr2
.hidden __aeabi_unwind_cpp_pr2
.type __aeabi_unwind_cpp_pr2, %function

__aeabi_unwind_cpp_pr0:
__aeabi_unwind_cpp_pr1:
__aeabi_unwind_cpp_pr2:
mov pc, lr @ return from subroutine
RET

.size __aeabi_unwind_cpp_pr0,.-__aeabi_unwind_cpp_pr0
.size __aeabi_unwind_cpp_pr1,.-__aeabi_unwind_cpp_pr1
.size __aeabi_unwind_cpp_pr2,.-__aeabi_unwind_cpp_pr2
FUNC_END __aeabi_unwind_cpp_pr2
FUNC_END __aeabi_unwind_cpp_pr1
FUNC_END __aeabi_unwind_cpp_pr0
4 changes: 3 additions & 1 deletion arm/__fadvise.c
@@ -1,5 +1,7 @@
#include <fcntl.h>
#include "syscalls.h"
#define _LINUX_SOURCE
#include <fcntl.h>
#include <unistd.h>

#ifndef __NR_fadvise64
long fadvise64_64(int fd, off64_t offset, off64_t len, int advice)
Expand Down
3 changes: 3 additions & 0 deletions arm/__guard.S
@@ -1,4 +1,5 @@
.data
.align 2
.type __guard,#object
.global __guard
.type __stack_chk_guard,#object
Expand All @@ -7,3 +8,5 @@ __guard:
__stack_chk_guard:
.long 0xaff00

.size __guard, . - __guard
.size __stack_chk_guard, . - __stack_chk_guard
26 changes: 19 additions & 7 deletions arm/__longjmp.S
@@ -1,11 +1,23 @@
.text
.global __longjmp
.type __longjmp,function
__longjmp:
#include "arm-features.h"

FUNC_START __longjmp
mov ip, r0
movs r0, r1
moveq r0, #1
#ifndef __SOFTFP__
lfm f4, 4, [ip], #48
#ifndef __SOFTFP__
# if __ARM_ARCH__ == 7
vldm ip!, {d0-d15}
# ifdef __ARM_NEON__
vldm ip!, {d16-d31}
# endif
# else
lfm f4, 4, [ip]!
# endif
#endif
ldmia ip, {r4-r11, sp, pc}

#ifdef __IWMMXT__
# warning "sigjmp will not restore iwmmxt coprocessor registers"
#endif

ldmia ip!, {r4-r11, sp, pc}
FUNC_END __longjmp
16 changes: 12 additions & 4 deletions arm/__testandset.S
@@ -1,7 +1,15 @@
.text
.global __testandset
__testandset:
#include "arm-features.h"

FUNC_START __testandset
mov r2, r0
mov r1, #1
# if __ARM_ARCH__ < 6
swp r0, r1, [r2]
mov pc, lr
# else
1: ldrex r0, [r2]
strex r3, r1, [r2]
cmp r3, #0
bne 1b
# endif
RET
FUNC_END __testandset

0 comments on commit 039e7d1

Please sign in to comment.