From 79a141784a7f10d72c756aa309eb6aa9a7bd92c5 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Mon, 18 Aug 2008 09:09:24 +0000 Subject: [multiple changes] 2008-08-18 Samuel Tardieu Robert Dewar gcc/ada/ PR ada/30827 * bindgen.adb (Gen_Output_File_Ada): Zero-terminate the version string. Move comment in the right place. * g-comver.adb (Version): Look for a zero-termination in addition to a closing parenthesis. 2008-08-18 Robert Dewar gcc/testsuite/ PR ada/30827 * gnat.dg/test_version.adb: New. From-SVN: r139192 --- gcc/ada/ChangeLog | 10 ++++++++++ gcc/ada/bindgen.adb | 14 ++++++++------ gcc/ada/g-comver.adb | 7 +++++-- 3 files changed, 23 insertions(+), 8 deletions(-) (limited to 'gcc/ada') diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 47bcb8e..21e3e26 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,4 +1,14 @@ 2008-08-18 Samuel Tardieu + Robert Dewar + + PR ada/30827 + * bindgen.adb (Gen_Output_File_Ada): Zero-terminate the + version string. + Move comment in the right place. + * g-comver.adb (Version): Look for a zero-termination in + addition to a closing parenthesis. + +2008-08-18 Samuel Tardieu * exp_ch13.adb, exp_disp.adb, sem_cat.adb, sem_ch10.adb, * sem_ch12.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb, diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 070651c..ccdf394 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -2267,17 +2267,19 @@ package body Bindgen is WBI (" gnat_exit_status : Integer;"); WBI (" pragma Import (C, gnat_exit_status);"); end if; - - -- Generate the GNAT_Version and Ada_Main_Program_Name info only - -- for the main program. Otherwise, it can lead under some - -- circumstances to a symbol duplication during the link (for - -- instance when a C program uses 2 Ada libraries) end if; + -- Generate the GNAT_Version and Ada_Main_Program_Name info only for + -- the main program. Otherwise, it can lead under some circumstances + -- to a symbol duplication during the link (for instance when a C + -- program uses two Ada libraries). Also zero terminate the string + -- so that its end can be found reliably at run time. + WBI (""); WBI (" GNAT_Version : constant String :="); WBI (" ""GNAT Version: " & - Gnat_Version_String & """;"); + Gnat_Version_String & + """ & ASCII.NUL;"); WBI (" pragma Export (C, GNAT_Version, ""__gnat_version"");"); WBI (""); diff --git a/gcc/ada/g-comver.adb b/gcc/ada/g-comver.adb index 2a0d120..ae3bf3b 100644 --- a/gcc/ada/g-comver.adb +++ b/gcc/ada/g-comver.adb @@ -53,15 +53,18 @@ package body GNAT.Compiler_Version is function Version return String is begin - -- Search for terminating right paren + -- Search for terminating right paren or NUL ending the string for J in Ver_Prefix'Length + 1 .. GNAT_Version'Last loop if GNAT_Version (J) = ')' then return GNAT_Version (Ver_Prefix'Length + 1 .. J); end if; + if GNAT_Version (J) = Character'Val (0) then + return GNAT_Version (Ver_Prefix'Length + 1 .. J - 1); + end if; end loop; - -- This should not happen (no right paren found) + -- This should not happen (no right paren or NUL found) return GNAT_Version; end Version; -- cgit v1.1