public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode @ 2007-07-20 11:52 leo at marco dot de 2007-07-20 11:53 ` [Bug target/32838] " leo at marco dot de ` (5 more replies) 0 siblings, 6 replies; 7+ messages in thread From: leo at marco dot de @ 2007-07-20 11:52 UTC (permalink / raw) To: gcc-bugs When using nested functions, the trampoline code will destroy register 9 while loading the static chain. This is even noted in gcc/config/arm/arm.h: XXX FIXME: When the trampoline returns, r8 will be clobbered. (it will be r9 and not r8...). The attached patch avoids clobbering r9. -- Summary: gcc generates incorrect trampoline code in thumb mode Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: leo at marco dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de @ 2007-07-20 11:53 ` leo at marco dot de 2007-07-20 11:55 ` leo at marco dot de ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: leo at marco dot de @ 2007-07-20 11:53 UTC (permalink / raw) To: gcc-bugs ------- Comment #1 from leo at marco dot de 2007-07-20 11:53 ------- Created an attachment (id=13943) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13943&action=view) fix for the reported bug -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de 2007-07-20 11:53 ` [Bug target/32838] " leo at marco dot de @ 2007-07-20 11:55 ` leo at marco dot de 2009-01-02 12:31 ` laurent at guerby dot net ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: leo at marco dot de @ 2007-07-20 11:55 UTC (permalink / raw) To: gcc-bugs ------- Comment #2 from leo at marco dot de 2007-07-20 11:55 ------- (In reply to comment #0) I forgot to mention that this happens only for thumb mode. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de 2007-07-20 11:53 ` [Bug target/32838] " leo at marco dot de 2007-07-20 11:55 ` leo at marco dot de @ 2009-01-02 12:31 ` laurent at guerby dot net 2009-03-17 16:48 ` leo at marco dot de ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: laurent at guerby dot net @ 2009-01-02 12:31 UTC (permalink / raw) To: gcc-bugs ------- Comment #3 from laurent at guerby dot net 2009-01-02 12:29 ------- This needs a testcase -- laurent at guerby dot net changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de ` (2 preceding siblings ...) 2009-01-02 12:31 ` laurent at guerby dot net @ 2009-03-17 16:48 ` leo at marco dot de 2009-03-19 10:15 ` sam at gcc dot gnu dot org 2009-03-19 19:08 ` leo at marco dot de 5 siblings, 0 replies; 7+ messages in thread From: leo at marco dot de @ 2009-03-17 16:48 UTC (permalink / raw) To: gcc-bugs ------- Comment #4 from leo at marco dot de 2009-03-17 16:47 ------- Subject: Re: gcc generates incorrect trampoline code in thumb mode laurent at guerby dot net wrote: > ------- Comment #3 from laurent at guerby dot net 2009-01-02 12:29 ------- > This needs a testcase > > Testcase: void f(int aa, int bb, int cc, int dd, int ee, int ff) { extern int x(int (*)(void)); int q(void) { extern int a(int); return(a(ff)*55); } x(&q); } "arm-elf-gcc -mthumb -S -O tst.c" results in: .code 16 .file "tst.c" .section .rodata .align 2 .LTRAMP0: .code 32 .Ltrampoline_start: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ldr r9, [pc, #8] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ldr ip, [pc, #8] orr ip, ip, #1 bx ip .word 0 .word 0 .code 16 .global __clear_cache .text .align 2 .global f .code 16 .thumb_func .type f, %function f: push {r4, r5, lr} sub sp, sp, #28 ldr r0, [sp, #44] str r0, [sp] add r4, sp, #4 ldr r3, .L3 mov r2, r4 ldmia r3!, {r0, r1, r5} stmia r2!, {r0, r1, r5} ldmia r3!, {r0, r1, r5} stmia r2!, {r0, r1, r5} mov r3, sp str r3, [sp, #20] ldr r3, .L3+4 str r3, [sp, #24] mov r0, r4 add r1, sp, #28 bl __clear_cache mov r0, r4 bl x add sp, sp, #28 @ sp needed for prologue pop {r4, r5, pc} .L4: .align 2 .L3: .word .LTRAMP0 .word q.1472 .size f, .-f .align 2 .code 16 .thumb_func .type q.1472, %function q.1472: mov r2, r9 push {r2, lr} mov r3, r9 ldr r0, [r3] bl a mov r3, r0 lsl r0, r0, #3 sub r0, r0, r3 lsl r0, r0, #3 sub r0, r0, r3 @ sp needed for prologue pop {r2} mov r9, r2 pop {pc} .size q.1472, .-q.1472 .ident "GCC: (GNU) 4.2.3" Notice the line marked with "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" r9 is unconditionally destroyed when the trampoline code is called. Regards, Matthias -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de ` (3 preceding siblings ...) 2009-03-17 16:48 ` leo at marco dot de @ 2009-03-19 10:15 ` sam at gcc dot gnu dot org 2009-03-19 19:08 ` leo at marco dot de 5 siblings, 0 replies; 7+ messages in thread From: sam at gcc dot gnu dot org @ 2009-03-19 10:15 UTC (permalink / raw) To: gcc-bugs ------- Comment #5 from sam at gcc dot gnu dot org 2009-03-19 10:15 ------- Matthias, I think Laurent was asking for an executable test case, which fails before your test and succeeds after, so that it can enter the regression suite. -- sam at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sam at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/32838] gcc generates incorrect trampoline code in thumb mode 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de ` (4 preceding siblings ...) 2009-03-19 10:15 ` sam at gcc dot gnu dot org @ 2009-03-19 19:08 ` leo at marco dot de 5 siblings, 0 replies; 7+ messages in thread From: leo at marco dot de @ 2009-03-19 19:08 UTC (permalink / raw) To: gcc-bugs ------- Comment #6 from leo at marco dot de 2009-03-19 19:08 ------- Subject: Re: gcc generates incorrect trampoline code in thumb mode sam at gcc dot gnu dot org wrote: > ------- Comment #5 from sam at gcc dot gnu dot org 2009-03-19 10:15 ------- > Matthias, > > I think Laurent was asking for an executable test case, which fails before your > test and succeeds after, so that it can enter the regression suite. > > > We are using the compiler strictly for our embedded systems (software running on the bare hardware). Sorry, I cannot provide you an exececutable testcase. Regards, Matthias -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32838 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-03-19 19:08 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-07-20 11:52 [Bug target/32838] New: gcc generates incorrect trampoline code in thumb mode leo at marco dot de 2007-07-20 11:53 ` [Bug target/32838] " leo at marco dot de 2007-07-20 11:55 ` leo at marco dot de 2009-01-02 12:31 ` laurent at guerby dot net 2009-03-17 16:48 ` leo at marco dot de 2009-03-19 10:15 ` sam at gcc dot gnu dot org 2009-03-19 19:08 ` leo at marco dot de
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 read-only IMAP folder(s) and NNTP newsgroup(s).