Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
This reverts commit 251c72a68af3a8b0638705b73ef120ffdf0053eb.
|
|
This patch implements the --enable-host-pie configure option which
makes the compiler executables PIE. This can be used to enhance
protection against ROP attacks, and can be viewed as part of a wider
trend to harden binaries.
It is similar to the option --enable-host-shared, except that --e-h-s
won't add -shared to the linker flags whereas --e-h-p will add -pie.
It is different from --enable-default-pie because that option just
adds an implicit -fPIE/-pie when the compiler is invoked, but the
compiler itself isn't PIE.
Since r12-5768-gfe7c3ecf, PCH works well with PIE, so there are no PCH
regressions.
When building the compiler, the build process may use various in-tree
libraries; these need to be built with -fPIE so that it's possible to
use them when building a PIE. For instance, when --with-included-gettext
is in effect, intl object files must be compiled with -fPIE. Similarly,
when building in-tree gmp, isl, mpfr and mpc, they must be compiled with
-fPIE.
I plan to add an option to link with -Wl,-z,now.
ChangeLog:
* Makefile.def: Pass $(PICFLAG) to AM_CFLAGS for gmp, mpfr, mpc, and
isl.
* Makefile.in: Regenerate.
* Makefile.tpl: Set PICFLAG.
* configure.ac (--enable-host-pie): New check. Set PICFLAG after this
check.
* configure: Regenerate.
c++tools/ChangeLog:
* Makefile.in: Rename PIEFLAG to PICFLAG. Set LD_PICFLAG. Use it.
Use pic/libiberty.a if PICFLAG is set.
* configure.ac (--enable-default-pie): Set PICFLAG instead of PIEFLAG.
(--enable-host-pie): New check.
* configure: Regenerate.
fixincludes/ChangeLog:
* Makefile.in: Set and use PICFLAG and LD_PICFLAG. Use the "pic"
build of libiberty if PICFLAG is set.
* configure.ac:
* configure: Regenerate.
gcc/ChangeLog:
* Makefile.in: Set LD_PICFLAG. Use it. Set enable_host_pie.
Remove NO_PIE_CFLAGS and NO_PIE_FLAG. Pass LD_PICFLAG to
ALL_LINKERFLAGS. Use the "pic" build of libiberty if --enable-host-pie.
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this
check.
* configure: Regenerate.
* doc/install.texi: Document --enable-host-pie.
gcc/d/ChangeLog:
* Make-lang.in: Remove NO_PIE_CFLAGS.
intl/ChangeLog:
* Makefile.in: Use @PICFLAG@ in COMPILE as well.
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG after this check.
* configure: Regenerate.
libcody/ChangeLog:
* Makefile.in: Pass LD_PICFLAG to LDFLAGS.
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this
check.
* configure: Regenerate.
libcpp/ChangeLog:
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG after this check.
* configure: Regenerate.
libdecnumber/ChangeLog:
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG after this check.
* configure: Regenerate.
libiberty/ChangeLog:
* configure.ac: Also set shared when enable_host_pie.
* configure: Regenerate.
zlib/ChangeLog:
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
(--enable-host-pie): New check. Set PICFLAG after this check.
* configure: Regenerate.
|
|
|
|
Two non-portable shell constructs have been long present in libcody's
build rule for revision.stamp: $() instead of ``, and += to append to
a shell variable. The former seems to work even when bash is
operating as /bin/sh, but += doesn't, and it ends up trying to run
revision+=M as a command name, and issuing an error as that command is
(hopefully) not found.
This patch replaces both constructs with more portable ones.
for libcody/ChangeLog
* Makefile.in (revision.stamp): Replace $() and += with more
portable shell constructs.
|
|
|
|
the getaddrinfo() requires either a non-null name for the server or
a port service / number. In the code that opens a connection we have
been calling this with a dummy port number of "0". Unfortunately this
triggers a bug in some BSD versions and OSes importing that code.
In this part of the code we do not really need a port number, since it
is not reasonable to open a connection to an unspecified host.
Setting hints info field to 0, and the servname parm to nullptr works
around the BSD bug in this case.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
libcody/ChangeLog:
* netclient.cc (OpenInet6): Do not provide a dummy port number
in the getaddrinfo() call.
|
|
Do this separately from all other Copyright updates, as ChangeLog files
can be modified only separately.
|
|
|
|
PR other/102657
libcody/ChangeLog:
* Makefile.in: Add mostlyclean Makefile target.
|
|
|
|
If the listen call fails then 'goto fail' will jump to that label and
use freeaddrinfo again. Set the pointer to null to prevent that.
libcody/ChangeLog:
* netserver.cc (ListenInet6): Set pointer to null after
deallocation.
|
|
|
|
Apparently this was never needed.
libcody/
* LICENSE.gcc: Delete.
|
|
|
|
Libcody's configurey was overly 'clever'. That didn't play well with
GCC's structure. This removes lots of that overengineering, using
libcpp as an example.
libcody/
* Makefile.in: Remove auto parallelize, swallow Makesub.in. Don't
check compiler name here.
* Makesub.in: Delete.
* build-aux/config.guess: Delete.
* build-aux/config.sub: Delete.
* build-aux/install-sh: Delete.
* dox.cfg.in: Delete.
* gdbinit.in: Delete.
* internal.hh (BuildNote): Delete.
* fatal.cc (BuildNote): Delete.
* config.m4: Remove unneeded fns.
* configure.ac: Remove unneccessary checks and configures.
* configure: Rebuilt.
* config.h.in: Rebuilt.
|
|
|
|
2021-01-06 John David Anglin <danglin@gcc.gnu.org>
libcody/ChangeLog:
PR bootstrap/98506
* resolver.cc: Only use fstatat when _POSIX_C_SOURCE >= 200809L.
|
|
|
|
Compiling on clang showed a couple of pessimizations. Fixed thusly.
libcody/
* client.cc (Client::ProcessResponse): Remove std::move
inside ?:
c++tools/
* resolver.cc (module_resolver::cmi_response): Remove
std::move of temporary.
|
|
An obvious thinko in dirve name check :(
libcody/
* resolver.cc (IsAbsDir): Fix string indexing.
Signed-off-by: Nathan Sidwell <nathan@acm.org>
|
|
Do this separately from all other Copyright updates, as ChangeLog files
can be modified only separately.
|
|
|
|
libcody's testsuite is not very portable, and is testing a host
library, so will do weird things on cross compiling, I think. Let's
just drop it.
libcody/
* Makefile.in (LDFLAGS): Drop -L..
* tests/01-serialize/connect.cc: Delete.
* tests/01-serialize/decoder.cc: Delete.
* tests/01-serialize/encoder.cc: Delete.
* tests/02-comms/client-1.cc: Delete.
* tests/02-comms/pivot-1.cc: Delete.
* tests/02-comms/server-1.cc: Delete.
* tests/Makesub.in: Delete.
* tests/jouster: Delete.
|
|
|
|
Fix some more system-specific issues. Not everyone's C++11 is the same :(
PR bootstrap/98412
libcody/
* client.cc: Include cstdlib.
* server.cc: Include cstdlib.
gcc/cp/
* mapper-client.cc: INCLUDE_STRING, INCLUDE_VECTOR.
(module_client::open_module_client): Avoid std::stoul.
* mapper-resolver.cc: INCLUDE_STRING, INCLUDE_VECTOR.
|
|
libcody as originally added to GCC fail to build on *-unknown-freebsd11.4
and presumably others:
c++ -std=c++11 -g -include config.h -I ... -MMD -MP -MF netclient.d -c
-o netclient.o
.../libcody/netclient.cc:114:3: error: unknown type sockaddr_in6 addr;
^~~~~~~~~~~~
sockaddr_in6 is declared in /usr/include/netinet6/in6.h,
which is included by /usr/include/netinet/in.h.
Indeed, per https://man7.org/linux/man-pages/man7/ipv6.7.html
#include <sys/socket.h>
#include <netinet/in.h>
should be included, and our own gcc/ada/gsocket.h also has
#if !(defined (VMS) || defined (__MINGW32__))
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
:
#endif
libcody/ChangeLog:
2020-12-21 Gerald Pfeifer <gerald@pfeifer.com>
* netserver.cc: Include <netinet/in.h>.
|
|
Add RANLIB.
libcody/
* Makefile.in (RANLIB): New var.
* Makesub.in (libcody.a): Apply RANLIB.
* configure.ac: Call AC_PROG_RANLIB.
* configure: Rebuilt.
|
|
to_string is not always available, so don't use it.
libcody/
* buffer.cc (MessageBuffer::AppendInteger): Workaround
to_string's non-ubiquity.
|
|
We explicitly need to inlude netinet.h, (despite what happened on my test systems)
libcody/
* netclient.cc: Add netinet.h.
|
|
|
|
While this doesn't fix 98324, it was an omission. Cribbed code from
libcpp to build libcody as PIC.
libcody/
* configure.ac: Add --enable-host-shared.
* Makefile.in: Add FLAGPIC.
* configure: Regenerated.
|
|
This asm was a useful place for gdb to drop a breakpoint and make it
clear where you were when debugging. I took a punt that 'surely every
arch has a nop instruction'. Well, no, some apparently have nops with
operands (what, do nothing harder? :)
libcody/
* fatal.cc (HCF): Remove nop breakpoint lander.
|
|
|
|
Rather than early-include sys/socket.h, let's allow the includer to
tell cody no networking.
libcody/
* cody.hh: Allow user to set CODY_NETWORKING.
gcc/cp/
* mapper-resolver.cc: Remove early include of
sys/socket.h. Specify no CODY_NETWORKING instead.
* module.cc: Specify no CODY_NETWORKING.
|
|
> The -enable-checking configure code in libcody didn't play well with
> us. This just uses libcpp's configurey for that piece.
This doesn't set is_release anywhere, which means when --enable-checking*
or --disable-checking isn't specified, it always treats it as
--enable-checking=yes, while the normal gcc behavior is treat only trunk
as --enable-checking=yes and treat release branches as
--enable-checking=release by default.
On the other side, nothing uses those ac_assert_checking and
ac_valgrind_checking variables, so it is a waste to compute those.
2020-12-16 Jakub Jelinek <jakub@redhat.com>
* configure.ac: Compute is_release.
(NMS_ENABLE_CHECKING): Simplify but not computing ac_assert_checking
and ac_valgrind_checking the code doesn't use.
* configure: Regenerated.
|
|
Before CWG DR 1955 the controlling expression for an #elif must be
syntactically correct, meaning this won't compile with C++11 compilers
such as gcc 4.8:
The solution is to define __has_include(X) as 0 for compilers that don't
support it.
The second problem is that when <source_location> is found, it is used
without the std:: qualification.
libcody/ChangeLog:
* internal.hh: Define fallback macros for __has_builtin and
__has_include. Use __has_builtin for __builtin_FILE and
__builtin_LINE. Define alias for std::source_location.
|
|
The -enable-checking configure code in libcody didn't play well with
us. This just uses libcpp's configurey for that piece.
libcody/
* configure.ac: Use libcpp's enable-checking code.
* configure: Rebuilt.
|
|
There were still some dash-killing uses of +=. Fixed thusly.
* config.m4: Replace V+="..." with V="$V..."
* configure: Rebuilt.
|
|
|
|
libcody/ChangeLog:
* buffer.cc (MessageBuffer::Lex): Remove unused variable.
|
|
Older GCCs don't have all the exciting options we have now. let's just
turn them off.
libcody/
* Makefile.in: Disable some flags.
|
|
I missed some other places that used +=
* config.m4: Avoid var+=...
* configure: Rebuilt
|
|
Apparently 'var+=...' is not a dash thing. Fixed thusly.
* config.m4: Avoid non-dash idiom
* configure: Rebuilt.
|
|
Add ChangeLog files, so that update_version_git can then fill those in.
|
|
In order to separate compiler from build system, C++ Modules, as
implemented in GCC introduces a communication channel between those
two entities. This is implemented by libcody. It is anticipated that
other implementations will also implement this protocol, or use
libcody to provide it.
* Makefile.def: Add libcody.
* configure.ac: Add libcody.
* Makefile.in: Regenerated.
* configure: Regenerated.
gcc/
* Makefile.in (CODYINC, CODYLIB, CODYLIB_H): New. Use them.
libcody/
* configure.ac: New.
* CMakeLists.txt: New.
* CODING.md: New.
* CONTRIB.md: New.
* LICENSE: New.
* LICENSE.gcc: New.
* Makefile.in: New.
* Makesub.in: New.
* README.md: New.
* buffer.cc: New.
* build-aux/config.guess: New.
* build-aux/config.sub: New.
* build-aux/install-sh: New.
* client.cc: New.
* cmake/libcody-config-ix.cmake
* cody.hh: New.
* config.h.in: New.
* config.m4: New.
* configure: New.
* configure.ac: New.
* dox.cfg.in: New.
* fatal.cc: New.
* gdbinit.in: New.
* internal.hh: New.
* netclient.cc: New.
* netserver.cc: New.
* packet.cc: New.
* resolver.cc: New.
* server.cc: New.
* tests/01-serialize/connect.cc: New.
* tests/01-serialize/decoder.cc: New.
* tests/01-serialize/encoder.cc: New.
* tests/02-comms/client-1.cc: New.
* tests/02-comms/pivot-1.cc: New.
* tests/02-comms/server-1.cc: New.
* tests/Makesub.in: New.
* tests/jouster: New.
|