#898333 blhc: Reports missing -D_FORTIFY_SOURCE=2 for compilation of assembly files

#898333#5
Date:
2018-05-10 10:32:54 UTC
From:
To:
Dear Maintainer,

See this log:
https://buildd.debian.org/status/fetch.php?pkg=firefox&arch=amd64&ver=59.0.2-1&stamp=1522122310&raw=1

blhc reports these errors:

CPPFLAGS missing (-D_FORTIFY_SOURCE=2): /usr/bin/gcc -std=gnu99 -o x86_64.o -c -DNDEBUG=1 -DTRIMMED=1 -I/<<PKGBUILDDIR>>/build/unix/elfhack/inject -I/<<PKGBUILDDIR>>/build-browser/build/unix/elfhack/inject -I/<<PKGBUILDDIR>>/build-browser/dist/include -I/usr/include/nspr -I/usr/include/nss -fPIC -include /<<PKGBUILDDIR>>/build-browser/mozilla-config.h -DMOZILLA_CLIENT -O2 -fno-stack-protector  -MD -MP -MF .deps/x86_64.o.pp   /<<PKGBUILDDIR>>/build-browser/build/unix/elfhack/inject/x86_64.c
CPPFLAGS missing (-D_FORTIFY_SOURCE=2): /usr/bin/gcc -std=gnu99 -o xptcinvoke_asm_x86_64_unix.o -DNDEBUG=1 -DTRIMMED=1 -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -g -fPIC -Wa,--noexecstack -include /<<PKGBUILDDIR>>/build-browser/mozilla-config.h -DMOZILLA_CLIENT -g -I/<<PKGBUILDDIR>>/xpcom/reflect/xptcall -I/<<PKGBUILDDIR>>/xpcom/reflect/xptinfo  -c /<<PKGBUILDDIR>>/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_64_unix.S
CPPFLAGS missing (-D_FORTIFY_SOURCE=2): /usr/bin/gcc -std=gnu99 -o SkJumper_generated.o -DNDEBUG=1 -DTRIMMED=1 -DSKIA_IMPLEMENTATION=1 -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -g -fPIC -Wa,--noexecstack -include /<<PKGBUILDDIR>>/build-browser/mozilla-config.h -DMOZILLA_CLIENT -g -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/c -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/config -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/core -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/effects -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/gpu -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/pathops -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/ports -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/private -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/utils -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/utils/mac -I/<<PKGBUILDDIR>>/gfx/skia/skia/include/views -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/core -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/gpu -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/gpu/effects -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/gpu/gl -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/gpu/glsl -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/image -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/lazy -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/opts -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/sfnt -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/sksl -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/utils -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/utils/mac -I/<<PKGBUILDDIR>>/gfx/skia/skia/src/utils/win  -c /<<PKGBUILDDIR>>/gfx/skia/skia/src/jumper/SkJumper_generated.S

Sure, -F_FORTIFY_SOURCE=2 *is* missing on those command lines, but it's
also, afaik, irrelevant when compiling assembly files (.S), even if they
are preprocessed.

#898333#10
Date:
2018-05-10 15:59:11 UTC
From:
To:
Hey Mike,

True, fortify source will very likely not be used by assembly
files so this looks like a false positive.

However blhc doesn't treat fortify source specially and tracks
the use of all CPPFLAGS. As .S files are preprocessed it expects
all CPPFLAGS to be present. So this report from blhc is valid
(even though it might be confusing). Adding CPPFLAGS is the
correct fix for this issue.

Regards
Simon

#898333#15
Date:
2022-07-01 07:28:51 UTC
From:
To:
Hello,

I ran into this same problem while trying to package XMRig, which uses
CMake, so I don't know how to just make it use CPPFLAGS for Assembly.

