mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: cortex-m support?
Date: Thu, 8 Dec 2016 16:11:16 -0500	[thread overview]
Message-ID: <20161208211116.GO1555@brightrain.aerifal.cx> (raw)
In-Reply-To: <04e5a294-719e-8029-704f-a57d1ec935b0@landley.net>

On Tue, Dec 06, 2016 at 11:52:29PM -0600, Rob Landley wrote:
> Added support for the Cortex-M.
> ------------------------------------------------------------------------
> Index: src/internal/arm/syscall.s
> ===================================================================
> --- src/internal/arm/syscall.s	(revision 4919)
> +++ src/internal/arm/syscall.s	(revision 4920)
> @@ -11,5 +11,6 @@
>  	svc 0
>  	ldmfd sp!,{r4,r5,r6,r7}
>  	tst lr,#1
> +        it eq
>  	moveq pc,lr
>  	bx lr

There's a gas option -Wa,-mimplicit-it=always that will make these
kind of changes unnecessary. I think it's preferable to just have
musl's configure always add that option when targeting arm if it's
accepted by the toolchain. Otherwise new code might get added without
checking that it builds as thumb.

> Index: src/setjmp/arm/setjmp.S
> ===================================================================
> --- src/setjmp/arm/setjmp.S	(revision 0)
> +++ src/setjmp/arm/setjmp.S	(revision 4920)
> @@ -0,0 +1,45 @@
> +.global __setjmp
> +.global _setjmp
> +.global setjmp
> +.type __setjmp,%function
> +.type _setjmp,%function
> +.type setjmp,%function
> +__setjmp:
> +_setjmp:
> +setjmp:
> +	mov ip,r0
> +#if defined(__thumb__)
> +	stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,lr}
> +        str sp, [ip], #4
> +#else
> +	stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,sp,lr}
> +#endif

My leaning is to just always use the version that works on thumb, as I
don't think the performance difference will be measurable. I think you
did change the order of the storage in jmp_buf; I'm okay with that but
we might want to see if anyone objects because of wacky stuff
expecting a particular order. (Note: I don't think the order should be
treated as public but we probably want to know what if anything is
poking at it so we know if there are third-party things that need
fixing.)

> Index: src/thread/arm/clone.s
> ===================================================================
> --- src/thread/arm/clone.s	(revision 4919)
> +++ src/thread/arm/clone.s	(revision 4920)
> @@ -16,6 +16,7 @@
>  	beq 1f
>  	ldmfd sp!,{r4,r5,r6,r7}
>  	tst lr,#1
> +        it eq
>  	moveq pc,lr
>  	bx lr

Clone will also need a fix something like what I did for sh in commit
234c58467c3709bafdd3ffa6ac73655e1dfd9ddb to be compatible with fdpic,
but that's separate from thumb support.

> Index: Makefile
> ===================================================================
> --- Makefile	(revision 4919)
> +++ Makefile	(revision 4920)
> @@ -106,6 +106,10 @@
>  $(dir $(patsubst %/,%,$(dir $(1))))$(notdir $(1:.s=.o)): $(1)
>  endef
>  $(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s))))
> +define mkasmdepS
> +$(dir $(patsubst %/,%,$(dir $(1))))$(notdir $(1:.S=.o)): $(1)
> +endef
> +$(foreach s,$(wildcard src/*/$(ARCH)*/*.S),$(eval $(call mkasmdepS,$(s))))
>  
>  %.o: $(ARCH)$(ASMSUBARCH)/%.sub
>  	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $(dir $<)$(shell cat $<)
> @@ -113,6 +117,9 @@
>  %.o: $(ARCH)/%.s
>  	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
>  
> +%.o: $(ARCH)/%.S
> +	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
> +
>  %.o: %.c $(GENH) $(IMPH)
>  	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
>  
> @@ -122,6 +129,9 @@
>  %.lo: $(ARCH)/%.s
>  	$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<
>  
> +%.lo: $(ARCH)/%.S
> +	$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<
> +
>  %.lo: %.c $(GENH) $(IMPH)
>  	$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<

