Message ID | 1408618663-2281-7-git-send-email-siddhesh@redhat.com |
---|---|
State | New |
Headers | show |
interp.c is in fact in libc. I don't see why libof-interp should be set at all. You also don't explain why libof-sotruss-lib matters, though that at least is correct in the abstract.
On Fri, Aug 22, 2014 at 11:28:24AM -0700, Roland McGrath wrote: > interp.c is in fact in libc. I don't see why libof-interp should be set at > all. I remember the build breaking when I made it libc. I'll check again, but I remember concluding that it couldn't be libc. > You also don't explain why libof-sotruss-lib matters, though that at least > is correct in the abstract. It doesn't actually matter per-say, but I've added it with the assumption that it might be needed in future. Siddhesh
On Sat, Aug 23, 2014 at 12:24:45AM +0530, Siddhesh Poyarekar wrote: > On Fri, Aug 22, 2014 at 11:28:24AM -0700, Roland McGrath wrote: > > interp.c is in fact in libc. I don't see why libof-interp should be set at > > all. > > I remember the build breaking when I made it libc. I'll check again, > but I remember concluding that it couldn't be libc. I just checked again. The compilation always includes libc-symbols.h, which adds symbol hacks for memcpy, memset and memmove, that become internal references when IS_IN(libc). Siddhesh
> On Sat, Aug 23, 2014 at 12:24:45AM +0530, Siddhesh Poyarekar wrote: > > On Fri, Aug 22, 2014 at 11:28:24AM -0700, Roland McGrath wrote: > > > interp.c is in fact in libc. I don't see why libof-interp should be set at > > > all. > > > > I remember the build breaking when I made it libc. I'll check again, > > but I remember concluding that it couldn't be libc. > > I just checked again. The compilation always includes libc-symbols.h, > which adds symbol hacks for memcpy, memset and memmove, that become > internal references when IS_IN(libc). I can't tell if you're saying this is an actual problem. I don't see why symbol-hacks.h would be a problem for interp.c.
On 6 September 2014 00:24, Roland McGrath <roland@hack.frob.com> wrote: > I can't tell if you're saying this is an actual problem. I don't see why > symbol-hacks.h would be a problem for interp.c. It is an actual problem. If interp.c is built with IS_IN(libc) (or without NOT_IN_libc in the older scheme), symbol-hacks.h injects this code: asm ("memmove = __GI_memmove"); asm ("memset = __GI_memset"); asm ("memcpy = __GI_memcpy"); This results in interp.os having undefined references to the __GI_mem* functions above: 0000000000000000 *UND* 0000000000000000 __GI_memmove 0000000000000000 *UND* 0000000000000000 __GI_memset 0000000000000000 *UND* 0000000000000000 __GI_memcpy Those symbols are not exported outside libc.so, thus resulting in a linker error in every DSO we build, except libc.so. Maybe the assembler should not be adding these references to the symbol table since they're only useful if memset, memmove or memcpy are called, but either way we'll need to work around it in libc. Siddhesh
> Those symbols are not exported outside libc.so, thus resulting in a > linker error in every DSO we build, except libc.so. Oh, I see. I'd forgotten we were using interp.c for any other libraries. I think nowadays we actually should not be, because none of the others has an entry point set that actually works (alas, dlfcn/eval.c is long defunct). So let's just fix that first.
diff --git a/elf/Makefile b/elf/Makefile index c25bec0..d93898f 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -96,6 +96,7 @@ extra-objs += sotruss-lib.os sotruss-lib.so install-others += $(inst_auditdir)/sotruss-lib.so install-bin-script += sotruss generated += sotruss +libof-sotruss-lib = extramodules CPPFLAGS-sotruss-lib = -DNOT_IN_libc $(objpfx)sotruss-lib.so: $(objpfx)sotruss-lib.os $(build-module-asneeded) @@ -354,6 +355,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map) mv -f $@.new $@ # interp.c exists just to get this string into the libraries. +libof-interp = extramodules CFLAGS-interp.c = -D'RUNTIME_LINKER="$(rtlddir)/$(rtld-installed-name)"' \ -DNOT_IN_libc=1 $(objpfx)interp.os: $(common-objpfx)config.make