On Mon, Mar 30, 2015 at 9:25 PM, Kwok Cheung Yeung <k...@codesourcery.com> wrote: > This is a simple patch that ensures that a .size directive is emitted when > space is allocated for a static variable in the BSS on bare-metal ARM > targets. This allows other tools such as GDB to look up the size of the > object correctly. > > Before: > > $ readelf -s pr26702.o > > Symbol table '.symtab' contains 10 entries: > Num: Value Size Type Bind Vis Ndx Name > ... > 6: 00000000 0 NOTYPE LOCAL DEFAULT 3 static_foo > ... > > After: > > $ readelf -s pr26702.o > > Symbol table '.symtab' contains 10 entries: > Num: Value Size Type Bind Vis Ndx Name > ... > 6: 00000000 4 NOTYPE LOCAL DEFAULT 3 static_foo > ... > > The testsuite has been run with a i686-pc-linux-gnu hosted cross-compiler > targetted at arm-none-eabi with no regressions. > > Kwok > > > 2015-03-30 Kwok Cheung Yeung <k...@codesourcery.com> > > gcc/ > PR target/26702 > * config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Emit > size of local. > > gcc/testsuite/ > PR target/26702 > * gcc.target/arm/pr26702.c: New test. > > Index: gcc/testsuite/gcc.target/arm/pr26702.c > =================================================================== > --- gcc/testsuite/gcc.target/arm/pr26702.c (revision 0) > +++ gcc/testsuite/gcc.target/arm/pr26702.c (revision 0) > @@ -0,0 +1,4 @@ > +/* { dg-do compile { target arm*-*-eabi* } } */ > +/* { dg-final { scan-assembler "\\.size\[\\t \]+static_foo, 4" } } */ > +int foo; > +static int static_foo; > Index: gcc/config/arm/unknown-elf.h > =================================================================== > --- gcc/config/arm/unknown-elf.h (revision 447549) > +++ gcc/config/arm/unknown-elf.h (working copy) > @@ -81,6 +81,8 @@ > ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT)); \ > ASM_OUTPUT_LABEL (FILE, NAME); \ > fprintf (FILE, "\t.space\t%d\n", SIZE ? (int)(SIZE) : 1); > \ > + fprintf (FILE, "\t.size\t%s, %d\n", \ > + NAME, SIZE ? (int)(SIZE) : 1); \ > } \ > while (0) >
Now applied as attached with the following modifications. Sorry about the delay - I've been away for a bit and couldn't attend to committing this. Thanks Ramana
Index: gcc/config/arm/unknown-elf.h =================================================================== --- gcc/config/arm/unknown-elf.h (revision 222370) +++ gcc/config/arm/unknown-elf.h (working copy) @@ -81,6 +81,8 @@ ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT)); \ ASM_OUTPUT_LABEL (FILE, NAME); \ fprintf (FILE, "\t.space\t%d\n", SIZE ? (int)(SIZE) : 1); \ + fprintf (FILE, "\t.size\t%s, %d\n", \ + NAME, SIZE ? (int) SIZE, 1); \ } \ while (0) Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (revision 222370) +++ gcc/ChangeLog (working copy) @@ -1,3 +1,9 @@ +2015-04-23 Kwok Cheung Yeung <k...@codesourcery.com> + + PR target/26702 + * config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): + Emit size of local. + 2015-04-23 Nick Clifton <ni...@redhat.com> * config/rl78/rl78.c (rl78_preferred_reload_class): Add Index: gcc/testsuite/gcc.target/arm/pr26702.c =================================================================== --- gcc/testsuite/gcc.target/arm/pr26702.c (revision 0) +++ gcc/testsuite/gcc.target/arm/pr26702.c (revision 222371) @@ -0,0 +1,4 @@ +/* { dg-do compile { target arm_eabi } } */ +/* { dg-final { scan-assembler "\\.size\[\\t \]+static_foo, 4" } } */ +int foo; +static int static_foo; Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (revision 222370) +++ gcc/testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2015-04-23 Kyok Cheung Yeung <k...@codesourcery.com> + + PR target/26702 + * gcc.target/arm/pr26702.c: New test. + 2015-04-23 Marek Polacek <pola...@redhat.com> PR c/65345