summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b53262f)
+2006-10-02 Maarten Brock <sourceforge.brock AT dse.nl>
+
+ * as/link/z80/lkarea.c: essentially reverted lnksect() to #4380 which
+ fixes bug 1566015
+
2006-10-01 Maarten Brock <sourceforge.brock AT dse.nl>
* src/pic16/glue.c (pic16emitMaps),
2006-10-01 Maarten Brock <sourceforge.brock AT dse.nl>
* src/pic16/glue.c (pic16emitMaps),
-unsigned long codemap[2048];
-Addr_T lnksect(register struct area *tap);
+//unsigned long codemap[2048];
+//Addr_T lnksect(register struct area *tap);
+VOID lnksect(register struct area *tap);
/*
* Resolve all area addresses.
*/
/*
* Resolve all area addresses.
*/
lnkarea()
{
register Addr_T rloc = 0;
lnkarea()
{
register Addr_T rloc = 0;
char temp[NCPS];
struct sym *sp;
char temp[NCPS];
struct sym *sp;
struct area *abs_ap = NULL;
struct area *gs0_ap = NULL;
struct area *abs_ap = NULL;
struct area *gs0_ap = NULL;
}
if (gs0_ap)
gs0_ap->a_size = gs_size;
}
if (gs0_ap)
gs0_ap->a_size = gs_size;
*/
if (ap->a_addr == 0)
ap->a_addr = rloc;
*/
if (ap->a_addr == 0)
ap->a_addr = rloc;
+// rloc = lnksect(ap);
+ lnksect(ap);
+ rloc = ap->a_addr + ap->a_size;
static
Addr_T find_empty_space(Addr_T start, Addr_T size, unsigned long *map)
{
static
Addr_T find_empty_space(Addr_T start, Addr_T size, unsigned long *map)
{
map[i] |= mask;
return start;
}
map[i] |= mask;
return start;
}
/*)Function VOID lnksect()
*
* area * tap pointer to an area structure
/*)Function VOID lnksect()
*
* area * tap pointer to an area structure
* and linked into the structures.
*/
* and linked into the structures.
*/
-Addr_T lnksect(register struct area *tap)
+VOID lnksect(register struct area *tap)
+//Addr_T lnksect(register struct area *tap)
{
register Addr_T size, addr;
register struct areax *taxp;
{
register Addr_T size, addr;
register struct areax *taxp;
else if (tap->a_flag & A_ABS)
{
/*
else if (tap->a_flag & A_ABS)
{
/*
else
{
/*
* Concatenated sections
*/
else
{
/*
* Concatenated sections
*/
if (tap->a_size) {
addr = find_empty_space(addr, tap->a_size, codemap);
}
if (tap->a_size) {
addr = find_empty_space(addr, tap->a_size, codemap);
}
//find next unused address now
if (taxp->a_size)
{
addr = find_empty_space(addr, taxp->a_size, codemap);
allocate_space(addr, taxp->a_size, tap->a_id, codemap);
}
//find next unused address now
if (taxp->a_size)
{
addr = find_empty_space(addr, taxp->a_size, codemap);
allocate_space(addr, taxp->a_size, tap->a_id, codemap);
}
taxp->a_addr = addr;
addr += taxp->a_size;
size += taxp->a_size;
taxp->a_addr = addr;
addr += taxp->a_size;
size += taxp->a_size;
"\n?ASlink-Warning-Paged Area %.8s Length Error\n", tap->a_id);
lkerr++;
}
"\n?ASlink-Warning-Paged Area %.8s Length Error\n", tap->a_id);
lkerr++;
}