Linking the Linker script file to source code

5

I am new to GNU compiler.

I have a C source code file which contains some structures and variables in which I need to place certain variables at a particular locations.

So, I have written a linker script file and used the __ attribute__("SECTION") at variable declaration, in C source code.

I am using a GNU compiler (cygwin) to compile the source code and creating a .hex file using -objcopy option, but I am not getting how to link my linker script file at compilation to relocate the variables accordingly.

I am attaching the linker script file and the C source file for the reference.

Please help me link the linker script file to my source code, while creating the .hex file using GNU.

/*linker script file*/
/*defining memory regions*/

      MEMORY
      {
         base_table_ram     : org = 0x00700000, len = 0x00000100  /*base table area for BASE table*/ 
         mem2               : org =0x00800200,  len = 0x00000300 /* other structure variables*/
      }
/*Sections directive definitions*/ 

      SECTIONS
      {
        BASE_TABLE    : { }  > base_table_ram

        GROUP                  :
           {
                   .text        : { } { *(SEG_HEADER)  }
                   .data        : { } { *(SEG_HEADER)  }
                   .bss         : { } { *(SEG_HEADER)  }

           } > mem2

      }

C source code:

const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE")))  = 0x1A; 
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE")))  = 0x2A; 
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE")))  = 0x3A; 
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE")))  = 0x4A; 
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE")))  = 0x5A;     
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER")))  = 0x6A; 

My intention is to place the variables of section "BASE_TABLE" at the address defined i the linker script file and the remaining variables at the "SEG_HEADER" defined in the linker script file above.

But after compilation when I look in to the .hex file the different section variables are located in different hex records, located at an address of 0x00, not the one given in linker script file .

Please help me in linking the linker script file to source code.

Are there any command line options to link the linker script file, if any plese provide me with the info how to use the options.

Thanks in advance,

SureshDN.

c
embedded
gnu
asked on Stack Overflow Mar 29, 2010 by Suresh • edited Mar 29, 2010 by Michael Burr

3 Answers

2

Try gcc -Xlinker -T (linker script name) (c sources files)

answered on Stack Overflow Mar 30, 2010 by Joe D
2

I first compile all my c files to object files and then link them with:

gcc -Xlinker -T"xxx.lds" (all object files)

From The gcc docs:

`-Xlinker OPTION'
    Pass OPTION as an option to the linker.  You can use this to
    supply system-specific linker options which GNU CC does not know
    how to recognize.
answered on Stack Overflow Mar 30, 2010 by Gerhard
2

Thanks for the response ,

I have found one more linker option in GCC ,"ld" and teh option -T to link the sections to the source code.

ld -T (linker scriptname) -o (final objfile) (objectfile of source file)

Thanks Suresh

answered on Stack Overflow May 11, 2010 by Suresh • edited Feb 25, 2014 by stardust

User contributions licensed under CC BY-SA 3.0