Project

General

Profile

Bug #2789

[prboom-plus] illegal instruction

daniel_j - about 2 months ago - . Updated about 2 months ago.

Status:
confirmed
Priority:
bug
Assignee:
-
% Done:

0%


Description

(with or without specifying wad file)

$ prboom-plus
Illegal instruction (core dumped)

History

#1

Updated by bill-auger about 2 months ago

it works fine for me on x86_64 - are you on another arch? - is
you system up-to-date ?

#2

Updated by daniel_j about 2 months ago

I'm also x86_64 with an up to date system.

if it's at all relevant it's an x200 running libreboot

#3

Updated by bill-auger about 2 months ago

are you running wayland or X ? - or maybe it is a graphics driver
issue - or i dunno - could be many things

'illegal instruction' often means that the binary was compiled
for a different arch; but again the x86_64 package works for me

you could try looking at the backtrace; but it looks like there
is no debug package for this, so it may not be very informational

do other SDL programs work for you? - try 'freedroidrpg' and 'fillets-ng' for examples

#4

Updated by daniel_j about 2 months ago

they both run fine for me

X11, i will build it myself and see what i discover along the way

#5

Updated by daniel_j about 2 months ago

the package is failing to build for me so I can't do much about figuring it out, at least with my knowledge level. it seems as seen here it fails to build with gcc-10 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=957705

#6

Updated by bill-auger about 2 months ago

try building the parabola package with makepkg - add options=(debug) to get a debug package - maybe the backtrace will be helpful

https://git.parabola.nu/abslibre.git/tree/pcr/prboom-plus

if GCC 10 is still a problem, you can try adding 'gcc8' to the makedepends=() array

#7

Updated by daniel_j about 2 months ago

built with gcc-8 and it runs and plays fine, no idea why that'd be

#8

Updated by GNUtoo about 2 months ago

  • Status changed from unconfirmed to confirmed

I managed to reproduce on a Thinkpad T400 running Coreboot (without nonfree microcode) and x86_64 Parabola.

Sadly issues like that seem to get more common.

That can happens for instance if the build systems detect the extended instruction set of the CPU (MMX, SSE3, AVM), or if it's configured to do that by the PKGBUILD.

I've been fighting issues like that in the asterisk package and its dependencies.

So here the way to debug is to use gdb on the original package and find the instruction that causes the illegal instruction, and find where it comes from too. It can come from a library that the package depends on too.

The the next step would be to understand from which instruction set it comes from (sse4, etc) and then find how that got enabled in the build.

Packages are supposed to run on every x86_64 CPU, so either the instruction set have to be detected at runtime, through libraries or special gcc support, or such optimizations have to be disabled in the PKGBUILD of the affected package(s) (which can also be dependencies) or in that package package(s)'s build system (autotools, etc).

Once it's fixed, the way to go is to retry to run the program, in case there are still other illegal instructions coming from other places (other libraries, etc)

#9

Updated by GNUtoo about 2 months ago

I seem to have a different illegal instruction on i686 (Core 2 duo P8400):

$ prboom-plus
M_LoadDefaults: Load system defaults.
 default file: /home/gnutoo/.prboom-plus/prboom-plus.cfg
 found /usr/share/games/doom/prboom-plus.wad

