0
votes

I have a very simple program (simple.c):

#include <stdio.h>
int main(){
  int a = 4;
  return 0;
 }

I am trying to use a the following linker script (MEMORY):

MEMORY
{
m_text : ORIGIN = 0x0000000000400000, LENGTH = 0x0001FBF0
m_data : ORIGIN = 0x0000000000600000, LENGTH = 0x00004000
}

SECTIONS
 {
  .text :
  {
    *(.text)   /* Program Code */
 } > m_text

  .data : { *(.data) } > m_data
  .bss : { *(.bss) } > m_data
  }

I am using following commands to compile and link:

gcc -c simple.c

ld -T MEMORY -o simple -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o simple.o

I am getting the following ERROR:

ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
.
.
. 
ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
/usr/lib/x86_64-linux-gnu/crt1.o: In function `_start':  
(.text+0x19): undefined reference to `__libc_csu_init'
/usr/lib/x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x25): undefined reference to `__libc_start_main'
simple.o: In function `main':
simple.c:(.text+0xa): undefined reference to `puts'

If I try to use :

ld -T MEMORY4 -o simple -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o simple.o -lc

It gives the ERROR

ld: cannot find -lc

Any suggestions? All I want to do is place my simple.c into some different memory region then default.

1
Run "gcc -Wl,-verbnose" for more informationSasi V

1 Answers

0
votes

There are a couple of problems, but the main one is with your linker script doesn't have a .debug_info or .debug_line section.