#include "mark.h"
#include "error.h"
#include "object.h"
-#include "risca.h"
+#include "riscasm.h"
MCHUNK * firstmch; // First mark chunk
PTR markptr; // Deposit point in current mark chunk
LONG mcalloc; // #bytes alloc'd to current mark chunk
LONG mcused; // #bytes used in current mark chunk
-uint16_t curfrom; // Current "from" section
+uint16_t curfrom; // Current "from" section
//#define DEBUG_IMAGE_MARKING
//
-// Initialize Marker
+// Initialize marker
//
-void init_mark(void)
+void InitMark(void)
{
firstmch = curmch = NULL;
mcalloc = mcused = 0;
//
// Wrap up marker (called after final mark is made)
//
-void stopmark(void)
+void StopMark(void)
{
if (curmch)
{
{
#ifdef DEBUG_IMAGE_MARKING
printf("rmark: from=%i, loc=$%X, to=$%X, size=$%x, symbol=$%X\n", from, loc, to, size, symbol);
+if (symbol)
+ printf(" symbol->stype=$%02X, sattr=$%04X, sattre=$%08X, svalue=%i, sname=%s\n", symbol->stype, symbol->sattr, symbol->sattre, symbol->svalue, symbol->sname);
#endif
-// uint16_t w;
if ((mcalloc - mcused) < MIN_MARK_MEM)
amark();
else
rflag = 0x00000040; // Absolute fixup
+// This flag tells the linker to WORD swap the LONG when doing the fixup.
if (w & MMOVEI)
+//{
+//printf("bsdmarkimg: ORing $01 to rflag (MMOVEI) [symbol=%s]...\n", symbol->sname);
rflag |= 0x00000001;
+//}
}
// Compute mark position in relocation information;
rflag |= 0x00000010; // Set external reloc flag bit
rflag |= (symbol->senv << 8); // Put symbol index in flags
+// Looks like this is completely unnecessary (considering it does the wrong thing!)
+#if 0
if (symbol->sattre & RISCSYM)
+{
+printf("bsdmarkimg: ORing $01 to rflag (RISCSYM) [symbol=%s]...\n", symbol->sname);
rflag |= 0x00000001;
+}
+#endif
if (validsegment)
{
{
if (w & (DATA|BSS))
{
- dp = objimage + BSDHDRSIZE + loc;
+ dp = objImage + BSDHDRSIZE + loc;
diff = ((LONG)(*dp++ & 0xFF)) << 24;
diff |= ((LONG)(*dp++ & 0xFF)) << 16;
diff |= ((LONG)(*dp++ & 0xFF)) << 8;
if (rflag & 0x01)
diff = ((diff >> 16) & 0x0000FFFF) | ((diff << 16) & 0xFFFF0000);
- dp = objimage + BSDHDRSIZE + loc;
+ dp = objImage + BSDHDRSIZE + loc;
*dp++ = (char)(diff >> 24);
*dp++ = (char)(diff >> 16);
*dp++ = (char)(diff >> 8);