PrBoom-Plus v2.5.1.4 (http://prboom-plus.sourceforge.net/)
I_SetAffinityMask: manual affinity mask is 1
 found /usr/share/games/doom/freedoom2.wad
IWAD found: /usr/share/games/doom/freedoom2.wad
PrBoom-Plus (built Oct 28 2019 14:30:57), playing: DOOM 2: Hell on Earth
PrBoom-Plus is released under the GNU General Public license v2.0.
You are welcome to redistribute it under certain conditions.
It comes with ABSOLUTELY NO WARRANTY. See the file COPYING for details.
I_SignalHandler: Exiting on signal: Illegal instruction

Here it fails later.

Let's look at it with gdb.

First I load prboom-plus in gdb:

$ gdb prboom-plus
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from prboom-plus...
(No debugging symbols found in prboom-plus)

I don't need debugging symbols here, since I only need to debug in assembly and not in C / C++.

Then I run the program and wait for it to crash:

(gdb) run
Starting program: /usr/bin/prboom-plus 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
M_LoadDefaults: Load system defaults.
 default file: /home/gnutoo/.prboom-plus/prboom-plus.cfg
 found /usr/share/games/doom/prboom-plus.wad

PrBoom-Plus v2.5.1.4 (http://prboom-plus.sourceforge.net/)
I_SetAffinityMask: manual affinity mask is 1
 found /usr/share/games/doom/freedoom2.wad
IWAD found: /usr/share/games/doom/freedoom2.wad
PrBoom-Plus (built Oct 28 2019 14:30:57), playing: DOOM 2: Hell on Earth
PrBoom-Plus is released under the GNU General Public license v2.0.
You are welcome to redistribute it under certain conditions.
It comes with ABSOLUTELY NO WARRANTY. See the file COPYING for details.

Program received signal SIGILL, Illegal instruction.
0x56578f4a in ?? ()

Here it crashed.

I then enable printing the instructions:

(gdb) display/i $pc
1: x/i $pc
=> 0x56578f4a:    vmovq  0x714(%edx),%xmm0

And I see some 'vmovq' instruction. Given the format it already looks like some SMID instruction.

The issue is that since we don't have the debug symbols on i686 (I don't know why it's the case), I don't know where the error comes from:

(gdb) bt
#0  0x56578f4a in  ()
#1  0x566072f3 in  ()
#2  0x5656bf88 in  ()
#3  0x5656c1d2 in  ()
#4  0x56591bf3 in  ()
#5  0x565642b5 in main ()
(gdb) 

Then I've to look what CPU do and don't support the 'vmovq' instruction.

One way to do it is to use a search engine. Personally I prefer using the reference manuals from Intel instead.

I use the 325462-sdm-vol-1-2abcd-3abcd.pdf which is the "Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4" for that.

Here in the description of the "MOVD/MOVQ—Move Doubleword/Move Quadword" instruction in the "INSTRUCTION SET REFERENCE", I see a table that looks like that:

Opcode/ Instruction [...] CPUID feature flag [...]
[...] [...] [...] [...]
VMOVQ xmm1, r64/m64 [...] AVX [...]

So now we need to understand why it enables AVX during the compilation, if you compile with a CPU that has AVX.

#10

Updated by GNUtoo about 2 months ago

Here's the next step: we look at prboom-plus PKGBUILD:

build() {
  cd "prboom-plus-$pkgver" 

  ./configure --prefix=/usr --without-dumb
  make
}

Here I don't see any --enable-avx or things like that.

So I do makepkg -o and look into the source

$ cd src/prboom-plus-2.5.1.4
$ ./configure --help
`configure' configures PrBoom-Plus 2.5.1.4 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/prboom-plus]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  --target=TARGET   configure for building compilers for TARGET [HOST]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-silent-rules   less verbose build output (undo: "make V=1")
  --disable-silent-rules  verbose build output (undo: "make V=0")
  --disable-maintainer-mode
                          disable make rules and dependencies not useful (and
                          sometimes confusing) to the casual installer
  --enable-dependency-tracking
                          do not reject slow dependency extractors
  --disable-dependency-tracking
                          speeds up one-time build
  --enable-debug          turns on various debugging features, like range
                          checking and internal heap diagnostics
  --enable-profile        turns on profiling
  --disable-cpu-opt       turns off cpu specific optimisations
  --disable-gl            disable OpenGL rendering code
  --disable-sdltest       Do not try to compile and run a test SDL program
  --disable-nonfree-graphics
                          build prboom.wad without non-free menu text lumps
  --disable-dogs          disables support for helper dogs
  --enable-heapcheck      turns on continuous heap checking (very slow)
  --enable-heapdump       turns on dumping the heap state for debugging

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-waddir           Path to install prboom.wad and look for other WAD
                          files
  --with-dmalloc          use dmalloc, as in http://www.dmalloc.com
  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)
  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)
  --without-mixer         Do not use SDL_mixer even if available
  --without-net           Do not use SDL_net even if available
  --without-pcre          Do not compile with libpcre
  --without-mad           Do not use MAD mp3 library even when available
  --without-fluidsynth    Do not use fluidsynth library even when available
  --without-dumb          Do not use dumb tracker library even when available
  --without-vorbisfile    Do not use vorbisfile library even when available
  --without-portmidi      Do not use portmidi library even when available
  --without-image         Do not use SDL_image even if available
  --without-png           Do not use libpng even if available

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.


And looking at it I already see suspicious things:
  --disable-cpu-opt       turns off cpu specific optimisations

So the next step is to look into that. Note that we still don't know which software is affected because we don't have debug symbols on i686 here, so the illegal instruction could also come from a library.

$ grep cpu-opt -r *
autotools/ac_cpu_optimisations.m4:AC_ARG_ENABLE(cpu-opt,AC_HELP_STRING([--disable-cpu-opt],[turns off cpu specific optimisations]),[
[...]

So here the ./configure script is generated by the autotools build system, configure.ac, and m4 files are used to generate ./configure

So here we see in that m4:

AC_ARG_ENABLE(cpu-opt,AC_HELP_STRING([--disable-cpu-opt],[turns off cpu specific optimisations]),[
],[
AC_MSG_CHECKING(whether compiler supports -march=native)
OLD_CFLAGS="$CFLAGS" 

So that's already enough to cause illegal instructions. -mach=native shall not be used to build Parabola packages as it will enable the all the optimizations it can use (like AVX) for the CPU that is on the machine that builds the package. However the machine that runs the package doesn't necessarily have AVX.

So here:
  • we need to run configure with --disable-cpu-opt
  • We need to send the patch upstream in AUR and see if they are willing to accept it. If not we need to document why we use --disable-cpu-opt and document as well that upstream doesn't want to use --disable-cpu-opt.
#11

Updated by bill-auger about 2 months ago

On Sat, 13 Jun 2020 14:24:17 +0000 GNUtoo wrote:

The issue is that since we don't have the debug symbols on
i686 (I don't know why it's the case),

there is no debug packages for any of the arches - im not sure
why that is - the PKGBUILD does not disable it

https://git.parabola.nu/abslibre.git/tree/pcr/prboom-plus/PKGBUILD

On Sat, 13 Jun 2020 14:24:17 +0000 GNUtoo wrote:

  • We need to send the patch upstream in AUR and see if they
    are willing to accept it. If not we need to document why we
    use --disable-cpu-opt and document as well that upstream
    doesn't want to use --disable-cpu-opt.

in my experience, it is rarely useful to consider an upstream
relationship with any AUR package - it is more often than not,
that the AUR maintainer is not attentive to feedback; and this
one is no exception - the AUR package for prboom-plus is orphaned

as a general guideline, i would consider "the upstream" for any
[pcr] package to be the upstream developers, in this case: the
prboom-plus sourceforge team - but this bug is not in the
upstream code-base, in this case

in almost all cases, AUR packages will be compiled on the
same machine which will run the binary; so strictly speaking,
there is no bug in the AUR PKGBUILD either - if this were an arch
binary package, this bug would probably have been exposed to the
arch maintainer, and fixed already - in this case, it is clearly
our bug to handle; and a good example of why we should not
consider an upstream relationship with the AUR

#12

Updated by GNUtoo about 2 months ago

It probably depends on the upstream:

I did the same for many other PKGBUILDs, and sometimes you can wait a loong time before the maintainer realizes that there is a patch pending, but my patches were merged most of the time. I don't recall if I've non merged patches as I've not tracked that well, but there are probably some small modifications that were not merged and that I forgot about.

#13

Updated by bill-auger about 2 months ago

yea i understand - is o/c good to have someone more dedicated to
tending tp a single package - i just wouldnt want it to emphasize
aligning with the AUR, a regular design goal - the AUR is just
too loose-knit to consider it as a standard upstream, or
essential that we align with any of the configurations, like we
would if it were an arch package - in many cases, there is not
one single recipe to align with anyways - in this case, there
are 4 different prboom PKGBUILDs

#14

Updated by GNUtoo about 2 months ago

I've reused my text here to create a wiki article for it here: https://wiki.parabola.nu/Fixing_illegal_instruction_issues

I'll try to fix prboom-plus after finishing other work (I've some bootloaders bugs that I badly need to fix).

#15

Updated by GNUtoo about 2 months ago

bill-auger wrote:

yea i understand - is o/c good to have someone more dedicated to
tending tp a single package - i just wouldnt want it to emphasize
aligning with the AUR, a regular design goal - the AUR is just
too loose-knit to consider it as a standard upstream, or
essential that we align with any of the configurations, like we
would if it were an arch package - in many cases, there is not
one single recipe to align with anyways - in this case, there
are 4 different prboom PKGBUILDs

Considering it is a good idea in my opinion, but at the end of the day it's the choice of the person that maintains the package to take the decision of looking into upstreaming the patch or not, especially if nobody else is interesting in helping with maintaining that Parabola package. Everybody else is also welcome to choose to spend time (or not) on contributing (Parabola) patches to upstream projects as well.

For instance in some case it might not be worth the time, while other it might be. Or the Parabola contributor could be in a hurry and not have time but badly need to fix something.

When you need to rebase changes at every single release, and that the change is not trivial, and that upstream might be interested in it, it could be a good idea to find the time to upstream that patch for instance, as it could save you time in the long run. The downside is that you probably could be spending way more time to upstream the patch than you anticipated initially.

So in my opinion, the best strategy depends on a lot of factors, like people maintaining a given Parabola package, available time, if upstream is friendly, and imposing any rules would probably be very counter-productive.

For instance if you badly need to fix something fast, and that there is a rule to upstream first, the fix might never be done as you cannot easily predict how long merging a patch upstream will take. This is just an example, and a lot of more factors might come into play.

#16

Updated by GNUtoo about 2 months ago

On a recent x86_64 with AVX, I've the following build error with libremakepkg:

  CCLD     prboom-plus
/usr/bin/ld: doomstat.o:(.bss+0x1a0): multiple definition of `demover'; g_game.o:(.bss+0xa90): first defined here
/usr/bin/ld: gl_detail.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_detail.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_detail.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_main.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_main.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_main.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_texture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_texture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_texture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_vertex.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_vertex.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_vertex.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_wipe.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_wipe.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_wipe.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_hires.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_hires.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_hires.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_clipper.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_clipper.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_clipper.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_gamma.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_gamma.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_gamma.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_missingtexture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_missingtexture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_missingtexture.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_light.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_light.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_light.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_hqresize.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_hqresize.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_hqresize.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_sky.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_sky.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_sky.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_fbo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_fbo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_fbo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_shadow.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_shadow.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_shadow.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_soft2gl.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_soft2gl.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_soft2gl.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_map.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_map.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_map.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_preprocess.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_preprocess.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_preprocess.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: gl_drawinfo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: multiple definition of `gld_CalcFogDensity'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:465: first defined here
/usr/bin/ld: gl_drawinfo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: multiple definition of `gld_Calc2DLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:457: first defined here
/usr/bin/ld: gl_drawinfo.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: multiple definition of `gld_CalcLightLevel'; e6y.o:/usr/src/debug/prboom-plus-2.5.1.4/src/gl_intern.h:456: first defined here
/usr/bin/ld: r_demo.o: in function `G_ReadDemoFooter':
/usr/src/debug/prboom-plus-2.5.1.4/src/r_demo.c:1091: warning: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
collect2: error: ld returned 1 exit status

#17

Updated by daniel_j about 2 months ago

I had to compile it using gcc8, 10 doesn't work https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=957705

Also available in: Atom PDF