aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/pa')
-rw-r--r--gcc/config/pa/pa.c11
-rw-r--r--gcc/config/pa/pa64-hpux.h7
-rw-r--r--gcc/config/pa/som.h8
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