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.
This commit is contained in:
Brad King 2012-06-18 14:04:28 -04:00
parent 5b7c3e51e7
commit 9e807f2434
6 changed files with 50 additions and 14 deletions

View File

@ -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 @@ 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)

View File

@ -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 @@ 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;
{
struct obj_source s = get_obj_source();
rhead->src_full_name.len = s.len;
rhead->src_full_name.addr = (char *)offset;
offset += source_name_len;
offset += s.len;
}
offset += PADLEN(offset, NATIVE_WSIZE);
rhead->routine_name.len = routine_name.len;
rhead->routine_name.addr = (char *)offset;

View File

@ -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 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)
{

12
sr_unix/obj_source.c Normal file
View File

@ -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;
}

12
sr_unix/obj_source.h Normal file
View File

@ -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

View File

@ -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 @@ rhdtyp *rhead;
offset = stringpool.free - stringpool.base;
offset += PADLEN(offset, NATIVE_WSIZE);
rhead->src_full_name.len = 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 += source_name_len;
offset += s.len;
}
offset += PADLEN(offset, NATIVE_WSIZE);
rhead->routine_name.len = routine_name.len;
rhead->routine_name.addr = (char *)offset;