Commit 22f549fd by John David Anglin Committed by John David Anglin

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
parent 19e1af6e
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> 2004-01-15 Roger Sayle <roger@eyesopen.com>
* tree-ssa-dom.c (extract_range_from_cond): Correct condition. * tree-ssa-dom.c (extract_range_from_cond): Correct condition.
......
...@@ -8253,6 +8253,17 @@ pa_asm_output_aligned_common (FILE *stream, ...@@ -8253,6 +8253,17 @@ pa_asm_output_aligned_common (FILE *stream,
unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT size,
unsigned int align) 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 (); bss_section ();
assemble_name (stream, name); assemble_name (stream, name);
......
...@@ -122,11 +122,10 @@ Boston, MA 02111-1307, USA. */ ...@@ -122,11 +122,10 @@ Boston, MA 02111-1307, USA. */
The .align directive in the HP assembler allows alignments up to The .align directive in the HP assembler allows alignments up to
4096 bytes. However, the maximum alignment of a global common symbol 4096 bytes. However, the maximum alignment of a global common symbol
is 16 bytes using HP ld. For consistency, we use the same limit is 16 bytes using HP ld. Unfortunately, this macro doesn't provide
with GNU ld. */ a method to check for common symbols. */
#undef MAX_OFILE_ALIGNMENT #undef MAX_OFILE_ALIGNMENT
#define MAX_OFILE_ALIGNMENT \ #define MAX_OFILE_ALIGNMENT 32768
(TREE_PUBLIC (decl) && DECL_COMMON (decl) ? 128 : 32768)
/* Due to limitations in the target structure, it isn't currently possible /* Due to limitations in the target structure, it isn't currently possible
to dynamically switch between the GNU and HP assemblers. */ to dynamically switch between the GNU and HP assemblers. */
......
...@@ -287,11 +287,9 @@ do { \ ...@@ -287,11 +287,9 @@ do { \
The .align directive in the HP assembler allows alignments up to 4096 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. However, the maximum alignment of a global common symbol is 8
bytes for objects smaller than the page size (4096 bytes). For larger bytes for objects smaller than the page size (4096 bytes). For larger
objects, the linker provides an alignment of 32 bytes. */ objects, the linker provides an alignment of 32 bytes. Unfortunately,
#define MAX_OFILE_ALIGNMENT \ this macro doesn't provide a mechanism to test for common symbols. */
(TREE_PUBLIC (decl) && DECL_COMMON (decl) \ #define MAX_OFILE_ALIGNMENT 32768
? (host_integerp (DECL_SIZE_UNIT (decl), 1) >= 4096 ? 256 : 64) \
: 32768)
/* The SOM linker hardcodes paths into binaries. As a result, dotdots /* The SOM linker hardcodes paths into binaries. As a result, dotdots
must be removed from library prefixes to prevent binaries from depending must be removed from library prefixes to prevent binaries from depending
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment