https://sourceware.org/bugzilla/show_bug.cgi?id=19744
Bug ID: 19744 Summary: Thumb-1 pcrop relocations don't work on Thumb-2 targets Product: binutils Version: 2.27 (HEAD) Status: NEW Severity: normal Priority: P2 Component: gas Assignee: unassigned at sourceware dot org Reporter: cbaylis at gcc dot gnu.org Target Milestone: --- Created attachment 9052 --> https://sourceware.org/bugzilla/attachment.cgi?id=9052&action=edit test case There are two problems when using the Thumb-1 pcrop relocations on Thumb-2 targets. Firstly, incorrect "undefined symbol" errors are triggered. Secondly, the assembler may generate 32 bit instructions when 16bit encodings are available. The attached test-case works as expected for Thumb-1 targets. $ arm-unknown-linux-gnueabihf-gcc -c pcrop.S -march=armv4t $ arm-unknown-linux-gnueabihf-objdump -d pcrop.o pcrop.o: file format elf32-littlearm Disassembly of section .text: 00000000 <foo>: 0: 2300 movs r3, #0 2: 021b lsls r3, r3, #8 4: 3300 adds r3, #0 6: 021b lsls r3, r3, #8 8: 3300 adds r3, #0 a: 021b lsls r3, r3, #8 c: 3300 adds r3, #0 With a Thumb-2 target, undefined symbol errors are reported instead: $ arm-unknown-linux-gnueabihf-gcc -c pcrop.S -march=armv7-m pcrop.S: Assembler messages: pcrop.S:7: Error: undefined symbol foo used as an immediate value pcrop.S:9: Error: undefined symbol foo used as an immediate value pcrop.S:11: Error: undefined symbol foo used as an immediate value pcrop.S:13: Error: undefined symbol foo used as an immediate value With a Thumb-2 target, and working around the undefined symbol error, the assembler generates 32 bit instructions, even though 16 bit encodings are available. $ arm-unknown-linux-gnueabihf-gcc -c pcrop.S -march=armv7-m -DDEF_SYM $ arm-unknown-linux-gnueabihf-objdump -d pcrop.o pcrop.o: file format elf32-littlearm Disassembly of section .text: 00000000 <foo>: 0: f05f 0300 movs.w r3, #0 ;// 32 bit 4: 021b lsls r3, r3, #8 6: f113 0300 adds.w r3, r3, #0 ;// 32 bit a: 021b lsls r3, r3, #8 c: f113 0300 adds.w r3, r3, #0 ;// 32 bit 10: 021b lsls r3, r3, #8 12: f113 0300 adds.w r3, r3, #0 ;// 32 bit -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils