Skip to content

Commit

Permalink
nvidia-settings: Make VDPAUDeviceFunctions static to ctkvdpau.c
Browse files Browse the repository at this point in the history
GCC 10 defaults to building with -fno-common, which exposes a bug in
nvidia-settings: The VDPAUDeviceFunctions structure is defined as global in
ctkvdpau.h, so both ctkvdpau.o and ctkwindow.o have it as a global, non-static
"tentative definition" symbol. The GCC 10 man page describes it like this:

       -fcommon
           In C code, this option controls the placement of global variables
           defined without an initializer, known as tentative definitions in
           the C standard.  Tentative definitions are distinct from
           declarations of a variable with the "extern" keyword, which do not
           allocate storage.

           The default is -fno-common, which specifies that the compiler
           places uninitialized global variables in the BSS section of the
           object file.  This inhibits the merging of tentative definitions by
           the linker so you get a multiple-definition error if the same
           variable is accidentally defined in more than one compilation unit.

           The -fcommon places uninitialized global variables in a common
           block.  This allows the linker to resolve all tentative definitions
           of the same variable in different compilation units to the same
           object, or to a non-tentative definition.  This behavior is
           inconsistent with C++, and on many targets implies a speed and code
           size penalty on global variable references.  It is mainly useful to
           enable legacy code to link without errors.

Since the copy of VDPAUDeviceFunctions in ctkwindow.o is not used, just remove
it by moving the definition of this structure into ctkvdpau.c.
  • Loading branch information
aaronp24 committed May 29, 2020
1 parent 139e81f commit a7c1f5f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 24 deletions.
23 changes: 23 additions & 0 deletions src/gtk+-2.x/ctkvdpau.c
Expand Up @@ -103,6 +103,29 @@ const gchar* __video_mixer_parameter_help =
const gchar* __video_mixer_attribute_help =
"This shows the video mixer attributes and any applicable ranges.";

static struct VDPAUDeviceImpl {

VdpGetErrorString *GetErrorString;
VdpGetProcAddress *GetProcAddress;
VdpGetApiVersion *GetApiVersion;
VdpGetInformationString *GetInformationString;
VdpVideoSurfaceQueryCapabilities *VideoSurfaceQueryCapabilities;
VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities
*VideoSurfaceQueryGetPutBitsYCbCrCapabilities;
VdpOutputSurfaceQueryCapabilities *OutputSurfaceQueryCapabilities;
VdpOutputSurfaceQueryGetPutBitsNativeCapabilities
*OutputSurfaceQueryGetPutBitsNativeCapabilities;
VdpOutputSurfaceQueryPutBitsYCbCrCapabilities
*OutputSurfaceQueryPutBitsYCbCrCapabilities;
VdpBitmapSurfaceQueryCapabilities *BitmapSurfaceQueryCapabilities;
VdpDecoderQueryCapabilities *DecoderQueryCapabilities;
VdpVideoMixerQueryFeatureSupport *VideoMixerQueryFeatureSupport;
VdpVideoMixerQueryParameterSupport *VideoMixerQueryParameterSupport;
VdpVideoMixerQueryAttributeSupport *VideoMixerQueryAttributeSupport;
VdpVideoMixerQueryParameterValueRange *VideoMixerQueryParameterValueRange;
VdpVideoMixerQueryAttributeValueRange *VideoMixerQueryAttributeValueRange;
} VDPAUDeviceFunctions;

static int queryOutputSurface(CtkVDPAU *ctk_vdpau, VdpDevice device,
VdpGetProcAddress *getProcAddress);

Expand Down
24 changes: 0 additions & 24 deletions src/gtk+-2.x/ctkvdpau.h
Expand Up @@ -45,30 +45,6 @@ G_BEGIN_DECLS
#define CTK_VDPAU_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_VDPAU, CtkVDPAUClass))


struct VDPAUDeviceImpl {

VdpGetErrorString *GetErrorString;
VdpGetProcAddress *GetProcAddress;
VdpGetApiVersion *GetApiVersion;
VdpGetInformationString *GetInformationString;
VdpVideoSurfaceQueryCapabilities *VideoSurfaceQueryCapabilities;
VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities
*VideoSurfaceQueryGetPutBitsYCbCrCapabilities;
VdpOutputSurfaceQueryCapabilities *OutputSurfaceQueryCapabilities;
VdpOutputSurfaceQueryGetPutBitsNativeCapabilities
*OutputSurfaceQueryGetPutBitsNativeCapabilities;
VdpOutputSurfaceQueryPutBitsYCbCrCapabilities
*OutputSurfaceQueryPutBitsYCbCrCapabilities;
VdpBitmapSurfaceQueryCapabilities *BitmapSurfaceQueryCapabilities;
VdpDecoderQueryCapabilities *DecoderQueryCapabilities;
VdpVideoMixerQueryFeatureSupport *VideoMixerQueryFeatureSupport;
VdpVideoMixerQueryParameterSupport *VideoMixerQueryParameterSupport;
VdpVideoMixerQueryAttributeSupport *VideoMixerQueryAttributeSupport;
VdpVideoMixerQueryParameterValueRange *VideoMixerQueryParameterValueRange;
VdpVideoMixerQueryAttributeValueRange *VideoMixerQueryAttributeValueRange;
} VDPAUDeviceFunctions;

/* Generic description structure */
typedef struct
{
Expand Down

0 comments on commit a7c1f5f

Please sign in to comment.