Skip to contentSkip to conversation

um: Fix compile failure due to current_text_address() definition

PATCH In review Keno Fischer 2 participants 12 messages Nov 10, 2016 – Nov 16, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 um: Fix compile failure due to current_text_address() definition

Fixes the following link error:

```
/usr/bin/ld: net/built-in.o: relocation R_X86_64_32S against `.text'
can not be used when making a shared object; recompile with -fPIC
```

This is the same definition used on some other architectures.

---
I am not sure this is the correct patch in the context of uml. I believe this should give the runtime ip, which may be different between runs. It may be better to use the offset in .text (e.g. by using pc-__text_start), which should be consistent.

 arch/x86/um/asm/processor_64.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/um/asm/processor_64.h +1 -1
index c3be852..6ca3304 100644
@@ -32,7 +32,7 @@ static inline void arch_copy_thread(struct arch_thread *from,
 }
 
 #define current_text_addr() \
-	({ void *pc; __asm__("movq $1f,%0\n1:":"=g" (pc)); pc; })
+	({ __label__ _l; _l: &&_l; })
 
 #define current_sp() ({ void *sp; __asm__("movq %%rsp, %0" : "=r" (sp) : ); sp; })
 #define current_bp() ({ unsigned long bp; __asm__("movq %%rbp, %0" : "=r" (bp) : ); bp; })
Signature · 1 line
2.9.3
#1 lore raw

Keno,

Quoted 6 lines · Keno Fischer

Fixes the following link error:

```
/usr/bin/ld: net/built-in.o: relocation R_X86_64_32S against `.text'
can not be used when making a shared object; recompile with -fPIC
```
Quoted 8 lines

This is the same definition used on some other architectures.

---
I am not sure this is the correct patch in the context of uml. I believe this should give the runtime ip, which may be different between runs. It may be better to use the offset in .text (e.g. by using pc-__text_start), which should be consistent.

The problem is ready being solved in a generic way:
http://marc.info/?l=linux-kernel&m=147828481602561&w=2

Can you please give this patch a try?

Thanks,
//richard

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#3 lore raw

Keno,

Quoted 9 lines · Keno Fischer
Quoted 4 lines

The problem is ready being solved in a generic way:
http://marc.info/?l=linux-kernel&m=147828481602561&w=2

Can you please give this patch a try?

No dice. After backing out my patch and applying that one I get:

/usr/bin/ld: error: net/built-in.o: requires unsupported dynamic reloc 11; recompile with -fPIC

But you applied the whole series, right?

Thanks,
//richard

#4 lore raw

Yes

Quoted 17 lines · Richard Weinberger

Keno,

Quoted 9 lines · Keno Fischer
Quoted 4 lines

The problem is ready being solved in a generic way:
http://marc.info/?l=linux-kernel&m=147828481602561&w=2

Can you please give this patch a try?

No dice. After backing out my patch and applying that one I get:

/usr/bin/ld: error: net/built-in.o: requires unsupported dynamic reloc 11; recompile with -fPIC

But you applied the whole series, right?

Thanks,
//richard

#5 lore raw

Keno,

Quoted 1 line · Keno Fischer

Yes

Can you please reply to Sebastian's patch series and explain him how you trigger that error?
I don't have a gcc broken by Debian on my machine right now.

Quoted 7 lines · Richard Weinberger
Quoted 6 lines

Keno,

Quoted 3 lines · Keno Fischer
Quoted 3 lines

The problem is ready being solved in a generic way:
http://marc.info/?l=linux-kernel&m=147828481602561&w=2

Quoted 8 lines
Quoted 8 lines
Quoted 6 lines
Quoted 1 line

Can you please give this patch a try?

No dice. After backing out my patch and applying that one I get:

/usr/bin/ld: error: net/built-in.o: requires unsupported dynamic reloc 11; recompile with -fPIC

But you applied the whole series, right?

Thanks,
//richard

#6 lore raw
Quoted 3 lines · Richard Weinberger

Can you please reply to Sebastian's patch series and explain him how you trigger that error?
I don't have a gcc broken by Debian on my machine right now.

I'm not sure how to reply to his patch series directly since I'm not subscribed to lkml
(I imagine I can set headers manually, such that things get appropriately threaded,
but for now let me just reply here). I don't think there's much to it. It seems like any
use of current_text_addr() in ARCH=um build will cause this problem, there's just
not very many such uses in the code base. I believe this particular problem should
be reproducible as long as CONFIG_INET is set for an ARCH=um build.

#7 lore raw
In reply to Keno Fischer

Keno,

Quoted 5 lines · Keno Fischer

