diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2005-01-15 17:10:02 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2005-01-15 17:10:02 +0000 |
commit | 22f549fddc1f228a1a11ead232517f3aad82b217 (patch) | |
tree | dae82cea5b7cd69c9b6ec574e0cc1740020753d4 /gcc/config/pa | |
parent | 19e1af6e02b563c05de791e3550ae70c0d04a147 (diff) | |
download | gcc-22f549fddc1f228a1a11ead232517f3aad82b217.zip gcc-22f549fddc1f228a1a11ead232517f3aad82b217.tar.gz gcc-22f549fddc1f228a1a11ead232517f3aad82b217.tar.bz2 |
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
Diffstat (limited to 'gcc/config/pa')
-rw-r--r-- | gcc/config/pa/pa.c | 11 | ||||
-rw-r--r-- | gcc/config/pa/pa64-hpux.h | 7 | ||||
-rw-r--r-- | gcc/config/pa/som.h | 8 |
3 files changed, 17 insertions, 9 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 762f24e..58642d1 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 2cc6691..fac71bd 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 96dc2a9..2d2e93e 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 |