Hi Jim,
On 2016/4/1 1:26, Jim Wilson wrote:
On Thu, Mar 31, 2016 at 5:12 AM, fengwei.yin fengwei.yin@linaro.org wrote:
Because gcc 4.9 could build this file without any issue, I apply --save-temps with gcc 4.9. The ii file is attached. Can't see significant differences.
There is a patch in gcc-5 to make unified assembler syntax the default. Unfortunately, it changes how extended asms work, which is perhaps a bug. The message claims it doesn't affect extended asms, but it does. https://gcc.gnu.org/ml/gcc-patches/2015-11/msg01196.html The interesting bit is the change to ASM_APP_OFF.
gcc-4.9 emits a .thumb after the extended asm to switch back into thumb mode just in case. gcc-5.3 instead emits .syntax unified, which doesn't change the arm/thumb mode, just the syntax supported. This is arguably a bug, but this doesn't immediately help you. It could take a little time to get gcc-5.x source fixed, and then the compiler binary releases. Or alternatively we could fix the asm to work with gcc 5.
Thanks a lot for looking at this.
I think fixing asm is the thing we should try here. Removing thumb is not acceptable because we use gcc5.3 for AOSP for memory reduction.
This part of code was from libunwind actually. And it's defined like:
/* There is no getcontext() on ARM. Use a stub version which only saves GP registers. FIXME: Not ideal, may not be sufficient for all libunwind use cases. Stores pc+8, which is only approximately correct, really. */ #ifndef __thumb__ #define unw_tdep_getcontext(uc) (({ \ unw_tdep_context_t *unw_ctx = (uc); \ register unsigned long *unw_base asm ("r0") = unw_ctx->regs; \ __asm__ __volatile__ ( \ "stmia %[base], {r0-r15}" \ : : [base] "r" (unw_base) : "memory"); \ }), 0) #else /* __thumb__ */ #define unw_tdep_getcontext(uc) (({ \ unw_tdep_context_t *unw_ctx = (uc); \ register unsigned long *unw_base asm ("r0") = unw_ctx->regs; \ __asm__ __volatile__ ( \ ".align 2\nbx pc\nnop\n.code 32\n" \ "stmia %[base], {r0-r15}\n" \ "orr %[base], pc, #1\nbx %[base]" \ : [base] "+r" (unw_base) : : "memory", "cc"); \ }), 0) #endif
Remove the __thumb__ part?
Regards Yin, Fengwei
Jim