From 9e807f2434e3425f0a4e71860ae051deb7709e8f Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 18 Jun 2012 14:04:28 -0400 Subject: [PATCH] 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 diff --git a/sr_i386/obj_file.c b/sr_i386/obj_file.c index da40b0e..8b7278a 100644 --- a/sr_i386/obj_file.c +++ b/sr_i386/obj_file.c @@ -30,6 +30,7 @@ #include "gtmio.h" #include "mmemory.h" #include "obj_file.h" +#include LITREF char gtm_release_name[]; LITREF int4 gtm_release_name_len; @@ -444,8 +445,11 @@ void emit_literals(void) 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) diff --git a/sr_unix/comp_lits.c b/sr_unix/comp_lits.c index 3f7b89b..7e8f67f 100644 --- a/sr_unix/comp_lits.c +++ b/sr_unix/comp_lits.c @@ -14,10 +14,10 @@ #include #include "mdq.h" #include "stringpool.h" +#include 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 @@ void comp_lits(rhdtyp *rhead) * 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; diff --git a/sr_unix/obj_file.c b/sr_unix/obj_file.c index b8d7709..4b576ba 100644 --- a/sr_unix/obj_file.c +++ b/sr_unix/obj_file.c @@ -28,6 +28,7 @@ #include "gtmio.h" #include "mmemory.h" #include "obj_file.h" +#include GBLREF char object_file_name[]; GBLREF short object_name_len; @@ -38,8 +39,6 @@ GBLREF boolean_t run_time; 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 @@ void emit_literals(void) 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) { diff --git a/sr_unix/obj_source.c b/sr_unix/obj_source.c new file mode 100644 index 0000000..55f79b0 --- /dev/null +++ b/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; +} diff --git a/sr_unix/obj_source.h b/sr_unix/obj_source.h new file mode 100644 index 0000000..138fa5a --- /dev/null +++ b/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 diff --git a/sr_unix_nsb/comp_lits.c b/sr_unix_nsb/comp_lits.c index 06df2e2..2e64bef 100644 --- a/sr_unix_nsb/comp_lits.c +++ b/sr_unix_nsb/comp_lits.c @@ -14,10 +14,10 @@ #include "rtnhdr.h" #include "mdq.h" #include "stringpool.h" +#include 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 @@ rhdtyp *rhead; 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;