This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
latest ld not inserting arm interworking shims?
- From: Dave Murphy <davem at devkitpro dot org>
- To: binutils <binutils at sourceware dot org>
- Date: Sat, 10 Mar 2012 17:36:46 +0000
- Subject: latest ld not inserting arm interworking shims?
Hi,
I've recently managed to track down a problem with some code that
turned out to be ld from binutils 2.22 (both release and CVS HEAD) not
inserting a shin when calling arm code from thumb. Has something
changed recently in how the linker is used for this situation or is
this a bug? Binutils 2.21.1 behaves as I'd expect.
monalisa:interworktest davem$ arm-eabi-ld --version
GNU ld (GNU Binutils) 2.22.52.20120310
Copyright 2012 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
monalisa:interworktest davem$ cat armasm.s
.arm
.global armasm
armasm:
bx lr
monalisa:interworktest davem$ cat callarmfromthumb.c
void armasm();
void _start() {
armasm();
while(1);
}
monalisa:interworktest davem$ arm-eabi-as -mthumb-interwork armasm.s
monalisa:interworktest davem$ arm-eabi-gcc -mthumb -mthumb-interwork
-c callarmfromthumb.c
monalisa:interworktest davem$ arm-eabi-gcc -nostartfiles -nostdlib
callarmfromthumb.o armasm.o
monalisa:interworktest davem$ arm-eabi-objdump -d a.out
a.out: file format elf32-littlearm
Disassembly of section .text:
00008000 <_start>:
8000: b580 push {r7, lr}
8002: af00 add r7, sp, #0
8004: f000 f802 bl 800c <armasm>
8008: e7fe b.n 8008 <_start+0x8>
800a: 46c0 nop ; (mov r8, r8)
0000800c <armasm>:
800c: e12fff1e bx lr
ld from binutils 2.21.1 inserts a shim
$ arm-eabi-ld --version
GNU ld (GNU Binutils) 2.21.1
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
davem@Godfreyjnr ~
$ arm-eabi-objdump.exe -d a.out
a.out: file format elf32-littlearm
Disassembly of section .text:
00008000 <_start>:
8000: b580 push {r7, lr}
8002: af00 add r7, sp, #0
8004: f000 f804 bl 8010 <__armasm_from_thumb>
8008: e7fe b.n 8008 <_start+0x8>
800a: 46c0 nop ; (mov r8, r8)
0000800c <armasm>:
800c: e12fff1e bx lr
00008010 <__armasm_from_thumb>:
8010: 4778 bx pc
8012: 46c0 nop ; (mov r8, r8)
8014: eafffffc b 800c <armasm>
Dave