This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: some questions about ld conection?


Hi Nick:
Hi all:

thanks for your kind reply ^^
2009/11/20 Nick Clifton <nickc@redhat.com>:
> Hi miloody,
>
>> 1. How gcc know where ld is?
>
> Check out the "Directory Options" part of the gcc documentation (under the
> "Invoking GCC" section).
>
> If you add "-v" to your gcc command line you will see the path that gcc has
> found to the linker executable. ?(Actually you are more likely to see it
> executing a program called "collect2" which will then go on to invoke the
> linker).
>
>> As far as I know, gcc and binutils are 2 independent packages, so
>> there must be some setting let gcc know where the ld is, right?
>
> They are separate packages yes, and in theory they are independent but often
> there are quite close ties between them. ?For example some features of gcc
> might only be enabled if it is known that the assembler is gas or that the
> linker is the binutils linker.
>
> Plus it is common for toolchain builders to use a combined source tree that
> contains both the gcc and the binutils sources. ?(And often sources for
> other projects as well such as gdb or newlib). ?With a combined source tree
> it is possible to use a single configure command line to configure both gcc
> and binutils at the same time. ?In this way they are built with the same
> expectations about where sources will be located.
>
>> But I cannot see the connection in my configures of binutils and gcc as
>> below:
>> binutils configure:
>
>> --prefix=/root/bare_metal/x-tools/mipsel-unknown-elf
>
> This option is key - it is telling gcc (the compiler driver program) the
> root of the path it should use when trying to locate executables such as cc1
> or the linker.
>
>
>> 2. what are the difference of elf32-littlemips and elf32-tradlittlemips?
>
> I'll leave that one to a MIPS expert to answer.
I have something wired and I have no idea whether it comes with these
2 different mips link format.

1. I have 2 mips-toolchains, tool A, one support elf32-tradlittlemips
with gcc 3.4.4, and, tool B, another support elf32-littlemips with
gcc4.2.1.
2. I compile my test program with these 2 toolchain with "-c -g "
option, and i can see source codes embedded in *.o, the elf output I
build.
3. but after I use linker to link them together, I can see the source
codes embedded in the final ELF output with tool A build, but tool B
cannot.

I know the version of these toolchains is quite different, 4.2.1 vs 3.4.4.
But everything seems fine before final linking, and the parameters i
pass to ld are the same, except the output format they support.

Is there any document or steps can tell me how to generate binutils
which supports elf32-tradlittlemips such that I can do the comparison?

BTW, the reason why I want to see source code is I want to debug my
test program with ddd or cgdb such tools.
If I cannot see the source code content but I can see the function
name, can i sill use the above tools to debug.
If I can do the source level debug, is there any setting or file I
have to generate?

I attach my result and commands at the end of letter for your reference.
appreciate your help,
miloody


/* source codes not embedded in the elf*/
80000298 <main>:
80000298:	27bdffd8 	addiu	sp,sp,-40
8000029c:	afbf0024 	sw	ra,36(sp)
800002a0:	afbe0020 	sw	s8,32(sp)
800002a4:	03a0f021 	move	s8,sp
800002a8:	24020017 	li	v0,23
800002ac:	afc20018 	sw	v0,24(s8)
800002b0:	24020020 	li	v0,32
800002b4:	afc20014 	sw	v0,20(s8)
800002b8:	2402002c 	li	v0,44
800002bc:	afc20010 	sw	v0,16(s8)
800002c0:	8fc30018 	lw	v1,24(s8)
800002c4:	8fc20014 	lw	v0,20(s8)
800002c8:	00621821 	addu	v1,v1,v0
800002cc:	8fc20010 	lw	v0,16(s8)
800002d0:	00621021 	addu	v0,v1,v0
800002d4:	afc20018 	sw	v0,24(s8)
800002d8:	24040100 	li	a0,256
800002dc:	0c0000d8 	jal	80000360 <malloc>
800002e0:	00000000 	nop
800002e4:	afc2001c 	sw	v0,28(s8)
800002e8:	0c00009e 	jal	80000278 <newline>
800002ec:	00000000 	nop
800002f0:	03c0e821 	move	sp,s8
800002f4:	8fbf0024 	lw	ra,36(sp)
800002f8:	8fbe0020 	lw	s8,32(sp)
800002fc:	27bd0028 	addiu	sp,sp,40

/*source code is embedded in elf*/
int main()
//int c_entry()
{
  90:	27bdffd8 	addiu	sp,sp,-40
  94:	afbf0024 	sw	ra,36(sp)
  98:	afbe0020 	sw	s8,32(sp)
  9c:	03a0f021 	move	s8,sp
char * point;
int a,b,c;
a =23;
  a0:	24020017 	li	v0,23
  a4:	afc20018 	sw	v0,24(s8)
b = 32;
  a8:	24020020 	li	v0,32
  ac:	afc20014 	sw	v0,20(s8)
c = 44;
  b0:	2402002c 	li	v0,44
  b4:	afc20010 	sw	v0,16(s8)
a = a+b+c;
  b8:	8fc30018 	lw	v1,24(s8)
  bc:	8fc20014 	lw	v0,20(s8)
  c0:	00621821 	addu	v1,v1,v0
  c4:	8fc20010 	lw	v0,16(s8)
  c8:	00621021 	addu	v0,v1,v0
  cc:	afc20018 	sw	v0,24(s8)

/*my commands that I can see source */
mipsel-unknown-elf-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -D_ASSEMBLER_  -c
init.S
mipsel-unknown-elf-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -D_ASSEMBLER_  -c
reset.S
mipsel-unknown-elf-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -c atexit.c
mipsel-unknown-elf-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -c main.c
mipsel-unknown-elf-ld -T ./link.xn -o TestCode.elf -Map TestCode.map
--oformat elf32-littlemips  init.o reset.o atexit.o main.o -static
-nostdlib -L/media/sdb1/newlib-1.17.0/build/mipsel/lib
-L/root/bare_metal/x-tools/mipsel-unknown-elf/lib/gcc/mipsel-unknown-elf/4.2.4
 -lc -lnullmon -lgcc
rm -f TestCode.dla
rm -f TestCode.dnm

/* commands that I cannot see source
sde-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -D_ASSEMBLER_  -c
init.S
sde-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -D_ASSEMBLER_  -c
reset.S
sde-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -c atexit.c
sde-gcc  -g -G 0 -mips32r2 -fno-omit-frame-pointer
-fno-optimize-sibling-calls -I./include -I./device/display
-I./device/fatfs -I./device/misc -I./device/ntstrg -I./device/ntuart
-I./device/ntxsub -I./device/vpu
-I/media/sdb1/newlib-1.17.0/build/mipsel/include -c main.c
sde-ld -T ./link.xn -o TestCode.elf -Map TestCode.map --oformat
elf32-tradlittlemips  init.o reset.o atexit.o main.o -static -nostdlib
-L/media/sdb1/newlib-1.17.0/build/mipsel/lib
-L/root/bare_metal/x-tools/sde/lib/gcc/3.4.4/el  -lc -lnullmon -lgcc
rm -f TestCode.dla


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]