mirror of http://shamusworld.gotdns.org/git/rmac
Fix for #209 - forbid exporting expressions with unresolved symbols
This commit is contained in:
parent
c6808e75ed
commit
31894aa869
2
expr.c
2
expr.c
|
@ -585,7 +585,7 @@ be converted from a linked list into an array).
|
|||
//
|
||||
// Evaluate expression.
|
||||
// If the expression involves only ONE external symbol, the expression is
|
||||
// UNDEFINED, but it's value includes everything but the symbol value, and
|
||||
// UNDEFINED, but its value includes everything but the symbol value, and
|
||||
// 'a_esym' is set to the external symbol.
|
||||
//
|
||||
int evexpr(TOKEN * _tk, uint64_t * a_value, WORD * a_attr, SYM ** a_esym)
|
||||
|
|
1
rmac.h
1
rmac.h
|
@ -262,6 +262,7 @@ PTR
|
|||
#define SIZP 0x0080 // .p (FPU pakced decimal real)
|
||||
#define SIZQ 0x0100 // .q (quad word)
|
||||
|
||||
// Extended attributes
|
||||
#define EQUATEDREG 0x0008 // Equated register symbol
|
||||
#define UNDEF_EQUR 0x0010
|
||||
#define EQUATEDCC 0x0020
|
||||
|
|
9
sect.c
9
sect.c
|
@ -462,6 +462,15 @@ int ResolveFixups(int sno)
|
|||
if (evexpr(fup->expr, &eval, &eattr, &esym) != OK)
|
||||
continue;
|
||||
|
||||
if (esym)
|
||||
if (!(esym->sattr & DEFINED))
|
||||
{
|
||||
// If our expression still has an undefined symbol at this stage, it's bad news.
|
||||
// The linker is never going to resolve the expression, so that's an error.
|
||||
error("cannot export complex expression with unresloved symbol '%s'", esym->sname);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & (DEFINED | REFERENCED | EQUATED)) == (DEFINED | REFERENCED))
|
||||
{
|
||||
error("relocation not allowed when o30 is enabled");
|
||||
|
|
Loading…
Reference in New Issue