OSDN Git Service

PR ada/19388
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Jan 2005 17:10:02 +0000 (17:10 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Jan 2005 17:10:02 +0000 (17:10 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93698 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/pa/pa.c
gcc/config/pa/pa64-hpux.h
gcc/config/pa/som.h

index 0865fe7..25e38ee 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       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  <roger@eyesopen.com>
 
        * tree-ssa-dom.c (extract_range_from_cond): Correct condition.
index 762f24e..58642d1 100644 (file)
@@ -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);
index 2cc6691..fac71bd 100644 (file)
@@ -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.  */
index 96dc2a9..2d2e93e 100644 (file)
@@ -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