From 22f549fddc1f228a1a11ead232517f3aad82b217 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sat, 15 Jan 2005 17:10:02 +0000 Subject: [PATCH] re PR target/19388 (MAX_OFILE_ALIGNMENT on PA HP-UX) PR ada/19388 * pa.c (pa_asm_output_aligned_common): Warn if specified alignment exceeds maximum alignment for global common data. * pa64-hpux.h (MAX_OFILE_ALIGNMENT): Define to 32768. * som.h (MAX_OFILE_ALIGNMENT): Likewise. From-SVN: r93698 --- gcc/ChangeLog | 8 ++++++++ gcc/config/pa/pa.c | 11 +++++++++++ gcc/config/pa/pa64-hpux.h | 7 +++---- gcc/config/pa/som.h | 8 +++----- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0865fe74e70..25e38eebfa4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-01-15 John David Anglin + + PR ada/19388 + * pa.c (pa_asm_output_aligned_common): Warn if specified alignment + exceeds maximum alignment for global common data. + * pa64-hpux.h (MAX_OFILE_ALIGNMENT): Define to 32768. + * som.h (MAX_OFILE_ALIGNMENT): Likewise. + 2004-01-15 Roger Sayle * tree-ssa-dom.c (extract_range_from_cond): Correct condition. diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 762f24e1b4e..58642d10f28 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -8253,6 +8253,17 @@ pa_asm_output_aligned_common (FILE *stream, unsigned HOST_WIDE_INT size, unsigned int align) { + unsigned int max_common_align; + + max_common_align = TARGET_64BIT ? 128 : (size >= 4096 ? 256 : 64); + if (align > max_common_align) + { + warning ("alignment (%u) for %s exceeds maximum alignment " + "for global common data. Using %u", + align / BITS_PER_UNIT, name, max_common_align / BITS_PER_UNIT); + align = max_common_align; + } + bss_section (); assemble_name (stream, name); diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h index 2cc6691ed7a..fac71bd7787 100644 --- a/gcc/config/pa/pa64-hpux.h +++ b/gcc/config/pa/pa64-hpux.h @@ -122,11 +122,10 @@ Boston, MA 02111-1307, USA. */ The .align directive in the HP assembler allows alignments up to 4096 bytes. However, the maximum alignment of a global common symbol - is 16 bytes using HP ld. For consistency, we use the same limit - with GNU ld. */ + is 16 bytes using HP ld. Unfortunately, this macro doesn't provide + a method to check for common symbols. */ #undef MAX_OFILE_ALIGNMENT -#define MAX_OFILE_ALIGNMENT \ - (TREE_PUBLIC (decl) && DECL_COMMON (decl) ? 128 : 32768) +#define MAX_OFILE_ALIGNMENT 32768 /* Due to limitations in the target structure, it isn't currently possible to dynamically switch between the GNU and HP assemblers. */ diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index 96dc2a9077f..2d2e93e58ea 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -287,11 +287,9 @@ do { \ The .align directive in the HP assembler allows alignments up to 4096 bytes. However, the maximum alignment of a global common symbol is 8 bytes for objects smaller than the page size (4096 bytes). For larger - objects, the linker provides an alignment of 32 bytes. */ -#define MAX_OFILE_ALIGNMENT \ - (TREE_PUBLIC (decl) && DECL_COMMON (decl) \ - ? (host_integerp (DECL_SIZE_UNIT (decl), 1) >= 4096 ? 256 : 64) \ - : 32768) + objects, the linker provides an alignment of 32 bytes. Unfortunately, + this macro doesn't provide a mechanism to test for common symbols. */ +#define MAX_OFILE_ALIGNMENT 32768 /* The SOM linker hardcodes paths into binaries. As a result, dotdots must be removed from library prefixes to prevent binaries from depending -- 2.30.2