This example generates the following error:
.Ltmp3:
.Ltmp5:
.Ltmp13:
.word (.Ltmp5-.Ltmp3)-.Ltmp13
./llvm-mc ex.s -filetype=obj
LLVM ERROR: expected relocatable expression when using:
This example generates the following error:
.Ltmp3:
.Ltmp5:
.Ltmp13:
.word (.Ltmp5-.Ltmp3)-.Ltmp13
./llvm-mc ex.s -filetype=obj
LLVM ERROR: expected relocatable expression when using:
Umm, isn't this equivalent to the following? What do you expect LLVM to do
with it?
.Ltmp13:
.word -.Ltmp13
-Eli
This example generates the following error:
.Ltmp3:
.Ltmp5:
.Ltmp13:
.word (.Ltmp5-.Ltmp3)-.Ltmp13./llvm-mc ex.s -filetype=obj
LLVM ERROR: expected relocatable expression when using:Umm, isn't this equivalent to the following? What do you expect LLVM to
do with it?.Ltmp13:
.word -.Ltmp13
I removed the target specific assembly to produce a simple generic example. It was derived from eh_frame code the compiler was emitting.
(.Ltmp5-.Ltmp3)+.Ltmp13 does not generate the error.
Then you must have reduced it too much; your example is simply invalid
(although the compiler's error message isn't great).
-Eli
Hi Eli,
Slightly changed the example :-
.section somedata
.Ltmpa:
.word 100
.Ltmpb:
.word 60
.Ltmpc:
.word 40
.Ltmpd:
.word (.Ltmpa-.Ltmpb)-.Ltmpc
The GNU assembler properly handles the above.
$as -c x.s -o x.o
$readelf -x 4 x.o
Hex dump of section ‘somedata’:
NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x00000000 64003c00 28000000 d.<.(…
^^^^ (Calculated properly too!)
With clang/llvm-mc
$ llvm-mc -filetype=obj x.s -o x.o
LLVM ERROR: expected relocatable expression
Looks like llvm-mc is more restrictive ?
Thanks
Shankar Easwaran
Emitting the relocation in question requires *negating* the address of a
variable. I could be wrong, but I'm pretty sure there isn't any way to
represent that in ELF.
-Eli
Sorry for not setting context here. These variables are all local variables, is there a need to create a relocation ? Thanks Shankar Easwaran