This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] ARM - gas: Maximum alignment size augmented to 64
Thanks Matthias,
with the latest cvs up, I could reproduce the behavior.
This version of the patch has the dump updated to the new format.
Daniel.
Matthias Klose wrote:
The output of objdump did change,
Disassembly of section .text:
00000000 <foo> f04f 0001 mov.w r0, #1
00000004 <foo+0x4> 46c0 nop ; (mov r8, r8)
so the regexps of the form
00000000 <foo> f04f 0001.*mov.w.*r0, #1.*; 0x1
don't match anymore. change this to
00000000 <foo> f04f 0001.*mov.w.*r0, #1.*
for all four occurrances and the test succeeds.
Matthias
Daniel Gutson schrieb:
Hi Matthias,
I couldn't get the fail, even after updating my sources from mainline.
Could you please provide more details?
Thanks,
Daniel.
Matthias Klose wrote:
Daniel Gutson schrieb:
Hi,
in the attached patch, the maximum allowed code alignment has been
increased from
32 to 64 bytes. This change affects the .p2align and .align directives
in GAS and the
-falign-functions GCC option.
I tested the code by running the gas testsuite, including the new test
case I added.
the test case does succeed with binutils 20090622 and the patch
applied, it
fails with binutils 20090704 and the patch applied.
Matthias
--
Daniel Gutson
CodeSourcery
www.codesourcery.com
? config.log
? serdep.tmp
? bfd/.libs
? bfd/Makefile
? bfd/archive.lo
? bfd/archive64.lo
? bfd/archures.lo
? bfd/bfd-in3.h
? bfd/bfd.h
? bfd/bfd.lo
? bfd/bfd_stdint.h
? bfd/bfdio.lo
? bfd/bfdver.h
? bfd/bfdwin.lo
? bfd/binary.lo
? bfd/cache.lo
? bfd/coffgen.lo
? bfd/compress.lo
? bfd/config.cache
? bfd/config.h
? bfd/config.log
? bfd/config.status
? bfd/corefile.lo
? bfd/cpu-arm.lo
? bfd/dwarf1.lo
? bfd/dwarf2.lo
? bfd/elf-attrs.lo
? bfd/elf-eh-frame.lo
? bfd/elf-ifunc.lo
? bfd/elf-strtab.lo
? bfd/elf-vxworks.lo
? bfd/elf.lo
? bfd/elf32-arm.lo
? bfd/elf32-gen.lo
? bfd/elf32-target.h
? bfd/elf32.lo
? bfd/elflink.lo
? bfd/format.lo
? bfd/hash.lo
? bfd/ihex.lo
? bfd/init.lo
? bfd/libbfd.la
? bfd/libbfd.lo
? bfd/libtool
? bfd/libtool-soversion
? bfd/linker.lo
? bfd/merge.lo
? bfd/ofiles
? bfd/opncls.lo
? bfd/reloc.lo
? bfd/section.lo
? bfd/simple.lo
? bfd/srec.lo
? bfd/stab-syms.lo
? bfd/stabs.lo
? bfd/stamp-h1
? bfd/stamp-lib
? bfd/stamp-ofiles
? bfd/stmp-bfd-h
? bfd/syms.lo
? bfd/targets.lo
? bfd/targmatch.h
? bfd/tekhex.lo
? bfd/verilog.lo
? bfd/doc/Makefile
? bfd/doc/aoutx.texi
? bfd/doc/archive.texi
? bfd/doc/archures.texi
? bfd/doc/bfd.info
? bfd/doc/bfdio.texi
? bfd/doc/bfdt.texi
? bfd/doc/bfdver.texi
? bfd/doc/bfdwin.texi
? bfd/doc/cache.texi
? bfd/doc/chew
? bfd/doc/coffcode.texi
? bfd/doc/core.texi
? bfd/doc/elf.texi
? bfd/doc/elfcode.texi
? bfd/doc/format.texi
? bfd/doc/hash.texi
? bfd/doc/init.texi
? bfd/doc/libbfd.texi
? bfd/doc/linker.texi
? bfd/doc/mmo.texi
? bfd/doc/opncls.texi
? bfd/doc/reloc.texi
? bfd/doc/section.texi
? bfd/doc/syms.texi
? bfd/doc/targets.texi
? bfd/po/BLD-POTFILES
? bfd/po/Makefile
? bfd/po/Makefile.in
? bfd/po/SRC-POTFILES
? binutils/.libs
? binutils/Makefile
? binutils/addr2line
? binutils/ar
? binutils/arlex.c
? binutils/arparse.c
? binutils/arparse.h
? binutils/config.cache
? binutils/config.h
? binutils/config.log
? binutils/config.status
? binutils/cxxfilt
? binutils/libtool
? binutils/nm-new
? binutils/objcopy
? binutils/objdump
? binutils/ranlib
? binutils/readelf
? binutils/size
? binutils/stamp-h1
? binutils/strings
? binutils/strip-new
? binutils/doc/Makefile
? binutils/doc/addr2line.1
? binutils/doc/ar.1
? binutils/doc/binutils.info
? binutils/doc/c++filt.1
? binutils/doc/cxxfilt.man
? binutils/doc/dlltool.1
? binutils/doc/nlmconv.1
? binutils/doc/nm.1
? binutils/doc/objcopy.1
? binutils/doc/objdump.1
? binutils/doc/ranlib.1
? binutils/doc/readelf.1
? binutils/doc/size.1
? binutils/doc/strings.1
? binutils/doc/strip.1
? binutils/doc/windmc.1
? binutils/doc/windres.1
? binutils/po/Makefile
? binutils/po/Makefile.in
? binutils/po/POTFILES
? etc/Makefile
? etc/config.cache
? etc/config.log
? etc/config.status
? etc/configure.info
? etc/standards.info
? gas/.gdbinit
? gas/.libs
? gas/Makefile
? gas/as-new
? gas/config.cache
? gas/config.h
? gas/config.log
? gas/config.status
? gas/itbl-cpu.h
? gas/libtool
? gas/obj-format.h
? gas/stamp-h1
? gas/targ-cpu.h
? gas/targ-env.h
? gas/doc/Makefile
? gas/doc/as.1
? gas/doc/as.info
? gas/doc/asconfig.texi
? gas/po/Makefile
? gas/po/Makefile.in
? gas/po/POTFILES
? gprof/.libs
? gprof/Makefile
? gprof/bsd_callg_bl.c
? gprof/config.cache
? gprof/config.log
? gprof/config.status
? gprof/config.texi
? gprof/flat_bl.c
? gprof/fsf_callg_bl.c
? gprof/gconfig.h
? gprof/gprof
? gprof/gprof.1
? gprof/libtool
? gprof/stamp-h1
? gprof/po/Makefile
? gprof/po/Makefile.in
? gprof/po/POTFILES
? intl/Makefile
? intl/config.cache
? intl/config.h
? intl/config.intl
? intl/config.log
? intl/config.status
? ld/.libs
? ld/Makefile
? ld/config.cache
? ld/config.h
? ld/config.log
? ld/config.status
? ld/configdoc.texi
? ld/earmelf_linux_eabi.c
? ld/earmelfb_linux_eabi.c
? ld/ld-new
? ld/ld.1
? ld/ld.info
? ld/ldemul-list.h
? ld/ldgram.c
? ld/ldgram.h
? ld/ldlex.c
? ld/ldscripts
? ld/libtool
? ld/stamp-h1
? ld/stringify.sed
? ld/tdirs
? ld/tmpdir
? ld/po/Makefile
? ld/po/Makefile.in
? ld/po/POTFILES
? libiberty/Makefile
? libiberty/config.cache
? libiberty/config.h
? libiberty/config.log
? libiberty/config.status
? libiberty/pic
? libiberty/required-list
? libiberty/stamp-h
? libiberty/stamp-picdir
? libiberty/xhost-mkfrag
? libiberty/testsuite/Makefile
? opcodes/.libs
? opcodes/Makefile
? opcodes/arm-dis.lo
? opcodes/config.cache
? opcodes/config.h
? opcodes/config.log
? opcodes/config.status
? opcodes/dis-buf.lo
? opcodes/dis-init.lo
? opcodes/disassemble.lo
? opcodes/libopcodes.la
? opcodes/libtool
? opcodes/stamp-h1
? opcodes/stamp-lib
? opcodes/po/Makefile
? opcodes/po/Makefile.in
? opcodes/po/POTFILES
Index: gas/config/tc-arm.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-arm.c,v
retrieving revision 1.393
diff -u -p -r1.393 tc-arm.c
--- gas/config/tc-arm.c 9 Jul 2009 07:52:34 -0000 1.393
+++ gas/config/tc-arm.c 13 Jul 2009 19:02:50 -0000
@@ -18374,9 +18374,15 @@ arm_frag_align_code (int n, int max)
char * p;
/* We assume that there will never be a requirement
- to support alignments greater than 32 bytes. */
+ to support alignments greater than [MAX_MEM_FOR_RS_ALIGN_CODE] bytes. */
if (max > MAX_MEM_FOR_RS_ALIGN_CODE)
- as_fatal (_("alignments greater than 32 bytes not supported in .text sections."));
+ {
+ char err_msg[128];
+ sprintf (err_msg,
+ _("alignments greater than %d bytes not supported in .text sections."),
+ MAX_MEM_FOR_RS_ALIGN_CODE + 1);
+ as_fatal (err_msg);
+ }
p = frag_var (rs_align_code,
MAX_MEM_FOR_RS_ALIGN_CODE,
Index: gas/config/tc-arm.h
===================================================================
RCS file: /cvs/src/src/gas/config/tc-arm.h,v
retrieving revision 1.51
diff -u -p -r1.51 tc-arm.h
--- gas/config/tc-arm.h 22 Jun 2009 14:40:27 -0000 1.51
+++ gas/config/tc-arm.h 13 Jul 2009 19:02:50 -0000
@@ -191,7 +191,8 @@ void arm_copy_symbol_attributes (symbolS
#define TC_CONS_FIX_NEW cons_fix_new_arm
-#define MAX_MEM_FOR_RS_ALIGN_CODE 31
+#define MAX_MEM_ALIGNMENT_BYTES 6
+#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << MAX_MEM_ALIGNMENT_BYTES) - 1)
/* For frags in code sections we need to record whether they contain
ARM code or THUMB code. This is that if they have to be aligned,
Index: gas/testsuite/gas/arm/align64.d
===================================================================
RCS file: gas/testsuite/gas/arm/align64.d
diff -N gas/testsuite/gas/arm/align64.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/arm/align64.d 13 Jul 2009 19:02:50 -0000
@@ -0,0 +1,69 @@
+# name: 64 Bytes alignment test
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+00000000 <foo> f04f 0001.*mov.w.*r0, #1
+00000004 <foo\+0x4> 46c0.*nop.*
+00000006 <foo\+0x6> 46c0.*nop.*
+00000008 <foo\+0x8> 46c0.*nop.*
+0000000a <foo\+0xa> 46c0.*nop.*
+0000000c <foo\+0xc> 46c0.*nop.*
+0000000e <foo\+0xe> 46c0.*nop.*
+00000010 <foo\+0x10> 46c0.*nop.*
+00000012 <foo\+0x12> 46c0.*nop.*
+00000014 <foo\+0x14> 46c0.*nop.*
+00000016 <foo\+0x16> 46c0.*nop.*
+00000018 <foo\+0x18> 46c0.*nop.*
+0000001a <foo\+0x1a> 46c0.*nop.*
+0000001c <foo\+0x1c> 46c0.*nop.*
+0000001e <foo\+0x1e> 46c0.*nop.*
+00000020 <foo\+0x20> 46c0.*nop.*
+00000022 <foo\+0x22> 46c0.*nop.*
+00000024 <foo\+0x24> 46c0.*nop.*
+00000026 <foo\+0x26> 46c0.*nop.*
+00000028 <foo\+0x28> 46c0.*nop.*
+0000002a <foo\+0x2a> 46c0.*nop.*
+0000002c <foo\+0x2c> 46c0.*nop.*
+0000002e <foo\+0x2e> 46c0.*nop.*
+00000030 <foo\+0x30> 46c0.*nop.*
+00000032 <foo\+0x32> 46c0.*nop.*
+00000034 <foo\+0x34> 46c0.*nop.*
+00000036 <foo\+0x36> 46c0.*nop.*
+00000038 <foo\+0x38> 46c0.*nop.*
+0000003a <foo\+0x3a> 46c0.*nop.*
+0000003c <foo\+0x3c> 46c0.*nop.*
+0000003e <foo\+0x3e> 46c0.*nop.*
+00000040 <foo\+0x40> f04f 0002.*mov.w.*r0, #2
+00000044 <foo2> e3a00003.*mov.*r0, #3
+00000048 <foo2\+0x4> e1a00000.*nop.*
+0000004c <foo2\+0x8> e1a00000.*nop.*
+00000050 <foo2\+0xc> e1a00000.*nop.*
+00000054 <foo2\+0x10> e1a00000.*nop.*
+00000058 <foo2\+0x14> e1a00000.*nop.*
+0000005c <foo2\+0x18> e1a00000.*nop.*
+00000060 <foo2\+0x1c> e1a00000.*nop.*
+00000064 <foo2\+0x20> e1a00000.*nop.*
+00000068 <foo2\+0x24> e1a00000.*nop.*
+0000006c <foo2\+0x28> e1a00000.*nop.*
+00000070 <foo2\+0x2c> e1a00000.*nop.*
+00000074 <foo2\+0x30> e1a00000.*nop.*
+00000078 <foo2\+0x34> e1a00000.*nop.*
+0000007c <foo2\+0x38> e1a00000.*nop.*
+00000080 <foo2\+0x3c> e3a00004.*mov.*r0, #4
+00000084 <foo2\+0x40> e1a00000.*nop.*
+00000088 <foo2\+0x44> e1a00000.*nop.*
+0000008c <foo2\+0x48> e1a00000.*nop.*
+00000090 <foo2\+0x4c> e1a00000.*nop.*
+00000094 <foo2\+0x50> e1a00000.*nop.*
+00000098 <foo2\+0x54> e1a00000.*nop.*
+0000009c <foo2\+0x58> e1a00000.*nop.*
+000000a0 <foo2\+0x5c> e1a00000.*nop.*
+000000a4 <foo2\+0x60> e1a00000.*nop.*
+000000a8 <foo2\+0x64> e1a00000.*nop.*
+000000ac <foo2\+0x68> e1a00000.*nop.*
+000000b0 <foo2\+0x6c> e1a00000.*nop.*
+000000b4 <foo2\+0x70> e1a00000.*nop.*
+000000b8 <foo2\+0x74> e1a00000.*nop.*
+000000bc <foo2\+0x78> e1a00000.*nop.*
Index: gas/testsuite/gas/arm/align64.s
===================================================================
RCS file: gas/testsuite/gas/arm/align64.s
diff -N gas/testsuite/gas/arm/align64.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/arm/align64.s 13 Jul 2009 19:02:50 -0000
@@ -0,0 +1,12 @@
+.syntax unified
+.thumb
+foo:
+ mov r0, #1
+.p2align 6,,63
+ mov r0, #2
+
+.arm
+foo2:
+ mov r0, #3
+.p2align 6,,63
+ mov r0, #4