This looks like it's against a really old version of musl. The modern
build system with out-of-tree support already accepts .S files.

> Index: arch/arm/src/arm/atomics.s
> ===================================================================
> --- arch/arm/src/arm/atomics.s	(revision 4919)
> +++ arch/arm/src/arm/atomics.s	(revision 4920)
> @@ -6,12 +6,13 @@
>  __a_barrier:
>  	ldr ip,1f
>  	ldr ip,[pc,ip]
> -	add pc,pc,ip
> +	add pc,ip

I don't think this actually works; the arithmetic on pc does different
things in thumb mode. This file just needs to be scrapped and
redesigned since it's not going to be compatible with fdpic anyway (it
relies on PC-relative accesses to global data).

> Index: arch/arm/crt_arch.h
> ===================================================================
> --- arch/arm/crt_arch.h	(revision 4919)
> +++ arch/arm/crt_arch.h	(revision 4920)
> @@ -1,11 +1,17 @@
> -__asm__("\
> -.text \n\
> -.global _start \n\
> -.type _start,%function \n\
> -_start: \n\
> -	mov fp, #0 \n\
> -	mov lr, #0 \n\
> -	mov a1, sp \n\
> -	bic sp, sp, #0xF \n\
> -	bl __cstart \n\
> -");
> +__asm__(
> +".text \n"
> +".global _start \n"
> +".type _start,%function \n"
> +"_start: \n"
> +"	mov fp, #0 \n"
> +"	mov lr, #0 \n"
> +"	mov a1, sp \n"
> +#if defined(__thumb__)
> +"       mov a2, sp \n"
> +"       bic a2, #0xF \n"
> +"       mov sp, a2 \n"
> +#else
> +"	bic sp, sp, #0xF \n"
> +#endif
> +"	bl __cstart \n"
> +);

I think I had a simpler version of this tucked away somewhere; I'll
check and see.

Thanks for working on this and reviving interest in the topic.

Rich


  parent reply	other threads:[~2016-12-08 21:11 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-07  5:52 Rob Landley
2016-12-07 15:29 ` Szabolcs Nagy
2016-12-07 15:35   ` Szabolcs Nagy
2016-12-08  0:55     ` Rob Landley
2016-12-08  1:16       ` Rich Felker
2016-12-08 19:10         ` Rob Landley
2016-12-08 21:01           ` Rich Felker
2016-12-08 22:36             ` Rob Landley
2016-12-13  0:29             ` Rob Landley
2016-12-13  1:48               ` Rich Felker
2016-12-20  4:23           ` Rich Felker
2016-12-07 20:19   ` Rob Landley
2016-12-08 21:11 ` Rich Felker [this message]
2016-12-09  6:33   ` Rich Felker
     [not found]   ` <20161208211116.GO1555-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2016-12-15 18:34     ` [musl] " Rob Landley
     [not found]       ` <7bfe2625-725d-d1bb-7177-f2d31ce09e9c-VoJi6FS/r0vR7s880joybQ@public.gmane.org>
2016-12-15 18:51         ` Waldemar Brodkorb
2016-12-20  7:18           ` [Buildroot] " Rob Landley
     [not found]             ` <48fb6c09-9dcb-e563-dc2d-f30062c5fceb-VoJi6FS/r0vR7s880joybQ@public.gmane.org>
2016-12-20  8:26               ` Thomas Petazzoni
     [not found]                 ` <20161220092600.2ca96088-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2016-12-20 18:17                   ` Rob Landley
2016-12-21  6:18               ` [musl] " Waldemar Brodkorb
     [not found]                 ` <20161221061853.GB2915-zdp6y753eiWHneL7xjqqhBsWhVFi+jh/@public.gmane.org>
2016-12-27 22:03                   ` Rob Landley
2016-12-18  0:29       ` Rich Felker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161208211116.GO1555@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).