ARM Trusted Firmware semihosting broken with latest 4.8 aarch64
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GCC |
Invalid
|
Undecided
|
Kugan Vivekanandarajah | ||
Linaro Toolchain Binaries |
Invalid
|
Undecided
|
Unassigned |
Bug Description
Hi, Using linaro gcc 4.8 for aarch64 2013.10 when I compile the ARM trusted firmware (https:/
When I use 2013.12 with no source file changes I get a failure to boot. It appears that the semihosting code (semihosting_
The 2013.10 compiler generated the following assembly:
0000000000000144 <semihosting_
144: a9be7bfd stp x29, x30, [sp,#-32]!
148: 910003fd mov x29, sp
14c: b90013a0 str w0, [x29,#16]
150: 910043a1 add x1, x29, #0x10
154: 52800180 mov w0, #0xc // #12
158: 94000000 bl 0 <semihosting_call>
15c: a8c27bfd ldp x29, x30, [sp],#32
160: d65f03c0 ret
The 2013.12 compiler generated the following assembly:
0000000000000144 <semihosting_
144: a9be7bfd stp x29, x30, [sp,#-32]!
148: 910003fd mov x29, sp
14c: 910083a1 add x1, x29, #0x20
150: b81fcc20 str w0, [x1,#-4]!
154: 52800180 mov w0, #0xc // #12
158: 94000000 bl 0 <semihosting_call>
15c: a8c27bfd ldp x29, x30, [sp],#32
160: d65f03c0 ret
Other areas seem identical. I verified it was semihosting_
Changed in gcc-linaro: | |
assignee: | nobody → Kugan Vivekanandarajah (kugan-vivekanandarajah) |
Change in assembly is due to the src changes for FRAME_GROWS_ DOWNWARD. The code generated confirms to the FRAME_GROWS_ DOWNWARD layout. However, there could be alignment traps that might be preventing the kernel from booting. Building ARM trusted firmware to investigate further.
gcc trunk also produces similar code.