Hi Guillem,

> I think this is a problem at least in supermin itself. The new dpkg
> options enable PIE by default everywhere, but supermin build system is
> using file(1) to determine whether the resulting init object has been
> statically linked or not. PIE makes binaries look like shared
> libraries so I'm assuming file(1) on several of those architecture
> might be confused here?

There might be an issue with file(1) as well, but the "init" binary that
was produced on PowerPC cannot even be executed:

,----
| (sid_powerpc-dchroot)bengen@partch:~/supermin-5.1.17$ ./init/init
| -bash: ./init/init: No such file or directory
`----

This probably happens because the linker specified the wrong dynamic
linker, where there should be no dynamic linker at all. As per readelf
-l init/init:

,----
| (sid_powerpc-dchroot)bengen@partch:~/supermin-5.1.17$ readelf -l init/init
| [...]
|   INTERP         0x000154 0x00000154 0x00000154 0x00011 0x00011 R   0x1
|         [Requesting program interpreter: /usr/lib/ld.so.1]
| [...]        
`----

Building the without -specs=/usr/share/dpkg/pie-link.specs produces a
proper static binary that is recognized as such by file(1), without an
INTERP directive.

The same problem (non-static binary with wrong INTERP entry)), same fix
(stripping out pie-link.specs) also applies on ppc64 and sparc64.

There must be something wrong with the way that gcc calls ld or with ld
itself on those architectures.

Cheers,
-Hilko

Reply via email to