From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32362 invoked by alias); 10 Dec 2002 18:06:36 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 32333 invoked from network); 10 Dec 2002 18:06:33 -0000 Received: from unknown (HELO sunsite.mff.cuni.cz) (195.113.19.66) by sources.redhat.com with SMTP; 10 Dec 2002 18:06:33 -0000 Received: (from jakub@localhost) by sunsite.mff.cuni.cz (8.11.6/8.11.6) id gBAI6Rj13630; Tue, 10 Dec 2002 19:06:27 +0100 Date: Tue, 10 Dec 2002 10:06:00 -0000 From: Jakub Jelinek To: "H. J. Lu" Cc: Roland McGrath , Ulrich Drepper , Glibc hackers , binutils@sources.redhat.com Subject: Re: [PATCH] Fix tst-array* on x86_64 Message-ID: <20021210190627.O1310@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek References: <20021210145250.M1310@sunsite.ms.mff.cuni.cz> <20021210094308.A11254@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <20021210094308.A11254@lucon.org>; from hjl@lucon.org on Tue, Dec 10, 2002 at 09:43:08AM -0800 X-SW-Source: 2002-12/txt/msg00020.txt.bz2 On Tue, Dec 10, 2002 at 09:43:08AM -0800, H. J. Lu wrote: > On Tue, Dec 10, 2002 at 02:52:50PM +0100, Jakub Jelinek wrote: > > Hi! > > > > This is actually the same crap as I had to work around in test-string.h, > > ie. x86_64 aligns preinit_array etc. to 16 bytes because they are >= > > 16 bytes, yet its actual size is 24 bytes. > > /* x86-64 ABI requires arrays greater than 16 bytes to be aligned > > to 16byte boundary. */ > > Linker script of course doesn't expect .init_array/.fini_array/.preinit_array > > sections to be more than word aligned and thus the labels around them > > are on wrong positions. > > > > 2002-12-10 Jakub Jelinek > > > > * elf/tst-array1.c (preinit_array, init_array, fini_array): > > Explicitely align the array to sizeof (void *). > > * elf/tst-array2dep.c (init_array, fini_array): Likewise. > > > > --- libc/elf/tst-array1.c.jj 2002-11-07 23:28:04.000000000 +0100 > > +++ libc/elf/tst-array1.c 2002-12-10 16:01:54.000000000 +0100 > > @@ -35,7 +35,7 @@ preinit_2 (void) > > } > > > > void (*const preinit_array []) (void) > > - __attribute__ ((section (".preinit_array"))) = > > + __attribute__ ((section (".preinit_array"), aligned (sizeof (void *)))) = > > { > > &preinit_0, > > &preinit_1, > > I assume size of void * is 8 byte for x86_64. Will it align at 16 byte? Yes. It will align that way any array whose entries are aligned to <= 16 bytes and whose size is >= 16 bytes. E.g. if: void (*const preinit_array_0) (void) __attribute__ ((section (".preinit_array"))) = &preinit_0; void (*const preinit_array_1) (void) __attribute__ ((section (".preinit_array"))) = &preinit_1; void (*const preinit_array_2) (void) __attribute__ ((section (".preinit_array"))) = &preinit_2; was used instead, it would be just 8 aligned. > Those *_array sections are special sections. Should they be handled by > gas/ld automatically? It is gcc's problem (and in this case testcase writer's problem) to follow the rules. Jakub