Issue Details (XML | Word | Printable)

Key: PCC-341
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Anders Magnusson
Reporter: Iain Hibbert
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
pcc

-g causes "relocation truncated to fit: R_X86_64_32 against `.text'"

Created: 01/May/11 06:37 PM   Updated: 03/May/11 10:07 PM
Component/s: amd64 target
Affects Version/s: None
Fix Version/s: None

Environment: NetBSD/amd64


 Description  « Hide
I found a problem linking code compiled with -g flag on amd64. The example code is
just a structure definition (which might be irrelevant anyway?)

struct foo {
        int a;
        short b;
};

when compiled with the following command

  pcc -g -c d.c

then trying to link with the following command (as per building a kernel with text section in high 2Gb of RAM, I think)

  /usr/tools/bin/x86_64--netbsd-ld -Ttext 0xffffffff80100000 -o d d.o

will fail with messages about truncated relocations

d.o:(.stab+0x14): relocation truncated to fit: R_X86_64_32 against `.text'
d.o:(.stab+0xc8): relocation truncated to fit: R_X86_64_32 against `.text'
d.o:(.stab+0xd4): relocation truncated to fit: R_X86_64_32 against `.text'
d.o:(.stab+0xe0): relocation truncated to fit: R_X86_64_32 against `.text'

this works with gcc and I'm not sure what the problem is.. looking at the generated assembler output

.stabs "/tmp/ctm.10018a",100,0,0,.LL10
.LL10:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "short:t3=r1;-32768;32767;",128,0,0,0
.stabs "long:t4=r1;-9223372036854775808;9223372036854775807;",128,0,0,0
.stabs "long long:t5=r1;-9223372036854775808;9223372036854775807;",128,0,0,0
.stabs "unsigned char:t6=r1;0;255;",128,0,0,0
.stabs "unsigned short:t7=r1;0;65535;",128,0,0,0
.stabs "unsigned int:t8=r1;0;4294967295;",128,0,0,0
.stabs "unsigned long:t9=r1;0;-1;",128,0,0,0
.stabs "unsigned long long:t10=r1;0;-1;",128,0,0,0
.stabs "float:t11=r1;4;0;",128,0,0,0
.stabs "double:t12=r1;8;0;",128,0,0,0
.stabs "long double:t13=r1;12;0;",128,0,0,0
.stabs "void:t14=r14",128,0,0,0
.stabs "debugsyms.c",132,0,0,.LL11
.LL11:
.stabs "debugsyms.c",132,0,0,.LL12
.LL12:
.stabs "",100,0,0,.LL13
.LL13:
.ident "PCC: pcc 1.1.0.DEVEL (netbsd)"
.end

I believe it could be that the .LL?? symbols are stored in the .text section but maybe should
be elsewhere, or represented differently..

for what its worth, gcc produces different assembler but uses a .quad to store reference to
labels from the .text section, and a .long to reference labels in a 'debug_info,"",@progbits'
section

 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Anders Magnusson made changes - 03/May/11 01:25 PM
Field Original Value New Value
Assignee Anders Magnusson [ ragge ]
Anders Magnusson made changes - 03/May/11 10:07 PM
Status Open [ 1 ] Closed [ 6 ]
Resolution Fixed [ 1 ]