Compare commits

...

4 Commits

Author SHA1 Message Date
Brad King af8fbc57f1 Merge branch 'master' into gtm_destdir 2012-10-04 08:41:02 -04:00
Brad King 683bcea938 Merge branch 'hackathonjune2012-brad' into hackathonjune2012-brad-gtm_destdir 2012-06-19 13:41:52 -04:00
Brad King 74aa25e075 Support source-to-object compilation in a DESTDIR
If environment variable 'gtm_destdir' is set, treat it as a prefix to be
removed from any source file paths contained inside it.  This will allow
sources to be compiled in a DESTDIR for packaging such that the object
files will find their sources in the final install prefix after
distribution.
2012-06-18 14:25:34 -04:00
Brad King 9e807f2434 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.
2012-06-18 14:23:05 -04:00
6 changed files with 63 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;
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;

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

25
sr_unix/obj_source.c Normal file
View File

@ -0,0 +1,25 @@
#include "gtm_stdlib.h"
#include "gtm_string.h"
#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};
char* gtm_destdir = getenv("gtm_destdir");
if(gtm_destdir)
{
/* Strip the destdir prefix from sources inside it. */
size_t const ddlen = strlen(gtm_destdir);
if(strncmp(sn.name, gtm_destdir, ddlen) == 0)
{
sn.name += ddlen;
sn.len -= ddlen;
}
}
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;
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;