From: Brad King <brad.king@kitware.com>
Date: Mon, 18 Jun 2012 14:04:28 -0400
Subject: [PATCH 2/3] Refactor object file source name storage

Teach 'comp_lits' and 'emit_literals' to lookup the source file name
through a new 'obj_source' structure.  This will allow the source file
to be modified before storage in the object file.
---
 sr_i386/obj_file.c      |    8 ++++++--
 sr_unix/comp_lits.c     |   11 +++++++----
 sr_unix/obj_file.c      |   10 ++++++----
 sr_unix/obj_source.c    |   12 ++++++++++++
 sr_unix/obj_source.h    |   12 ++++++++++++
 sr_unix_nsb/comp_lits.c |   11 +++++++----
 6 files changed, 50 insertions(+), 14 deletions(-)
 create mode 100644 sr_unix/obj_source.c
 create mode 100644 sr_unix/obj_source.h

--- fis-gtm-V6.0-003.orig/sr_i386/obj_file.c
+++ fis-gtm-V6.0-003/sr_i386/obj_file.c
@@ -30,6 +30,7 @@
 #include "gtmio.h"
 #include "mmemory.h"
 #include "obj_file.h"
+#include <obj_source.h>
 
 LITREF char gtm_release_name[];
 LITREF int4 gtm_release_name_len;
@@ -444,8 +445,11 @@
 		emit_immed(PADCHARS, padsize);
 		offset += padsize;
 	}
-	emit_immed(source_file_name, source_name_len);
-	offset += source_name_len;
+	{
+		struct obj_source s = get_obj_source();
+		emit_immed(s.name, s.len);
+		offset += s.len;
+	}
 	/* comp_lits aligns the start of routine_name on a NATIVE_WSIZE boundary.*/
 	padsize = PADLEN(offset, NATIVE_WSIZE);
 	if (padsize)
--- fis-gtm-V6.0-003.orig/sr_unix/comp_lits.c
+++ fis-gtm-V6.0-003/sr_unix/comp_lits.c
@@ -14,10 +14,10 @@
 #include <rtnhdr.h>
 #include "mdq.h"
 #include "stringpool.h"
+#include <obj_source.h>
 
 GBLREF mliteral		literal_chain;
 GBLREF spdesc		stringpool;
-GBLREF unsigned short	source_name_len;
 GBLREF mident		routine_name;
 
 GBLDEF uint4		lits_text_size, lits_mval_size;
@@ -34,9 +34,12 @@
 	 * following the literal text pool and is considered part of that text pool.*/
 	offset = (stringpool.free - stringpool.base);
 	offset += PADLEN(offset, NATIVE_WSIZE);
-	rhead->src_full_name.len = source_name_len;
-	rhead->src_full_name.addr = (char *)offset;
-	offset += source_name_len;
+	{
+		struct obj_source s = get_obj_source();
+		rhead->src_full_name.len = s.len;
+		rhead->src_full_name.addr = (char *)offset;
+		offset += s.len;
+	}
 	offset += PADLEN(offset, NATIVE_WSIZE);
 	rhead->routine_name.len = routine_name.len;
 	rhead->routine_name.addr = (char *)offset;
--- fis-gtm-V6.0-003.orig/sr_unix/obj_file.c
+++ fis-gtm-V6.0-003/sr_unix/obj_file.c
@@ -28,6 +28,7 @@
 #include "gtmio.h"
 #include "mmemory.h"
 #include "obj_file.h"
+#include <obj_source.h>
 
 GBLREF char		object_file_name[];
 GBLREF short		object_name_len;
@@ -38,8 +39,6 @@
 GBLREF int4		lits_text_size, lits_mval_size;
 GBLREF unsigned char	*runtime_base;
 GBLREF mliteral		literal_chain;
-GBLREF char		source_file_name[];
-GBLREF unsigned short	source_name_len;
 GBLREF mident		routine_name;
 GBLREF spdesc		stringpool;
 GBLREF int4		linkage_size;
@@ -381,8 +380,11 @@
 		emit_immed(PADCHARS, padsize);
 		offset += padsize;
 	}
-	emit_immed(source_file_name, source_name_len);
-	offset += source_name_len;
+	{
+		struct obj_source s = get_obj_source();
+		emit_immed(s.name, s.len);
+		offset += s.len;
+	}
 	padsize = (uint4)(PADLEN(offset, NATIVE_WSIZE)); /* comp_lits aligns the start of routine_name on NATIVE_WSIZE boundary.*/
 	if (padsize)
 	{
--- /dev/null
+++ fis-gtm-V6.0-003/sr_unix/obj_source.c
@@ -0,0 +1,12 @@
+#include "mdef.h"
+
+#include "obj_source.h"
+
+GBLREF char		source_file_name[];
+GBLREF unsigned short	source_name_len;
+
+struct obj_source get_obj_source(void)
+{
+	struct obj_source sn = {source_file_name, source_name_len};
+	return sn;
+}
--- /dev/null
+++ fis-gtm-V6.0-003/sr_unix/obj_source.h
@@ -0,0 +1,12 @@
+#ifndef __OBJ_SOURCE_H__
+#define __OBJ_SOURCE_H__
+
+struct obj_source
+{
+	char* name;
+	unsigned short len;
+};
+
+struct obj_source get_obj_source(void);
+
+#endif
--- fis-gtm-V6.0-003.orig/sr_unix_nsb/comp_lits.c
+++ fis-gtm-V6.0-003/sr_unix_nsb/comp_lits.c
@@ -14,10 +14,10 @@
 #include <rtnhdr.h>
 #include "mdq.h"
 #include "stringpool.h"
+#include <obj_source.h>
 
 GBLREF mliteral 	literal_chain;
 GBLREF spdesc 		stringpool;
-GBLREF unsigned short 	source_name_len;
 GBLREF mident		routine_name;
 
 GBLDEF uint4 		lits_size, lit_addrs;
@@ -31,9 +31,12 @@
 
 	offset = stringpool.free - stringpool.base;
 	offset += PADLEN(offset, NATIVE_WSIZE);
-	rhead->src_full_name.len = source_name_len;
-	rhead->src_full_name.addr = (char *)offset;
-	offset += source_name_len;
+	{
+		struct obj_source s = get_obj_source();
+		rhead->src_full_name.len = s.len;
+		rhead->src_full_name.addr = (char *)offset;
+		offset += s.len;
+	}
 	offset += PADLEN(offset, NATIVE_WSIZE);
 	rhead->routine_name.len = routine_name.len;
 	rhead->routine_name.addr = (char *)offset;
