Closed Bug 878171 Opened 11 years ago Closed 11 years ago

Fix xptcall build on OpenBSD/amd64 after bug 864774

Categories

(Firefox Build System :: General, defect)

x86
OpenBSD
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED
mozilla24

People

(Reporter: gaston, Assigned: gaston)

References

Details

Attachments

(1 file, 1 obsolete file)

Bug 864774 broke OpenBSD/amd64 builds in xpcom/reflect/xptcall :

previous code in Makefile.in was doing :

ifneq (,$(filter NetBSD OpenBSD GNU,$(OS_ARCH)))
ifeq (86,$(findstring 86,$(OS_TEST)))
CPPSRCS                := xptcinvoke_gcc_x86_unix.cpp xptcstubs_gcc_x86_unix.cpp
endif
endif

newer moz.build does :

if CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD', 'GNU'):
    if CONFIG['OS_TEST'].find('86') != -1:
        CPP_SOURCES += [
            'xptcinvoke_gcc_x86_unix.cpp',
            'xptcstubs_gcc_x86_unix.cpp'
        ]

I have no idea if this code is supposed to be included on i386/x86 only or also x86_64/amd64, but the build is broken with multiple declarations of functions :

:../../../../../../dist/include/xptcstubsdef.inc:252: first defined here
../../xpcom/reflect/xptcall/src/md/unix/xptcstubs_amd64_openbsd.o(.text+0x66): In function `PrepareAndDispatch':
../../../../../../dist/include/mozilla/mozalloc.h:213: multiple definition of `nsXPTCStubBase::Stub4()'
../../xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.o(.text+0x18):/src/mozilla-central/xpcom/reflect/xptcall/src/md/
unix/xptcstubs_gcc_x86_unix.cpp:28: first defined here
../../xpcom/reflect/xptcall/src/md/unix/xptcstubs_amd64_openbsd.o(.text+0x6e): In function `PrepareAndDispatch':
../../../../../../dist/include/mozilla/mozalloc.h:213: multiple definition of `nsXPTCStubBase::Stub5()'
../../xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.o(.text+0x20):/src/mozilla-central/xpcom/reflect/xptcall/src/md/
unix/xptcstubs_gcc_x86_unix.cpp:28: first defined here

dunno what changed in the machinery from the previous makefile infrastructure.
Depends on: 864774
I see what happened here.

The original Makefile is using "CPPSRCS :=" everywhere, so later declarations *overwrite* previous ones. Thus both of these conditionals evaluate true, but the second one overrides the first:
http://hg.mozilla.org/mozilla-central/annotate/97e443115162/xpcom/reflect/xptcall/src/md/unix/Makefile.in#l54
http://hg.mozilla.org/mozilla-central/annotate/97e443115162/xpcom/reflect/xptcall/src/md/unix/Makefile.in#l82

The moz.build conversion is using "CPP_SOURCES +=", so they're still both true, but they now append:
http://hg.mozilla.org/mozilla-central/annotate/4755d50e2402/xpcom/reflect/xptcall/src/md/unix/moz.build#l22
http://hg.mozilla.org/mozilla-central/annotate/4755d50e2402/xpcom/reflect/xptcall/src/md/unix/moz.build#l49

I think we could just replace those "CONFIG['OS_TEST'].find('86') != -1" tests with "CONFIG['CPU_ARCH'] == 'x86'".
Fixes the build on openbsd/amd64 - netbsd will probably need it too.i386 unaffected since it's supposed to use that file anyway.
Assignee: nobody → landry
Attachment #756727 - Flags: review?(ted)
Comment on attachment 756727 [details] [diff] [review]
only use xptc*_gcc_x86_unix.cpp on Open/NetBSD/i386, not amd64/x86_64

Review of attachment 756727 [details] [diff] [review]:
-----------------------------------------------------------------

::: xpcom/reflect/xptcall/src/md/unix/moz.build
@@ +19,5 @@
>                  'xptcstubs_gcc_x86_unix.cpp',
>              ]
>  
>  if CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD', 'GNU'):
> +    if CONFIG['OS_TEST'] == 'i386':

Change this to CONFIG['CPU_ARCH'] == 'x86'.
Attachment #756727 - Flags: review?(ted) → review-
Attachment #756906 - Flags: review?(ted) → review+
https://hg.mozilla.org/mozilla-central/rev/77a0a9374c66
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla24
Product: Core → Firefox Build System
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: