Bug 49137

Summary: internal compiler error when compiling avifile
Product: [Retired] Red Hat Raw Hide Reporter: Knut J BJuland <knutjbj>
Component: gccAssignee: Jakub Jelinek <jakub>
Status: CLOSED WORKSFORME QA Contact: David Lawrence <dkl>
Severity: high Docs Contact:
Priority: high    
Version: 1.0   
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2001-07-20 11:56:56 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Knut J BJuland 2001-07-15 10:29:50 UTC
gcc-2.96-94
From Bugzilla Helper:
User-Agent: Mozilla/4.77 [en] (X11; U; Linux 2.4.6-2 i686)

Description of problem:


How reproducible:
Always

Steps to Reproduce:
1../configure, make
2.
3.
	

Actual Results:  (cd .libs && rm -f libaviplay.la && ln -s ../libaviplay.la
libaviplay.la)
make[2]: Leaving directory `/home/knutjbj/vmware/avifile-0.6/lib/aviplay'
make[2]: Entering directory `/home/knutjbj/vmware/avifile-0.6/lib'
/bin/sh ../libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I.
-I../include   -g -Wall -Wno-unused -DPLUGIN_PATH=\"/usr/lib/avifile\"  -g
-O2 -march=i686 -pipe -c codeckeeper.cpp
c++ -DHAVE_CONFIG_H -I. -I. -I../include -g -Wall -Wno-unused
-DPLUGIN_PATH=\"/usr/lib/avifile\" -g -O2 -march=i686 -pipe
-Wp,-MD,.deps/codeckeeper.pp -c codeckeeper.cpp  -fPIC -DPIC -o
codeckeeper.lo
c++: {standard input}: Assembler messages:
{standard input}:644: Warning: end of file not at end of a line; newline
inserted
{standard input}:779: Error: ignoring unrecognized symbol type ""
Internal error: Killed (program cc1plus)
Please submit a full bug report.
See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.
make[2]: *** [codeckeeper.lo] Error 1
make[2]: Leaving directory `/home/knutjbj/vmware/avifile-0.6/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/knutjbj/vmware/avifile-0.6/lib'
make: *** [all-recursive] Error 1

Expected Results:  it should work

Additional info:

codekeeper.cpp
#include <cpuinfo.h>
#include <creators.h>
#include <plugin.h>

#include "../plugins/libwin32/fillplugins.h"
#include "../plugins/libaudiodec/fillplugins.h"
#include "../plugins/libffmpeg/fillplugins.h"
#include "../plugins/libmp3lame_audioenc/fillplugins.h"
#include "../plugins/libmpeg_audiodec/fillplugins.h"
#include "Uncompressed.h"

#include <stdlib.h>
#include <dirent.h>
#include <dlfcn.h>

#include <fstream>
#include <strstream>
#include <iostream>
#include <cstdio>

using namespace std;

#ifndef	RTLD_PARENT
#define	RTLD_PARENT 0
#endif

vector<CodecInfo> video_codecs;
vector<CodecInfo> audio_codecs;

const char* dll_def_path=PLUGIN_PATH;
CPU_Info freq; // will be initialized as the first thing


class CodecInfoKeeper
{
public:
    CodecInfoKeeper();
};

CodecInfoKeeper codec_keeper;


static bool isPluginCompatible(void* handle, const char* name)
{

    int (*Version)()=(int(*)())dlsym(handle, "GetPluginVersion");
    if(!Version || (Version()!=PLUGIN_API_VERSION))
    {
	if (Version)
	    cerr<<"WARNING: plugin "<< name<<" is version "<<Version()
		<<", expected "<<PLUGIN_API_VERSION<<endl;
	else
	    cerr<<"WARNING: plugin "<< name<<" is in incompatible format"<<endl;
	dlclose(handle);
        return false;
    }
    return true;
}

static void addPlugins(vector<CodecInfo>& ci, const string fullname)
{
    int vp = 0;
    for(unsigned i = 0; i < ci.size(); i++)
    {
	ci[i].modulename = fullname;
	if(ci[i].media == CodecInfo::Video)
	{
	    vp++;
	    //cout << "add " << ci[i].text << endl;
	    video_codecs.push_back(ci[i]);
	}
	else
	    audio_codecs.push_back(ci[i]);
    }
    cerr << fullname << ": found " << ci.size()
	<< ((ci.size() == 1) ? " plugin" : " plugins")
	<< "   (A: " << ci.size() - vp << "  V: " << vp << ")"
	<< endl;
}

CodecInfoKeeper::CodecInfoKeeper()
{
    static const int zero[]={fccYUY2, fccYV12, 0};

    video_codecs.push_back(CodecInfo(zero, "Uncompressed", "",
				     none_about, CodecInfo::Source));

    if (getenv("WIN32_PATH"))
	dll_def_path=getenv("WIN32_PATH");

    struct dirent *dp;
#if HAVE_SCANDIR
    struct dirent **namelist;
    int n;
    n = scandir(dll_def_path, &namelist, 0, alphasort);
    if(n>0)
    while(n--)
    {
	dp = namelist[n];
#else  // !HAVE_SCANDIR
    DIR *dir = opendir(dll_def_path);
    if (dir != NULL) while ((dp = readdir(dir)) != NULL)
    {
#endif // HAVE_SCANDIR
	char* name=dp->d_name;
//	cerr<<"Checking "<<endl;
//	cerr<<name<<endl;
	if(strlen(name)<4)continue;
//	if(!n)continue;
	if(strcmp(name+strlen(name)-3, ".la"))continue;
	string lfn=string(dll_def_path)+"/"+name;
	string dllname="";
	string temp;
	ifstream file(lfn.c_str());
	while(getline(file, temp))
	{
//	    file=getline(file, temp);
	    if(temp.substr(0, 8)=="dlname='")
	    {
		dllname=temp.substr(8);
		dllname.erase(dllname.size()-1);
		break;
	    }
	}
	if(!dllname.size())
	{
	    cerr<<"WARNING: plugin "<<lfn<<" is invalid"<<endl;
	    continue;
	}
	string fullname=string(dll_def_path) + "/" + dllname;

	static const struct plugin_map {
	    const char* name;
            void (*fill)(vector<CodecInfo>& ci);
	} pm[] = {
	    { "libffmpeg.", libffmpeg_FillPlugins },
	    { "libwin32.", libwin32_FillPlugins },
	    { "libaudiodec.", libaudiodec_FillPlugins },
	    { "libmp3lame_audioenc.", libmp3lame_FillPlugins },
	    { "libmpeg_audiodec.", libmpeg_audiodec_FillPlugins },
	    { 0, 0 }
	};

	/** This chunk of code eliminates the need to open four shared
	 * libraries ( some 5 Megabytes of data ) while starting every app
	 */
	const plugin_map* c = pm;
	for (; c->name; c++)
	{
	    if (dllname.substr(0, strlen(c->name)) == c->name)
	    {
		vector<CodecInfo> ci;
		c->fill(ci);
                addPlugins(ci, fullname);
		break;
	    }
	}
	if (c->name)
            continue; // we have found this in the code above

	// third party pluggin

	void* handle=dlopen(fullname.c_str(), RTLD_LAZY);
//	cerr<<lfn<<endl;
//	void* handle=dlopen(lfn.c_str(), RTLD_LAZY);
//	DlOpener opener;
//	void* handle=

Comment 1 Knut J BJuland 2001-07-15 15:04:11 UTC
It compiles with gcc3-3

Comment 2 Jakub Jelinek 2001-07-20 10:36:12 UTC
Is it always reproducible?
If yes, please attach codeckeeper.ii. It looks like cc1plus was killed by
g++ driver because there was some error in assembler, the thing now is
whether: there was bogus assembly coming from source (e.g. inline assembly),
bogus assembly created by cc1plus or some bug in binutils.
Which version of binutils are you using BTW?

Comment 3 Knut J BJuland 2001-07-20 11:56:52 UTC
I fix it by deleting avifile and download a fresh cvs copy. It was casue by some
file which was lying around froma previous builds. Binutils 2.11-90.0.8-3

Comment 4 Knut J BJuland 2001-07-20 12:04:12 UTC
make[2]: Leaving directory `/home/knutjbj/vmware/avifile-0.6/lib/common'
make[2]: Entering directory `/home/knutjbj/vmware/avifile-0.6/lib'
/bin/sh ../libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I. -I../include  
-Wall -Wno-unused -DPLUGIN_PATH=\"/usr/lib/avifile\"  -g -O2 -march=i686 -pipe
-fno-inline -c codeckeeper.cpp
c++ -DHAVE_CONFIG_H -I. -I. -I../include -Wall -Wno-unused
-DPLUGIN_PATH=\"/usr/lib/avifile\" -g -O2 -march=i686 -pipe -fno-inline
-Wp,-MD,.deps/codeckeeper.pp -c codeckeeper.cpp  -fPIC -DPIC -o codeckeeper.lo
/bin/sh ../libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I. -I../include  
-Wall -Wno-unused -DPLUGIN_PATH=\"/usr/lib/avifile\"  -g -O2 -march=i686 -pipe
-fno-inline -c Uncompressed.cpp