Bug#720261: binutils-gold: bad linking of fuse_new when using gold linker

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug#720261: binutils-gold: bad linking of fuse_new when using gold linker

Eddy Petrișor
Package: binutils-gold
Severity: important
Version: 2.22-8
Tags: upstream

I have recently found that the gold linker incorrectly links a FUSE
application to an old (/arbitary?) API level of a function.

In order to reproduce and demonstrate this issue, in a jessie
cowbuilder environment the following steps can be  followed:

install git, pkg-config, libfuse-dev, vim-common, the in a directory
such as /tmp clone the tup source tree into two distinct directories:

root@heidi:/tmp# git clone http://github.com/eddyp/tup.git tup-bfd
Cloning into 'tup-bfd'...
remote: Counting objects: 18671, done.
remote: Compressing objects: 100% (8339/8339), done.
remote: Total 18671 (delta 10447), reused 17666 (delta 9494)
Receiving objects: 100% (18671/18671), 9.91 MiB | 599 KiB/s, done.
Resolving deltas: 100% (10447/10447), done.
root@heidi:/tmp# git clone tup-bfd tup-gold
Cloning into 'tup-gold'...
done.

(the failing commit is 81d0371 and is tagged 'binutils-gold-bug')


Then try to build with bfd linker (the build will fail, if ran in a
cowbuilder jessie chroot, it's OK).

root@heidi:/tmp# cd tup-bfd/
root@heidi:/tmp/tup-bfd# ld --version
GNU ld (GNU Binutils for Debian) 2.22
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
root@heidi:/tmp/tup-bfd# ./bootstrap.sh
  mkdir build
  cd build
...
[ tup ] [0.382s] Parsing Tupfiles...
fuse: device not found, try 'modprobe fuse' first
fuse_mount: No such file or directory
tup error: Unable to mount FUSE on .tup/mnt


The bfd linker will correctly link the elf to use the fuse_new@FUSE_2.6 version:


root@heidi:/tmp/tup-bfd# readelf -a build/tup | grep fuse_new
00000072e960  002b00000007 R_X86_64_JUMP_SLO 0000000000000000 fuse_new + 0
    43: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new@FUSE_2.6 (9)
  2984: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new@@FUSE_2.6




But with the gold linker:


root@heidi:/tmp/tup-bfd# cd ../tup-gold/
root@heidi:/tmp/tup-gold# aptitude install binutils-gold
root@heidi:/tmp/tup-gold# ld --version
GNU gold (GNU Binutils for Debian 2.22) 1.11
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
root@heidi:/tmp/tup-gold# ./bootstrap.sh
  mkdir build
  cd build
...
[ tup ] [0.385s] Parsing Tupfiles...
fuse: device not found, try 'modprobe fuse' first
fuse_mount: No such file or directory
tup error: Unable to mount FUSE on .tup/mnt


The linker does not correctly link the elf to the fuse_new@FUSE_2.6

root@heidi:/tmp/tup-gold# readelf -a build/tup | grep fuse_new
00000052fb88  005000000007 R_X86_64_JUMP_SLO 0000000000000000 fuse_new + 0
    80: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new
  3197: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new




More detail of the issue are at:
https://github.com/gittup/tup/issues/134


--
Regards,
EddyP
=============================================
The universe is not required to be in perfect harmony with human
ambition. - Carl Sagan


--
To UNSUBSCRIBE, email to [hidden email]
with a subject of "unsubscribe". Trouble? Contact [hidden email]

Reply | Threaded
Open this post in threaded view
|

Bug#720261: binutils-gold: bad linking of fuse_new when using gold linker

Matthias Klose
Control: tag -1 moreinfo

Please recheck with the version in unstable.

Am 19.08.2013 22:41, schrieb Eddy Petrișor:

> Package: binutils-gold
> Severity: important
> Version: 2.22-8
> Tags: upstream
>
> I have recently found that the gold linker incorrectly links a FUSE
> application to an old (/arbitary?) API level of a function.
>
> In order to reproduce and demonstrate this issue, in a jessie
> cowbuilder environment the following steps can be  followed:
>
> install git, pkg-config, libfuse-dev, vim-common, the in a directory
> such as /tmp clone the tup source tree into two distinct directories:
>
> root@heidi:/tmp# git clone http://github.com/eddyp/tup.git tup-bfd
> Cloning into 'tup-bfd'...
> remote: Counting objects: 18671, done.
> remote: Compressing objects: 100% (8339/8339), done.
> remote: Total 18671 (delta 10447), reused 17666 (delta 9494)
> Receiving objects: 100% (18671/18671), 9.91 MiB | 599 KiB/s, done.
> Resolving deltas: 100% (10447/10447), done.
> root@heidi:/tmp# git clone tup-bfd tup-gold
> Cloning into 'tup-gold'...
> done.
>
> (the failing commit is 81d0371 and is tagged 'binutils-gold-bug')
>
>
> Then try to build with bfd linker (the build will fail, if ran in a
> cowbuilder jessie chroot, it's OK).
>
> root@heidi:/tmp# cd tup-bfd/
> root@heidi:/tmp/tup-bfd# ld --version
> GNU ld (GNU Binutils for Debian) 2.22
> Copyright 2011 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public License version 3 or (at your option) a later version.
> This program has absolutely no warranty.
> root@heidi:/tmp/tup-bfd# ./bootstrap.sh
>   mkdir build
>   cd build
> ...
> [ tup ] [0.382s] Parsing Tupfiles...
> fuse: device not found, try 'modprobe fuse' first
> fuse_mount: No such file or directory
> tup error: Unable to mount FUSE on .tup/mnt
>
>
> The bfd linker will correctly link the elf to use the fuse_new@FUSE_2.6 version:
>
>
> root@heidi:/tmp/tup-bfd# readelf -a build/tup | grep fuse_new
> 00000072e960  002b00000007 R_X86_64_JUMP_SLO 0000000000000000 fuse_new + 0
>     43: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new@FUSE_2.6 (9)
>   2984: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new@@FUSE_2.6
>
>
>
>
> But with the gold linker:
>
>
> root@heidi:/tmp/tup-bfd# cd ../tup-gold/
> root@heidi:/tmp/tup-gold# aptitude install binutils-gold
> root@heidi:/tmp/tup-gold# ld --version
> GNU gold (GNU Binutils for Debian 2.22) 1.11
> Copyright 2011 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public License version 3 or (at your option) a later version.
> This program has absolutely no warranty.
> root@heidi:/tmp/tup-gold# ./bootstrap.sh
>   mkdir build
>   cd build
> ...
> [ tup ] [0.385s] Parsing Tupfiles...
> fuse: device not found, try 'modprobe fuse' first
> fuse_mount: No such file or directory
> tup error: Unable to mount FUSE on .tup/mnt
>
>
> The linker does not correctly link the elf to the fuse_new@FUSE_2.6
>
> root@heidi:/tmp/tup-gold# readelf -a build/tup | grep fuse_new
> 00000052fb88  005000000007 R_X86_64_JUMP_SLO 0000000000000000 fuse_new + 0
>     80: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new
>   3197: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fuse_new
>
>
>
>
> More detail of the issue are at:
> https://github.com/gittup/tup/issues/134
>
>


--
To UNSUBSCRIBE, email to [hidden email]
with a subject of "unsubscribe". Trouble? Contact [hidden email]