aboutsummaryrefslogtreecommitdiff
path: root/gcc/xcoffout.c
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@adacore.com>2011-01-17 12:35:21 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-01-17 12:35:21 +0000
commitb9361af2c3392d6a73453af69dcc5919b6c25db3 (patch)
tree604d2d8ecad31f6580908b090884a17e811b1a56 /gcc/xcoffout.c
parentf4c69f53f97ccbbd59ac62d9da712d5297580e72 (diff)
downloadgcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.zip
gcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.tar.gz
gcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.tar.bz2
re PR target/46655 (invalid '.line 0' directive emitted with -g)
PR target/46655 * xcoffout.c (ASM_OUTPUT_LINE): Output line only if positive, and only if <= USHRT_MAX in 32-bit mode. Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com> Co-Authored-By: Michael Haubenwallner <michael.haubenwallner@salomon.at> From-SVN: r168897
Diffstat (limited to 'gcc/xcoffout.c')
-rw-r--r--gcc/xcoffout.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c
index 2b29d98..84b1436 100644
--- a/gcc/xcoffout.c
+++ b/gcc/xcoffout.c
@@ -81,8 +81,15 @@ const char *xcoff_lastfile;
#define ASM_OUTPUT_LINE(FILE,LINENUM) \
do \
{ \
+ /* Make sure we're in a function and prevent output of .line 0, as \
+ line # 0 is meant for symbol addresses in xcoff. Additionally, \
+ line numbers are 'unsigned short' in 32-bit mode. */ \
if (xcoff_begin_function_line >= 0) \
- fprintf (FILE, "\t.line\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)); \
+ { \
+ int lno = ABS_OR_RELATIVE_LINENO (LINENUM); \
+ if (lno > 0 && (TARGET_64BIT || lno <= (int)USHRT_MAX)) \
+ fprintf (FILE, "\t.line\t%d\n", lno); \
+ } \
} \
while (0)