[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#823682: libc0.1-dev: can't link PIE executable on kfreebsd



Package: libc0.1-dev
Version: 2.22-6
Severity: normal
User: debian-bsd@lists.debian.org
Usertags: kfreebsd

Hi,

It seems that ever since Bug #430455, dpkg-buildflags thinks kfreebsd
does not support Position-Independent Executable, so does not enable it
even if specifically requested with
DEB_BUILD_MAINT_OPTIONS=hardening=+pie

Fixing dpkg-dev's /usr/share/perl5/Dpkg/Vendor/Debian.pm to permit use
of PIC on kfreebsd, still doesn't enable it by default.

Trying to compile+link anything as PIE, actually seems to fail at the
moment:

$ cc -fPIE -Wl,-pie -o foo foo.c
/usr/bin/ld: /usr/lib/gcc/x86_64-kfreebsd-gnu/5/../../../x86_64-kfreebsd-gnu/crt1.o: relocation R_X86_64_32S against `__libc_csu_fini' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-kfreebsd-gnu/5/../../../x86_64-kfreebsd-gnu/crt1.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

The C runtime has been compiled as relocatable code, not PIC:

$ file /usr/lib/x86_64-kfreebsd-gnu/crt1.o
/usr/lib/x86_64-kfreebsd-gnu/crt1.o: ELF 64-bit LSB relocatable, x86-64, version 1 (FreeBSD), for GNU/kFreeBSD 8.3.0, not stripped

Is that the right file to link with, or should it rather use Scrt1.o or
something else?

Or does this mean PIC/PIE must be enabled somewhere in glibc first? 
It's not clear to me how that is done, or how/why this works at the
moment on linux-amd64 but not kfreebsd-amd64.

Thanks!

p.s. the kernel of FreeBSD didn't implement ASLR yet, but when it does,
we'd like to have as much as possible compiled as PIC/PIE already.

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: kfreebsd-amd64 (x86_64)

Kernel: kFreeBSD 10.1-0-amd64
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash


Reply to: