Comment 20 for bug 270822

Revision history for this message
Shriramana Sharma (jamadagni) wrote :

Hello. For my purposes of working with Parted Magic, I am backporting syslinux 3.85 from Debian unstable to Kubuntu Koala. In the process, I get the error:

nasm -O9999 -f elf -g -F stabs -DDATE_STR="'debian-20100329'" \
                -DHEXDATE="0x4bb0227c" \
                -l ldlinux.lsr -o ldlinux.o ldlinux.asm
ld -m elf_i386 -Wl,-Bsymbolic-functions -T syslinux.ld -M -o ldlinux.elf ldlinux.o > ldlinux.map
ld: unrecognized option '-Wl,-Bsymbolic-functions'
ld: use the --help option for usage information
make[3]: *** [ldlinux.elf] Error 1
make[3]: Leaving directory `/home/samjnaa/sr/_backport/syslinux-3.85+dfsg/core'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/samjnaa/sr/_backport/syslinux-3.85+dfsg'
make[1]: *** [override_dh_auto_build] Error 2
make[1]: Leaving directory `/home/samjnaa/sr/_backport/syslinux-3.85+dfsg'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
$

I found that the offending line was syslinux-3.85+dfsg/core/Makefile line 81:

 $(LD) $(LDFLAGS) -T syslinux.ld -M -o $@ $< > $(@:.elf=.map)

where for some reason LDFLAGS holds -Wl,-Bsymbolic-functions. However, doing rgrep on the build tree for -Wl,-Bsymbolic-functions or even -Bsymbolic turns out nothing. I even tried resetting the environment variable LDFLAGS to "" before beginning the build process but no use. So at what point in the build process does LDFLAGS get set to -Wl,-Bsymbolic-functions?

Obviously -Wl is only for passing ld arguments *via* gcc and not directly. Obviously the programmer who wrote the Makefile is expecting the flag to hold only -Bsymbolic-functions (and apparently this build works correctly on Debian sid else the package would not have been successfully uploaded). Anyway, I changed the line to hold the flag verbally:

 $(LD) -Bsymbolic-functions -T syslinux.ld -M -o $@ $< > $(@:.elf=.map)

since I did not want to tinker with the environment variable which may be needed who knows where elsewhere in the build process, and this worked correctly. Maybe this should be incorporated and the latest version of syslinux be made available for Ubuntu. The following "patch" may fix it:

--- core/Makefile 2010-03-29 09:26:31.000000000 +0530
+++ core/Makefile 2010-03-29 09:26:12.000000000 +0530
@@ -80,3 +80,3 @@
 %.elf: %.o syslinux.ld
- $(LD) $(LDFLAGS) -T syslinux.ld -M -o $@ $< > $(@:.elf=.map)
+ $(LD) -Bsymbolic-functions -T syslinux.ld -M -o $@ $< > $(@:.elf=.map)
        $(OBJDUMP) -h $@ > $(@:.elf=.sec)

Anyway, if there were a way to vote, I would vote for the latest syslinux from Debian sid to be included in Ubuntu.