]> Shamusworld >> Repos - rmac/blobdiff - object.c
On some occasions elf output would misplace symbols due to the fact that it D_word...
[rmac] / object.c
index c20e714672ae71bbec86b1d5ead44e2a7e547ae9..7fd8fcce06ed190924fd0c175ff970f5322764e2 100644 (file)
--- a/object.c
+++ b/object.c
@@ -1,13 +1,14 @@
 //
-// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
+// RMAC - Reboot's Macro Assembler for all Atari computers
 // OBJECT.C - Writing Object Files
-// Copyright (C) 199x Landon Dyer, 2017 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
 // Source utilised with the kind permission of Landon Dyer
 //
 
 #include "object.h"
 #include "6502.h"
+#include "direct.h"
 #include "error.h"
 #include "mark.h"
 #include "riscasm.h"
@@ -177,6 +178,7 @@ uint8_t * AddBSDSymEntry(uint8_t * buf, SYM * sym, int globflag)
 uint8_t * AddELFSymEntry(uint8_t * buf, SYM * sym, int globflag)
 {
        chptr = buf;
+       ch_size = 0;
        D_long(strindx);                // st_name
        D_long(sym->svalue);    // st_value
        D_long(0);                              // st_size
@@ -520,7 +522,7 @@ int WriteObject(int fd)
                {
                        elfHdrNum[ES_TEXT] = shstIndex;
                        shstTab[ES_TEXT] = shstSize;
-                       shstSize += DepositELFSHSTEntry(&shstPtr, "TEXT");
+                       shstSize += DepositELFSHSTEntry(&shstPtr, ".text");
                        shstIndex++;
                        numEntries++;
                }
@@ -529,7 +531,7 @@ int WriteObject(int fd)
                {
                        elfHdrNum[ES_DATA] = shstIndex;
                        shstTab[ES_DATA] = shstSize;
-                       shstSize += DepositELFSHSTEntry(&shstPtr, "DATA");
+                       shstSize += DepositELFSHSTEntry(&shstPtr, ".data");
                        shstIndex++;
                        numEntries++;
                }
@@ -538,7 +540,7 @@ int WriteObject(int fd)
                {
                        elfHdrNum[ES_BSS] = shstIndex;
                        shstTab[ES_BSS] = shstSize;
-                       shstSize += DepositELFSHSTEntry(&shstPtr, "BSS");
+                       shstSize += DepositELFSHSTEntry(&shstPtr, ".bss");
                        shstIndex++;
                        numEntries++;
                }
@@ -619,7 +621,7 @@ for(int j=0; j<i; j++)
                // Construct TEXT section, if any
                if (sect[TEXT].sloc > 0)
                {
-                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_TEXT], 1, 6, 0, elfSize, sect[TEXT].sloc, 0, 0, 2, 0);
+                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_TEXT], 1, 6, 0, elfSize, sect[TEXT].sloc, 0, 0, largestAlign[0], 0);
 
                        for(CHUNK * cp=sect[TEXT].sfcode; cp!=NULL; cp=cp->chnext)
                        {
@@ -636,7 +638,7 @@ for(int j=0; j<i; j++)
                // Construct DATA section, if any
                if (sect[DATA].sloc > 0)
                {
-                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_DATA], 1, 3, 0, elfSize, sect[DATA].sloc, 0, 0, 1, 0);
+                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_DATA], 1, 3, 0, elfSize, sect[DATA].sloc, 0, 0, largestAlign[1], 0);
 
                        for(CHUNK * cp=sect[DATA].sfcode; cp!=NULL; cp=cp->chnext)
                        {
@@ -651,7 +653,7 @@ for(int j=0; j<i; j++)
                // Construct BSS section, if any
                if (sect[BSS].sloc > 0)
                {
-                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_BSS], 8, 3, 0, elfSize, sect[BSS].sloc, 0, 0, 2, 0);
+                       headerSize += DepositELFSectionHeader(headers + headerSize, shstTab[ES_BSS], 8, 3, 0, elfSize, sect[BSS].sloc, 0, 0, largestAlign[2], 0);
                }
 
                int textrelLoc = headerSize;