EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

Just HOW does the gputils linker allocate the program memory?

Started by Johann Klammer October 19, 2018
Hello,

I have been writing a larger project 
and seeing huge gaps in the map file(0x374-0xe00).

I've put all the regular code in PGM CODE sections
But some things needed specific addresses...

in main.asm I have:
...
DEVID CODE (with a matching section in the linker file)
..
vectors CODE 0x00
..
PROG0 CODE
...

in cmd.asm I have:
PROG0 CODE
...

in trig.asm I have:
PGM CODE
...
INITC0 CODE 0xE00
...

..and some other files with PGM CODE
the individual programmes are called like this:
gpasm -c -p p16f1713 main.asm -o main.o
gplink -m  -s ./16f1713_g.lkr stack.o sreg.o common.o trig.o main.o parse.o cmd.o uart.o -o main.hex

the linker script is:
// File: 16f1713_g.lkr
// Modified linker script for the PIC16F1713 processor

LIBPATH .

CODEPAGE   NAME=page0      START=0x0               END=0x7FF                    
CODEPAGE   NAME=page1      START=0x800             END=0xFFF                    
CODEPAGE   NAME=.idlocs    START=0x8000            END=0x8003         PROTECTED 
CODEPAGE   NAME=.devid     START=0x8006            END=0x8006         PROTECTED 
CODEPAGE   NAME=.config    START=0x8007            END=0x8008         PROTECTED 

LINEARMEM  NAME=linear0    START=0x2000            END=0x21EF         PROTECTED

DATABANK   NAME=sfr0       START=0x0               END=0x1F           PROTECTED
DATABANK   NAME=sfr1       START=0x80              END=0x9F           PROTECTED
DATABANK   NAME=sfr2       START=0x100             END=0x11F          PROTECTED
DATABANK   NAME=sfr3       START=0x180             END=0x19F          PROTECTED
DATABANK   NAME=sfr4       START=0x200             END=0x21F          PROTECTED
DATABANK   NAME=sfr5       START=0x280             END=0x29F          PROTECTED
DATABANK   NAME=sfr6       START=0x300             END=0x31F          PROTECTED
DATABANK   NAME=sfr7       START=0x380             END=0x39F          PROTECTED
DATABANK   NAME=sfr8       START=0x400             END=0x41F          PROTECTED
DATABANK   NAME=sfr9       START=0x480             END=0x49F          PROTECTED
DATABANK   NAME=sfr10      START=0x500             END=0x51F          PROTECTED
DATABANK   NAME=sfr11      START=0x580             END=0x59F          PROTECTED
DATABANK   NAME=sfr12      START=0x600             END=0x61F          PROTECTED
DATABANK   NAME=sfr13      START=0x680             END=0x69F          PROTECTED
DATABANK   NAME=sfr14      START=0x700             END=0x71F          PROTECTED
DATABANK   NAME=sfr15      START=0x780             END=0x79F          PROTECTED
DATABANK   NAME=sfr16      START=0x800             END=0x81F          PROTECTED
DATABANK   NAME=sfr17      START=0x880             END=0x89F          PROTECTED
DATABANK   NAME=sfr18      START=0x900             END=0x91F          PROTECTED
DATABANK   NAME=sfr19      START=0x980             END=0x99F          PROTECTED
DATABANK   NAME=sfr20      START=0xA00             END=0xA1F          PROTECTED
DATABANK   NAME=sfr21      START=0xA80             END=0xA9F          PROTECTED
DATABANK   NAME=sfr22      START=0xB00             END=0xB1F          PROTECTED
DATABANK   NAME=sfr23      START=0xB80             END=0xB9F          PROTECTED
DATABANK   NAME=sfr24      START=0xC00             END=0xC1F          PROTECTED
DATABANK   NAME=sfr25      START=0xC80             END=0xC9F          PROTECTED
DATABANK   NAME=sfr26      START=0xD00             END=0xD1F          PROTECTED
DATABANK   NAME=sfr27      START=0xD80             END=0xD9F          PROTECTED
DATABANK   NAME=sfr28      START=0xE00             END=0xE6F          PROTECTED
DATABANK   NAME=sfr29      START=0xE80             END=0xEEF          PROTECTED
DATABANK   NAME=sfr30      START=0xF00             END=0xF6F          PROTECTED
DATABANK   NAME=sfr31      START=0xF80             END=0xFEF          PROTECTED