CPPFLAGS missing (-D_FORTIFY_SOURCE=2): /usr/bin/cc
-DCL_TARGET_OPENCL_VERSION=200 -DCL_USE_DEPRECATED_OPENCL_1_2_APIS
-DHAVE_BUILTIN_CLEAR_CACHE -DHAVE_ROTR -DHAVE_SYSLOG_H -DRAPIDJSON_SSE2
-DUNICODE -DXMRIG_64_BIT -DXMRIG_ALGO_ARGON2 -DXMRIG_ALGO_CN_FEMTO
-DXMRIG_ALGO_CN_HEAVY -DXMRIG_ALGO_CN_LITE -DXMRIG_ALGO_CN_PICO
-DXMRIG_ALGO_GHOSTRIDER -DXMRIG_ALGO_KAWPOW -DXMRIG_ALGO_RANDOMX
-DXMRIG_FEATURE_ADL -DXMRIG_FEATURE_API -DXMRIG_FEATURE_ASM
-DXMRIG_FEATURE_BENCHMARK -DXMRIG_FEATURE_CUDA -DXMRIG_FEATURE_DMI
-DXMRIG_FEATURE_ENV -DXMRIG_FEATURE_HTTP -DXMRIG_FEATURE_HWLOC
-DXMRIG_FEATURE_MSR -DXMRIG_FEATURE_NVML -DXMRIG_FEATURE_OPENCL
-DXMRIG_FEATURE_SSE4_1 -DXMRIG_FEATURE_TLS -DXMRIG_FIX_RYZEN
-DXMRIG_JSON_SINGLE_LINE_ARRAY -DXMRIG_MINER_PROJECT -DXMRIG_OS_LINUX
-DXMRIG_OS_UNIX -DXMRIG_STRICT_OPENCL_CACHE -DXMRIG_VAES
-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D__STDC_FORMAT_MACROS
-I/usr/include -I/<<PKGBUILDDIR>>/src -I/<<PKGBUILDDIR>>/src/3rdparty
-o CMakeFiles/xmrig-asm.dir/src/crypto/cn/asm/cn_main_loop.S.o -c
/<<PKGBUILDDIR>>/src/crypto/cn/asm/cn_main_loop.S
CPPFLAGS missing (-D_FORTIFY_SOURCE=2): /usr/bin/cc
-DCL_TARGET_OPENCL_VERSION=200 -DCL_USE_DEPRECATED_OPENCL_1_2_APIS
-DHAVE_BUILTIN_CLEAR_CACHE -DHAVE_ROTR -DHAVE_SYSLOG_H -DRAPIDJSON_SSE2
-DUNICODE -DXMRIG_64_BIT -DXMRIG_ALGO_ARGON2 -DXMRIG_ALGO_CN_FEMTO
-DXMRIG_ALGO_CN_HEAVY -DXMRIG_ALGO_CN_LITE -DXMRIG_ALGO_CN_PICO
-DXMRIG_ALGO_GHOSTRIDER -DXMRIG_ALGO_KAWPOW -DXMRIG_ALGO_RANDOMX
-DXMRIG_FEATURE_ADL -DXMRIG_FEATURE_API -DXMRIG_FEATURE_ASM
-DXMRIG_FEATURE_BENCHMARK -DXMRIG_FEATURE_CUDA -DXMRIG_FEATURE_DMI
-DXMRIG_FEATURE_ENV -DXMRIG_FEATURE_HTTP -DXMRIG_FEATURE_HWLOC
-DXMRIG_FEATURE_MSR -DXMRIG_FEATURE_NVML -DXMRIG_FEATURE_OPENCL
-DXMRIG_FEATURE_SSE4_1 -DXMRIG_FEATURE_TLS -DXMRIG_FIX_RYZEN
-DXMRIG_JSON_SINGLE_LINE_ARRAY -DXMRIG_MINER_PROJECT -DXMRIG_OS_LINUX
-DXMRIG_OS_UNIX -DXMRIG_STRICT_OPENCL_CACHE -DXMRIG_VAES
-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D__STDC_FORMAT_MACROS
-I/usr/include -I/<<PKGBUILDDIR>>/src -I/<<PKGBUILDDIR>>/src/3rdparty
-o CMakeFiles/xmrig-asm.dir/src/crypto/cn/asm/CryptonightR_template.S.o
-c /<<PKGBUILDDIR>>/src/crypto/cn/asm/CryptonightR_template.S

I attempted to make blhc ignore this by echoing
"blhc: ignore-line-regexp: \.S", but it didn't work. I also tried to run
blhc with the actual --ignore-line flag, but it was still picking up
those lines. I even did a simplified "--ignore-line asm", but it still
doesn't work. Just in case, I tried again with "/asm/". This is all
valid Perl regex, but it seems like blhc just isn't working at all here.
Am I doing something wrong?

Regards
--
Ben Westover

#898333#20
Date:
2022-07-02 04:41:00 UTC
From:
To:
Hi Ben,

to quote the man-page:

Something like --ignore-line '/usr/bin/cc.*\S+\.S' should work.

Best,
Simon

#898333#25
Date:
2022-07-02 05:34:39 UTC
From:
To:
Hello Simon,

Yes, that worked well. Thanks for the hint about the anchoring; I did
read the man page, but it seems I missed that part.

There is a new problem, however. I was testing --ignore-line so I could
eventually put the resulting regex in debian/rules as per this part of
the man page:
@echo "blhc: ignore-line-regexp: '/usr/bin/cc.*\S+\.S'"
and also confirmed that it was echoed in the build log, but blhc is
still triggered by those lines even though the regex is identical to one
that worked with --ignore-line. What am I doing wrong this time?

Thanks,
--
Ben Westover

#898333#30
Date:
2022-07-02 05:58:06 UTC
From:
To:
It turns out that the debian/rules line works if I remove the start and
end characters (in this case the quotes).
This should either be changed so that --ignore-line and the debian/rules
string use the same format, or it should be documented.

#898333#35
Date:
2022-07-02 06:02:30 UTC
From:
To:
Could you provide me with both failing and working debian/rules
and the corresponding build logs?

Best,
Simon