Fixes the following link error:

```
/usr/bin/ld: net/built-in.o: relocation R_X86_64_32S against `.text'
can not be used when making a shared object; recompile with -fPIC
```

How and where do you trigger this?
I had a chat with Sebastian and we are not 100% sure what is going on. On my freshly installed Debian sid with gcc version 6.2.0 20161109 (Debian 6.2.0-13) UML builds fine except when I set CONFIG_STATIC_LINK=y

But then I'm facing a slightly different error:
CC init/version.o
LD init/built-in.o
/usr/bin/ld: init/built-in.o: relocation R_X86_64_PLTOFF64 against STT_GNU_IFUNC symbol `memmove' isn't supported /usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

Your patch also does not cure this. I'll investigate later into that.

Quoted 17 lines

This is the same definition used on some other architectures.

---
I am not sure this is the correct patch in the context of uml. I believe this should give the runtime ip, which may be different between runs. It may be better to use the offset in .text (e.g. by using pc-__text_start), which should be consistent.

 arch/x86/um/asm/processor_64.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/um/asm/processor_64.h +0 -0
index c3be852..6ca3304 100644

arch/x86/um/asm/processor_64.h static inline void arch_copy_thread(struct arch_thread *from, · line 38

Quoted 8 lines
arch/x86/um/asm/processor_64.h +1 -1
@@ -32,7 +32,7 @@ static inline void arch_copy_thread(struct arch_thread *from,
 }
 
 #define current_text_addr() \
-	({ void *pc; __asm__("movq $1f,%0\n1:":"=g" (pc)); pc; })
+	({ __label__ _l; _l: &&_l; })
 
 #define current_sp() ({ void *sp; __asm__("movq %%rsp, %0" : "=r" (sp) : ); sp; })
 #define current_bp() ({ unsigned long bp; __asm__("movq %%rbp, %0" : "=r" (bp) : ); bp; })

Thanks,
//richard

#8 lore raw

Did you have CONFIG_INET set? I'm attaching my full .config. This is on vanilla Ubuntu 16.10.
I did see the same error when building with CONFIG_STATIC_LINK=y. Note that I also, separately, ran into a linker problem, though I believe it is unrelated to this patch
(though perhaps is related to the problem you're seeing?):
https://sourceware.org/bugzilla/show_bug.cgi?id=20800.

I'd also be happy to provide you with ssh access to the machine that I'm seeing this on if that
would be helpful.

#9 lore raw
Quoted 2 lines · Keno Fischer

Did you have CONFIG_INET set? I'm attaching my full .config. This is on vanilla Ubuntu 16.10.

Yes, CONFIG_INET is set. Let my try on Ubuntu. ;-\

Quoted 5 lines

I did see the same error when building with CONFIG_STATIC_LINK=y. Note that I also, separately, ran into a linker problem, though I believe it is unrelated to this patch
(though perhaps is related to the problem you're seeing?):
https://sourceware.org/bugzilla/show_bug.cgi?id=20800.

This seems to be an UML<->glibc issue.
memmove() is now an ifunc and for whatever reason it does not work with UML.

Quoted 3 lines

I'd also be happy to provide you with ssh access to the machine that I'm seeing this on if that
would be helpful.

Okay, let me try myself first. I think I'm able to install Ubuntu. :)

Thanks,
//richard

#10 lore raw

Just as an FYI, the linker bug has been fixed in binutils.

Quoted 23 lines · Richard Weinberger
Quoted 2 lines · Keno Fischer

Did you have CONFIG_INET set? I'm attaching my full .config. This is on vanilla Ubuntu 16.10.

Yes, CONFIG_INET is set. Let my try on Ubuntu. ;-\

Quoted 5 lines

I did see the same error when building with CONFIG_STATIC_LINK=y. Note that I also, separately, ran into a linker problem, though I believe it is unrelated to this patch
(though perhaps is related to the problem you're seeing?):
https://sourceware.org/bugzilla/show_bug.cgi?id=20800.

This seems to be an UML<->glibc issue.
memmove() is now an ifunc and for whatever reason it does not work with UML.

Quoted 3 lines

I'd also be happy to provide you with ssh access to the machine that I'm seeing this on if that
would be helpful.

Okay, let me try myself first. I think I'm able to install Ubuntu. :)

Thanks,
//richard

#11 lore raw

Keno,

Quoted 1 line · Keno Fischer

Just as an FYI, the linker bug has been fixed in binutils.

Interesting. Is the same bug also the root cause why a static build of UML does not work?

Thanks,
//richard

------------------------------------------------------------------------------
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel