From 5225a1389d0058ac8f64153efa64c8e07ec13c9a Mon Sep 17 00:00:00 2001
From: Eric Botcazou <ebotcazou@gcc.gnu.org>
Date: Wed, 22 Apr 2009 22:01:57 +0000
Subject: [PATCH] utils.c (create_var_decl_1): Do not emit debug info for an
 external constant whose initializer is not absolute.

	* gcc-interface/utils.c (create_var_decl_1): Do not emit debug info
	for an external constant whose initializer is not absolute.

From-SVN: r146620
---
 gcc/ada/ChangeLog             | 7 ++++++-
 gcc/ada/gcc-interface/utils.c | 9 +++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 7628abb53e2d..acdc11cfc851 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,4 +1,9 @@
-2009-04-21  Taras Glek <tglek@mozilla.com>
+2009-04-22  Eric Botcazou  <ebotcazou@adacore.com>
+
+	* gcc-interface/utils.c (create_var_decl_1): Do not emit debug info
+	for an external constant whose initializer is not absolute.
+
+2009-04-22  Taras Glek  <tglek@mozilla.com>
 
 	* gcc-interface/ada-tree.h: Update GTY annotations to new syntax.
 	* gcc-interface/trans.c: Likewise.
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index 088c83ad23d7..6ea91389f684 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -1347,6 +1347,15 @@ create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init,
   TREE_STATIC (var_decl)
     = !extern_flag && (public_flag || static_flag || global_bindings_p ());
 
+  /* For an external constant whose initializer is not absolute, do not emit
+     debug info.  In DWARF this would mean a global relocation in a read-only
+     section which runs afoul of the PE-COFF runtime relocation mechanism.  */
+  if (extern_flag
+      && constant_p
+      && initializer_constant_valid_p (var_init, TREE_TYPE (var_init))
+	   != null_pointer_node)
+    DECL_IGNORED_P (var_decl) = 1;
+
   if (asm_name && VAR_OR_FUNCTION_DECL_P (var_decl))
     SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
 
-- 
GitLab