DATABANK   NAME=gpr0       START=0x20              END=0x6F           SHADOW=linear0:0x2000
DATABANK   NAME=gpr1       START=0xA0              END=0xEF           SHADOW=linear0:0x2050
DATABANK   NAME=gpr2       START=0x120             END=0x16F          SHADOW=linear0:0x20A0
DATABANK   NAME=gpr3       START=0x1A0             END=0x1EF          SHADOW=linear0:0x20F0
DATABANK   NAME=gpr4       START=0x220             END=0x26F          SHADOW=linear0:0x2140
DATABANK   NAME=gpr5       START=0x2A0             END=0x2EF          SHADOW=linear0:0x2190
DATABANK   NAME=gpr6       START=0x320             END=0x32F          SHADOW=linear0:0x21E0

SHAREBANK  NAME=gprnobank  START=0x70            END=0x7F           
SHAREBANK  NAME=gprnobank  START=0xF0            END=0xFF           PROTECTED
SHAREBANK  NAME=gprnobank  START=0x170           END=0x17F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x1F0           END=0x1FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x270           END=0x27F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x2F0           END=0x2FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x370           END=0x37F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x3F0           END=0x3FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x470           END=0x47F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x4F0           END=0x4FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x570           END=0x57F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x5F0           END=0x5FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x670           END=0x67F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x6F0           END=0x6FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x770           END=0x77F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x7F0           END=0x7FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x870           END=0x87F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x8F0           END=0x8FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x970           END=0x97F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0x9F0           END=0x9FF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xA70           END=0xA7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xAF0           END=0xAFF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xB70           END=0xB7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xBF0           END=0xBFF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xC70           END=0xC7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xCF0           END=0xCFF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xD70           END=0xD7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xDF0           END=0xDFF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xE70           END=0xE7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xEF0           END=0xEFF          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xF70           END=0xF7F          PROTECTED
SHAREBANK  NAME=gprnobank  START=0xFF0           END=0xFFF          PROTECTED

SECTION    NAME=PROG0      ROM=page0           // ROM code space - page0
SECTION    NAME=PROG1      ROM=page1           // ROM code space - page1
SECTION    NAME=IDLOCS     ROM=.idlocs         // ID locations
SECTION    NAME=DEVID      ROM=.devid          // Device ID
SECTION    NAME=LINEAR0    RAM=linear0         // Linear Memory
SECTION    NAME=GPR0       RAM=gpr0


the map file after the link is:

Map File - Created 10/20/2018  03:37:53 AM

                                 Section Info
                  Section       Type    Address   Location Size(Bytes)
                ---------  ---------  ---------  ---------  ---------
      .config_8007_MAIN.O    romdata   0x008007    program   0x000002
      .config_8008_MAIN.O    romdata   0x008008    program   0x000002
                  vectors       code   0x000000    program   0x000010
                    PROG0       code   0x000008    program   0x00036c
                   INITC0       code   0x000e00    program   0x000050
                      PGM       code   0x000e28    program   0x00028c
                    DEVID       code   0x008006    program   0x000002
                     GPR0      udata   0x000000       data   0x000003
               Common_RAM      udata   0x000070       data   0x000010
                  LINEAR0      udata   0x002100       data   0x0000f0

Am I doing something wrong?
Is this a known issue. Is this intentional?

Version:
I'm using the current SVN snapshot: gplink-1.5.2 #1316 (Oct 20 2018)

On 10/20/2018 04:01 AM, Johann Klammer wrote:
> Is this a known issue. Is this intentional? >
Not a bug.. It's intentional. (looking for the best fit/smallest gaps)..

The 2024 Embedded Online Conference