Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 24 Aug 2018 23:56:21 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: [PATCH v2] fix tls access on arm targets before armv6k

* Rich Felker <dalias@...c.org> [2018-08-24 16:17:36 -0400]:
> On Fri, Aug 24, 2018 at 09:27:50PM +0200, Szabolcs Nagy wrote:
> > rewrote it in asm to fix a runtime-abi issue.
> 
> I've already queued the previous fix. I could replace it since it's
> not pushed, but I'd kinda prefer to make this change independent from
> the bugfix since it's already been done in 2 steps anyway; normally I
> don't like to mix bugfixes with refactoring except when it would be
> hard to do the bugfix independently first.
> 

ok.

> >  __aeabi_read_tp:
> > -	push {r1,r2,r3,lr}
> > -	bl __aeabi_read_tp_c
> > -	pop {r1,r2,r3,lr}
> > -	bx lr
> > +	ldr r0,1f
> > +	add r0,r0,pc
> > +	ldr r0,[r0]
> > +2:	bx r0
> > +	.align 2
> > +1:	.word __a_gettp_ptr - 2b
> 
> Isn't there an idiomatic "adr" pseudo-mnemonic preferable to use
> instead of the explicit pc arithmetic here? Or is that necessarily
> less efficient?
> 

adr r,label sets r to the address of label within a small offset. i don't
think that helps, you can avoid using pc, but it will be more instructions:

	ldr r0,1f
	adr ip,1f // == add ip,pc,1f-2f
	add r0,ip
2:	ldr r0,[r0]
	bx r0
	.align 2
1:	.word __a_gettp_ptr - 1b

the main ugliness of the pc arithmetics is that pc evaluates to pc+8 in arm
mode but pc+4 in thumb, that's why i needed label 2, but i think it's fine.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.